From e1bfc426028c07ca05d4517bd514e4bd1e6c07a4 Mon Sep 17 00:00:00 2001 From: Benoit Lavenier Date: Wed, 20 Dec 2023 12:23:44 +0100 Subject: [PATCH] Prepare release 2.9.0-alpha1 --- android/app/build.gradle | 4 +- android/app/src/main/AndroidManifest.xml | 2 +- install.sh | 2 +- out-tsc/app/app/admin/admin-routing.module.js | 39 + .../app/app/admin/admin-routing.module.js.map | 1 + out-tsc/app/app/admin/admin.module.js | 26 + out-tsc/app/app/admin/admin.module.js.map | 1 + .../app/admin/config/configuration.module.js | 36 + .../admin/config/configuration.module.js.map | 1 + .../app/admin/config/configuration.page.js | 116 ++ .../admin/config/configuration.page.js.map | 1 + .../app/admin/config/configuration.service.js | 52 + .../admin/config/configuration.service.js.map | 1 + .../app/app/admin/job/job-list.component.js | 372 ++++ .../app/admin/job/job-list.component.js.map | 1 + out-tsc/app/app/admin/job/job-list.module.js | 27 + .../app/app/admin/job/job-list.module.js.map | 1 + out-tsc/app/app/app-routing.module.js | 198 ++ out-tsc/app/app/app-routing.module.js.map | 1 + out-tsc/app/app/app.component.js | 190 ++ out-tsc/app/app/app.component.js.map | 1 + out-tsc/app/app/app.module.js | 419 +++++ out-tsc/app/app/app.module.js.map | 1 + out-tsc/app/app/core/core.module.js | 46 + out-tsc/app/app/core/core.module.js.map | 1 + out-tsc/app/app/core/pipes/core.pipe.js | 26 + out-tsc/app/app/core/pipes/core.pipe.js.map | 1 + .../app/core/services/config/core.config.js | 40 + .../core/services/config/core.config.js.map | 1 + out-tsc/app/app/core/services/errors.js | 5 + out-tsc/app/app/core/services/errors.js.map | 1 + .../core/services/model/referential.utils.js | 86 + .../services/model/referential.utils.js.map | 1 + .../app/core/services/trash-remote.service.js | 76 + .../core/services/trash-remote.service.js.map | 1 + out-tsc/app/app/data/data.config.js | 157 ++ out-tsc/app/app/data/data.config.js.map | 1 + out-tsc/app/app/data/data.module.js | 51 + out-tsc/app/app/data/data.module.js.map | 1 + out-tsc/app/app/data/data.testing.module.js | 43 + .../app/app/data/data.testing.module.js.map | 1 + .../data/fishing-area/fishing-area.form.js | 131 ++ .../fishing-area/fishing-area.form.js.map | 1 + .../data/fishing-area/fishing-area.model.js | 73 + .../fishing-area/fishing-area.model.js.map | 1 + .../data/fishing-area/fishing-area.module.js | 28 + .../fishing-area/fishing-area.module.js.map | 1 + .../fishing-area/fishing-area.validator.js | 73 + .../fishing-area.validator.js.map | 1 + .../app/app/data/form/data-editor.class.js | 402 ++++ .../app/data/form/data-editor.class.js.map | 1 + .../app/app/data/form/data-editor.utils.js | 9 + .../app/data/form/data-editor.utils.js.map | 1 + .../app/data/form/root-data-editor.class.js | 96 + .../data/form/root-data-editor.class.js.map | 1 + .../image-attachment-gallery.component.js | 187 ++ .../image-attachment-gallery.component.js.map | 1 + .../app/data/image/image-attachment.modal.js | 91 + .../data/image/image-attachment.modal.js.map | 1 + .../app/data/image/image-attachment.model.js | 80 + .../data/image/image-attachment.model.js.map | 1 + .../app/data/image/image-attachment.module.js | 30 + .../data/image/image-attachment.module.js.map | 1 + .../data/image/image-attachment.service.js | 64 + .../image/image-attachment.service.js.map | 1 + .../data/image/image-attachment.validator.js | 28 + .../image/image-attachment.validator.js.map | 1 + .../image/testing/image-attachment.test.js | 30 + .../testing/image-attachment.test.js.map | 1 + .../image-attachment.testing.module.js | 28 + .../image-attachment.testing.module.js.map | 1 + .../measurement-values.form.class.js | 597 ++++++ .../measurement-values.form.class.js.map | 1 + .../app/data/measurement/measurement.model.js | 369 ++++ .../data/measurement/measurement.model.js.map | 1 + .../data/measurement/measurement.module.js | 35 + .../measurement/measurement.module.js.map | 1 + .../data/measurement/measurement.validator.js | 130 ++ .../measurement/measurement.validator.js.map | 1 + .../measurement/measurements-table.class.js | 515 ++++++ .../measurements-table.class.js.map | 1 + .../measurement/measurements-table.service.js | 286 +++ .../measurements-table.service.js.map | 1 + .../measurements-table.validator.js | 85 + .../measurements-table.validator.js.map | 1 + .../measurements.form.component.js | 540 ++++++ .../measurements.form.component.js.map | 1 + .../app/data/measurement/measurements.pipe.js | 40 + .../data/measurement/measurements.pipe.js.map | 1 + .../app/app/data/pipes/data-entity.pipes.js | 32 + .../app/data/pipes/data-entity.pipes.js.map | 1 + out-tsc/app/app/data/pipes/pipes.module.js | 23 + .../app/app/data/pipes/pipes.module.js.map | 1 + .../position/device/device-position.config.js | 24 + .../device/device-position.config.js.map | 1 + .../position/device/device-position.model.js | 111 ++ .../device/device-position.model.js.map | 1 + .../device/device-position.service.js | 571 ++++++ .../device/device-position.service.js.map | 1 + .../app/app/data/position/position.model.js | 15 + .../app/data/position/position.model.js.map | 1 + .../app/app/data/position/position.utils.js | 15 + .../app/data/position/position.utils.js.map | 1 + .../app/data/position/position.validator.js | 69 + .../data/position/position.validator.js.map | 1 + .../position/vessel/vessel-position.model.js | 45 + .../vessel/vessel-position.model.js.map | 1 + .../quality/entity-quality-form.component.js | 422 +++++ .../entity-quality-form.component.js.map | 1 + .../quality/entity-quality-icon.component.js | 80 + .../entity-quality-icon.component.js.map | 1 + .../app/data/quality/entity-quality.module.js | 42 + .../data/quality/entity-quality.module.js.map | 1 + .../data/quality/quality-flag-invalid.pipe.js | 15 + .../quality/quality-flag-invalid.pipe.js.map | 1 + .../quality/quality-flag-not-invalid.pipe.js | 15 + .../quality-flag-not-invalid.pipe.js.map | 1 + .../quality/quality-flag-to-color.pipe.js | 15 + .../quality/quality-flag-to-color.pipe.js.map | 1 + .../data/quality/quality-flag-to-i18n.pipe.js | 15 + .../quality/quality-flag-to-i18n.pipe.js.map | 1 + .../data/quality/quality-flag-to-icon.pipe.js | 19 + .../quality/quality-flag-to-icon.pipe.js.map | 1 + .../app/app/data/report/base-report.class.js | 565 ++++++ .../app/data/report/base-report.class.js.map | 1 + .../data/report/data-entity-report.class.js | 81 + .../report/data-entity-report.class.js.map | 1 + .../data/report/extraction-report.class.js | 48 + .../report/extraction-report.class.js.map | 1 + .../services/data-quality-service.class.js | 11 + .../data-quality-service.class.js.map | 1 + out-tsc/app/app/data/services/errors.js | 15 + out-tsc/app/app/data/services/errors.js.map | 1 + .../data/services/model/data-context.model.js | 16 + .../services/model/data-context.model.js.map | 1 + .../data/services/model/data-entity.model.js | 159 ++ .../services/model/data-entity.model.js.map | 1 + .../data/services/model/data-filter.model.js | 69 + .../services/model/data-filter.model.js.map | 1 + .../app/data/services/model/model.utils.js | 149 ++ .../data/services/model/model.utils.js.map | 1 + .../services/model/root-data-entity.model.js | 79 + .../model/root-data-entity.model.js.map | 1 + .../services/model/root-data-filter.model.js | 77 + .../model/root-data-filter.model.js.map | 1 + .../model/root-vessel-entity.model.js | 19 + .../model/root-vessel-entity.model.js.map | 1 + .../data/services/root-data-service.class.js | 268 +++ .../services/root-data-service.class.js.map | 1 + .../root-data-synchro-service.class.js | 285 +++ .../root-data-synchro-service.class.js.map | 1 + .../validator/data-entity.validator.js | 42 + .../validator/data-entity.validator.js.map | 1 + .../services/validator/data.validators.js | 53 + .../services/validator/data.validators.js.map | 1 + .../validator/root-data-entity.validator.js | 33 + .../root-data-entity.validator.js.map | 1 + .../validator/root-vessel-entity.validator.js | 14 + .../root-vessel-entity.validator.js.map | 1 + .../strategy-summary-card.component.js | 166 ++ .../strategy-summary-card.component.js.map | 1 + .../app/app/data/table/data-modal.class.js | 2 + .../app/data/table/data-modal.class.js.map | 1 + .../app/app/data/table/root-table.class.js | 654 +++++++ .../app/data/table/root-table.class.js.map | 1 + .../button/extraction-button.component.js | 133 ++ .../button/extraction-button.component.js.map | 1 + .../button/extraction-button.module.js | 23 + .../button/extraction-button.module.js.map | 1 + .../common/extraction-abstract.page.js | 565 ++++++ .../common/extraction-abstract.page.js.map | 1 + .../extraction/common/extraction.config.js | 85 + .../common/extraction.config.js.map | 1 + .../extraction/common/extraction.errors.js | 11 + .../common/extraction.errors.js.map | 1 + .../extraction/common/extraction.service.js | 266 +++ .../common/extraction.service.js.map | 1 + .../app/extraction/common/extraction.utils.js | 173 ++ .../extraction/common/extraction.utils.js.map | 1 + .../criteria/extraction-criteria.form.js | 423 +++++ .../criteria/extraction-criteria.form.js.map | 1 + .../extraction-criterion.validator.js | 70 + .../extraction-criterion.validator.js.map | 1 + .../extraction/extraction-routing.module.js | 76 + .../extraction-routing.module.js.map | 1 + .../app/app/extraction/extraction.module.js | 57 + .../app/extraction/extraction.module.js.map | 1 + out-tsc/app/app/extraction/help/help.modal.js | 59 + .../app/app/extraction/help/help.modal.js.map | 1 + .../app/extraction/map/extraction-map.page.js | 1336 ++++++++++++++ .../extraction/map/extraction-map.page.js.map | 1 + .../device-position-map-page.component.js | 471 +++++ .../device-position-map-page.component.js.map | 1 + .../device-position-routing.module.js | 30 + .../device-position-routing.module.js.map | 1 + .../position/device-position.module.js | 20 + .../position/device-position.module.js.map | 1 + .../app/extraction/product/product.form.js | 255 +++ .../extraction/product/product.form.js.map | 1 + .../app/extraction/product/product.model.js | 88 + .../extraction/product/product.model.js.map | 1 + .../app/extraction/product/product.page.js | 317 ++++ .../extraction/product/product.page.js.map | 1 + .../app/extraction/product/product.service.js | 370 ++++ .../extraction/product/product.service.js.map | 1 + .../extraction/product/product.validator.js | 58 + .../product/product.validator.js.map | 1 + .../app/app/extraction/strata/strata.model.js | 24 + .../app/extraction/strata/strata.model.js.map | 1 + .../app/extraction/strata/strata.validator.js | 29 + .../extraction/strata/strata.validator.js.map | 1 + .../extraction/table/extraction-table.page.js | 742 ++++++++ .../table/extraction-table.page.js.map | 1 + .../extraction/type/extraction-type.filter.js | 62 + .../type/extraction-type.filter.js.map | 1 + .../extraction/type/extraction-type.model.js | 282 +++ .../type/extraction-type.model.js.map | 1 + .../type/extraction-type.service.js | 182 ++ .../type/extraction-type.service.js.map | 1 + .../type/select-extraction-type.modal.js | 77 + .../type/select-extraction-type.modal.js.map | 1 + .../form/referential-editor.class.js | 164 ++ .../form/referential-editor.class.js.map | 1 + .../form/referential-form.module.js | 32 + .../form/referential-form.module.js.map | 1 + .../app/referential/form/referential.form.js | 88 + .../referential/form/referential.form.js.map | 1 + .../referential/location/location.utils.js | 77 + .../location/location.utils.js.map | 1 + .../metier/metier-routing.module.js | 28 + .../metier/metier-routing.module.js.map | 1 + .../app/referential/metier/metier.model.js | 45 + .../referential/metier/metier.model.js.map | 1 + .../app/referential/metier/metier.module.js | 35 + .../referential/metier/metier.module.js.map | 1 + .../app/app/referential/metier/metier.page.js | 77 + .../app/referential/metier/metier.page.js.map | 1 + .../app/referential/metier/metier.service.js | 42 + .../referential/metier/metier.service.js.map | 1 + .../referential/metier/metier.validator.js | 24 + .../metier/metier.validator.js.map | 1 + .../app/app/referential/pipes/pmfms.pipe.js | 227 +++ .../app/referential/pipes/pmfms.pipe.js.map | 1 + .../pipes/referential-pipes.module.js | 54 + .../pipes/referential-pipes.module.js.map | 1 + .../pipes/referential-to-string.pipe.js | 22 + .../pipes/referential-to-string.pipe.js.map | 1 + .../app/app/referential/pipes/weights.pipe.js | 37 + .../app/referential/pipes/weights.pipe.js.map | 1 + .../field/pmfm-qv.form-field.component.js | 393 ++++ .../field/pmfm-qv.form-field.component.js.map | 1 + .../pmfm/field/pmfm.form-field.component.js | 419 +++++ .../field/pmfm.form-field.component.js.map | 1 + .../pmfm/field/pmfm.form-field.module.js | 34 + .../pmfm/field/pmfm.form-field.module.js.map | 1 + .../pmfm/method/method-routing.module.js | 28 + .../pmfm/method/method-routing.module.js.map | 1 + .../referential/pmfm/method/method.model.js | 29 + .../pmfm/method/method.model.js.map | 1 + .../referential/pmfm/method/method.module.js | 35 + .../pmfm/method/method.module.js.map | 1 + .../referential/pmfm/method/method.page.js | 57 + .../pmfm/method/method.page.js.map | 1 + .../referential/pmfm/method/method.service.js | 38 + .../pmfm/method/method.service.js.map | 1 + .../pmfm/method/method.validator.js | 24 + .../pmfm/method/method.validator.js.map | 1 + .../parameter/parameter-routing.module.js | 28 + .../parameter/parameter-routing.module.js.map | 1 + .../pmfm/parameter/parameter.module.js | 35 + .../pmfm/parameter/parameter.module.js.map | 1 + .../pmfm/parameter/parameter.page.js | 163 ++ .../pmfm/parameter/parameter.page.js.map | 1 + .../referential/pmfm/pmfm-routing.module.js | 28 + .../pmfm/pmfm-routing.module.js.map | 1 + .../app/app/referential/pmfm/pmfm.module.js | 35 + .../app/referential/pmfm/pmfm.module.js.map | 1 + out-tsc/app/app/referential/pmfm/pmfm.page.js | 336 ++++ .../app/app/referential/pmfm/pmfm.page.js.map | 1 + .../app/referential/pmfm/table/pmfms.table.js | 85 + .../referential/pmfm/table/pmfms.table.js.map | 1 + .../pmfm/table/select-pmfm.modal.js | 34 + .../pmfm/table/select-pmfm.modal.js.map | 1 + .../pmfm/table/select-pmfm.module.js | 33 + .../pmfm/table/select-pmfm.module.js.map | 1 + .../privilege/person-privileges.table.js | 111 ++ .../privilege/person-privileges.table.js.map | 1 + .../privilege/program-person.validator.js | 28 + .../privilege/program-person.validator.js.map | 1 + .../app/referential/program/program.module.js | 48 + .../referential/program/program.module.js.map | 1 + .../app/referential/program/program.page.js | 462 +++++ .../referential/program/program.page.js.map | 1 + .../app/referential/program/programs.page.js | 53 + .../referential/program/programs.page.js.map | 1 + .../program/select-program.modal.js | 46 + .../program/select-program.modal.js.map | 1 + .../referential/referential-routing.module.js | 140 ++ .../referential-routing.module.js.map | 1 + .../app/app/referential/referential.module.js | 44 + .../app/referential/referential.module.js.map | 1 + .../referential/referential.testing.module.js | 48 + .../referential.testing.module.js.map | 1 + .../app/app/referential/referential.utils.js | 5 + .../app/referential/referential.utils.js.map | 1 + .../base-referential-ref-service.class.js | 56 + .../base-referential-ref-service.class.js.map | 1 + .../base-referential-service.class.js | 76 + .../base-referential-service.class.js.map | 1 + .../services/config/program.config.js | 1000 ++++++++++ .../services/config/program.config.js.map | 1 + .../services/config/referential.config.js | 772 ++++++++ .../services/config/referential.config.js.map | 1 + .../app/app/referential/services/errors.js | 25 + .../app/referential/services/errors.js.map | 1 + .../services/filter/metier.filter.js | 47 + .../services/filter/metier.filter.js.map | 1 + .../services/filter/pmfm-strategy.filter.js | 88 + .../filter/pmfm-strategy.filter.js.map | 1 + .../services/filter/pmfm.filter.js | 59 + .../services/filter/pmfm.filter.js.map | 1 + .../services/filter/program.filter.js | 56 + .../services/filter/program.filter.js.map | 1 + .../services/filter/referential-ref.filter.js | 44 + .../filter/referential-ref.filter.js.map | 1 + .../services/filter/referential.filter.js | 108 ++ .../services/filter/referential.filter.js.map | 1 + .../services/filter/strategy.filter.js | 111 ++ .../services/filter/strategy.filter.js.map | 1 + .../services/filter/taxon-name-ref.filter.js | 51 + .../filter/taxon-name-ref.filter.js.map | 1 + .../services/filter/taxon-name.filter.js | 26 + .../services/filter/taxon-name.filter.js.map | 1 + .../services/filter/vessel.filter.js | 123 ++ .../services/filter/vessel.filter.js.map | 1 + .../filter/weight-length-conversion.filter.js | 105 ++ .../weight-length-conversion.filter.js.map | 1 + .../referential/services/metier.service.js | 141 ++ .../services/metier.service.js.map | 1 + .../referential/services/model/model.enum.js | 391 ++++ .../services/model/model.enum.js.map | 1 + .../referential/services/model/model.utils.js | 53 + .../services/model/model.utils.js.map | 1 + .../services/model/parameter.model.js | 41 + .../services/model/parameter.model.js.map | 1 + .../services/model/pmfm-strategy.model.js | 357 ++++ .../services/model/pmfm-strategy.model.js.map | 1 + .../services/model/pmfm-value.model.js | 232 +++ .../services/model/pmfm-value.model.js.map | 1 + .../referential/services/model/pmfm.model.js | 468 +++++ .../services/model/pmfm.model.js.map | 1 + .../services/model/program.model.js | 178 ++ .../services/model/program.model.js.map | 1 + .../services/model/referential.model.js | 41 + .../services/model/referential.model.js.map | 1 + .../referential/services/model/rule.model.js | 231 +++ .../services/model/rule.model.js.map | 1 + .../services/model/sampling-strategy.model.js | 169 ++ .../model/sampling-strategy.model.js.map | 1 + .../services/model/strategy.model.js | 230 +++ .../services/model/strategy.model.js.map | 1 + .../services/model/taxon-group.model.js | 48 + .../services/model/taxon-group.model.js.map | 1 + .../services/model/taxon-name.model.js | 125 ++ .../services/model/taxon-name.model.js.map | 1 + .../services/model/vessel-snapshot.model.js | 133 ++ .../model/vessel-snapshot.model.js.map | 1 + .../referential/services/parameter.service.js | 179 ++ .../services/parameter.service.js.map | 1 + .../app/referential/services/pmfm.service.js | 402 ++++ .../referential/services/pmfm.service.js.map | 1 + .../services/program-ref.service.js | 842 +++++++++ .../services/program-ref.service.js.map | 1 + .../referential/services/program.fragments.js | 70 + .../services/program.fragments.js.map | 1 + .../referential/services/program.service.js | 313 ++++ .../services/program.service.js.map | 1 + .../services/referential-ref.service.js | 670 +++++++ .../services/referential-ref.service.js.map | 1 + .../services/referential.fragments.js | 319 ++++ .../services/referential.fragments.js.map | 1 + .../services/referential.service.js | 432 +++++ .../services/referential.service.js.map | 1 + .../services/sampling-strategy.service.js | 348 ++++ .../services/sampling-strategy.service.js.map | 1 + .../referential/services/software.service.js | 135 ++ .../services/software.service.js.map | 1 + .../services/strategy-ref.service.js | 310 ++++ .../services/strategy-ref.service.js.map | 1 + .../services/strategy.fragments.js | 285 +++ .../services/strategy.fragments.js.map | 1 + .../referential/services/strategy.service.js | 544 ++++++ .../services/strategy.service.js.map | 1 + .../services/taxon-group-ref.service.js | 37 + .../services/taxon-group-ref.service.js.map | 1 + .../services/taxon-name-ref.service.js | 19 + .../services/taxon-name-ref.service.js.map | 1 + .../services/taxon-name.service.js | 114 ++ .../services/taxon-name.service.js.map | 1 + .../services/validator/parameter.validator.js | 28 + .../validator/parameter.validator.js.map | 1 + .../validator/pmfm-strategy.validator.js | 70 + .../validator/pmfm-strategy.validator.js.map | 1 + .../services/validator/pmfm.validator.js | 28 + .../services/validator/pmfm.validator.js.map | 1 + .../services/validator/pmfm.validators.js | 88 + .../services/validator/pmfm.validators.js.map | 1 + .../services/validator/program.validator.js | 52 + .../validator/program.validator.js.map | 1 + .../validator/referential.validator.js | 50 + .../validator/referential.validator.js.map | 1 + .../services/validator/software.validator.js | 41 + .../validator/software.validator.js.map | 1 + .../services/validator/strategy.validator.js | 112 ++ .../validator/strategy.validator.js.map | 1 + .../validator/taxon-name.validator.js | 25 + .../validator/taxon-name.validator.js.map | 1 + .../services/vessel-snapshot.service.js | 410 +++++ .../services/vessel-snapshot.service.js.map | 1 + .../software/abstract-software.page.js | 207 +++ .../software/abstract-software.page.js.map | 1 + .../software/software-routing.module.js | 30 + .../software/software-routing.module.js.map | 1 + .../referential/software/software.module.js | 37 + .../software/software.module.js.map | 1 + .../app/referential/software/software.page.js | 42 + .../referential/software/software.page.js.map | 1 + .../strategy/pmfm-strategies.table.js | 543 ++++++ .../strategy/pmfm-strategies.table.js.map | 1 + .../sampling/sampling-strategies.table.js | 506 +++++ .../sampling/sampling-strategies.table.js.map | 1 + .../sampling/sampling-strategy.form.js | 1347 ++++++++++++++ .../sampling/sampling-strategy.form.js.map | 1 + .../sampling/sampling-strategy.page.js | 299 +++ .../sampling/sampling-strategy.page.js.map | 1 + .../testing/pmfm-strategies.table.test.js | 31 + .../testing/pmfm-strategies.table.test.js.map | 1 + .../referential/strategy/strategies.page.js | 183 ++ .../strategy/strategies.page.js.map | 1 + .../referential/strategy/strategies.table.js | 291 +++ .../strategy/strategies.table.js.map | 1 + .../app/referential/strategy/strategy.form.js | 492 +++++ .../referential/strategy/strategy.form.js.map | 1 + .../referential/strategy/strategy.modal.js | 52 + .../strategy/strategy.modal.js.map | 1 + .../referential/strategy/strategy.module.js | 66 + .../strategy/strategy.module.js.map | 1 + .../app/referential/strategy/strategy.page.js | 237 +++ .../referential/strategy/strategy.page.js.map | 1 + .../table/base-referential.table.js | 411 +++++ .../table/base-referential.table.js.map | 1 + .../table/base-select-entity.modal.js | 138 ++ .../table/base-select-entity.modal.js.map | 1 + .../table/referential-file.service.js | 516 ++++++ .../table/referential-file.service.js.map | 1 + .../table/referential-ref.table.js | 186 ++ .../table/referential-ref.table.js.map | 1 + .../table/referential-simple.table.js | 218 +++ .../table/referential-simple.table.js.map | 1 + .../table/referential-table.module.js | 42 + .../table/referential-table.module.js.map | 1 + .../referential/table/referential.table.js | 753 ++++++++ .../table/referential.table.js.map | 1 + .../table/select-referential.modal.js | 52 + .../table/select-referential.modal.js.map | 1 + .../round-weight-conversion-ref.service.js | 107 ++ ...round-weight-conversion-ref.service.js.map | 1 + .../round-weight-conversion.filter.js | 83 + .../round-weight-conversion.filter.js.map | 1 + .../round-weight-conversion.fragments.js | 43 + .../round-weight-conversion.fragments.js.map | 1 + .../round-weight-conversion.model.js | 108 ++ .../round-weight-conversion.model.js.map | 1 + .../round-weight-conversion.service.js | 57 + .../round-weight-conversion.service.js.map | 1 + .../round-weight-conversion.table.js | 109 ++ .../round-weight-conversion.table.js.map | 1 + .../round-weight-conversion.validator.js | 36 + .../round-weight-conversion.validator.js.map | 1 + .../taxon-group/taxon-group-routing.module.js | 28 + .../taxon-group-routing.module.js.map | 1 + .../taxon-group/taxon-group.module.js | 37 + .../taxon-group/taxon-group.module.js.map | 1 + .../taxon-group/taxon-group.page.js | 95 + .../taxon-group/taxon-group.page.js.map | 1 + .../taxon-group/taxon-group.validator.js | 24 + .../taxon-group/taxon-group.validator.js.map | 1 + .../taxon-name/taxon-name-routing.module.js | 28 + .../taxon-name-routing.module.js.map | 1 + .../taxon-name/taxon-name.module.js | 35 + .../taxon-name/taxon-name.module.js.map | 1 + .../referential/taxon-name/taxon-name.page.js | 159 ++ .../taxon-name/taxon-name.page.js.map | 1 + .../weight-length-conversion-ref.service.js | 166 ++ ...eight-length-conversion-ref.service.js.map | 1 + .../weight-length-conversion.fragments.js | 59 + .../weight-length-conversion.fragments.js.map | 1 + .../weight-length-conversion.model.js | 113 ++ .../weight-length-conversion.model.js.map | 1 + .../weight-length-conversion.service.js | 56 + .../weight-length-conversion.service.js.map | 1 + .../weight-length-conversion.table.js | 165 ++ .../weight-length-conversion.table.js.map | 1 + .../weight-length-conversion.validator.js | 40 + .../weight-length-conversion.validator.js.map | 1 + .../modal/transcribing-items.modal.js | 66 + .../modal/transcribing-items.modal.js.map | 1 + .../transcribing/transcribing-item.table.js | 128 ++ .../transcribing-item.table.js.map | 1 + .../transcribing-item.validator.js | 24 + .../transcribing-item.validator.js.map | 1 + .../transcribing/transcribing.model.js | 115 ++ .../transcribing/transcribing.model.js.map | 1 + .../transcribing/transcribing.module.js | 35 + .../transcribing/transcribing.module.js.map | 1 + .../bluetooth/bluetooth-serial.errors.js | 5 + .../bluetooth/bluetooth-serial.errors.js.map | 1 + .../app/shared/bluetooth/bluetooth.icon.js | 300 +++ .../shared/bluetooth/bluetooth.icon.js.map | 1 + .../app/shared/bluetooth/bluetooth.module.js | 30 + .../shared/bluetooth/bluetooth.module.js.map | 1 + .../app/shared/bluetooth/bluetooth.popover.js | 315 ++++ .../shared/bluetooth/bluetooth.popover.js.map | 1 + .../app/shared/bluetooth/bluetooth.service.js | 389 ++++ .../shared/bluetooth/bluetooth.service.js.map | 1 + .../app/shared/bluetooth/bluetooth.utils.js | 27 + .../shared/bluetooth/bluetooth.utils.js.map | 1 + .../bluetooth/testing/bluetooth.testing.js | 38 + .../testing/bluetooth.testing.js.map | 1 + .../testing/bluetooth.testing.module.js | 41 + .../testing/bluetooth.testing.module.js.map | 1 + out-tsc/app/app/shared/chartsjs.utils.js | 229 +++ out-tsc/app/app/shared/chartsjs.utils.js.map | 1 + out-tsc/app/app/shared/colors.utils.js | 2 + out-tsc/app/app/shared/colors.utils.js.map | 1 + out-tsc/app/app/shared/context.service.js | 58 + out-tsc/app/app/shared/context.service.js.map | 1 + out-tsc/app/app/shared/flags.utils.js | 16 + out-tsc/app/app/shared/flags.utils.js.map | 1 + out-tsc/app/app/shared/forms.utils.js | 39 + out-tsc/app/app/shared/forms.utils.js.map | 1 + out-tsc/app/app/shared/functions.js | 121 ++ out-tsc/app/app/shared/functions.js.map | 1 + out-tsc/app/app/shared/geometries.utils.js | 137 ++ .../app/app/shared/geometries.utils.js.map | 1 + .../gwaleen/ichthyometer.gwaleen.js | 333 ++++ .../gwaleen/ichthyometer.gwaleen.js.map | 1 + .../ichthyometer/ichthyometer.config.js | 26 + .../ichthyometer/ichthyometer.config.js.map | 1 + .../shared/ichthyometer/ichthyometer.icon.js | 53 + .../ichthyometer/ichthyometer.icon.js.map | 1 + .../ichthyometer/ichthyometer.module.js | 26 + .../ichthyometer/ichthyometer.module.js.map | 1 + .../ichthyometer/ichthyometer.service.js | 318 ++++ .../ichthyometer/ichthyometer.service.js.map | 1 + .../testing/ichthyometer.testing.js | 53 + .../testing/ichthyometer.testing.js.map | 1 + .../testing/ichthyometer.testing.module.js | 43 + .../ichthyometer.testing.module.js.map | 1 + out-tsc/app/app/shared/map/base-map.class.js | 214 +++ .../app/app/shared/map/base-map.class.js.map | 1 + out-tsc/app/app/shared/map/leaflet.js | 6 + out-tsc/app/app/shared/map/leaflet.js.map | 1 + out-tsc/app/app/shared/map/map.graticule.js | 404 ++++ .../app/app/shared/map/map.graticule.js.map | 1 + out-tsc/app/app/shared/map/map.utils.js | 20 + out-tsc/app/app/shared/map/map.utils.js.map | 1 + .../markdown/markdown-anchor.directive.js | 37 + .../markdown/markdown-anchor.directive.js.map | 1 + .../markdown/markdown-anchor.service.js | 70 + .../markdown/markdown-anchor.service.js.map | 1 + .../shared/markdown/markdown-anchor.utils.js | 21 + .../markdown/markdown-anchor.utils.js.map | 1 + .../app/shared/markdown/markdown.module.js | 56 + .../shared/markdown/markdown.module.js.map | 1 + .../app/shared/markdown/markdown.render.js | 17 + .../shared/markdown/markdown.render.js.map | 1 + .../app/shared/material/material.animation.js | 50 + .../shared/material/material.animation.js.map | 1 + .../material/material.testing.module.js | 39 + .../material/material.testing.module.js.map | 1 + .../sampling-ratio/material.sampling-ratio.js | 300 +++ .../material.sampling-ratio.js.map | 1 + .../material.sampling-ratio.module.js | 21 + .../material.sampling-ratio.module.js.map | 1 + .../testing/sampling-ratio.test.js | 71 + .../testing/sampling-ratio.test.js.map | 1 + .../material/skeleton/form-fields-skeleton.js | 17 + .../skeleton/form-fields-skeleton.js.map | 1 + .../skeleton/form-fields-skeleton.module.js | 25 + .../form-fields-skeleton.module.js.map | 1 + out-tsc/app/app/shared/math.utils.js | 71 + out-tsc/app/app/shared/math.utils.js.map | 1 + out-tsc/app/app/shared/pipes/arrays.pipe.js | 34 + .../app/app/shared/pipes/arrays.pipe.js.map | 1 + out-tsc/app/app/shared/pipes/delay.pipe.js | 21 + .../app/app/shared/pipes/delay.pipe.js.map | 1 + .../app/app/shared/pipes/display-with.pipe.js | 18 + .../app/shared/pipes/display-with.pipe.js.map | 1 + out-tsc/app/app/shared/pipes/html.pipes.js | 18 + .../app/app/shared/pipes/html.pipes.js.map | 1 + .../app/app/shared/pipes/pagination.pipe.js | 21 + .../app/shared/pipes/pagination.pipe.js.map | 1 + .../app/app/shared/popover/popover.utils.js | 12 + .../app/shared/popover/popover.utils.js.map | 1 + .../progression/progress-bar.component.js | 40 + .../progression/progress-bar.component.js.map | 1 + .../shared/progression/progression.model.js | 56 + .../progression/progression.model.js.map | 1 + .../shared/progression/progression.module.js | 26 + .../progression/progression.module.js.map | 1 + .../app/app/shared/report/report.module.js | 24 + .../app/shared/report/report.module.js.map | 1 + .../report/reveal/reveal-section.directive.js | 51 + .../reveal/reveal-section.directive.js.map | 1 + .../shared/report/reveal/reveal.component.js | 354 ++++ .../report/reveal/reveal.component.js.map | 1 + .../app/shared/report/reveal/reveal.module.js | 28 + .../shared/report/reveal/reveal.module.js.map | 1 + .../app/shared/report/reveal/reveal.utils.js | 6 + .../shared/report/reveal/reveal.utils.js.map | 1 + .../report/testing/report-embedded.testing.js | 63 + .../testing/report-embedded.testing.js.map | 1 + .../shared/report/testing/report.testing.js | 53 + .../report/testing/report.testing.js.map | 1 + .../report/testing/report.testing.module.js | 53 + .../testing/report.testing.module.js.map | 1 + out-tsc/app/app/shared/rx-state.module.js | 20 + out-tsc/app/app/shared/rx-state.module.js.map | 1 + .../shared/service/base.validator.service.js | 34 + .../service/base.validator.service.js.map | 1 + .../shared/service/file-transfer.service.js | 117 ++ .../service/file-transfer.service.js.map | 1 + out-tsc/app/app/shared/service/page.model.js | 2 + .../app/app/shared/service/page.model.js.map | 1 + out-tsc/app/app/shared/shared.config.js | 5 + out-tsc/app/app/shared/shared.config.js.map | 1 + out-tsc/app/app/shared/shared.module.js | 80 + out-tsc/app/app/shared/shared.module.js.map | 1 + .../app/app/shared/shared.testing.module.js | 49 + .../app/shared/shared.testing.module.js.map | 1 + .../app/app/shared/state/state.decorator.js | 92 + .../app/shared/state/state.decorator.js.map | 1 + out-tsc/app/app/shared/table/base.table.js | 606 ++++++ .../app/app/shared/table/base.table.js.map | 1 + out-tsc/app/app/shared/types.utils.js | 2 + out-tsc/app/app/shared/types.utils.js.map | 1 + .../app/app/social/config/social.config.js | 9 + .../app/social/config/social.config.js.map | 1 + .../app/social/job/job-progression.service.js | 98 + .../social/job/job-progression.service.js.map | 1 + out-tsc/app/app/social/job/job.errors.js | 5 + out-tsc/app/app/social/job/job.errors.js.map | 1 + out-tsc/app/app/social/job/job.model.js | 142 ++ out-tsc/app/app/social/job/job.model.js.map | 1 + out-tsc/app/app/social/job/job.service.js | 268 +++ out-tsc/app/app/social/job/job.service.js.map | 1 + .../social/job/report/job-report.module.js | 20 + .../job/report/job-report.module.js.map | 1 + .../app/social/job/report/job.report.modal.js | 56 + .../social/job/report/job.report.modal.js.map | 1 + .../message/inbox-message-routing.module.js | 44 + .../inbox-message-routing.module.js.map | 1 + .../social/message/inbox-message.module.js | 24 + .../message/inbox-message.module.js.map | 1 + .../app/social/message/inbox-message.page.js | 95 + .../social/message/inbox-message.page.js.map | 1 + .../social/message/inbox-message.service.js | 86 + .../message/inbox-message.service.js.map | 1 + .../app/social/message/inbox-messages.page.js | 78 + .../social/message/inbox-messages.page.js.map | 1 + .../app/social/share/shared-page.component.js | 70 + .../social/share/shared-page.component.js.map | 1 + .../app/app/social/share/shared-page.model.js | 2 + .../app/social/share/shared-page.model.js.map | 1 + .../app/social/share/shared-page.module.js | 30 + .../social/share/shared-page.module.js.map | 1 + .../app/social/share/shared-resource.utils.js | 22 + .../social/share/shared-resource.utils.js.map | 1 + .../app/app/social/social-routing.module.js | 41 + .../app/social/social-routing.module.js.map | 1 + out-tsc/app/app/social/social.module.js | 26 + out-tsc/app/app/social/social.module.js.map | 1 + .../social/user-event/user-event.fragments.js | 33 + .../user-event/user-event.fragments.js.map | 1 + .../app/social/user-event/user-event.model.js | 150 ++ .../social/user-event/user-event.model.js.map | 1 + .../social/user-event/user-event.module.js | 25 + .../user-event/user-event.module.js.map | 1 + .../social/user-event/user-event.service.js | 430 +++++ .../user-event/user-event.service.js.map | 1 + .../social/user-event/user-events.table.js | 146 ++ .../user-event/user-events.table.js.map | 1 + .../aggregated-landing.filter.js | 66 + .../aggregated-landing.filter.js.map | 1 + .../aggregated-landing.form.js | 224 +++ .../aggregated-landing.form.js.map | 1 + .../aggregated-landing.modal.js | 166 ++ .../aggregated-landing.modal.js.map | 1 + .../aggregated-landing.model.js | 114 ++ .../aggregated-landing.model.js.map | 1 + .../aggregated-landing.module.js | 39 + .../aggregated-landing.module.js.map | 1 + .../aggregated-landing.service.js | 349 ++++ .../aggregated-landing.service.js.map | 1 + .../aggregated-landings.table.js | 388 ++++ .../aggregated-landings.table.js.map | 1 + .../vessel-activity.form.js | 127 ++ .../vessel-activity.form.js.map | 1 + .../vessel-activity.validator.js | 63 + .../vessel-activity.validator.js.map | 1 + out-tsc/app/app/trip/batch/batch.errors.js | 5 + .../app/app/trip/batch/batch.errors.js.map | 1 + out-tsc/app/app/trip/batch/batch.module.js | 100 + .../app/app/trip/batch/batch.module.js.map | 1 + .../app/app/trip/batch/catch/catch.form.js | 148 ++ .../app/trip/batch/catch/catch.form.js.map | 1 + .../app/app/trip/batch/common/batch.filter.js | 67 + .../app/trip/batch/common/batch.filter.js.map | 1 + .../trip/batch/common/batch.form.content.js | 41 + .../batch/common/batch.form.content.js.map | 1 + .../app/app/trip/batch/common/batch.form.js | 922 ++++++++++ .../app/trip/batch/common/batch.form.js.map | 1 + .../app/app/trip/batch/common/batch.modal.js | 189 ++ .../app/trip/batch/common/batch.modal.js.map | 1 + .../app/app/trip/batch/common/batch.model.js | 197 ++ .../app/trip/batch/common/batch.model.js.map | 1 + .../app/app/trip/batch/common/batch.pipes.js | 81 + .../app/trip/batch/common/batch.pipes.js.map | 1 + .../app/trip/batch/common/batch.service.js | 491 +++++ .../trip/batch/common/batch.service.js.map | 1 + .../app/app/trip/batch/common/batch.utils.js | 630 +++++++ .../app/trip/batch/common/batch.utils.js.map | 1 + .../app/trip/batch/common/batch.validator.js | 534 ++++++ .../trip/batch/common/batch.validator.js.map | 1 + .../trip/batch/common/batches.table.class.js | 281 +++ .../batch/common/batches.table.class.js.map | 1 + .../app/trip/batch/common/batches.table.js | 81 + .../trip/batch/common/batches.table.js.map | 1 + .../batch/common/testing/batch.form.test.js | 242 +++ .../common/testing/batch.form.test.js.map | 1 + .../trip/batch/filter/batch-filter.form.js | 107 ++ .../batch/filter/batch-filter.form.js.map | 1 + .../app/trip/batch/group/batch-group.form.js | 421 +++++ .../trip/batch/group/batch-group.form.js.map | 1 + .../app/trip/batch/group/batch-group.modal.js | 532 ++++++ .../trip/batch/group/batch-group.modal.js.map | 1 + .../app/trip/batch/group/batch-group.model.js | 154 ++ .../trip/batch/group/batch-group.model.js.map | 1 + .../trip/batch/group/batch-group.validator.js | 151 ++ .../batch/group/batch-group.validator.js.map | 1 + .../trip/batch/group/batch-groups.table.js | 1383 ++++++++++++++ .../batch/group/batch-groups.table.js.map | 1 + .../group/testing/batch-group.form.test.js | 238 +++ .../testing/batch-group.form.test.js.map | 1 + .../app/app/trip/batch/sub/sub-batch.form.js | 757 ++++++++ .../app/trip/batch/sub/sub-batch.form.js.map | 1 + .../app/app/trip/batch/sub/sub-batch.modal.js | 237 +++ .../app/trip/batch/sub/sub-batch.modal.js.map | 1 + .../app/app/trip/batch/sub/sub-batch.model.js | 133 ++ .../app/trip/batch/sub/sub-batch.model.js.map | 1 + .../app/trip/batch/sub/sub-batch.validator.js | 350 ++++ .../trip/batch/sub/sub-batch.validator.js.map | 1 + .../app/trip/batch/sub/sub-batches.modal.js | 499 +++++ .../trip/batch/sub/sub-batches.modal.js.map | 1 + .../app/trip/batch/sub/sub-batches.table.js | 823 +++++++++ .../trip/batch/sub/sub-batches.table.js.map | 1 + .../app/trip/batch/testing/batch-data.test.js | 206 +++ .../trip/batch/testing/batch-data.test.js.map | 1 + .../testing/batch-tree-container.test.js | 323 ++++ .../testing/batch-tree-container.test.js.map | 1 + .../app/trip/batch/testing/batch-tree.test.js | 320 ++++ .../trip/batch/testing/batch-tree.test.js.map | 1 + .../batch/tree/batch-model-tree.component.js | 106 ++ .../tree/batch-model-tree.component.js.map | 1 + .../trip/batch/tree/batch-model.validator.js | 314 ++++ .../batch/tree/batch-model.validator.js.map | 1 + .../tree/batch-tree-container.component.js | 1107 +++++++++++ .../batch-tree-container.component.js.map | 1 + .../trip/batch/tree/batch-tree.component.js | 835 +++++++++ .../batch/tree/batch-tree.component.js.map | 1 + .../app/trip/batch/tree/batch-tree.model.js | 423 +++++ .../trip/batch/tree/batch-tree.model.js.map | 1 + .../app/trip/batch/tree/batch-tree.rules.js | 67 + .../trip/batch/tree/batch-tree.rules.js.map | 1 + out-tsc/app/app/trip/common/data.fragments.js | 345 ++++ .../app/app/trip/common/data.fragments.js.map | 1 + out-tsc/app/app/trip/expense/expense.form.js | 510 +++++ .../app/app/trip/expense/expense.form.js.map | 1 + .../app/app/trip/expense/expense.module.js | 36 + .../app/trip/expense/expense.module.js.map | 1 + .../app/app/trip/expense/expense.validator.js | 39 + .../app/trip/expense/expense.validator.js.map | 1 + .../app/trip/expense/typed-expense.form.js | 159 ++ .../trip/expense/typed-expense.form.js.map | 1 + .../trip/expense/typed-expense.validator.js | 49 + .../expense/typed-expense.validator.js.map | 1 + .../app/trip/landedtrip/landed-trip.module.js | 47 + .../trip/landedtrip/landed-trip.module.js.map | 1 + .../app/trip/landedtrip/landed-trip.page.js | 672 +++++++ .../trip/landedtrip/landed-trip.page.js.map | 1 + .../trip/landedtrip/landed-trip.service.js | 56 + .../landedtrip/landed-trip.service.js.map | 1 + .../auction-control-routing.module.js | 47 + .../auction-control-routing.module.js.map | 1 + .../auction-control/auction-control.module.js | 41 + .../auction-control.module.js.map | 1 + .../auction-control/auction-control.page.js | 383 ++++ .../auction-control.page.js.map | 1 + .../auction-control.validators.js | 222 +++ .../auction-control.validators.js.map | 1 + .../auction-control-report-routing.module.js | 25 + ...ction-control-report-routing.module.js.map | 1 + .../report/auction-control.report.js | 45 + .../report/auction-control.report.js.map | 1 + .../report/auction-control.report.module.js | 29 + .../auction-control.report.module.js.map | 1 + .../trip/landing/landing-routing.module.js | 47 + .../landing/landing-routing.module.js.map | 1 + .../app/app/trip/landing/landing.filter.js | 100 + .../app/trip/landing/landing.filter.js.map | 1 + out-tsc/app/app/trip/landing/landing.form.js | 888 +++++++++ .../app/app/trip/landing/landing.form.js.map | 1 + out-tsc/app/app/trip/landing/landing.model.js | 114 ++ .../app/app/trip/landing/landing.model.js.map | 1 + .../app/app/trip/landing/landing.module.js | 55 + .../app/trip/landing/landing.module.js.map | 1 + out-tsc/app/app/trip/landing/landing.page.js | 694 +++++++ .../app/app/trip/landing/landing.page.js.map | 1 + .../app/app/trip/landing/landing.service.js | 1178 ++++++++++++ .../app/trip/landing/landing.service.js.map | 1 + .../app/app/trip/landing/landing.validator.js | 78 + .../app/trip/landing/landing.validator.js.map | 1 + .../trip/landing/landings-routing.module.js | 40 + .../landing/landings-routing.module.js.map | 1 + out-tsc/app/app/trip/landing/landings.page.js | 790 ++++++++ .../app/app/trip/landing/landings.page.js.map | 1 + .../app/app/trip/landing/landings.table.js | 396 ++++ .../app/trip/landing/landings.table.js.map | 1 + .../report/base-landing-report.class.js | 143 ++ .../report/base-landing-report.class.js.map | 1 + .../report/landing-report-routing.module.js | 25 + .../landing-report-routing.module.js.map | 1 + .../app/trip/landing/report/landing.report.js | 43 + .../trip/landing/report/landing.report.js.map | 1 + .../landing/report/landing.report.module.js | 29 + .../report/landing.report.module.js.map | 1 + .../biological-sampling.validators.js | 39 + .../biological-sampling.validators.js.map | 1 + .../sampling-landing-report-routing.module.js | 25 + ...pling-landing-report-routing.module.js.map | 1 + .../report/sampling-landing.report.js | 75 + .../report/sampling-landing.report.js.map | 1 + .../report/sampling-landing.report.module.js | 29 + .../sampling-landing.report.module.js.map | 1 + .../sampling-landing-routing.module.js | 43 + .../sampling-landing-routing.module.js.map | 1 + .../sampling/sampling-landing.module.js | 41 + .../sampling/sampling-landing.module.js.map | 1 + .../landing/sampling/sampling-landing.page.js | 358 ++++ .../sampling/sampling-landing.page.js.map | 1 + .../app/trip/landing/select-landings.modal.js | 92 + .../trip/landing/select-landings.modal.js.map | 1 + .../form/observed-location-form.module.js | 27 + .../form/observed-location-form.module.js.map | 1 + .../form/observed-location.form.js | 282 +++ .../form/observed-location.form.js.map | 1 + .../observed-location-context.service.js | 29 + .../observed-location-context.service.js.map | 1 + .../observed-location-routing.module.js | 119 ++ .../observed-location-routing.module.js.map | 1 + .../observed-location.filter.js | 85 + .../observed-location.filter.js.map | 1 + .../observed-location.model.js | 67 + .../observed-location.model.js.map | 1 + .../observed-location.module.js | 53 + .../observed-location.module.js.map | 1 + .../observed-location.page.js | 601 ++++++ .../observed-location.page.js.map | 1 + .../observed-location.service.js | 1032 +++++++++++ .../observed-location.service.js.map | 1 + .../observed-location.validator.js | 83 + .../observed-location.validator.js.map | 1 + .../observed-location-offline.modal.js | 270 +++ .../observed-location-offline.modal.js.map | 1 + .../observed-location-offline.module.js | 23 + .../observed-location-offline.module.js.map | 1 + ...observed-location-report-routing.module.js | 27 + ...rved-location-report-routing.module.js.map | 1 + .../report/observed-location.report.js | 218 +++ .../report/observed-location.report.js.map | 1 + .../report/observed-location.report.module.js | 35 + .../observed-location.report.module.js.map | 1 + .../select-observed-locations.modal.js | 210 +++ .../select-observed-locations.modal.js.map | 1 + .../select-observed-locations.module.js | 32 + .../select-observed-locations.module.js.map | 1 + .../table/observed-location-table.module.js | 32 + .../observed-location-table.module.js.map | 1 + .../table/observed-locations.page.js | 422 +++++ .../table/observed-locations.page.js.map | 1 + .../vessels/select-vessel-for-data.modal.js | 293 +++ .../select-vessel-for-data.modal.js.map | 1 + .../icon/operation-icon.component.js | 174 ++ .../icon/operation-icon.component.js.map | 1 + .../operation/map/operations-map.modal.js | 70 + .../operation/map/operations-map.modal.js.map | 1 + .../app/trip/operation/map/operations.map.js | 436 +++++ .../trip/operation/map/operations.map.js.map | 1 + .../operation/operation-routing.module.js | 41 + .../operation/operation-routing.module.js.map | 1 + .../app/trip/operation/operation.filter.js | 148 ++ .../trip/operation/operation.filter.js.map | 1 + .../app/app/trip/operation/operation.form.js | 1156 ++++++++++++ .../app/trip/operation/operation.form.js.map | 1 + .../app/trip/operation/operation.module.js | 70 + .../trip/operation/operation.module.js.map | 1 + .../app/app/trip/operation/operation.page.js | 1433 +++++++++++++++ .../app/trip/operation/operation.page.js.map | 1 + .../app/trip/operation/operation.service.js | 1617 ++++++++++++++++ .../trip/operation/operation.service.js.map | 1 + .../app/trip/operation/operation.validator.js | 642 +++++++ .../trip/operation/operation.validator.js.map | 1 + .../app/trip/operation/operations.table.js | 424 +++++ .../trip/operation/operations.table.js.map | 1 + .../select-operation-by-trip.table.js | 299 +++ .../select-operation-by-trip.table.js.map | 1 + .../trip/operation/select-operation.modal.js | 105 ++ .../operation/select-operation.modal.js.map | 1 + .../selectivity-operation-routing.module.js | 41 + ...electivity-operation-routing.module.js.map | 1 + .../selectivity-operation.module.js | 52 + .../selectivity-operation.module.js.map | 1 + .../selectivity/selectivity-operation.page.js | 127 ++ .../selectivity-operation.page.js.map | 1 + .../operationgroup/operation-group.filter.js | 93 + .../operation-group.filter.js.map | 1 + .../operationgroup/operation-group.form.js | 110 ++ .../operation-group.form.js.map | 1 + .../operationgroup/operation-group.modal.js | 212 +++ .../operation-group.modal.js.map | 1 + .../operationgroup/operation-group.module.js | 37 + .../operation-group.module.js.map | 1 + .../operation-group.validator.js | 57 + .../operation-group.validator.js.map | 1 + .../operationgroup/operation-groups.table.js | 210 +++ .../operation-groups.table.js.map | 1 + .../packet/packet-composition.validator.js | 33 + .../packet-composition.validator.js.map | 1 + out-tsc/app/app/trip/packet/packet.form.js | 263 +++ .../app/app/trip/packet/packet.form.js.map | 1 + out-tsc/app/app/trip/packet/packet.modal.js | 151 ++ .../app/app/trip/packet/packet.modal.js.map | 1 + out-tsc/app/app/trip/packet/packet.model.js | 168 ++ .../app/app/trip/packet/packet.model.js.map | 1 + out-tsc/app/app/trip/packet/packet.module.js | 35 + .../app/app/trip/packet/packet.module.js.map | 1 + .../app/app/trip/packet/packet.validator.js | 99 + .../app/trip/packet/packet.validator.js.map | 1 + out-tsc/app/app/trip/packet/packets.table.js | 336 ++++ .../app/app/trip/packet/packets.table.js.map | 1 + .../trip/physicalgear/physical-gear.filter.js | 99 + .../physicalgear/physical-gear.filter.js.map | 1 + .../trip/physicalgear/physical-gear.form.js | 203 ++ .../physicalgear/physical-gear.form.js.map | 1 + .../trip/physicalgear/physical-gear.modal.js | 405 ++++ .../physicalgear/physical-gear.modal.js.map | 1 + .../trip/physicalgear/physical-gear.model.js | 176 ++ .../physicalgear/physical-gear.model.js.map | 1 + .../trip/physicalgear/physical-gear.module.js | 50 + .../physicalgear/physical-gear.module.js.map | 1 + .../trip/physicalgear/physical-gears.table.js | 394 ++++ .../physicalgear/physical-gears.table.js.map | 1 + .../trip/physicalgear/physicalgear.service.js | 526 ++++++ .../physicalgear/physicalgear.service.js.map | 1 + .../physicalgear/physicalgear.validator.js | 75 + .../physicalgear.validator.js.map | 1 + .../select-physical-gear.modal.js | 128 ++ .../select-physical-gear.modal.js.map | 1 + .../testing/physical-gears.test.js | 242 +++ .../testing/physical-gears.test.js.map | 1 + .../testing/physical-gears.utils.js | 48 + .../testing/physical-gears.utils.js.map | 1 + out-tsc/app/app/trip/product/product.form.js | 94 + .../app/app/trip/product/product.form.js.map | 1 + out-tsc/app/app/trip/product/product.modal.js | 229 +++ .../app/app/trip/product/product.modal.js.map | 1 + out-tsc/app/app/trip/product/product.model.js | 126 ++ .../app/app/trip/product/product.model.js.map | 1 + .../app/app/trip/product/product.module.js | 39 + .../app/trip/product/product.module.js.map | 1 + .../app/app/trip/product/product.validator.js | 123 ++ .../app/trip/product/product.validator.js.map | 1 + .../app/app/trip/product/products.table.js | 333 ++++ .../app/trip/product/products.table.js.map | 1 + .../app/app/trip/sale/expected-sale.form.js | 99 + .../app/trip/sale/expected-sale.form.js.map | 1 + .../app/app/trip/sale/expected-sale.model.js | 59 + .../app/trip/sale/expected-sale.model.js.map | 1 + out-tsc/app/app/trip/sale/packet-sale.form.js | 177 ++ .../app/app/trip/sale/packet-sale.form.js.map | 1 + .../app/app/trip/sale/packet-sale.modal.js | 113 ++ .../app/trip/sale/packet-sale.modal.js.map | 1 + .../app/app/trip/sale/product-sale.form.js | 190 ++ .../app/trip/sale/product-sale.form.js.map | 1 + .../app/app/trip/sale/product-sale.modal.js | 85 + .../app/trip/sale/product-sale.modal.js.map | 1 + .../app/app/trip/sale/sale-product.model.js | 310 ++++ .../app/trip/sale/sale-product.model.js.map | 1 + out-tsc/app/app/trip/sale/sale.form.js | 132 ++ out-tsc/app/app/trip/sale/sale.form.js.map | 1 + out-tsc/app/app/trip/sale/sale.model.js | 79 + out-tsc/app/app/trip/sale/sale.model.js.map | 1 + out-tsc/app/app/trip/sale/sale.module.js | 48 + out-tsc/app/app/trip/sale/sale.module.js.map | 1 + out-tsc/app/app/trip/sale/sale.validator.js | 76 + .../app/app/trip/sale/sale.validator.js.map | 1 + .../individual-monitoring.table.js | 67 + .../individual-monitoring.table.js.map | 1 + .../individual-releases.table.js | 29 + .../individual-releases.table.js.map | 1 + .../app/trip/sample/sample-tree.component.js | 481 +++++ .../trip/sample/sample-tree.component.js.map | 1 + out-tsc/app/app/trip/sample/sample.filter.js | 56 + .../app/app/trip/sample/sample.filter.js.map | 1 + out-tsc/app/app/trip/sample/sample.form.js | 204 ++ .../app/app/trip/sample/sample.form.js.map | 1 + out-tsc/app/app/trip/sample/sample.modal.js | 535 ++++++ .../app/app/trip/sample/sample.modal.js.map | 1 + out-tsc/app/app/trip/sample/sample.model.js | 301 +++ .../app/app/trip/sample/sample.model.js.map | 1 + out-tsc/app/app/trip/sample/sample.module.js | 66 + .../app/app/trip/sample/sample.module.js.map | 1 + .../app/app/trip/sample/sample.validator.js | 118 ++ .../app/trip/sample/sample.validator.js.map | 1 + out-tsc/app/app/trip/sample/samples.modal.js | 203 ++ .../app/app/trip/sample/samples.modal.js.map | 1 + out-tsc/app/app/trip/sample/samples.table.js | 1075 +++++++++++ .../app/app/trip/sample/samples.table.js.map | 1 + .../app/app/trip/sample/sub-sample.form.js | 237 +++ .../app/trip/sample/sub-sample.form.js.map | 1 + .../app/app/trip/sample/sub-sample.modal.js | 312 ++++ .../app/trip/sample/sub-sample.modal.js.map | 1 + .../app/trip/sample/sub-sample.validator.js | 42 + .../trip/sample/sub-sample.validator.js.map | 1 + .../app/app/trip/sample/sub-samples.table.js | 472 +++++ .../app/trip/sample/sub-samples.table.js.map | 1 + .../trip/sample/testing/sample-data.test.js | 78 + .../sample/testing/sample-data.test.js.map | 1 + .../trip/sample/testing/sample-tree.test.js | 269 +++ .../sample/testing/sample-tree.test.js.map | 1 + .../scientific-cruise-routing.module.js | 30 + .../scientific-cruise-routing.module.js.map | 1 + .../scientific-cruise.config.js | 25 + .../scientific-cruise.config.js.map | 1 + .../scientific-cruise.filter.js | 96 + .../scientific-cruise.filter.js.map | 1 + .../scientific-cruise.model.js | 51 + .../scientific-cruise.model.js.map | 1 + .../scientific-cruise.module.js | 41 + .../scientific-cruise.module.js.map | 1 + .../scientific-cruise.service.js | 95 + .../scientific-cruise.service.js.map | 1 + .../scientific-cruise.table.js | 409 +++++ .../scientific-cruise.table.js.map | 1 + out-tsc/app/app/trip/trip-context.service.js | 29 + .../app/app/trip/trip-context.service.js.map | 1 + out-tsc/app/app/trip/trip.config.js | 182 ++ out-tsc/app/app/trip/trip.config.js.map | 1 + out-tsc/app/app/trip/trip.errors.js | 7 + out-tsc/app/app/trip/trip.errors.js.map | 1 + out-tsc/app/app/trip/trip.testing.module.js | 95 + .../app/app/trip/trip.testing.module.js.map | 1 + .../trip/trip/offline/trip-offline.modal.js | 176 ++ .../trip/offline/trip-offline.modal.js.map | 1 + .../app/trip/trip/report/base-trip.report.js | 471 +++++ .../trip/trip/report/base-trip.report.js.map | 1 + .../selectivity-trip-report-routing.module.js | 25 + ...ectivity-trip-report-routing.module.js.map | 1 + .../selectivity-trip-report.model.js | 37 + .../selectivity-trip-report.model.js.map | 1 + .../selectivity-trip-report.module.js | 27 + .../selectivity-trip-report.module.js.map | 1 + .../selectivity-trip-report.service.js | 26 + .../selectivity-trip-report.service.js.map | 1 + .../selectivity/selectivity-trip.report.js | 440 +++++ .../selectivity-trip.report.js.map | 1 + .../trip/report/trip-report-routing.module.js | 29 + .../report/trip-report-routing.module.js.map | 1 + .../app/trip/trip/report/trip-report.model.js | 101 + .../trip/trip/report/trip-report.model.js.map | 1 + .../trip/trip/report/trip-report.module.js | 27 + .../trip/report/trip-report.module.js.map | 1 + .../trip/trip/report/trip-report.service.js | 82 + .../trip/report/trip-report.service.js.map | 1 + .../app/app/trip/trip/report/trip.report.js | 28 + .../app/trip/trip/report/trip.report.js.map | 1 + .../app/trip/trip/trash/trip-trash.modal.js | 236 +++ .../trip/trip/trash/trip-trash.modal.js.map | 1 + out-tsc/app/app/trip/trip/trip-ref.model.js | 29 + .../app/app/trip/trip/trip-ref.model.js.map | 1 + .../app/app/trip/trip/trip-routing.module.js | 82 + .../app/trip/trip/trip-routing.module.js.map | 1 + out-tsc/app/app/trip/trip/trip.filter.js | 149 ++ out-tsc/app/app/trip/trip/trip.filter.js.map | 1 + out-tsc/app/app/trip/trip/trip.form.js | 452 +++++ out-tsc/app/app/trip/trip/trip.form.js.map | 1 + out-tsc/app/app/trip/trip/trip.model.js | 643 +++++++ out-tsc/app/app/trip/trip/trip.model.js.map | 1 + out-tsc/app/app/trip/trip/trip.module.js | 58 + out-tsc/app/app/trip/trip/trip.module.js.map | 1 + out-tsc/app/app/trip/trip/trip.page.js | 885 +++++++++ out-tsc/app/app/trip/trip/trip.page.js.map | 1 + out-tsc/app/app/trip/trip/trip.service.js | 1635 +++++++++++++++++ out-tsc/app/app/trip/trip/trip.service.js.map | 1 + out-tsc/app/app/trip/trip/trip.validator.js | 156 ++ .../app/app/trip/trip/trip.validator.js.map | 1 + out-tsc/app/app/trip/trip/trips.table.js | 453 +++++ out-tsc/app/app/trip/trip/trips.table.js.map | 1 + out-tsc/app/app/vessel/form/form-vessel.js | 237 +++ .../app/app/vessel/form/form-vessel.js.map | 1 + out-tsc/app/app/vessel/list/vessels.page.js | 182 ++ .../app/app/vessel/list/vessels.page.js.map | 1 + out-tsc/app/app/vessel/list/vessels.table.js | 282 +++ .../app/app/vessel/list/vessels.table.js.map | 1 + .../app/vessel/modal/select-vessel.modal.js | 127 ++ .../vessel/modal/select-vessel.modal.js.map | 1 + out-tsc/app/app/vessel/modal/vessel-modal.js | 173 ++ .../app/app/vessel/modal/vessel-modal.js.map | 1 + .../page/vessel-features-history.component.js | 63 + .../vessel-features-history.component.js.map | 1 + .../vessel-registration-history.component.js | 52 + ...ssel-registration-history.component.js.map | 1 + out-tsc/app/app/vessel/page/vessel.page.js | 294 +++ .../app/app/vessel/page/vessel.page.js.map | 1 + .../vessel/services/config/vessel.config.js | 110 ++ .../services/config/vessel.config.js.map | 1 + out-tsc/app/app/vessel/services/errors.js | 5 + out-tsc/app/app/vessel/services/errors.js.map | 1 + .../vessel/services/filter/vessel.filter.js | 131 ++ .../services/filter/vessel.filter.js.map | 1 + .../app/vessel/services/model/vessel.model.js | 172 ++ .../vessel/services/model/vessel.model.js.map | 1 + .../validator/vessel-features.validator.js | 77 + .../vessel-features.validator.js.map | 1 + .../vessel-registration.validator.js | 55 + .../vessel-registration.validator.js.map | 1 + .../services/validator/vessel.validator.js | 54 + .../validator/vessel.validator.js.map | 1 + .../services/vessel-features.service.js | 72 + .../services/vessel-features.service.js.map | 1 + .../services/vessel-registration.service.js | 51 + .../vessel-registration.service.js.map | 1 + .../app/app/vessel/services/vessel-service.js | 625 +++++++ .../app/vessel/services/vessel-service.js.map | 1 + .../status/vessel-status-to-color.pipe.js | 15 + .../status/vessel-status-to-color.pipe.js.map | 1 + .../app/app/vessel/vessel-routing.module.js | 38 + .../app/vessel/vessel-routing.module.js.map | 1 + out-tsc/app/app/vessel/vessel.module.js | 64 + out-tsc/app/app/vessel/vessel.module.js.map | 1 + out-tsc/app/environments/environment.class.js | 7 + .../app/environments/environment.class.js.map | 1 + out-tsc/app/environments/environment.js | 130 ++ out-tsc/app/environments/environment.js.map | 1 + out-tsc/app/main.js | 11 + out-tsc/app/main.js.map | 1 + out-tsc/app/polyfills.js | 64 + out-tsc/app/polyfills.js.map | 1 + out-tsc/app/tsconfig.app.tsbuildinfo | 1 + out-tsc/app/zone-flags.js | 21 + out-tsc/app/zone-flags.js.map | 1 + package.json | 2 +- scripts/release.sh | 6 +- src/assets/img/logo/logo-obsmer-square.png | Bin 0 -> 116987 bytes src/assets/img/logo/logo-obsmer.png | Bin 0 -> 238680 bytes src/assets/manifest.json | 2 +- 1177 files changed, 104120 insertions(+), 8 deletions(-) create mode 100644 out-tsc/app/app/admin/admin-routing.module.js create mode 100644 out-tsc/app/app/admin/admin-routing.module.js.map create mode 100644 out-tsc/app/app/admin/admin.module.js create mode 100644 out-tsc/app/app/admin/admin.module.js.map create mode 100644 out-tsc/app/app/admin/config/configuration.module.js create mode 100644 out-tsc/app/app/admin/config/configuration.module.js.map create mode 100644 out-tsc/app/app/admin/config/configuration.page.js create mode 100644 out-tsc/app/app/admin/config/configuration.page.js.map create mode 100644 out-tsc/app/app/admin/config/configuration.service.js create mode 100644 out-tsc/app/app/admin/config/configuration.service.js.map create mode 100644 out-tsc/app/app/admin/job/job-list.component.js create mode 100644 out-tsc/app/app/admin/job/job-list.component.js.map create mode 100644 out-tsc/app/app/admin/job/job-list.module.js create mode 100644 out-tsc/app/app/admin/job/job-list.module.js.map create mode 100644 out-tsc/app/app/app-routing.module.js create mode 100644 out-tsc/app/app/app-routing.module.js.map create mode 100644 out-tsc/app/app/app.component.js create mode 100644 out-tsc/app/app/app.component.js.map create mode 100644 out-tsc/app/app/app.module.js create mode 100644 out-tsc/app/app/app.module.js.map create mode 100644 out-tsc/app/app/core/core.module.js create mode 100644 out-tsc/app/app/core/core.module.js.map create mode 100644 out-tsc/app/app/core/pipes/core.pipe.js create mode 100644 out-tsc/app/app/core/pipes/core.pipe.js.map create mode 100644 out-tsc/app/app/core/services/config/core.config.js create mode 100644 out-tsc/app/app/core/services/config/core.config.js.map create mode 100644 out-tsc/app/app/core/services/errors.js create mode 100644 out-tsc/app/app/core/services/errors.js.map create mode 100644 out-tsc/app/app/core/services/model/referential.utils.js create mode 100644 out-tsc/app/app/core/services/model/referential.utils.js.map create mode 100644 out-tsc/app/app/core/services/trash-remote.service.js create mode 100644 out-tsc/app/app/core/services/trash-remote.service.js.map create mode 100644 out-tsc/app/app/data/data.config.js create mode 100644 out-tsc/app/app/data/data.config.js.map create mode 100644 out-tsc/app/app/data/data.module.js create mode 100644 out-tsc/app/app/data/data.module.js.map create mode 100644 out-tsc/app/app/data/data.testing.module.js create mode 100644 out-tsc/app/app/data/data.testing.module.js.map create mode 100644 out-tsc/app/app/data/fishing-area/fishing-area.form.js create mode 100644 out-tsc/app/app/data/fishing-area/fishing-area.form.js.map create mode 100644 out-tsc/app/app/data/fishing-area/fishing-area.model.js create mode 100644 out-tsc/app/app/data/fishing-area/fishing-area.model.js.map create mode 100644 out-tsc/app/app/data/fishing-area/fishing-area.module.js create mode 100644 out-tsc/app/app/data/fishing-area/fishing-area.module.js.map create mode 100644 out-tsc/app/app/data/fishing-area/fishing-area.validator.js create mode 100644 out-tsc/app/app/data/fishing-area/fishing-area.validator.js.map create mode 100644 out-tsc/app/app/data/form/data-editor.class.js create mode 100644 out-tsc/app/app/data/form/data-editor.class.js.map create mode 100644 out-tsc/app/app/data/form/data-editor.utils.js create mode 100644 out-tsc/app/app/data/form/data-editor.utils.js.map create mode 100644 out-tsc/app/app/data/form/root-data-editor.class.js create mode 100644 out-tsc/app/app/data/form/root-data-editor.class.js.map create mode 100644 out-tsc/app/app/data/image/image-attachment-gallery.component.js create mode 100644 out-tsc/app/app/data/image/image-attachment-gallery.component.js.map create mode 100644 out-tsc/app/app/data/image/image-attachment.modal.js create mode 100644 out-tsc/app/app/data/image/image-attachment.modal.js.map create mode 100644 out-tsc/app/app/data/image/image-attachment.model.js create mode 100644 out-tsc/app/app/data/image/image-attachment.model.js.map create mode 100644 out-tsc/app/app/data/image/image-attachment.module.js create mode 100644 out-tsc/app/app/data/image/image-attachment.module.js.map create mode 100644 out-tsc/app/app/data/image/image-attachment.service.js create mode 100644 out-tsc/app/app/data/image/image-attachment.service.js.map create mode 100644 out-tsc/app/app/data/image/image-attachment.validator.js create mode 100644 out-tsc/app/app/data/image/image-attachment.validator.js.map create mode 100644 out-tsc/app/app/data/image/testing/image-attachment.test.js create mode 100644 out-tsc/app/app/data/image/testing/image-attachment.test.js.map create mode 100644 out-tsc/app/app/data/image/testing/image-attachment.testing.module.js create mode 100644 out-tsc/app/app/data/image/testing/image-attachment.testing.module.js.map create mode 100644 out-tsc/app/app/data/measurement/measurement-values.form.class.js create mode 100644 out-tsc/app/app/data/measurement/measurement-values.form.class.js.map create mode 100644 out-tsc/app/app/data/measurement/measurement.model.js create mode 100644 out-tsc/app/app/data/measurement/measurement.model.js.map create mode 100644 out-tsc/app/app/data/measurement/measurement.module.js create mode 100644 out-tsc/app/app/data/measurement/measurement.module.js.map create mode 100644 out-tsc/app/app/data/measurement/measurement.validator.js create mode 100644 out-tsc/app/app/data/measurement/measurement.validator.js.map create mode 100644 out-tsc/app/app/data/measurement/measurements-table.class.js create mode 100644 out-tsc/app/app/data/measurement/measurements-table.class.js.map create mode 100644 out-tsc/app/app/data/measurement/measurements-table.service.js create mode 100644 out-tsc/app/app/data/measurement/measurements-table.service.js.map create mode 100644 out-tsc/app/app/data/measurement/measurements-table.validator.js create mode 100644 out-tsc/app/app/data/measurement/measurements-table.validator.js.map create mode 100644 out-tsc/app/app/data/measurement/measurements.form.component.js create mode 100644 out-tsc/app/app/data/measurement/measurements.form.component.js.map create mode 100644 out-tsc/app/app/data/measurement/measurements.pipe.js create mode 100644 out-tsc/app/app/data/measurement/measurements.pipe.js.map create mode 100644 out-tsc/app/app/data/pipes/data-entity.pipes.js create mode 100644 out-tsc/app/app/data/pipes/data-entity.pipes.js.map create mode 100644 out-tsc/app/app/data/pipes/pipes.module.js create mode 100644 out-tsc/app/app/data/pipes/pipes.module.js.map create mode 100644 out-tsc/app/app/data/position/device/device-position.config.js create mode 100644 out-tsc/app/app/data/position/device/device-position.config.js.map create mode 100644 out-tsc/app/app/data/position/device/device-position.model.js create mode 100644 out-tsc/app/app/data/position/device/device-position.model.js.map create mode 100644 out-tsc/app/app/data/position/device/device-position.service.js create mode 100644 out-tsc/app/app/data/position/device/device-position.service.js.map create mode 100644 out-tsc/app/app/data/position/position.model.js create mode 100644 out-tsc/app/app/data/position/position.model.js.map create mode 100644 out-tsc/app/app/data/position/position.utils.js create mode 100644 out-tsc/app/app/data/position/position.utils.js.map create mode 100644 out-tsc/app/app/data/position/position.validator.js create mode 100644 out-tsc/app/app/data/position/position.validator.js.map create mode 100644 out-tsc/app/app/data/position/vessel/vessel-position.model.js create mode 100644 out-tsc/app/app/data/position/vessel/vessel-position.model.js.map create mode 100644 out-tsc/app/app/data/quality/entity-quality-form.component.js create mode 100644 out-tsc/app/app/data/quality/entity-quality-form.component.js.map create mode 100644 out-tsc/app/app/data/quality/entity-quality-icon.component.js create mode 100644 out-tsc/app/app/data/quality/entity-quality-icon.component.js.map create mode 100644 out-tsc/app/app/data/quality/entity-quality.module.js create mode 100644 out-tsc/app/app/data/quality/entity-quality.module.js.map create mode 100644 out-tsc/app/app/data/quality/quality-flag-invalid.pipe.js create mode 100644 out-tsc/app/app/data/quality/quality-flag-invalid.pipe.js.map create mode 100644 out-tsc/app/app/data/quality/quality-flag-not-invalid.pipe.js create mode 100644 out-tsc/app/app/data/quality/quality-flag-not-invalid.pipe.js.map create mode 100644 out-tsc/app/app/data/quality/quality-flag-to-color.pipe.js create mode 100644 out-tsc/app/app/data/quality/quality-flag-to-color.pipe.js.map create mode 100644 out-tsc/app/app/data/quality/quality-flag-to-i18n.pipe.js create mode 100644 out-tsc/app/app/data/quality/quality-flag-to-i18n.pipe.js.map create mode 100644 out-tsc/app/app/data/quality/quality-flag-to-icon.pipe.js create mode 100644 out-tsc/app/app/data/quality/quality-flag-to-icon.pipe.js.map create mode 100644 out-tsc/app/app/data/report/base-report.class.js create mode 100644 out-tsc/app/app/data/report/base-report.class.js.map create mode 100644 out-tsc/app/app/data/report/data-entity-report.class.js create mode 100644 out-tsc/app/app/data/report/data-entity-report.class.js.map create mode 100644 out-tsc/app/app/data/report/extraction-report.class.js create mode 100644 out-tsc/app/app/data/report/extraction-report.class.js.map create mode 100644 out-tsc/app/app/data/services/data-quality-service.class.js create mode 100644 out-tsc/app/app/data/services/data-quality-service.class.js.map create mode 100644 out-tsc/app/app/data/services/errors.js create mode 100644 out-tsc/app/app/data/services/errors.js.map create mode 100644 out-tsc/app/app/data/services/model/data-context.model.js create mode 100644 out-tsc/app/app/data/services/model/data-context.model.js.map create mode 100644 out-tsc/app/app/data/services/model/data-entity.model.js create mode 100644 out-tsc/app/app/data/services/model/data-entity.model.js.map create mode 100644 out-tsc/app/app/data/services/model/data-filter.model.js create mode 100644 out-tsc/app/app/data/services/model/data-filter.model.js.map create mode 100644 out-tsc/app/app/data/services/model/model.utils.js create mode 100644 out-tsc/app/app/data/services/model/model.utils.js.map create mode 100644 out-tsc/app/app/data/services/model/root-data-entity.model.js create mode 100644 out-tsc/app/app/data/services/model/root-data-entity.model.js.map create mode 100644 out-tsc/app/app/data/services/model/root-data-filter.model.js create mode 100644 out-tsc/app/app/data/services/model/root-data-filter.model.js.map create mode 100644 out-tsc/app/app/data/services/model/root-vessel-entity.model.js create mode 100644 out-tsc/app/app/data/services/model/root-vessel-entity.model.js.map create mode 100644 out-tsc/app/app/data/services/root-data-service.class.js create mode 100644 out-tsc/app/app/data/services/root-data-service.class.js.map create mode 100644 out-tsc/app/app/data/services/root-data-synchro-service.class.js create mode 100644 out-tsc/app/app/data/services/root-data-synchro-service.class.js.map create mode 100644 out-tsc/app/app/data/services/validator/data-entity.validator.js create mode 100644 out-tsc/app/app/data/services/validator/data-entity.validator.js.map create mode 100644 out-tsc/app/app/data/services/validator/data.validators.js create mode 100644 out-tsc/app/app/data/services/validator/data.validators.js.map create mode 100644 out-tsc/app/app/data/services/validator/root-data-entity.validator.js create mode 100644 out-tsc/app/app/data/services/validator/root-data-entity.validator.js.map create mode 100644 out-tsc/app/app/data/services/validator/root-vessel-entity.validator.js create mode 100644 out-tsc/app/app/data/services/validator/root-vessel-entity.validator.js.map create mode 100644 out-tsc/app/app/data/strategy/strategy-summary-card.component.js create mode 100644 out-tsc/app/app/data/strategy/strategy-summary-card.component.js.map create mode 100644 out-tsc/app/app/data/table/data-modal.class.js create mode 100644 out-tsc/app/app/data/table/data-modal.class.js.map create mode 100644 out-tsc/app/app/data/table/root-table.class.js create mode 100644 out-tsc/app/app/data/table/root-table.class.js.map create mode 100644 out-tsc/app/app/extraction/button/extraction-button.component.js create mode 100644 out-tsc/app/app/extraction/button/extraction-button.component.js.map create mode 100644 out-tsc/app/app/extraction/button/extraction-button.module.js create mode 100644 out-tsc/app/app/extraction/button/extraction-button.module.js.map create mode 100644 out-tsc/app/app/extraction/common/extraction-abstract.page.js create mode 100644 out-tsc/app/app/extraction/common/extraction-abstract.page.js.map create mode 100644 out-tsc/app/app/extraction/common/extraction.config.js create mode 100644 out-tsc/app/app/extraction/common/extraction.config.js.map create mode 100644 out-tsc/app/app/extraction/common/extraction.errors.js create mode 100644 out-tsc/app/app/extraction/common/extraction.errors.js.map create mode 100644 out-tsc/app/app/extraction/common/extraction.service.js create mode 100644 out-tsc/app/app/extraction/common/extraction.service.js.map create mode 100644 out-tsc/app/app/extraction/common/extraction.utils.js create mode 100644 out-tsc/app/app/extraction/common/extraction.utils.js.map create mode 100644 out-tsc/app/app/extraction/criteria/extraction-criteria.form.js create mode 100644 out-tsc/app/app/extraction/criteria/extraction-criteria.form.js.map create mode 100644 out-tsc/app/app/extraction/criteria/extraction-criterion.validator.js create mode 100644 out-tsc/app/app/extraction/criteria/extraction-criterion.validator.js.map create mode 100644 out-tsc/app/app/extraction/extraction-routing.module.js create mode 100644 out-tsc/app/app/extraction/extraction-routing.module.js.map create mode 100644 out-tsc/app/app/extraction/extraction.module.js create mode 100644 out-tsc/app/app/extraction/extraction.module.js.map create mode 100644 out-tsc/app/app/extraction/help/help.modal.js create mode 100644 out-tsc/app/app/extraction/help/help.modal.js.map create mode 100644 out-tsc/app/app/extraction/map/extraction-map.page.js create mode 100644 out-tsc/app/app/extraction/map/extraction-map.page.js.map create mode 100644 out-tsc/app/app/extraction/position/device-position-map-page.component.js create mode 100644 out-tsc/app/app/extraction/position/device-position-map-page.component.js.map create mode 100644 out-tsc/app/app/extraction/position/device-position-routing.module.js create mode 100644 out-tsc/app/app/extraction/position/device-position-routing.module.js.map create mode 100644 out-tsc/app/app/extraction/position/device-position.module.js create mode 100644 out-tsc/app/app/extraction/position/device-position.module.js.map create mode 100644 out-tsc/app/app/extraction/product/product.form.js create mode 100644 out-tsc/app/app/extraction/product/product.form.js.map create mode 100644 out-tsc/app/app/extraction/product/product.model.js create mode 100644 out-tsc/app/app/extraction/product/product.model.js.map create mode 100644 out-tsc/app/app/extraction/product/product.page.js create mode 100644 out-tsc/app/app/extraction/product/product.page.js.map create mode 100644 out-tsc/app/app/extraction/product/product.service.js create mode 100644 out-tsc/app/app/extraction/product/product.service.js.map create mode 100644 out-tsc/app/app/extraction/product/product.validator.js create mode 100644 out-tsc/app/app/extraction/product/product.validator.js.map create mode 100644 out-tsc/app/app/extraction/strata/strata.model.js create mode 100644 out-tsc/app/app/extraction/strata/strata.model.js.map create mode 100644 out-tsc/app/app/extraction/strata/strata.validator.js create mode 100644 out-tsc/app/app/extraction/strata/strata.validator.js.map create mode 100644 out-tsc/app/app/extraction/table/extraction-table.page.js create mode 100644 out-tsc/app/app/extraction/table/extraction-table.page.js.map create mode 100644 out-tsc/app/app/extraction/type/extraction-type.filter.js create mode 100644 out-tsc/app/app/extraction/type/extraction-type.filter.js.map create mode 100644 out-tsc/app/app/extraction/type/extraction-type.model.js create mode 100644 out-tsc/app/app/extraction/type/extraction-type.model.js.map create mode 100644 out-tsc/app/app/extraction/type/extraction-type.service.js create mode 100644 out-tsc/app/app/extraction/type/extraction-type.service.js.map create mode 100644 out-tsc/app/app/extraction/type/select-extraction-type.modal.js create mode 100644 out-tsc/app/app/extraction/type/select-extraction-type.modal.js.map create mode 100644 out-tsc/app/app/referential/form/referential-editor.class.js create mode 100644 out-tsc/app/app/referential/form/referential-editor.class.js.map create mode 100644 out-tsc/app/app/referential/form/referential-form.module.js create mode 100644 out-tsc/app/app/referential/form/referential-form.module.js.map create mode 100644 out-tsc/app/app/referential/form/referential.form.js create mode 100644 out-tsc/app/app/referential/form/referential.form.js.map create mode 100644 out-tsc/app/app/referential/location/location.utils.js create mode 100644 out-tsc/app/app/referential/location/location.utils.js.map create mode 100644 out-tsc/app/app/referential/metier/metier-routing.module.js create mode 100644 out-tsc/app/app/referential/metier/metier-routing.module.js.map create mode 100644 out-tsc/app/app/referential/metier/metier.model.js create mode 100644 out-tsc/app/app/referential/metier/metier.model.js.map create mode 100644 out-tsc/app/app/referential/metier/metier.module.js create mode 100644 out-tsc/app/app/referential/metier/metier.module.js.map create mode 100644 out-tsc/app/app/referential/metier/metier.page.js create mode 100644 out-tsc/app/app/referential/metier/metier.page.js.map create mode 100644 out-tsc/app/app/referential/metier/metier.service.js create mode 100644 out-tsc/app/app/referential/metier/metier.service.js.map create mode 100644 out-tsc/app/app/referential/metier/metier.validator.js create mode 100644 out-tsc/app/app/referential/metier/metier.validator.js.map create mode 100644 out-tsc/app/app/referential/pipes/pmfms.pipe.js create mode 100644 out-tsc/app/app/referential/pipes/pmfms.pipe.js.map create mode 100644 out-tsc/app/app/referential/pipes/referential-pipes.module.js create mode 100644 out-tsc/app/app/referential/pipes/referential-pipes.module.js.map create mode 100644 out-tsc/app/app/referential/pipes/referential-to-string.pipe.js create mode 100644 out-tsc/app/app/referential/pipes/referential-to-string.pipe.js.map create mode 100644 out-tsc/app/app/referential/pipes/weights.pipe.js create mode 100644 out-tsc/app/app/referential/pipes/weights.pipe.js.map create mode 100644 out-tsc/app/app/referential/pmfm/field/pmfm-qv.form-field.component.js create mode 100644 out-tsc/app/app/referential/pmfm/field/pmfm-qv.form-field.component.js.map create mode 100644 out-tsc/app/app/referential/pmfm/field/pmfm.form-field.component.js create mode 100644 out-tsc/app/app/referential/pmfm/field/pmfm.form-field.component.js.map create mode 100644 out-tsc/app/app/referential/pmfm/field/pmfm.form-field.module.js create mode 100644 out-tsc/app/app/referential/pmfm/field/pmfm.form-field.module.js.map create mode 100644 out-tsc/app/app/referential/pmfm/method/method-routing.module.js create mode 100644 out-tsc/app/app/referential/pmfm/method/method-routing.module.js.map create mode 100644 out-tsc/app/app/referential/pmfm/method/method.model.js create mode 100644 out-tsc/app/app/referential/pmfm/method/method.model.js.map create mode 100644 out-tsc/app/app/referential/pmfm/method/method.module.js create mode 100644 out-tsc/app/app/referential/pmfm/method/method.module.js.map create mode 100644 out-tsc/app/app/referential/pmfm/method/method.page.js create mode 100644 out-tsc/app/app/referential/pmfm/method/method.page.js.map create mode 100644 out-tsc/app/app/referential/pmfm/method/method.service.js create mode 100644 out-tsc/app/app/referential/pmfm/method/method.service.js.map create mode 100644 out-tsc/app/app/referential/pmfm/method/method.validator.js create mode 100644 out-tsc/app/app/referential/pmfm/method/method.validator.js.map create mode 100644 out-tsc/app/app/referential/pmfm/parameter/parameter-routing.module.js create mode 100644 out-tsc/app/app/referential/pmfm/parameter/parameter-routing.module.js.map create mode 100644 out-tsc/app/app/referential/pmfm/parameter/parameter.module.js create mode 100644 out-tsc/app/app/referential/pmfm/parameter/parameter.module.js.map create mode 100644 out-tsc/app/app/referential/pmfm/parameter/parameter.page.js create mode 100644 out-tsc/app/app/referential/pmfm/parameter/parameter.page.js.map create mode 100644 out-tsc/app/app/referential/pmfm/pmfm-routing.module.js create mode 100644 out-tsc/app/app/referential/pmfm/pmfm-routing.module.js.map create mode 100644 out-tsc/app/app/referential/pmfm/pmfm.module.js create mode 100644 out-tsc/app/app/referential/pmfm/pmfm.module.js.map create mode 100644 out-tsc/app/app/referential/pmfm/pmfm.page.js create mode 100644 out-tsc/app/app/referential/pmfm/pmfm.page.js.map create mode 100644 out-tsc/app/app/referential/pmfm/table/pmfms.table.js create mode 100644 out-tsc/app/app/referential/pmfm/table/pmfms.table.js.map create mode 100644 out-tsc/app/app/referential/pmfm/table/select-pmfm.modal.js create mode 100644 out-tsc/app/app/referential/pmfm/table/select-pmfm.modal.js.map create mode 100644 out-tsc/app/app/referential/pmfm/table/select-pmfm.module.js create mode 100644 out-tsc/app/app/referential/pmfm/table/select-pmfm.module.js.map create mode 100644 out-tsc/app/app/referential/program/privilege/person-privileges.table.js create mode 100644 out-tsc/app/app/referential/program/privilege/person-privileges.table.js.map create mode 100644 out-tsc/app/app/referential/program/privilege/program-person.validator.js create mode 100644 out-tsc/app/app/referential/program/privilege/program-person.validator.js.map create mode 100644 out-tsc/app/app/referential/program/program.module.js create mode 100644 out-tsc/app/app/referential/program/program.module.js.map create mode 100644 out-tsc/app/app/referential/program/program.page.js create mode 100644 out-tsc/app/app/referential/program/program.page.js.map create mode 100644 out-tsc/app/app/referential/program/programs.page.js create mode 100644 out-tsc/app/app/referential/program/programs.page.js.map create mode 100644 out-tsc/app/app/referential/program/select-program.modal.js create mode 100644 out-tsc/app/app/referential/program/select-program.modal.js.map create mode 100644 out-tsc/app/app/referential/referential-routing.module.js create mode 100644 out-tsc/app/app/referential/referential-routing.module.js.map create mode 100644 out-tsc/app/app/referential/referential.module.js create mode 100644 out-tsc/app/app/referential/referential.module.js.map create mode 100644 out-tsc/app/app/referential/referential.testing.module.js create mode 100644 out-tsc/app/app/referential/referential.testing.module.js.map create mode 100644 out-tsc/app/app/referential/referential.utils.js create mode 100644 out-tsc/app/app/referential/referential.utils.js.map create mode 100644 out-tsc/app/app/referential/services/base-referential-ref-service.class.js create mode 100644 out-tsc/app/app/referential/services/base-referential-ref-service.class.js.map create mode 100644 out-tsc/app/app/referential/services/base-referential-service.class.js create mode 100644 out-tsc/app/app/referential/services/base-referential-service.class.js.map create mode 100644 out-tsc/app/app/referential/services/config/program.config.js create mode 100644 out-tsc/app/app/referential/services/config/program.config.js.map create mode 100644 out-tsc/app/app/referential/services/config/referential.config.js create mode 100644 out-tsc/app/app/referential/services/config/referential.config.js.map create mode 100644 out-tsc/app/app/referential/services/errors.js create mode 100644 out-tsc/app/app/referential/services/errors.js.map create mode 100644 out-tsc/app/app/referential/services/filter/metier.filter.js create mode 100644 out-tsc/app/app/referential/services/filter/metier.filter.js.map create mode 100644 out-tsc/app/app/referential/services/filter/pmfm-strategy.filter.js create mode 100644 out-tsc/app/app/referential/services/filter/pmfm-strategy.filter.js.map create mode 100644 out-tsc/app/app/referential/services/filter/pmfm.filter.js create mode 100644 out-tsc/app/app/referential/services/filter/pmfm.filter.js.map create mode 100644 out-tsc/app/app/referential/services/filter/program.filter.js create mode 100644 out-tsc/app/app/referential/services/filter/program.filter.js.map create mode 100644 out-tsc/app/app/referential/services/filter/referential-ref.filter.js create mode 100644 out-tsc/app/app/referential/services/filter/referential-ref.filter.js.map create mode 100644 out-tsc/app/app/referential/services/filter/referential.filter.js create mode 100644 out-tsc/app/app/referential/services/filter/referential.filter.js.map create mode 100644 out-tsc/app/app/referential/services/filter/strategy.filter.js create mode 100644 out-tsc/app/app/referential/services/filter/strategy.filter.js.map create mode 100644 out-tsc/app/app/referential/services/filter/taxon-name-ref.filter.js create mode 100644 out-tsc/app/app/referential/services/filter/taxon-name-ref.filter.js.map create mode 100644 out-tsc/app/app/referential/services/filter/taxon-name.filter.js create mode 100644 out-tsc/app/app/referential/services/filter/taxon-name.filter.js.map create mode 100644 out-tsc/app/app/referential/services/filter/vessel.filter.js create mode 100644 out-tsc/app/app/referential/services/filter/vessel.filter.js.map create mode 100644 out-tsc/app/app/referential/services/filter/weight-length-conversion.filter.js create mode 100644 out-tsc/app/app/referential/services/filter/weight-length-conversion.filter.js.map create mode 100644 out-tsc/app/app/referential/services/metier.service.js create mode 100644 out-tsc/app/app/referential/services/metier.service.js.map create mode 100644 out-tsc/app/app/referential/services/model/model.enum.js create mode 100644 out-tsc/app/app/referential/services/model/model.enum.js.map create mode 100644 out-tsc/app/app/referential/services/model/model.utils.js create mode 100644 out-tsc/app/app/referential/services/model/model.utils.js.map create mode 100644 out-tsc/app/app/referential/services/model/parameter.model.js create mode 100644 out-tsc/app/app/referential/services/model/parameter.model.js.map create mode 100644 out-tsc/app/app/referential/services/model/pmfm-strategy.model.js create mode 100644 out-tsc/app/app/referential/services/model/pmfm-strategy.model.js.map create mode 100644 out-tsc/app/app/referential/services/model/pmfm-value.model.js create mode 100644 out-tsc/app/app/referential/services/model/pmfm-value.model.js.map create mode 100644 out-tsc/app/app/referential/services/model/pmfm.model.js create mode 100644 out-tsc/app/app/referential/services/model/pmfm.model.js.map create mode 100644 out-tsc/app/app/referential/services/model/program.model.js create mode 100644 out-tsc/app/app/referential/services/model/program.model.js.map create mode 100644 out-tsc/app/app/referential/services/model/referential.model.js create mode 100644 out-tsc/app/app/referential/services/model/referential.model.js.map create mode 100644 out-tsc/app/app/referential/services/model/rule.model.js create mode 100644 out-tsc/app/app/referential/services/model/rule.model.js.map create mode 100644 out-tsc/app/app/referential/services/model/sampling-strategy.model.js create mode 100644 out-tsc/app/app/referential/services/model/sampling-strategy.model.js.map create mode 100644 out-tsc/app/app/referential/services/model/strategy.model.js create mode 100644 out-tsc/app/app/referential/services/model/strategy.model.js.map create mode 100644 out-tsc/app/app/referential/services/model/taxon-group.model.js create mode 100644 out-tsc/app/app/referential/services/model/taxon-group.model.js.map create mode 100644 out-tsc/app/app/referential/services/model/taxon-name.model.js create mode 100644 out-tsc/app/app/referential/services/model/taxon-name.model.js.map create mode 100644 out-tsc/app/app/referential/services/model/vessel-snapshot.model.js create mode 100644 out-tsc/app/app/referential/services/model/vessel-snapshot.model.js.map create mode 100644 out-tsc/app/app/referential/services/parameter.service.js create mode 100644 out-tsc/app/app/referential/services/parameter.service.js.map create mode 100644 out-tsc/app/app/referential/services/pmfm.service.js create mode 100644 out-tsc/app/app/referential/services/pmfm.service.js.map create mode 100644 out-tsc/app/app/referential/services/program-ref.service.js create mode 100644 out-tsc/app/app/referential/services/program-ref.service.js.map create mode 100644 out-tsc/app/app/referential/services/program.fragments.js create mode 100644 out-tsc/app/app/referential/services/program.fragments.js.map create mode 100644 out-tsc/app/app/referential/services/program.service.js create mode 100644 out-tsc/app/app/referential/services/program.service.js.map create mode 100644 out-tsc/app/app/referential/services/referential-ref.service.js create mode 100644 out-tsc/app/app/referential/services/referential-ref.service.js.map create mode 100644 out-tsc/app/app/referential/services/referential.fragments.js create mode 100644 out-tsc/app/app/referential/services/referential.fragments.js.map create mode 100644 out-tsc/app/app/referential/services/referential.service.js create mode 100644 out-tsc/app/app/referential/services/referential.service.js.map create mode 100644 out-tsc/app/app/referential/services/sampling-strategy.service.js create mode 100644 out-tsc/app/app/referential/services/sampling-strategy.service.js.map create mode 100644 out-tsc/app/app/referential/services/software.service.js create mode 100644 out-tsc/app/app/referential/services/software.service.js.map create mode 100644 out-tsc/app/app/referential/services/strategy-ref.service.js create mode 100644 out-tsc/app/app/referential/services/strategy-ref.service.js.map create mode 100644 out-tsc/app/app/referential/services/strategy.fragments.js create mode 100644 out-tsc/app/app/referential/services/strategy.fragments.js.map create mode 100644 out-tsc/app/app/referential/services/strategy.service.js create mode 100644 out-tsc/app/app/referential/services/strategy.service.js.map create mode 100644 out-tsc/app/app/referential/services/taxon-group-ref.service.js create mode 100644 out-tsc/app/app/referential/services/taxon-group-ref.service.js.map create mode 100644 out-tsc/app/app/referential/services/taxon-name-ref.service.js create mode 100644 out-tsc/app/app/referential/services/taxon-name-ref.service.js.map create mode 100644 out-tsc/app/app/referential/services/taxon-name.service.js create mode 100644 out-tsc/app/app/referential/services/taxon-name.service.js.map create mode 100644 out-tsc/app/app/referential/services/validator/parameter.validator.js create mode 100644 out-tsc/app/app/referential/services/validator/parameter.validator.js.map create mode 100644 out-tsc/app/app/referential/services/validator/pmfm-strategy.validator.js create mode 100644 out-tsc/app/app/referential/services/validator/pmfm-strategy.validator.js.map create mode 100644 out-tsc/app/app/referential/services/validator/pmfm.validator.js create mode 100644 out-tsc/app/app/referential/services/validator/pmfm.validator.js.map create mode 100644 out-tsc/app/app/referential/services/validator/pmfm.validators.js create mode 100644 out-tsc/app/app/referential/services/validator/pmfm.validators.js.map create mode 100644 out-tsc/app/app/referential/services/validator/program.validator.js create mode 100644 out-tsc/app/app/referential/services/validator/program.validator.js.map create mode 100644 out-tsc/app/app/referential/services/validator/referential.validator.js create mode 100644 out-tsc/app/app/referential/services/validator/referential.validator.js.map create mode 100644 out-tsc/app/app/referential/services/validator/software.validator.js create mode 100644 out-tsc/app/app/referential/services/validator/software.validator.js.map create mode 100644 out-tsc/app/app/referential/services/validator/strategy.validator.js create mode 100644 out-tsc/app/app/referential/services/validator/strategy.validator.js.map create mode 100644 out-tsc/app/app/referential/services/validator/taxon-name.validator.js create mode 100644 out-tsc/app/app/referential/services/validator/taxon-name.validator.js.map create mode 100644 out-tsc/app/app/referential/services/vessel-snapshot.service.js create mode 100644 out-tsc/app/app/referential/services/vessel-snapshot.service.js.map create mode 100644 out-tsc/app/app/referential/software/abstract-software.page.js create mode 100644 out-tsc/app/app/referential/software/abstract-software.page.js.map create mode 100644 out-tsc/app/app/referential/software/software-routing.module.js create mode 100644 out-tsc/app/app/referential/software/software-routing.module.js.map create mode 100644 out-tsc/app/app/referential/software/software.module.js create mode 100644 out-tsc/app/app/referential/software/software.module.js.map create mode 100644 out-tsc/app/app/referential/software/software.page.js create mode 100644 out-tsc/app/app/referential/software/software.page.js.map create mode 100644 out-tsc/app/app/referential/strategy/pmfm-strategies.table.js create mode 100644 out-tsc/app/app/referential/strategy/pmfm-strategies.table.js.map create mode 100644 out-tsc/app/app/referential/strategy/sampling/sampling-strategies.table.js create mode 100644 out-tsc/app/app/referential/strategy/sampling/sampling-strategies.table.js.map create mode 100644 out-tsc/app/app/referential/strategy/sampling/sampling-strategy.form.js create mode 100644 out-tsc/app/app/referential/strategy/sampling/sampling-strategy.form.js.map create mode 100644 out-tsc/app/app/referential/strategy/sampling/sampling-strategy.page.js create mode 100644 out-tsc/app/app/referential/strategy/sampling/sampling-strategy.page.js.map create mode 100644 out-tsc/app/app/referential/strategy/sampling/testing/pmfm-strategies.table.test.js create mode 100644 out-tsc/app/app/referential/strategy/sampling/testing/pmfm-strategies.table.test.js.map create mode 100644 out-tsc/app/app/referential/strategy/strategies.page.js create mode 100644 out-tsc/app/app/referential/strategy/strategies.page.js.map create mode 100644 out-tsc/app/app/referential/strategy/strategies.table.js create mode 100644 out-tsc/app/app/referential/strategy/strategies.table.js.map create mode 100644 out-tsc/app/app/referential/strategy/strategy.form.js create mode 100644 out-tsc/app/app/referential/strategy/strategy.form.js.map create mode 100644 out-tsc/app/app/referential/strategy/strategy.modal.js create mode 100644 out-tsc/app/app/referential/strategy/strategy.modal.js.map create mode 100644 out-tsc/app/app/referential/strategy/strategy.module.js create mode 100644 out-tsc/app/app/referential/strategy/strategy.module.js.map create mode 100644 out-tsc/app/app/referential/strategy/strategy.page.js create mode 100644 out-tsc/app/app/referential/strategy/strategy.page.js.map create mode 100644 out-tsc/app/app/referential/table/base-referential.table.js create mode 100644 out-tsc/app/app/referential/table/base-referential.table.js.map create mode 100644 out-tsc/app/app/referential/table/base-select-entity.modal.js create mode 100644 out-tsc/app/app/referential/table/base-select-entity.modal.js.map create mode 100644 out-tsc/app/app/referential/table/referential-file.service.js create mode 100644 out-tsc/app/app/referential/table/referential-file.service.js.map create mode 100644 out-tsc/app/app/referential/table/referential-ref.table.js create mode 100644 out-tsc/app/app/referential/table/referential-ref.table.js.map create mode 100644 out-tsc/app/app/referential/table/referential-simple.table.js create mode 100644 out-tsc/app/app/referential/table/referential-simple.table.js.map create mode 100644 out-tsc/app/app/referential/table/referential-table.module.js create mode 100644 out-tsc/app/app/referential/table/referential-table.module.js.map create mode 100644 out-tsc/app/app/referential/table/referential.table.js create mode 100644 out-tsc/app/app/referential/table/referential.table.js.map create mode 100644 out-tsc/app/app/referential/table/select-referential.modal.js create mode 100644 out-tsc/app/app/referential/table/select-referential.modal.js.map create mode 100644 out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion-ref.service.js create mode 100644 out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion-ref.service.js.map create mode 100644 out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.filter.js create mode 100644 out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.filter.js.map create mode 100644 out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.fragments.js create mode 100644 out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.fragments.js.map create mode 100644 out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.model.js create mode 100644 out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.model.js.map create mode 100644 out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.service.js create mode 100644 out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.service.js.map create mode 100644 out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.table.js create mode 100644 out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.table.js.map create mode 100644 out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.validator.js create mode 100644 out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.validator.js.map create mode 100644 out-tsc/app/app/referential/taxon-group/taxon-group-routing.module.js create mode 100644 out-tsc/app/app/referential/taxon-group/taxon-group-routing.module.js.map create mode 100644 out-tsc/app/app/referential/taxon-group/taxon-group.module.js create mode 100644 out-tsc/app/app/referential/taxon-group/taxon-group.module.js.map create mode 100644 out-tsc/app/app/referential/taxon-group/taxon-group.page.js create mode 100644 out-tsc/app/app/referential/taxon-group/taxon-group.page.js.map create mode 100644 out-tsc/app/app/referential/taxon-group/taxon-group.validator.js create mode 100644 out-tsc/app/app/referential/taxon-group/taxon-group.validator.js.map create mode 100644 out-tsc/app/app/referential/taxon-name/taxon-name-routing.module.js create mode 100644 out-tsc/app/app/referential/taxon-name/taxon-name-routing.module.js.map create mode 100644 out-tsc/app/app/referential/taxon-name/taxon-name.module.js create mode 100644 out-tsc/app/app/referential/taxon-name/taxon-name.module.js.map create mode 100644 out-tsc/app/app/referential/taxon-name/taxon-name.page.js create mode 100644 out-tsc/app/app/referential/taxon-name/taxon-name.page.js.map create mode 100644 out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion-ref.service.js create mode 100644 out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion-ref.service.js.map create mode 100644 out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.fragments.js create mode 100644 out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.fragments.js.map create mode 100644 out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.model.js create mode 100644 out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.model.js.map create mode 100644 out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.service.js create mode 100644 out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.service.js.map create mode 100644 out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.table.js create mode 100644 out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.table.js.map create mode 100644 out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.validator.js create mode 100644 out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.validator.js.map create mode 100644 out-tsc/app/app/referential/transcribing/modal/transcribing-items.modal.js create mode 100644 out-tsc/app/app/referential/transcribing/modal/transcribing-items.modal.js.map create mode 100644 out-tsc/app/app/referential/transcribing/transcribing-item.table.js create mode 100644 out-tsc/app/app/referential/transcribing/transcribing-item.table.js.map create mode 100644 out-tsc/app/app/referential/transcribing/transcribing-item.validator.js create mode 100644 out-tsc/app/app/referential/transcribing/transcribing-item.validator.js.map create mode 100644 out-tsc/app/app/referential/transcribing/transcribing.model.js create mode 100644 out-tsc/app/app/referential/transcribing/transcribing.model.js.map create mode 100644 out-tsc/app/app/referential/transcribing/transcribing.module.js create mode 100644 out-tsc/app/app/referential/transcribing/transcribing.module.js.map create mode 100644 out-tsc/app/app/shared/bluetooth/bluetooth-serial.errors.js create mode 100644 out-tsc/app/app/shared/bluetooth/bluetooth-serial.errors.js.map create mode 100644 out-tsc/app/app/shared/bluetooth/bluetooth.icon.js create mode 100644 out-tsc/app/app/shared/bluetooth/bluetooth.icon.js.map create mode 100644 out-tsc/app/app/shared/bluetooth/bluetooth.module.js create mode 100644 out-tsc/app/app/shared/bluetooth/bluetooth.module.js.map create mode 100644 out-tsc/app/app/shared/bluetooth/bluetooth.popover.js create mode 100644 out-tsc/app/app/shared/bluetooth/bluetooth.popover.js.map create mode 100644 out-tsc/app/app/shared/bluetooth/bluetooth.service.js create mode 100644 out-tsc/app/app/shared/bluetooth/bluetooth.service.js.map create mode 100644 out-tsc/app/app/shared/bluetooth/bluetooth.utils.js create mode 100644 out-tsc/app/app/shared/bluetooth/bluetooth.utils.js.map create mode 100644 out-tsc/app/app/shared/bluetooth/testing/bluetooth.testing.js create mode 100644 out-tsc/app/app/shared/bluetooth/testing/bluetooth.testing.js.map create mode 100644 out-tsc/app/app/shared/bluetooth/testing/bluetooth.testing.module.js create mode 100644 out-tsc/app/app/shared/bluetooth/testing/bluetooth.testing.module.js.map create mode 100644 out-tsc/app/app/shared/chartsjs.utils.js create mode 100644 out-tsc/app/app/shared/chartsjs.utils.js.map create mode 100644 out-tsc/app/app/shared/colors.utils.js create mode 100644 out-tsc/app/app/shared/colors.utils.js.map create mode 100644 out-tsc/app/app/shared/context.service.js create mode 100644 out-tsc/app/app/shared/context.service.js.map create mode 100644 out-tsc/app/app/shared/flags.utils.js create mode 100644 out-tsc/app/app/shared/flags.utils.js.map create mode 100644 out-tsc/app/app/shared/forms.utils.js create mode 100644 out-tsc/app/app/shared/forms.utils.js.map create mode 100644 out-tsc/app/app/shared/functions.js create mode 100644 out-tsc/app/app/shared/functions.js.map create mode 100644 out-tsc/app/app/shared/geometries.utils.js create mode 100644 out-tsc/app/app/shared/geometries.utils.js.map create mode 100644 out-tsc/app/app/shared/ichthyometer/gwaleen/ichthyometer.gwaleen.js create mode 100644 out-tsc/app/app/shared/ichthyometer/gwaleen/ichthyometer.gwaleen.js.map create mode 100644 out-tsc/app/app/shared/ichthyometer/ichthyometer.config.js create mode 100644 out-tsc/app/app/shared/ichthyometer/ichthyometer.config.js.map create mode 100644 out-tsc/app/app/shared/ichthyometer/ichthyometer.icon.js create mode 100644 out-tsc/app/app/shared/ichthyometer/ichthyometer.icon.js.map create mode 100644 out-tsc/app/app/shared/ichthyometer/ichthyometer.module.js create mode 100644 out-tsc/app/app/shared/ichthyometer/ichthyometer.module.js.map create mode 100644 out-tsc/app/app/shared/ichthyometer/ichthyometer.service.js create mode 100644 out-tsc/app/app/shared/ichthyometer/ichthyometer.service.js.map create mode 100644 out-tsc/app/app/shared/ichthyometer/testing/ichthyometer.testing.js create mode 100644 out-tsc/app/app/shared/ichthyometer/testing/ichthyometer.testing.js.map create mode 100644 out-tsc/app/app/shared/ichthyometer/testing/ichthyometer.testing.module.js create mode 100644 out-tsc/app/app/shared/ichthyometer/testing/ichthyometer.testing.module.js.map create mode 100644 out-tsc/app/app/shared/map/base-map.class.js create mode 100644 out-tsc/app/app/shared/map/base-map.class.js.map create mode 100644 out-tsc/app/app/shared/map/leaflet.js create mode 100644 out-tsc/app/app/shared/map/leaflet.js.map create mode 100644 out-tsc/app/app/shared/map/map.graticule.js create mode 100644 out-tsc/app/app/shared/map/map.graticule.js.map create mode 100644 out-tsc/app/app/shared/map/map.utils.js create mode 100644 out-tsc/app/app/shared/map/map.utils.js.map create mode 100644 out-tsc/app/app/shared/markdown/markdown-anchor.directive.js create mode 100644 out-tsc/app/app/shared/markdown/markdown-anchor.directive.js.map create mode 100644 out-tsc/app/app/shared/markdown/markdown-anchor.service.js create mode 100644 out-tsc/app/app/shared/markdown/markdown-anchor.service.js.map create mode 100644 out-tsc/app/app/shared/markdown/markdown-anchor.utils.js create mode 100644 out-tsc/app/app/shared/markdown/markdown-anchor.utils.js.map create mode 100644 out-tsc/app/app/shared/markdown/markdown.module.js create mode 100644 out-tsc/app/app/shared/markdown/markdown.module.js.map create mode 100644 out-tsc/app/app/shared/markdown/markdown.render.js create mode 100644 out-tsc/app/app/shared/markdown/markdown.render.js.map create mode 100644 out-tsc/app/app/shared/material/material.animation.js create mode 100644 out-tsc/app/app/shared/material/material.animation.js.map create mode 100644 out-tsc/app/app/shared/material/material.testing.module.js create mode 100644 out-tsc/app/app/shared/material/material.testing.module.js.map create mode 100644 out-tsc/app/app/shared/material/sampling-ratio/material.sampling-ratio.js create mode 100644 out-tsc/app/app/shared/material/sampling-ratio/material.sampling-ratio.js.map create mode 100644 out-tsc/app/app/shared/material/sampling-ratio/material.sampling-ratio.module.js create mode 100644 out-tsc/app/app/shared/material/sampling-ratio/material.sampling-ratio.module.js.map create mode 100644 out-tsc/app/app/shared/material/sampling-ratio/testing/sampling-ratio.test.js create mode 100644 out-tsc/app/app/shared/material/sampling-ratio/testing/sampling-ratio.test.js.map create mode 100644 out-tsc/app/app/shared/material/skeleton/form-fields-skeleton.js create mode 100644 out-tsc/app/app/shared/material/skeleton/form-fields-skeleton.js.map create mode 100644 out-tsc/app/app/shared/material/skeleton/form-fields-skeleton.module.js create mode 100644 out-tsc/app/app/shared/material/skeleton/form-fields-skeleton.module.js.map create mode 100644 out-tsc/app/app/shared/math.utils.js create mode 100644 out-tsc/app/app/shared/math.utils.js.map create mode 100644 out-tsc/app/app/shared/pipes/arrays.pipe.js create mode 100644 out-tsc/app/app/shared/pipes/arrays.pipe.js.map create mode 100644 out-tsc/app/app/shared/pipes/delay.pipe.js create mode 100644 out-tsc/app/app/shared/pipes/delay.pipe.js.map create mode 100644 out-tsc/app/app/shared/pipes/display-with.pipe.js create mode 100644 out-tsc/app/app/shared/pipes/display-with.pipe.js.map create mode 100644 out-tsc/app/app/shared/pipes/html.pipes.js create mode 100644 out-tsc/app/app/shared/pipes/html.pipes.js.map create mode 100644 out-tsc/app/app/shared/pipes/pagination.pipe.js create mode 100644 out-tsc/app/app/shared/pipes/pagination.pipe.js.map create mode 100644 out-tsc/app/app/shared/popover/popover.utils.js create mode 100644 out-tsc/app/app/shared/popover/popover.utils.js.map create mode 100644 out-tsc/app/app/shared/progression/progress-bar.component.js create mode 100644 out-tsc/app/app/shared/progression/progress-bar.component.js.map create mode 100644 out-tsc/app/app/shared/progression/progression.model.js create mode 100644 out-tsc/app/app/shared/progression/progression.model.js.map create mode 100644 out-tsc/app/app/shared/progression/progression.module.js create mode 100644 out-tsc/app/app/shared/progression/progression.module.js.map create mode 100644 out-tsc/app/app/shared/report/report.module.js create mode 100644 out-tsc/app/app/shared/report/report.module.js.map create mode 100644 out-tsc/app/app/shared/report/reveal/reveal-section.directive.js create mode 100644 out-tsc/app/app/shared/report/reveal/reveal-section.directive.js.map create mode 100644 out-tsc/app/app/shared/report/reveal/reveal.component.js create mode 100644 out-tsc/app/app/shared/report/reveal/reveal.component.js.map create mode 100644 out-tsc/app/app/shared/report/reveal/reveal.module.js create mode 100644 out-tsc/app/app/shared/report/reveal/reveal.module.js.map create mode 100644 out-tsc/app/app/shared/report/reveal/reveal.utils.js create mode 100644 out-tsc/app/app/shared/report/reveal/reveal.utils.js.map create mode 100644 out-tsc/app/app/shared/report/testing/report-embedded.testing.js create mode 100644 out-tsc/app/app/shared/report/testing/report-embedded.testing.js.map create mode 100644 out-tsc/app/app/shared/report/testing/report.testing.js create mode 100644 out-tsc/app/app/shared/report/testing/report.testing.js.map create mode 100644 out-tsc/app/app/shared/report/testing/report.testing.module.js create mode 100644 out-tsc/app/app/shared/report/testing/report.testing.module.js.map create mode 100644 out-tsc/app/app/shared/rx-state.module.js create mode 100644 out-tsc/app/app/shared/rx-state.module.js.map create mode 100644 out-tsc/app/app/shared/service/base.validator.service.js create mode 100644 out-tsc/app/app/shared/service/base.validator.service.js.map create mode 100644 out-tsc/app/app/shared/service/file-transfer.service.js create mode 100644 out-tsc/app/app/shared/service/file-transfer.service.js.map create mode 100644 out-tsc/app/app/shared/service/page.model.js create mode 100644 out-tsc/app/app/shared/service/page.model.js.map create mode 100644 out-tsc/app/app/shared/shared.config.js create mode 100644 out-tsc/app/app/shared/shared.config.js.map create mode 100644 out-tsc/app/app/shared/shared.module.js create mode 100644 out-tsc/app/app/shared/shared.module.js.map create mode 100644 out-tsc/app/app/shared/shared.testing.module.js create mode 100644 out-tsc/app/app/shared/shared.testing.module.js.map create mode 100644 out-tsc/app/app/shared/state/state.decorator.js create mode 100644 out-tsc/app/app/shared/state/state.decorator.js.map create mode 100644 out-tsc/app/app/shared/table/base.table.js create mode 100644 out-tsc/app/app/shared/table/base.table.js.map create mode 100644 out-tsc/app/app/shared/types.utils.js create mode 100644 out-tsc/app/app/shared/types.utils.js.map create mode 100644 out-tsc/app/app/social/config/social.config.js create mode 100644 out-tsc/app/app/social/config/social.config.js.map create mode 100644 out-tsc/app/app/social/job/job-progression.service.js create mode 100644 out-tsc/app/app/social/job/job-progression.service.js.map create mode 100644 out-tsc/app/app/social/job/job.errors.js create mode 100644 out-tsc/app/app/social/job/job.errors.js.map create mode 100644 out-tsc/app/app/social/job/job.model.js create mode 100644 out-tsc/app/app/social/job/job.model.js.map create mode 100644 out-tsc/app/app/social/job/job.service.js create mode 100644 out-tsc/app/app/social/job/job.service.js.map create mode 100644 out-tsc/app/app/social/job/report/job-report.module.js create mode 100644 out-tsc/app/app/social/job/report/job-report.module.js.map create mode 100644 out-tsc/app/app/social/job/report/job.report.modal.js create mode 100644 out-tsc/app/app/social/job/report/job.report.modal.js.map create mode 100644 out-tsc/app/app/social/message/inbox-message-routing.module.js create mode 100644 out-tsc/app/app/social/message/inbox-message-routing.module.js.map create mode 100644 out-tsc/app/app/social/message/inbox-message.module.js create mode 100644 out-tsc/app/app/social/message/inbox-message.module.js.map create mode 100644 out-tsc/app/app/social/message/inbox-message.page.js create mode 100644 out-tsc/app/app/social/message/inbox-message.page.js.map create mode 100644 out-tsc/app/app/social/message/inbox-message.service.js create mode 100644 out-tsc/app/app/social/message/inbox-message.service.js.map create mode 100644 out-tsc/app/app/social/message/inbox-messages.page.js create mode 100644 out-tsc/app/app/social/message/inbox-messages.page.js.map create mode 100644 out-tsc/app/app/social/share/shared-page.component.js create mode 100644 out-tsc/app/app/social/share/shared-page.component.js.map create mode 100644 out-tsc/app/app/social/share/shared-page.model.js create mode 100644 out-tsc/app/app/social/share/shared-page.model.js.map create mode 100644 out-tsc/app/app/social/share/shared-page.module.js create mode 100644 out-tsc/app/app/social/share/shared-page.module.js.map create mode 100644 out-tsc/app/app/social/share/shared-resource.utils.js create mode 100644 out-tsc/app/app/social/share/shared-resource.utils.js.map create mode 100644 out-tsc/app/app/social/social-routing.module.js create mode 100644 out-tsc/app/app/social/social-routing.module.js.map create mode 100644 out-tsc/app/app/social/social.module.js create mode 100644 out-tsc/app/app/social/social.module.js.map create mode 100644 out-tsc/app/app/social/user-event/user-event.fragments.js create mode 100644 out-tsc/app/app/social/user-event/user-event.fragments.js.map create mode 100644 out-tsc/app/app/social/user-event/user-event.model.js create mode 100644 out-tsc/app/app/social/user-event/user-event.model.js.map create mode 100644 out-tsc/app/app/social/user-event/user-event.module.js create mode 100644 out-tsc/app/app/social/user-event/user-event.module.js.map create mode 100644 out-tsc/app/app/social/user-event/user-event.service.js create mode 100644 out-tsc/app/app/social/user-event/user-event.service.js.map create mode 100644 out-tsc/app/app/social/user-event/user-events.table.js create mode 100644 out-tsc/app/app/social/user-event/user-events.table.js.map create mode 100644 out-tsc/app/app/trip/aggregated-landing/aggregated-landing.filter.js create mode 100644 out-tsc/app/app/trip/aggregated-landing/aggregated-landing.filter.js.map create mode 100644 out-tsc/app/app/trip/aggregated-landing/aggregated-landing.form.js create mode 100644 out-tsc/app/app/trip/aggregated-landing/aggregated-landing.form.js.map create mode 100644 out-tsc/app/app/trip/aggregated-landing/aggregated-landing.modal.js create mode 100644 out-tsc/app/app/trip/aggregated-landing/aggregated-landing.modal.js.map create mode 100644 out-tsc/app/app/trip/aggregated-landing/aggregated-landing.model.js create mode 100644 out-tsc/app/app/trip/aggregated-landing/aggregated-landing.model.js.map create mode 100644 out-tsc/app/app/trip/aggregated-landing/aggregated-landing.module.js create mode 100644 out-tsc/app/app/trip/aggregated-landing/aggregated-landing.module.js.map create mode 100644 out-tsc/app/app/trip/aggregated-landing/aggregated-landing.service.js create mode 100644 out-tsc/app/app/trip/aggregated-landing/aggregated-landing.service.js.map create mode 100644 out-tsc/app/app/trip/aggregated-landing/aggregated-landings.table.js create mode 100644 out-tsc/app/app/trip/aggregated-landing/aggregated-landings.table.js.map create mode 100644 out-tsc/app/app/trip/aggregated-landing/vessel-activity.form.js create mode 100644 out-tsc/app/app/trip/aggregated-landing/vessel-activity.form.js.map create mode 100644 out-tsc/app/app/trip/aggregated-landing/vessel-activity.validator.js create mode 100644 out-tsc/app/app/trip/aggregated-landing/vessel-activity.validator.js.map create mode 100644 out-tsc/app/app/trip/batch/batch.errors.js create mode 100644 out-tsc/app/app/trip/batch/batch.errors.js.map create mode 100644 out-tsc/app/app/trip/batch/batch.module.js create mode 100644 out-tsc/app/app/trip/batch/batch.module.js.map create mode 100644 out-tsc/app/app/trip/batch/catch/catch.form.js create mode 100644 out-tsc/app/app/trip/batch/catch/catch.form.js.map create mode 100644 out-tsc/app/app/trip/batch/common/batch.filter.js create mode 100644 out-tsc/app/app/trip/batch/common/batch.filter.js.map create mode 100644 out-tsc/app/app/trip/batch/common/batch.form.content.js create mode 100644 out-tsc/app/app/trip/batch/common/batch.form.content.js.map create mode 100644 out-tsc/app/app/trip/batch/common/batch.form.js create mode 100644 out-tsc/app/app/trip/batch/common/batch.form.js.map create mode 100644 out-tsc/app/app/trip/batch/common/batch.modal.js create mode 100644 out-tsc/app/app/trip/batch/common/batch.modal.js.map create mode 100644 out-tsc/app/app/trip/batch/common/batch.model.js create mode 100644 out-tsc/app/app/trip/batch/common/batch.model.js.map create mode 100644 out-tsc/app/app/trip/batch/common/batch.pipes.js create mode 100644 out-tsc/app/app/trip/batch/common/batch.pipes.js.map create mode 100644 out-tsc/app/app/trip/batch/common/batch.service.js create mode 100644 out-tsc/app/app/trip/batch/common/batch.service.js.map create mode 100644 out-tsc/app/app/trip/batch/common/batch.utils.js create mode 100644 out-tsc/app/app/trip/batch/common/batch.utils.js.map create mode 100644 out-tsc/app/app/trip/batch/common/batch.validator.js create mode 100644 out-tsc/app/app/trip/batch/common/batch.validator.js.map create mode 100644 out-tsc/app/app/trip/batch/common/batches.table.class.js create mode 100644 out-tsc/app/app/trip/batch/common/batches.table.class.js.map create mode 100644 out-tsc/app/app/trip/batch/common/batches.table.js create mode 100644 out-tsc/app/app/trip/batch/common/batches.table.js.map create mode 100644 out-tsc/app/app/trip/batch/common/testing/batch.form.test.js create mode 100644 out-tsc/app/app/trip/batch/common/testing/batch.form.test.js.map create mode 100644 out-tsc/app/app/trip/batch/filter/batch-filter.form.js create mode 100644 out-tsc/app/app/trip/batch/filter/batch-filter.form.js.map create mode 100644 out-tsc/app/app/trip/batch/group/batch-group.form.js create mode 100644 out-tsc/app/app/trip/batch/group/batch-group.form.js.map create mode 100644 out-tsc/app/app/trip/batch/group/batch-group.modal.js create mode 100644 out-tsc/app/app/trip/batch/group/batch-group.modal.js.map create mode 100644 out-tsc/app/app/trip/batch/group/batch-group.model.js create mode 100644 out-tsc/app/app/trip/batch/group/batch-group.model.js.map create mode 100644 out-tsc/app/app/trip/batch/group/batch-group.validator.js create mode 100644 out-tsc/app/app/trip/batch/group/batch-group.validator.js.map create mode 100644 out-tsc/app/app/trip/batch/group/batch-groups.table.js create mode 100644 out-tsc/app/app/trip/batch/group/batch-groups.table.js.map create mode 100644 out-tsc/app/app/trip/batch/group/testing/batch-group.form.test.js create mode 100644 out-tsc/app/app/trip/batch/group/testing/batch-group.form.test.js.map create mode 100644 out-tsc/app/app/trip/batch/sub/sub-batch.form.js create mode 100644 out-tsc/app/app/trip/batch/sub/sub-batch.form.js.map create mode 100644 out-tsc/app/app/trip/batch/sub/sub-batch.modal.js create mode 100644 out-tsc/app/app/trip/batch/sub/sub-batch.modal.js.map create mode 100644 out-tsc/app/app/trip/batch/sub/sub-batch.model.js create mode 100644 out-tsc/app/app/trip/batch/sub/sub-batch.model.js.map create mode 100644 out-tsc/app/app/trip/batch/sub/sub-batch.validator.js create mode 100644 out-tsc/app/app/trip/batch/sub/sub-batch.validator.js.map create mode 100644 out-tsc/app/app/trip/batch/sub/sub-batches.modal.js create mode 100644 out-tsc/app/app/trip/batch/sub/sub-batches.modal.js.map create mode 100644 out-tsc/app/app/trip/batch/sub/sub-batches.table.js create mode 100644 out-tsc/app/app/trip/batch/sub/sub-batches.table.js.map create mode 100644 out-tsc/app/app/trip/batch/testing/batch-data.test.js create mode 100644 out-tsc/app/app/trip/batch/testing/batch-data.test.js.map create mode 100644 out-tsc/app/app/trip/batch/testing/batch-tree-container.test.js create mode 100644 out-tsc/app/app/trip/batch/testing/batch-tree-container.test.js.map create mode 100644 out-tsc/app/app/trip/batch/testing/batch-tree.test.js create mode 100644 out-tsc/app/app/trip/batch/testing/batch-tree.test.js.map create mode 100644 out-tsc/app/app/trip/batch/tree/batch-model-tree.component.js create mode 100644 out-tsc/app/app/trip/batch/tree/batch-model-tree.component.js.map create mode 100644 out-tsc/app/app/trip/batch/tree/batch-model.validator.js create mode 100644 out-tsc/app/app/trip/batch/tree/batch-model.validator.js.map create mode 100644 out-tsc/app/app/trip/batch/tree/batch-tree-container.component.js create mode 100644 out-tsc/app/app/trip/batch/tree/batch-tree-container.component.js.map create mode 100644 out-tsc/app/app/trip/batch/tree/batch-tree.component.js create mode 100644 out-tsc/app/app/trip/batch/tree/batch-tree.component.js.map create mode 100644 out-tsc/app/app/trip/batch/tree/batch-tree.model.js create mode 100644 out-tsc/app/app/trip/batch/tree/batch-tree.model.js.map create mode 100644 out-tsc/app/app/trip/batch/tree/batch-tree.rules.js create mode 100644 out-tsc/app/app/trip/batch/tree/batch-tree.rules.js.map create mode 100644 out-tsc/app/app/trip/common/data.fragments.js create mode 100644 out-tsc/app/app/trip/common/data.fragments.js.map create mode 100644 out-tsc/app/app/trip/expense/expense.form.js create mode 100644 out-tsc/app/app/trip/expense/expense.form.js.map create mode 100644 out-tsc/app/app/trip/expense/expense.module.js create mode 100644 out-tsc/app/app/trip/expense/expense.module.js.map create mode 100644 out-tsc/app/app/trip/expense/expense.validator.js create mode 100644 out-tsc/app/app/trip/expense/expense.validator.js.map create mode 100644 out-tsc/app/app/trip/expense/typed-expense.form.js create mode 100644 out-tsc/app/app/trip/expense/typed-expense.form.js.map create mode 100644 out-tsc/app/app/trip/expense/typed-expense.validator.js create mode 100644 out-tsc/app/app/trip/expense/typed-expense.validator.js.map create mode 100644 out-tsc/app/app/trip/landedtrip/landed-trip.module.js create mode 100644 out-tsc/app/app/trip/landedtrip/landed-trip.module.js.map create mode 100644 out-tsc/app/app/trip/landedtrip/landed-trip.page.js create mode 100644 out-tsc/app/app/trip/landedtrip/landed-trip.page.js.map create mode 100644 out-tsc/app/app/trip/landedtrip/landed-trip.service.js create mode 100644 out-tsc/app/app/trip/landedtrip/landed-trip.service.js.map create mode 100644 out-tsc/app/app/trip/landing/auction-control/auction-control-routing.module.js create mode 100644 out-tsc/app/app/trip/landing/auction-control/auction-control-routing.module.js.map create mode 100644 out-tsc/app/app/trip/landing/auction-control/auction-control.module.js create mode 100644 out-tsc/app/app/trip/landing/auction-control/auction-control.module.js.map create mode 100644 out-tsc/app/app/trip/landing/auction-control/auction-control.page.js create mode 100644 out-tsc/app/app/trip/landing/auction-control/auction-control.page.js.map create mode 100644 out-tsc/app/app/trip/landing/auction-control/auction-control.validators.js create mode 100644 out-tsc/app/app/trip/landing/auction-control/auction-control.validators.js.map create mode 100644 out-tsc/app/app/trip/landing/auction-control/report/auction-control-report-routing.module.js create mode 100644 out-tsc/app/app/trip/landing/auction-control/report/auction-control-report-routing.module.js.map create mode 100644 out-tsc/app/app/trip/landing/auction-control/report/auction-control.report.js create mode 100644 out-tsc/app/app/trip/landing/auction-control/report/auction-control.report.js.map create mode 100644 out-tsc/app/app/trip/landing/auction-control/report/auction-control.report.module.js create mode 100644 out-tsc/app/app/trip/landing/auction-control/report/auction-control.report.module.js.map create mode 100644 out-tsc/app/app/trip/landing/landing-routing.module.js create mode 100644 out-tsc/app/app/trip/landing/landing-routing.module.js.map create mode 100644 out-tsc/app/app/trip/landing/landing.filter.js create mode 100644 out-tsc/app/app/trip/landing/landing.filter.js.map create mode 100644 out-tsc/app/app/trip/landing/landing.form.js create mode 100644 out-tsc/app/app/trip/landing/landing.form.js.map create mode 100644 out-tsc/app/app/trip/landing/landing.model.js create mode 100644 out-tsc/app/app/trip/landing/landing.model.js.map create mode 100644 out-tsc/app/app/trip/landing/landing.module.js create mode 100644 out-tsc/app/app/trip/landing/landing.module.js.map create mode 100644 out-tsc/app/app/trip/landing/landing.page.js create mode 100644 out-tsc/app/app/trip/landing/landing.page.js.map create mode 100644 out-tsc/app/app/trip/landing/landing.service.js create mode 100644 out-tsc/app/app/trip/landing/landing.service.js.map create mode 100644 out-tsc/app/app/trip/landing/landing.validator.js create mode 100644 out-tsc/app/app/trip/landing/landing.validator.js.map create mode 100644 out-tsc/app/app/trip/landing/landings-routing.module.js create mode 100644 out-tsc/app/app/trip/landing/landings-routing.module.js.map create mode 100644 out-tsc/app/app/trip/landing/landings.page.js create mode 100644 out-tsc/app/app/trip/landing/landings.page.js.map create mode 100644 out-tsc/app/app/trip/landing/landings.table.js create mode 100644 out-tsc/app/app/trip/landing/landings.table.js.map create mode 100644 out-tsc/app/app/trip/landing/report/base-landing-report.class.js create mode 100644 out-tsc/app/app/trip/landing/report/base-landing-report.class.js.map create mode 100644 out-tsc/app/app/trip/landing/report/landing-report-routing.module.js create mode 100644 out-tsc/app/app/trip/landing/report/landing-report-routing.module.js.map create mode 100644 out-tsc/app/app/trip/landing/report/landing.report.js create mode 100644 out-tsc/app/app/trip/landing/report/landing.report.js.map create mode 100644 out-tsc/app/app/trip/landing/report/landing.report.module.js create mode 100644 out-tsc/app/app/trip/landing/report/landing.report.module.js.map create mode 100644 out-tsc/app/app/trip/landing/sampling/biological-sampling.validators.js create mode 100644 out-tsc/app/app/trip/landing/sampling/biological-sampling.validators.js.map create mode 100644 out-tsc/app/app/trip/landing/sampling/report/sampling-landing-report-routing.module.js create mode 100644 out-tsc/app/app/trip/landing/sampling/report/sampling-landing-report-routing.module.js.map create mode 100644 out-tsc/app/app/trip/landing/sampling/report/sampling-landing.report.js create mode 100644 out-tsc/app/app/trip/landing/sampling/report/sampling-landing.report.js.map create mode 100644 out-tsc/app/app/trip/landing/sampling/report/sampling-landing.report.module.js create mode 100644 out-tsc/app/app/trip/landing/sampling/report/sampling-landing.report.module.js.map create mode 100644 out-tsc/app/app/trip/landing/sampling/sampling-landing-routing.module.js create mode 100644 out-tsc/app/app/trip/landing/sampling/sampling-landing-routing.module.js.map create mode 100644 out-tsc/app/app/trip/landing/sampling/sampling-landing.module.js create mode 100644 out-tsc/app/app/trip/landing/sampling/sampling-landing.module.js.map create mode 100644 out-tsc/app/app/trip/landing/sampling/sampling-landing.page.js create mode 100644 out-tsc/app/app/trip/landing/sampling/sampling-landing.page.js.map create mode 100644 out-tsc/app/app/trip/landing/select-landings.modal.js create mode 100644 out-tsc/app/app/trip/landing/select-landings.modal.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/form/observed-location-form.module.js create mode 100644 out-tsc/app/app/trip/observedlocation/form/observed-location-form.module.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/form/observed-location.form.js create mode 100644 out-tsc/app/app/trip/observedlocation/form/observed-location.form.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/observed-location-context.service.js create mode 100644 out-tsc/app/app/trip/observedlocation/observed-location-context.service.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/observed-location-routing.module.js create mode 100644 out-tsc/app/app/trip/observedlocation/observed-location-routing.module.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/observed-location.filter.js create mode 100644 out-tsc/app/app/trip/observedlocation/observed-location.filter.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/observed-location.model.js create mode 100644 out-tsc/app/app/trip/observedlocation/observed-location.model.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/observed-location.module.js create mode 100644 out-tsc/app/app/trip/observedlocation/observed-location.module.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/observed-location.page.js create mode 100644 out-tsc/app/app/trip/observedlocation/observed-location.page.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/observed-location.service.js create mode 100644 out-tsc/app/app/trip/observedlocation/observed-location.service.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/observed-location.validator.js create mode 100644 out-tsc/app/app/trip/observedlocation/observed-location.validator.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/offline/observed-location-offline.modal.js create mode 100644 out-tsc/app/app/trip/observedlocation/offline/observed-location-offline.modal.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/offline/observed-location-offline.module.js create mode 100644 out-tsc/app/app/trip/observedlocation/offline/observed-location-offline.module.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/report/observed-location-report-routing.module.js create mode 100644 out-tsc/app/app/trip/observedlocation/report/observed-location-report-routing.module.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/report/observed-location.report.js create mode 100644 out-tsc/app/app/trip/observedlocation/report/observed-location.report.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/report/observed-location.report.module.js create mode 100644 out-tsc/app/app/trip/observedlocation/report/observed-location.report.module.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/select-modal/select-observed-locations.modal.js create mode 100644 out-tsc/app/app/trip/observedlocation/select-modal/select-observed-locations.modal.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/select-modal/select-observed-locations.module.js create mode 100644 out-tsc/app/app/trip/observedlocation/select-modal/select-observed-locations.module.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/table/observed-location-table.module.js create mode 100644 out-tsc/app/app/trip/observedlocation/table/observed-location-table.module.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/table/observed-locations.page.js create mode 100644 out-tsc/app/app/trip/observedlocation/table/observed-locations.page.js.map create mode 100644 out-tsc/app/app/trip/observedlocation/vessels/select-vessel-for-data.modal.js create mode 100644 out-tsc/app/app/trip/observedlocation/vessels/select-vessel-for-data.modal.js.map create mode 100644 out-tsc/app/app/trip/operation/icon/operation-icon.component.js create mode 100644 out-tsc/app/app/trip/operation/icon/operation-icon.component.js.map create mode 100644 out-tsc/app/app/trip/operation/map/operations-map.modal.js create mode 100644 out-tsc/app/app/trip/operation/map/operations-map.modal.js.map create mode 100644 out-tsc/app/app/trip/operation/map/operations.map.js create mode 100644 out-tsc/app/app/trip/operation/map/operations.map.js.map create mode 100644 out-tsc/app/app/trip/operation/operation-routing.module.js create mode 100644 out-tsc/app/app/trip/operation/operation-routing.module.js.map create mode 100644 out-tsc/app/app/trip/operation/operation.filter.js create mode 100644 out-tsc/app/app/trip/operation/operation.filter.js.map create mode 100644 out-tsc/app/app/trip/operation/operation.form.js create mode 100644 out-tsc/app/app/trip/operation/operation.form.js.map create mode 100644 out-tsc/app/app/trip/operation/operation.module.js create mode 100644 out-tsc/app/app/trip/operation/operation.module.js.map create mode 100644 out-tsc/app/app/trip/operation/operation.page.js create mode 100644 out-tsc/app/app/trip/operation/operation.page.js.map create mode 100644 out-tsc/app/app/trip/operation/operation.service.js create mode 100644 out-tsc/app/app/trip/operation/operation.service.js.map create mode 100644 out-tsc/app/app/trip/operation/operation.validator.js create mode 100644 out-tsc/app/app/trip/operation/operation.validator.js.map create mode 100644 out-tsc/app/app/trip/operation/operations.table.js create mode 100644 out-tsc/app/app/trip/operation/operations.table.js.map create mode 100644 out-tsc/app/app/trip/operation/select-operation-by-trip.table.js create mode 100644 out-tsc/app/app/trip/operation/select-operation-by-trip.table.js.map create mode 100644 out-tsc/app/app/trip/operation/select-operation.modal.js create mode 100644 out-tsc/app/app/trip/operation/select-operation.modal.js.map create mode 100644 out-tsc/app/app/trip/operation/selectivity/selectivity-operation-routing.module.js create mode 100644 out-tsc/app/app/trip/operation/selectivity/selectivity-operation-routing.module.js.map create mode 100644 out-tsc/app/app/trip/operation/selectivity/selectivity-operation.module.js create mode 100644 out-tsc/app/app/trip/operation/selectivity/selectivity-operation.module.js.map create mode 100644 out-tsc/app/app/trip/operation/selectivity/selectivity-operation.page.js create mode 100644 out-tsc/app/app/trip/operation/selectivity/selectivity-operation.page.js.map create mode 100644 out-tsc/app/app/trip/operationgroup/operation-group.filter.js create mode 100644 out-tsc/app/app/trip/operationgroup/operation-group.filter.js.map create mode 100644 out-tsc/app/app/trip/operationgroup/operation-group.form.js create mode 100644 out-tsc/app/app/trip/operationgroup/operation-group.form.js.map create mode 100644 out-tsc/app/app/trip/operationgroup/operation-group.modal.js create mode 100644 out-tsc/app/app/trip/operationgroup/operation-group.modal.js.map create mode 100644 out-tsc/app/app/trip/operationgroup/operation-group.module.js create mode 100644 out-tsc/app/app/trip/operationgroup/operation-group.module.js.map create mode 100644 out-tsc/app/app/trip/operationgroup/operation-group.validator.js create mode 100644 out-tsc/app/app/trip/operationgroup/operation-group.validator.js.map create mode 100644 out-tsc/app/app/trip/operationgroup/operation-groups.table.js create mode 100644 out-tsc/app/app/trip/operationgroup/operation-groups.table.js.map create mode 100644 out-tsc/app/app/trip/packet/packet-composition.validator.js create mode 100644 out-tsc/app/app/trip/packet/packet-composition.validator.js.map create mode 100644 out-tsc/app/app/trip/packet/packet.form.js create mode 100644 out-tsc/app/app/trip/packet/packet.form.js.map create mode 100644 out-tsc/app/app/trip/packet/packet.modal.js create mode 100644 out-tsc/app/app/trip/packet/packet.modal.js.map create mode 100644 out-tsc/app/app/trip/packet/packet.model.js create mode 100644 out-tsc/app/app/trip/packet/packet.model.js.map create mode 100644 out-tsc/app/app/trip/packet/packet.module.js create mode 100644 out-tsc/app/app/trip/packet/packet.module.js.map create mode 100644 out-tsc/app/app/trip/packet/packet.validator.js create mode 100644 out-tsc/app/app/trip/packet/packet.validator.js.map create mode 100644 out-tsc/app/app/trip/packet/packets.table.js create mode 100644 out-tsc/app/app/trip/packet/packets.table.js.map create mode 100644 out-tsc/app/app/trip/physicalgear/physical-gear.filter.js create mode 100644 out-tsc/app/app/trip/physicalgear/physical-gear.filter.js.map create mode 100644 out-tsc/app/app/trip/physicalgear/physical-gear.form.js create mode 100644 out-tsc/app/app/trip/physicalgear/physical-gear.form.js.map create mode 100644 out-tsc/app/app/trip/physicalgear/physical-gear.modal.js create mode 100644 out-tsc/app/app/trip/physicalgear/physical-gear.modal.js.map create mode 100644 out-tsc/app/app/trip/physicalgear/physical-gear.model.js create mode 100644 out-tsc/app/app/trip/physicalgear/physical-gear.model.js.map create mode 100644 out-tsc/app/app/trip/physicalgear/physical-gear.module.js create mode 100644 out-tsc/app/app/trip/physicalgear/physical-gear.module.js.map create mode 100644 out-tsc/app/app/trip/physicalgear/physical-gears.table.js create mode 100644 out-tsc/app/app/trip/physicalgear/physical-gears.table.js.map create mode 100644 out-tsc/app/app/trip/physicalgear/physicalgear.service.js create mode 100644 out-tsc/app/app/trip/physicalgear/physicalgear.service.js.map create mode 100644 out-tsc/app/app/trip/physicalgear/physicalgear.validator.js create mode 100644 out-tsc/app/app/trip/physicalgear/physicalgear.validator.js.map create mode 100644 out-tsc/app/app/trip/physicalgear/select-physical-gear.modal.js create mode 100644 out-tsc/app/app/trip/physicalgear/select-physical-gear.modal.js.map create mode 100644 out-tsc/app/app/trip/physicalgear/testing/physical-gears.test.js create mode 100644 out-tsc/app/app/trip/physicalgear/testing/physical-gears.test.js.map create mode 100644 out-tsc/app/app/trip/physicalgear/testing/physical-gears.utils.js create mode 100644 out-tsc/app/app/trip/physicalgear/testing/physical-gears.utils.js.map create mode 100644 out-tsc/app/app/trip/product/product.form.js create mode 100644 out-tsc/app/app/trip/product/product.form.js.map create mode 100644 out-tsc/app/app/trip/product/product.modal.js create mode 100644 out-tsc/app/app/trip/product/product.modal.js.map create mode 100644 out-tsc/app/app/trip/product/product.model.js create mode 100644 out-tsc/app/app/trip/product/product.model.js.map create mode 100644 out-tsc/app/app/trip/product/product.module.js create mode 100644 out-tsc/app/app/trip/product/product.module.js.map create mode 100644 out-tsc/app/app/trip/product/product.validator.js create mode 100644 out-tsc/app/app/trip/product/product.validator.js.map create mode 100644 out-tsc/app/app/trip/product/products.table.js create mode 100644 out-tsc/app/app/trip/product/products.table.js.map create mode 100644 out-tsc/app/app/trip/sale/expected-sale.form.js create mode 100644 out-tsc/app/app/trip/sale/expected-sale.form.js.map create mode 100644 out-tsc/app/app/trip/sale/expected-sale.model.js create mode 100644 out-tsc/app/app/trip/sale/expected-sale.model.js.map create mode 100644 out-tsc/app/app/trip/sale/packet-sale.form.js create mode 100644 out-tsc/app/app/trip/sale/packet-sale.form.js.map create mode 100644 out-tsc/app/app/trip/sale/packet-sale.modal.js create mode 100644 out-tsc/app/app/trip/sale/packet-sale.modal.js.map create mode 100644 out-tsc/app/app/trip/sale/product-sale.form.js create mode 100644 out-tsc/app/app/trip/sale/product-sale.form.js.map create mode 100644 out-tsc/app/app/trip/sale/product-sale.modal.js create mode 100644 out-tsc/app/app/trip/sale/product-sale.modal.js.map create mode 100644 out-tsc/app/app/trip/sale/sale-product.model.js create mode 100644 out-tsc/app/app/trip/sale/sale-product.model.js.map create mode 100644 out-tsc/app/app/trip/sale/sale.form.js create mode 100644 out-tsc/app/app/trip/sale/sale.form.js.map create mode 100644 out-tsc/app/app/trip/sale/sale.model.js create mode 100644 out-tsc/app/app/trip/sale/sale.model.js.map create mode 100644 out-tsc/app/app/trip/sale/sale.module.js create mode 100644 out-tsc/app/app/trip/sale/sale.module.js.map create mode 100644 out-tsc/app/app/trip/sale/sale.validator.js create mode 100644 out-tsc/app/app/trip/sale/sale.validator.js.map create mode 100644 out-tsc/app/app/trip/sample/individualmonitoring/individual-monitoring.table.js create mode 100644 out-tsc/app/app/trip/sample/individualmonitoring/individual-monitoring.table.js.map create mode 100644 out-tsc/app/app/trip/sample/individualrelease/individual-releases.table.js create mode 100644 out-tsc/app/app/trip/sample/individualrelease/individual-releases.table.js.map create mode 100644 out-tsc/app/app/trip/sample/sample-tree.component.js create mode 100644 out-tsc/app/app/trip/sample/sample-tree.component.js.map create mode 100644 out-tsc/app/app/trip/sample/sample.filter.js create mode 100644 out-tsc/app/app/trip/sample/sample.filter.js.map create mode 100644 out-tsc/app/app/trip/sample/sample.form.js create mode 100644 out-tsc/app/app/trip/sample/sample.form.js.map create mode 100644 out-tsc/app/app/trip/sample/sample.modal.js create mode 100644 out-tsc/app/app/trip/sample/sample.modal.js.map create mode 100644 out-tsc/app/app/trip/sample/sample.model.js create mode 100644 out-tsc/app/app/trip/sample/sample.model.js.map create mode 100644 out-tsc/app/app/trip/sample/sample.module.js create mode 100644 out-tsc/app/app/trip/sample/sample.module.js.map create mode 100644 out-tsc/app/app/trip/sample/sample.validator.js create mode 100644 out-tsc/app/app/trip/sample/sample.validator.js.map create mode 100644 out-tsc/app/app/trip/sample/samples.modal.js create mode 100644 out-tsc/app/app/trip/sample/samples.modal.js.map create mode 100644 out-tsc/app/app/trip/sample/samples.table.js create mode 100644 out-tsc/app/app/trip/sample/samples.table.js.map create mode 100644 out-tsc/app/app/trip/sample/sub-sample.form.js create mode 100644 out-tsc/app/app/trip/sample/sub-sample.form.js.map create mode 100644 out-tsc/app/app/trip/sample/sub-sample.modal.js create mode 100644 out-tsc/app/app/trip/sample/sub-sample.modal.js.map create mode 100644 out-tsc/app/app/trip/sample/sub-sample.validator.js create mode 100644 out-tsc/app/app/trip/sample/sub-sample.validator.js.map create mode 100644 out-tsc/app/app/trip/sample/sub-samples.table.js create mode 100644 out-tsc/app/app/trip/sample/sub-samples.table.js.map create mode 100644 out-tsc/app/app/trip/sample/testing/sample-data.test.js create mode 100644 out-tsc/app/app/trip/sample/testing/sample-data.test.js.map create mode 100644 out-tsc/app/app/trip/sample/testing/sample-tree.test.js create mode 100644 out-tsc/app/app/trip/sample/testing/sample-tree.test.js.map create mode 100644 out-tsc/app/app/trip/scientific-cruise/scientific-cruise-routing.module.js create mode 100644 out-tsc/app/app/trip/scientific-cruise/scientific-cruise-routing.module.js.map create mode 100644 out-tsc/app/app/trip/scientific-cruise/scientific-cruise.config.js create mode 100644 out-tsc/app/app/trip/scientific-cruise/scientific-cruise.config.js.map create mode 100644 out-tsc/app/app/trip/scientific-cruise/scientific-cruise.filter.js create mode 100644 out-tsc/app/app/trip/scientific-cruise/scientific-cruise.filter.js.map create mode 100644 out-tsc/app/app/trip/scientific-cruise/scientific-cruise.model.js create mode 100644 out-tsc/app/app/trip/scientific-cruise/scientific-cruise.model.js.map create mode 100644 out-tsc/app/app/trip/scientific-cruise/scientific-cruise.module.js create mode 100644 out-tsc/app/app/trip/scientific-cruise/scientific-cruise.module.js.map create mode 100644 out-tsc/app/app/trip/scientific-cruise/scientific-cruise.service.js create mode 100644 out-tsc/app/app/trip/scientific-cruise/scientific-cruise.service.js.map create mode 100644 out-tsc/app/app/trip/scientific-cruise/scientific-cruise.table.js create mode 100644 out-tsc/app/app/trip/scientific-cruise/scientific-cruise.table.js.map create mode 100644 out-tsc/app/app/trip/trip-context.service.js create mode 100644 out-tsc/app/app/trip/trip-context.service.js.map create mode 100644 out-tsc/app/app/trip/trip.config.js create mode 100644 out-tsc/app/app/trip/trip.config.js.map create mode 100644 out-tsc/app/app/trip/trip.errors.js create mode 100644 out-tsc/app/app/trip/trip.errors.js.map create mode 100644 out-tsc/app/app/trip/trip.testing.module.js create mode 100644 out-tsc/app/app/trip/trip.testing.module.js.map create mode 100644 out-tsc/app/app/trip/trip/offline/trip-offline.modal.js create mode 100644 out-tsc/app/app/trip/trip/offline/trip-offline.modal.js.map create mode 100644 out-tsc/app/app/trip/trip/report/base-trip.report.js create mode 100644 out-tsc/app/app/trip/trip/report/base-trip.report.js.map create mode 100644 out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report-routing.module.js create mode 100644 out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report-routing.module.js.map create mode 100644 out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.model.js create mode 100644 out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.model.js.map create mode 100644 out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.module.js create mode 100644 out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.module.js.map create mode 100644 out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.service.js create mode 100644 out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.service.js.map create mode 100644 out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip.report.js create mode 100644 out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip.report.js.map create mode 100644 out-tsc/app/app/trip/trip/report/trip-report-routing.module.js create mode 100644 out-tsc/app/app/trip/trip/report/trip-report-routing.module.js.map create mode 100644 out-tsc/app/app/trip/trip/report/trip-report.model.js create mode 100644 out-tsc/app/app/trip/trip/report/trip-report.model.js.map create mode 100644 out-tsc/app/app/trip/trip/report/trip-report.module.js create mode 100644 out-tsc/app/app/trip/trip/report/trip-report.module.js.map create mode 100644 out-tsc/app/app/trip/trip/report/trip-report.service.js create mode 100644 out-tsc/app/app/trip/trip/report/trip-report.service.js.map create mode 100644 out-tsc/app/app/trip/trip/report/trip.report.js create mode 100644 out-tsc/app/app/trip/trip/report/trip.report.js.map create mode 100644 out-tsc/app/app/trip/trip/trash/trip-trash.modal.js create mode 100644 out-tsc/app/app/trip/trip/trash/trip-trash.modal.js.map create mode 100644 out-tsc/app/app/trip/trip/trip-ref.model.js create mode 100644 out-tsc/app/app/trip/trip/trip-ref.model.js.map create mode 100644 out-tsc/app/app/trip/trip/trip-routing.module.js create mode 100644 out-tsc/app/app/trip/trip/trip-routing.module.js.map create mode 100644 out-tsc/app/app/trip/trip/trip.filter.js create mode 100644 out-tsc/app/app/trip/trip/trip.filter.js.map create mode 100644 out-tsc/app/app/trip/trip/trip.form.js create mode 100644 out-tsc/app/app/trip/trip/trip.form.js.map create mode 100644 out-tsc/app/app/trip/trip/trip.model.js create mode 100644 out-tsc/app/app/trip/trip/trip.model.js.map create mode 100644 out-tsc/app/app/trip/trip/trip.module.js create mode 100644 out-tsc/app/app/trip/trip/trip.module.js.map create mode 100644 out-tsc/app/app/trip/trip/trip.page.js create mode 100644 out-tsc/app/app/trip/trip/trip.page.js.map create mode 100644 out-tsc/app/app/trip/trip/trip.service.js create mode 100644 out-tsc/app/app/trip/trip/trip.service.js.map create mode 100644 out-tsc/app/app/trip/trip/trip.validator.js create mode 100644 out-tsc/app/app/trip/trip/trip.validator.js.map create mode 100644 out-tsc/app/app/trip/trip/trips.table.js create mode 100644 out-tsc/app/app/trip/trip/trips.table.js.map create mode 100644 out-tsc/app/app/vessel/form/form-vessel.js create mode 100644 out-tsc/app/app/vessel/form/form-vessel.js.map create mode 100644 out-tsc/app/app/vessel/list/vessels.page.js create mode 100644 out-tsc/app/app/vessel/list/vessels.page.js.map create mode 100644 out-tsc/app/app/vessel/list/vessels.table.js create mode 100644 out-tsc/app/app/vessel/list/vessels.table.js.map create mode 100644 out-tsc/app/app/vessel/modal/select-vessel.modal.js create mode 100644 out-tsc/app/app/vessel/modal/select-vessel.modal.js.map create mode 100644 out-tsc/app/app/vessel/modal/vessel-modal.js create mode 100644 out-tsc/app/app/vessel/modal/vessel-modal.js.map create mode 100644 out-tsc/app/app/vessel/page/vessel-features-history.component.js create mode 100644 out-tsc/app/app/vessel/page/vessel-features-history.component.js.map create mode 100644 out-tsc/app/app/vessel/page/vessel-registration-history.component.js create mode 100644 out-tsc/app/app/vessel/page/vessel-registration-history.component.js.map create mode 100644 out-tsc/app/app/vessel/page/vessel.page.js create mode 100644 out-tsc/app/app/vessel/page/vessel.page.js.map create mode 100644 out-tsc/app/app/vessel/services/config/vessel.config.js create mode 100644 out-tsc/app/app/vessel/services/config/vessel.config.js.map create mode 100644 out-tsc/app/app/vessel/services/errors.js create mode 100644 out-tsc/app/app/vessel/services/errors.js.map create mode 100644 out-tsc/app/app/vessel/services/filter/vessel.filter.js create mode 100644 out-tsc/app/app/vessel/services/filter/vessel.filter.js.map create mode 100644 out-tsc/app/app/vessel/services/model/vessel.model.js create mode 100644 out-tsc/app/app/vessel/services/model/vessel.model.js.map create mode 100644 out-tsc/app/app/vessel/services/validator/vessel-features.validator.js create mode 100644 out-tsc/app/app/vessel/services/validator/vessel-features.validator.js.map create mode 100644 out-tsc/app/app/vessel/services/validator/vessel-registration.validator.js create mode 100644 out-tsc/app/app/vessel/services/validator/vessel-registration.validator.js.map create mode 100644 out-tsc/app/app/vessel/services/validator/vessel.validator.js create mode 100644 out-tsc/app/app/vessel/services/validator/vessel.validator.js.map create mode 100644 out-tsc/app/app/vessel/services/vessel-features.service.js create mode 100644 out-tsc/app/app/vessel/services/vessel-features.service.js.map create mode 100644 out-tsc/app/app/vessel/services/vessel-registration.service.js create mode 100644 out-tsc/app/app/vessel/services/vessel-registration.service.js.map create mode 100644 out-tsc/app/app/vessel/services/vessel-service.js create mode 100644 out-tsc/app/app/vessel/services/vessel-service.js.map create mode 100644 out-tsc/app/app/vessel/status/vessel-status-to-color.pipe.js create mode 100644 out-tsc/app/app/vessel/status/vessel-status-to-color.pipe.js.map create mode 100644 out-tsc/app/app/vessel/vessel-routing.module.js create mode 100644 out-tsc/app/app/vessel/vessel-routing.module.js.map create mode 100644 out-tsc/app/app/vessel/vessel.module.js create mode 100644 out-tsc/app/app/vessel/vessel.module.js.map create mode 100644 out-tsc/app/environments/environment.class.js create mode 100644 out-tsc/app/environments/environment.class.js.map create mode 100644 out-tsc/app/environments/environment.js create mode 100644 out-tsc/app/environments/environment.js.map create mode 100644 out-tsc/app/main.js create mode 100644 out-tsc/app/main.js.map create mode 100644 out-tsc/app/polyfills.js create mode 100644 out-tsc/app/polyfills.js.map create mode 100644 out-tsc/app/tsconfig.app.tsbuildinfo create mode 100644 out-tsc/app/zone-flags.js create mode 100644 out-tsc/app/zone-flags.js.map create mode 100644 src/assets/img/logo/logo-obsmer-square.png create mode 100644 src/assets/img/logo/logo-obsmer.png diff --git a/android/app/build.gradle b/android/app/build.gradle index 65b0c234d..3e375254b 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "net.sumaris.app" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 20812 - versionName "2.8.12" + versionCode 20901 + versionName "2.9.0-alpha1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index f3b863d7f..9d6d914fd 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ - + diff --git a/install.sh b/install.sh index f3c6069ed..9f78b6cf0 100755 --- a/install.sh +++ b/install.sh @@ -15,7 +15,7 @@ if [[ "_$INSTALL_DIR" == "_" ]]; then fi latest_version() { - echo "2.8.12" #lastest + echo "2.9.0-alpha1" #lastest } api_release_url() { diff --git a/out-tsc/app/app/admin/admin-routing.module.js b/out-tsc/app/app/admin/admin-routing.module.js new file mode 100644 index 000000000..129a17336 --- /dev/null +++ b/out-tsc/app/app/admin/admin-routing.module.js @@ -0,0 +1,39 @@ +import { __decorate } from "tslib"; +import { RouterModule } from '@angular/router'; +import { AuthGuardService, UsersPage } from '@sumaris-net/ngx-components'; +import { NgModule } from '@angular/core'; +import { ConfigurationPage } from './config/configuration.page'; +import { AppAdminModule } from './admin.module'; +const routes = [ + { + path: 'users', + pathMatch: 'full', + component: UsersPage, + canActivate: [AuthGuardService], + data: { + profile: 'ADMIN' + } + }, + { + path: 'config', + pathMatch: 'full', + component: ConfigurationPage, + canActivate: [AuthGuardService], + data: { + profile: 'ADMIN' + } + } +]; +let AppAdminRoutingModule = class AppAdminRoutingModule { +}; +AppAdminRoutingModule = __decorate([ + NgModule({ + imports: [ + AppAdminModule, + RouterModule.forChild(routes) + ], + exports: [RouterModule] + }) +], AppAdminRoutingModule); +export { AppAdminRoutingModule }; +//# sourceMappingURL=admin-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/admin/admin-routing.module.js.map b/out-tsc/app/app/admin/admin-routing.module.js.map new file mode 100644 index 000000000..ce167c978 --- /dev/null +++ b/out-tsc/app/app/admin/admin-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admin-routing.module.js","sourceRoot":"","sources":["../../../../src/app/admin/admin-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,CAAC,gBAAgB,CAAC;QAC/B,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO;SACjB;KACF;IACD;QACE,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,iBAAiB;QAC5B,WAAW,EAAE,CAAC,gBAAgB,CAAC;QAC/B,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO;SACjB;KACF;CACF,CAAC;AASK,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;CAAI,CAAA;AAAzB,qBAAqB;IAPjC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,cAAc;YACd,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC9B;QACD,OAAO,EAAE,CAAC,YAAY,CAAC;KACxB,CAAC;GACW,qBAAqB,CAAI;SAAzB,qBAAqB"} \ No newline at end of file diff --git a/out-tsc/app/app/admin/admin.module.js b/out-tsc/app/app/admin/admin.module.js new file mode 100644 index 000000000..9dec4f922 --- /dev/null +++ b/out-tsc/app/app/admin/admin.module.js @@ -0,0 +1,26 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { AdminModule } from '@sumaris-net/ngx-components'; +import { AppConfigurationModule } from '@app/admin/config/configuration.module'; +let AppAdminModule = class AppAdminModule { + constructor() { + console.debug('[admin] Creating module'); + } +}; +AppAdminModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + AdminModule, + // Sub modules + AppConfigurationModule + ], + exports: [ + AppConfigurationModule + ] + }), + __metadata("design:paramtypes", []) +], AppAdminModule); +export { AppAdminModule }; +//# sourceMappingURL=admin.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/admin/admin.module.js.map b/out-tsc/app/app/admin/admin.module.js.map new file mode 100644 index 000000000..ce7994ca5 --- /dev/null +++ b/out-tsc/app/app/admin/admin.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admin.module.js","sourceRoot":"","sources":["../../../../src/app/admin/admin.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAczE,IAAM,cAAc,GAApB,MAAM,cAAc;IAEzB;QACE,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC3C,CAAC;CACF,CAAA;AALY,cAAc;IAZ1B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,WAAW;YAEX,cAAc;YACd,sBAAsB;SACvB;QACD,OAAO,EAAE;YACP,sBAAsB;SACvB;KACF,CAAC;;GACW,cAAc,CAK1B;SALY,cAAc"} \ No newline at end of file diff --git a/out-tsc/app/app/admin/config/configuration.module.js b/out-tsc/app/app/admin/config/configuration.module.js new file mode 100644 index 000000000..d9c9358ab --- /dev/null +++ b/out-tsc/app/app/admin/config/configuration.module.js @@ -0,0 +1,36 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { ConfigurationPage } from './configuration.page'; +import { AdminModule } from '@sumaris-net/ngx-components'; +import { NgxJdenticonModule } from 'ngx-jdenticon'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppSocialModule } from '@app/social/social.module'; +import { AppSoftwareModule } from '@app/referential/software/software.module'; +import { AppJobAdminModule } from '@app/admin/job/job-list.module'; +let AppConfigurationModule = class AppConfigurationModule { +}; +AppConfigurationModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + AdminModule, + NgxJdenticonModule, + // App modules + AppCoreModule, + AppSocialModule, + AppReferentialModule, + AppSoftwareModule, + AppJobAdminModule + ], + declarations: [ + ConfigurationPage + ], + exports: [ + ConfigurationPage + ] + }) +], AppConfigurationModule); +export { AppConfigurationModule }; +//# sourceMappingURL=configuration.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/admin/config/configuration.module.js.map b/out-tsc/app/app/admin/config/configuration.module.js.map new file mode 100644 index 000000000..48462990c --- /dev/null +++ b/out-tsc/app/app/admin/config/configuration.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"configuration.module.js","sourceRoot":"","sources":["../../../../../src/app/admin/config/configuration.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAa,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAsB5D,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;CAElC,CAAA;AAFY,sBAAsB;IApBlC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,WAAW;YACX,kBAAkB;YAElB,cAAc;YACd,aAAa;YACb,eAAe;YACf,oBAAoB;YACpB,iBAAiB;YACjB,iBAAiB;SAClB;QACD,YAAY,EAAE;YACZ,iBAAiB;SAClB;QACD,OAAO,EAAE;YACP,iBAAiB;SAClB;KACF,CAAC;GACW,sBAAsB,CAElC;SAFY,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/admin/config/configuration.page.js b/out-tsc/app/app/admin/config/configuration.page.js new file mode 100644 index 000000000..6127ea730 --- /dev/null +++ b/out-tsc/app/app/admin/config/configuration.page.js @@ -0,0 +1,116 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, Component, Inject, Injector, Optional } from '@angular/core'; +import { Alerts, APP_CONFIG_OPTIONS, Configuration, firstNotNilPromise, isNotNil, NetworkService, } from '@sumaris-net/ngx-components'; +import { SoftwareValidatorService } from '@app/referential/services/validator/software.validator'; +import { BehaviorSubject } from 'rxjs'; +import { AbstractSoftwarePage } from '@app/referential/software/abstract-software.page'; +import { environment } from '@environments/environment'; +import { filter, map } from 'rxjs/operators'; +import { ConfigurationService } from '@app/admin/config/configuration.service'; +let ConfigurationPage = class ConfigurationPage extends AbstractSoftwarePage { + constructor(injector, validatorService, dataService, network, configOptions) { + super(injector, Configuration, dataService, validatorService, configOptions, { + tabCount: 5 + }); + this.network = network; + this.$partners = new BehaviorSubject(null); + this.$cacheStatistics = new BehaviorSubject(null); + this.$cacheStatisticTotal = new BehaviorSubject(null); + this.$cacheStatisticsCount = this.$cacheStatistics.pipe(filter(isNotNil), map(data => (data === null || data === void 0 ? void 0 : data.length) || 0)); + // default values + this.defaultBackHref = null; + this.debug = !environment.production; + } + get config() { + return this.data && this.data || undefined; + } + load(id, opts) { + const _super = Object.create(null, { + load: { get: () => super.load } + }); + return __awaiter(this, void 0, void 0, function* () { + const config = yield firstNotNilPromise(this.dataService.config); + // Force the load of the config + yield _super.load.call(this, config.id, Object.assign(Object.assign({}, opts), { fetchPolicy: 'network-only' })); + this.$cacheStatistics.subscribe(value => this.computeStatisticTotal(value)); + // Get server cache statistics + yield this.loadCacheStat(); + }); + } + setValue(data) { + if (!data) + return; // Skip + const json = data.asObject(); + this.$partners.next(json.partners); + super.setValue(data); + } + getJsonValueToSave() { + const _super = Object.create(null, { + getJsonValueToSave: { get: () => super.getJsonValueToSave } + }); + return __awaiter(this, void 0, void 0, function* () { + const json = yield _super.getJsonValueToSave.call(this); + // Re add partners + json.partners = this.$partners.getValue(); + return json; + }); + } + clearCache(event, cacheName) { + return __awaiter(this, void 0, void 0, function* () { + const confirm = yield Alerts.askActionConfirmation(this.alertCtrl, this.translate, true, event); + if (confirm) { + yield this.network.clearCache(); + yield this.settings.removeOfflineFeatures(); + yield this.dataService.clearCache({ cacheName }); + yield this.loadCacheStat(); + } + }); + } + loadCacheStat() { + return __awaiter(this, void 0, void 0, function* () { + const value = yield this.dataService.getCacheStatistics(); + const stats = Object.keys(value).map(cacheName => { + const stat = value[cacheName]; + return { + name: cacheName, + size: stat.size, + heapSize: stat.heapSize, + offHeapSize: stat.offHeapSize, + diskSize: stat.diskSize + }; + }); + this.$cacheStatistics.next(stats); + }); + } + computeStatisticTotal(stats) { + const total = { name: undefined, size: 0, heapSize: 0, offHeapSize: 0, diskSize: 0 }; + (stats || []).forEach(stat => { + total.size += stat.size; + total.heapSize += stat.heapSize; + total.offHeapSize += stat.offHeapSize; + total.diskSize += stat.diskSize; + }); + this.$cacheStatisticTotal.next(total); + } + computePageHistory(title) { + return __awaiter(this, void 0, void 0, function* () { + return null; // No page history + }); + } +}; +ConfigurationPage = __decorate([ + Component({ + selector: 'app-configuration-page', + templateUrl: './configuration.page.html', + styleUrls: ['./configuration.page.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __param(4, Optional()), + __param(4, Inject(APP_CONFIG_OPTIONS)), + __metadata("design:paramtypes", [Injector, + SoftwareValidatorService, + ConfigurationService, + NetworkService, Object]) +], ConfigurationPage); +export { ConfigurationPage }; +//# sourceMappingURL=configuration.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/admin/config/configuration.page.js.map b/out-tsc/app/app/admin/config/configuration.page.js.map new file mode 100644 index 000000000..29500f5cf --- /dev/null +++ b/out-tsc/app/app/admin/config/configuration.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"configuration.page.js","sourceRoot":"","sources":["../../../../../src/app/admin/config/configuration.page.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,aAAa,EAGb,kBAAkB,EAGlB,QAAQ,EACR,cAAc,GACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,wDAAwD,CAAC;AAClG,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAgBxE,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,oBAAyD;IAW9F,YACE,QAAkB,EAClB,gBAA0C,EAC1C,WAAiC,EACvB,OAAuB,EACO,aAAqC;QAE7E,KAAK,CAAC,QAAQ,EACZ,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb;YACE,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;QAVK,YAAO,GAAP,OAAO,CAAgB;QAbnC,cAAS,GAAG,IAAI,eAAe,CAAe,IAAI,CAAC,CAAC;QACpD,qBAAgB,GAAG,IAAI,eAAe,CAAmB,IAAI,CAAC,CAAC;QAC/D,yBAAoB,GAAG,IAAI,eAAe,CAAiB,IAAI,CAAC,CAAC;QACjE,0BAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,KAAI,CAAC,CAAC,CAAC,CAAC;QAsBnG,iBAAiB;QACjB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,IAAI,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;IACvC,CAAC;IAxBD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,IAAI,IAAK,IAAI,CAAC,IAAsB,IAAI,SAAS,CAAC;IAChE,CAAC;IAwBK,IAAI,CAAC,EAAW,EAAE,IAA+B;;;;;YAErD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAEjE,+BAA+B;YAC/B,MAAM,OAAM,IAAI,YAAC,MAAM,CAAC,EAAE,kCAAM,IAAI,KAAE,WAAW,EAAE,cAAc,IAAE,CAAC;YAEpE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;YAE5E,8BAA8B;YAC9B,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;KAAA;IAES,QAAQ,CAAC,IAAmB;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,OAAO;QAE1B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEnC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAEe,kBAAkB;;;;;YAChC,MAAM,IAAI,GAAG,MAAM,OAAM,kBAAkB,WAAE,CAAC;YAE9C,kBAAkB;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YAE1C,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAGK,UAAU,CAAC,KAAa,EAAE,SAAkB;;YAChD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAChG,IAAI,OAAO,EAAE;gBACX,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBAChC,MAAM,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;gBAC5C,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAC,SAAS,EAAC,CAAC,CAAC;gBAC/C,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;aAC5B;QACH,CAAC;KAAA;IAEK,aAAa;;YACjB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAqB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gBACjE,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC9B,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACxB,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;KAAA;IAED,qBAAqB,CAAC,KAAuB;QAC3C,MAAM,KAAK,GAAmB,EAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAC,CAAC;QACnG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC3B,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;YACxB,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;YAChC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC;YACtC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAEe,kBAAkB,CAAC,KAAa;;YAC9C,OAAO,IAAI,CAAC,CAAC,kBAAkB;QACjC,CAAC;KAAA;CACF,CAAA;AAxGY,iBAAiB;IAN7B,SAAS,CAAC;QACT,QAAQ,EAAE,wBAAwB;QAClC,WAAW,EAAE,2BAA2B;QACxC,SAAS,EAAE,CAAC,2BAA2B,CAAC;QACxC,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;IAiBG,WAAA,QAAQ,EAAE,CAAA;IAAE,WAAA,MAAM,CAAC,kBAAkB,CAAC,CAAA;qCAJ7B,QAAQ;QACA,wBAAwB;QAC7B,oBAAoB;QACd,cAAc;GAfxB,iBAAiB,CAwG7B;SAxGY,iBAAiB"} \ No newline at end of file diff --git a/out-tsc/app/app/admin/config/configuration.service.js b/out-tsc/app/app/admin/config/configuration.service.js new file mode 100644 index 000000000..04e466206 --- /dev/null +++ b/out-tsc/app/app/admin/config/configuration.service.js @@ -0,0 +1,52 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { ConfigFragments, ConfigService } from '@sumaris-net/ngx-components'; +import { gql } from '@apollo/client/core'; +const Queries = { + // Load configuration, without inherited properties + load: gql ` + query Configuration($inherited: Boolean) { + data: configuration(inherited: $inherited) { + ...ConfigFragment + } + } + ${ConfigFragments.config} + `, +}; +let ConfigurationService = class ConfigurationService { + constructor(delegateService) { + this.delegateService = delegateService; + } + get config() { + return this.delegateService.config; + } + load(id, opts) { + return this.delegateService.load(id, Object.assign(Object.assign({}, opts), { query: Queries.load, variables: { id, inherited: false } })); + } + canUserWrite(data, opts) { + return this.delegateService.canUserWrite(data, opts); + } + save(data, opts) { + return this.delegateService.save(data); + } + delete(data, opts) { + return this.delegateService.delete(data, opts); + } + listenChanges(id, opts) { + return this.delegateService.listenChanges(id, opts); + } + getCacheStatistics() { + return this.delegateService.getCacheStatistics(); + } + clearCache(opts) { + return this.delegateService.clearCache(opts); + } +}; +ConfigurationService = __decorate([ + Injectable({ + providedIn: 'root', + }), + __metadata("design:paramtypes", [ConfigService]) +], ConfigurationService); +export { ConfigurationService }; +//# sourceMappingURL=configuration.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/admin/config/configuration.service.js.map b/out-tsc/app/app/admin/config/configuration.service.js.map new file mode 100644 index 000000000..78a37fbda --- /dev/null +++ b/out-tsc/app/app/admin/config/configuration.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"configuration.service.js","sourceRoot":"","sources":["../../../../../src/app/admin/config/configuration.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,aAAa,EAA2D,MAAM,6BAA6B,CAAC;AAEtI,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,MAAM,OAAO,GAAkB;IAC7B,mDAAmD;IACnD,IAAI,EAAE,GAAG,CAAA;;;;;;MAML,eAAe,CAAC,MAAM;GACzB;CACF,CAAC;AAKK,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAE/B,YAAoB,eAA8B;QAA9B,oBAAe,GAAf,eAAe,CAAe;IAClD,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;IACrC,CAAC;IAED,IAAI,CAAC,EAAO,EAAE,IAA+B;QAC3C,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,kCAAM,IAAI,KAC3C,KAAK,EAAE,OAAO,CAAC,IAAI,EACnB,SAAS,EAAE,EAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAC,IACjC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,IAAmB,EAAE,IAAU;QAC1C,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,IAAmB,EAAE,IAAU;QAClC,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,IAAmB,EAAE,IAAU;QACpC,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,aAAa,CAAC,EAAO,EAAE,IAAU;QAC/B,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;IACnD,CAAC;IAED,UAAU,CAAC,IAA6B;QACtC,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;CACF,CAAA;AAvCY,oBAAoB;IAHhC,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;qCAGqC,aAAa;GAFvC,oBAAoB,CAuChC;SAvCY,oBAAoB"} \ No newline at end of file diff --git a/out-tsc/app/app/admin/job/job-list.component.js b/out-tsc/app/app/admin/job/job-list.component.js new file mode 100644 index 000000000..4bfdca708 --- /dev/null +++ b/out-tsc/app/app/admin/job/job-list.component.js @@ -0,0 +1,372 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, Optional, ViewChild, } from '@angular/core'; +import { ActionSheetController, AlertController } from '@ionic/angular'; +import { TranslateService } from '@ngx-translate/core'; +import { RxState } from '@rx-angular/state'; +import { JobFilter, JobStatusLabels, JobStatusList, JobStatusUtils } from '@app/social/job/job.model'; +import { JobService } from '@app/social/job/job.service'; +import { first, map, switchMap, takeUntil, tap } from 'rxjs/operators'; +import { AccountService, Alerts, APP_JOB_PROGRESSION_SERVICE, EntityUtils, isEmptyArray, isNotEmptyArray, isNotNil, LocalSettingsService, MatAutocompleteConfigHolder, PersonService, StatusIds, } from '@sumaris-net/ngx-components'; +import { BehaviorSubject, merge, Subscription } from 'rxjs'; +import { ProgressionModel } from '@app/shared/progression/progression.model'; +import { UntypedFormBuilder } from '@angular/forms'; +import { MatExpansionPanel } from '@angular/material/expansion'; +let JobListComponent = class JobListComponent { + constructor(translate, alertCtrl, actionSheetCtrl, jobService, accountService, settings, personService, formBuilder, cd, state, jobProgressionService) { + this.translate = translate; + this.alertCtrl = alertCtrl; + this.actionSheetCtrl = actionSheetCtrl; + this.jobService = jobService; + this.accountService = accountService; + this.settings = settings; + this.personService = personService; + this.formBuilder = formBuilder; + this.cd = cd; + this.state = state; + this.jobProgressionService = jobProgressionService; + this.jobs$ = this.state.select('jobs'); + this.jobsCount$ = this.state.select('jobs', 'length'); + this._subscription = new Subscription(); + this.jobSubscriptions = {}; + this.jobProgressions = {}; + this.onRefresh = new EventEmitter(); + this.showToolbar = true; + this.canAdd = false; + this.filterPanelFloating = true; + this.state.set({ + types: null, + issuer: null, + status: null // All + }); + this.filterForm = formBuilder.group({ + status: [null], + types: [null], + issuer: [null] + }); + this.autocompleteHelper = new MatAutocompleteConfigHolder(this.settings && { + getUserAttributes: (a, b) => this.settings.getFieldDisplayAttributes(a, b) + }); + this.autocompleteFields = this.autocompleteHelper.fields; + } + set jobs(jobs) { + this.state.set('jobs', () => jobs); + } + get jobs() { + return this.state.get('jobs'); + } + set availableTypes(types) { + this.state.set('availableTypes', () => types); + } + get availableTypes() { + return this.state.get('availableTypes'); + } + set issuer(issuer) { + this.state.set('issuer', () => issuer); + } + get issuer() { + return this.state.get('issuer'); + } + set status(status) { + this.state.set('status', () => status); + } + get status() { + return this.state.get('status'); + } + set types(types) { + this.state.set('types', () => types); + } + get types() { + return this.state.get('types'); + } + get total() { + var _a; + return ((_a = this.jobs) === null || _a === void 0 ? void 0 : _a.length) || 0; + } + ngOnInit() { + this.state.connect('jobs', merge(this.state.select(['issuer', 'status', 'types'], res => res), this.onRefresh.pipe(map(_ => ({ issuer: this.issuer, status: this.status, types: this.types })))) + .pipe(switchMap(({ issuer, status, types }) => { + // Read filter's type + const filter = this.getFilter({ issuer, status, types }); + console.debug('[job-list] Refreshing using filter: ', filter); + return this.jobService.watchAll(filter, { sortBy: 'id', sortDirection: 'DESC' }, { fetchPolicy: 'cache-and-network' }) + .pipe( + // Listen for new jobs (if new job => force refresh) + tap(jobs => { + const excludedIds = jobs === null || jobs === void 0 ? void 0 : jobs.map(j => j.id); + this._subscription.add(this.jobService.listenChanges({ issuer, status, excludedIds }) + .pipe(takeUntil(this.onRefresh), first()) + .subscribe(_ => this.onRefresh.emit())); + })); + }), map(jobs => { + this.filterForm.markAsPristine(); + const jobIdsToUnsubscribe = Object.keys(this.jobSubscriptions); + jobs.forEach(job => { + // Add icon/color + this.decorate(job); + // Watch progression, if not finished + if (!JobStatusUtils.isFinished(job.status) && this.jobProgressionService) { + job.progression = this.jobProgressions[job.id] || new ProgressionModel(); + job.status = job.status === 'PENDING' && job.progression.total > 0 ? 'RUNNING' : job.status; + this.jobProgressions[job.id] = job.progression; + // Subscribe to job progression + if (!this.jobSubscriptions[job.id]) { + this.jobSubscriptions[job.id] = this.jobProgressionService.listenChanges(job.id) + .subscribe(progression => job.progression.set(Object.assign({}, progression))); + } + else { + const oldIndex = jobIdsToUnsubscribe.indexOf(job.id.toString()); + if (oldIndex !== -1) { + jobIdsToUnsubscribe.splice(oldIndex, 1); + } + } + } + else { + job.progression = null; + if (this.jobSubscriptions[job.id]) { + this.jobSubscriptions[job.id].unsubscribe(); + delete this.jobSubscriptions[job.id]; + delete this.jobProgressions[job.id]; + } + } + }); + // Unsubscribe to old jobs + jobIdsToUnsubscribe.forEach(jobId => { + var _a; + (_a = this.jobSubscriptions[jobId]) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + this.jobSubscriptions[jobId] = null; + }); + return jobs; + }) + // DEBUG + // tap(jobs => console.log('Found jobs:', jobs)) + )); + this.state.connect('availableTypes', this.jobService.watchTypes().pipe(map(availableTypes => { + return availableTypes.map(label => { + const i18nKey = 'SOCIAL.JOB.TYPE_ENUM.' + label.toUpperCase(); + const name = this.translate.instant(i18nKey); + if (name === i18nKey) { + console.warn(`[job-list] Ignoring job type '${label}', because i18n entry '${i18nKey}' cannot be found`); + return null; + } + return { label, name }; + }).filter(isNotNil); + }), tap(availableTypes => { + this.canAdd = this.accountService.isAdmin() && isNotEmptyArray(availableTypes); + }))); + // Issuer combo + const personAttributes = this.settings.getFieldDisplayAttributes('person', ['lastName', 'firstName']); + this.registerAutocompleteField('issuer', { + attributes: personAttributes, + service: this.personService, + filter: { + status: [StatusIds.ENABLE, StatusIds.TEMPORARY] + }, + showAllOnFocus: true + }); + // Type combo + this.registerAutocompleteField('types', { + attributes: ['label', 'name'], + items: this.state.select('availableTypes'), + showAllOnFocus: true, + displayWith: (obj) => obj.label + }); + // Status combo + const $status = new BehaviorSubject(null); + const statusNames = JobStatusList.map(s => s.name); + this._subscription.add(this.translate.get(statusNames) + .subscribe(i18nStatusNames => { + const statusList = JobStatusList.map(status => { + return Object.assign(Object.assign({}, status), { name: i18nStatusNames[status.name] }); + }); + $status.next(statusList); + })); + this.registerAutocompleteField('status', { + attributes: ['name'], + items: $status, + showAllOnFocus: true, + displayWith: (obj) => obj.name + }); + } + ngOnDestroy() { + this._subscription.unsubscribe(); + Object.values(this.jobSubscriptions).forEach(s => s === null || s === void 0 ? void 0 : s.unsubscribe()); + } + registerAutocompleteField(fieldName, config) { + this.autocompleteHelper.add(fieldName, config); + } + getFilter({ issuer, types, status }) { + // Issuer + let filterIssuer = this.filterForm.get('issuer').value; + issuer = EntityUtils.isNotEmpty(filterIssuer, 'id') ? ((filterIssuer === null || filterIssuer === void 0 ? void 0 : filterIssuer.pubkey) || 'NO_PUBKEY') : issuer; + // Type + let filterType = this.filterForm.get('types').value; + types = isNotEmptyArray(filterType) ? filterType.map(t => t.label) : types; + // Read filter's status + let filterStatus = this.filterForm.get('status').value; + status = isNotEmptyArray(filterStatus) ? filterStatus.map(t => t.label) : status; + this.filterCriteriaCount = (EntityUtils.isNotEmpty(filterIssuer, 'id') ? 1 : 0) + (isNotEmptyArray(filterType) ? 1 : 0) + (isNotEmptyArray(filterStatus) ? 1 : 0); + if (isEmptyArray(status)) { + status = Object.values(JobStatusLabels); // All + } + return JobFilter.fromObject({ issuer, status, types }); + } + openAddJobMenu() { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[job-list] Click button to add new job'); + const actionButtons = (this.availableTypes || []) + .map(({ label, name }) => ({ + text: this.translate.instant(name), + handler: () => this.runJob(label), + })); + // No type: skip + if (!actionButtons.length) + return; + const actionSheet = yield this.actionSheetCtrl.create({ + header: this.translate.instant('SOCIAL.JOB.JOB_TYPE'), + buttons: actionButtons + }); + yield actionSheet.present(); + }); + } + runJob(type) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + console.debug(`[job-list] Running job ${type} ....`); + try { + const job = yield this.jobService.runJob(type); + } + catch (err) { + console.error(err); + const message = this.translate.instant(((_a = err === null || err === void 0 ? void 0 : err.details) === null || _a === void 0 ? void 0 : _a.message) || 'SOCIAL.JOB.ERROR.RUN_JOB_ERROR'); + yield Alerts.showError(message, this.alertCtrl, this.translate); + } + finally { + return true; // Should close the actions + } + }); + } + cancel(event, job) { + return __awaiter(this, void 0, void 0, function* () { + console.warn('[job-list] Cancelling job #' + job.id); + event.preventDefault(); + event.stopPropagation(); + yield this.jobService.cancelJob(job); + this.onRefresh.emit(); + }); + } + openDetail(job) { + return __awaiter(this, void 0, void 0, function* () { + if (job.status !== 'RUNNING') { + job = yield this.jobService.load(job.id); + yield this.jobService.openJobReport(job); + } + }); + } + decorate(job) { + const status = job.status || 'PENDING'; + const color = (status === 'PENDING' && 'secondary') + || (status === 'RUNNING' && 'tertiary') + || (status === 'SUCCESS' && 'success') + || 'danger'; + const matIcon = (status === 'PENDING' && 'schedule') + || (status === 'RUNNING' && 'pending') + || (status === 'SUCCESS' && 'check_circle') + || (status === 'WARNING' && 'warning') + || (status === 'CANCELLED' && 'cancel') + || 'error'; + job.icon = { matIcon, color }; + } + setFilter(filter) { + } + resetFilter() { + this.filterForm.reset({ issuer: null, status: null, types: null }, { emitEvent: true }); + this.filterCriteriaCount = 0; + if (this.filterExpansionPanel && this.filterPanelFloating) + this.filterExpansionPanel.close(); + this.onRefresh.emit(); + } + closeFilterPanel() { + if (this.filterExpansionPanel) + this.filterExpansionPanel.close(); + this.filterPanelFloating = true; + } + applyFilterAndClosePanel(event) { + this.onRefresh.emit(event); + if (this.filterExpansionPanel && this.filterPanelFloating) + this.filterExpansionPanel.close(); + } + toggleFilterPanelFloating() { + this.filterPanelFloating = !this.filterPanelFloating; + this.markForCheck(); + } + markForCheck() { + this.cd.markForCheck(); + } + trackByFn(index, job) { + return job.id; + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], JobListComponent.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], JobListComponent.prototype, "canAdd", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], JobListComponent.prototype, "filterPanelFloating", void 0); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], JobListComponent.prototype, "jobs", null); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], JobListComponent.prototype, "availableTypes", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], JobListComponent.prototype, "issuer", null); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], JobListComponent.prototype, "status", null); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], JobListComponent.prototype, "types", null); +__decorate([ + ViewChild(MatExpansionPanel, { static: true }), + __metadata("design:type", MatExpansionPanel) +], JobListComponent.prototype, "filterExpansionPanel", void 0); +JobListComponent = __decorate([ + Component({ + selector: 'app-job-list', + templateUrl: './job-list.component.html', + styleUrls: ['./job-list.component.scss'], + providers: [RxState], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __param(10, Optional()), + __param(10, Inject(APP_JOB_PROGRESSION_SERVICE)), + __metadata("design:paramtypes", [TranslateService, + AlertController, + ActionSheetController, + JobService, + AccountService, + LocalSettingsService, + PersonService, + UntypedFormBuilder, + ChangeDetectorRef, + RxState, Object]) +], JobListComponent); +export { JobListComponent }; +//# sourceMappingURL=job-list.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/admin/job/job-list.component.js.map b/out-tsc/app/app/admin/job/job-list.component.js.map new file mode 100644 index 000000000..c002ef58c --- /dev/null +++ b/out-tsc/app/app/admin/job/job-list.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"job-list.component.js","sourceRoot":"","sources":["../../../../../src/app/admin/job/job-list.component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/admin/job/job-list.module.js b/out-tsc/app/app/admin/job/job-list.module.js new file mode 100644 index 000000000..1abd7dbd9 --- /dev/null +++ b/out-tsc/app/app/admin/job/job-list.module.js @@ -0,0 +1,27 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { TranslateModule } from '@ngx-translate/core'; +import { JobListComponent } from './job-list.component'; +import { AppIconModule, JobModule } from '@sumaris-net/ngx-components'; +import { AppSharedModule } from '@app/shared/shared.module'; +import { AppSharedProgressionModule } from '@app/shared/progression/progression.module'; +let AppJobAdminModule = class AppJobAdminModule { +}; +AppJobAdminModule = __decorate([ + NgModule({ + imports: [ + TranslateModule.forChild(), + AppSharedModule, + AppIconModule, + JobModule, + AppSharedProgressionModule + ], + declarations: [JobListComponent], + exports: [ + TranslateModule, + JobListComponent + ] + }) +], AppJobAdminModule); +export { AppJobAdminModule }; +//# sourceMappingURL=job-list.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/admin/job/job-list.module.js.map b/out-tsc/app/app/admin/job/job-list.module.js.map new file mode 100644 index 000000000..4f43e1042 --- /dev/null +++ b/out-tsc/app/app/admin/job/job-list.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"job-list.module.js","sourceRoot":"","sources":["../../../../../src/app/admin/job/job-list.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAgB,MAAM,6BAA6B,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAgBjF,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAAG,CAAA;AAApB,iBAAiB;IAd7B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,eAAe,CAAC,QAAQ,EAAE;YAC1B,eAAe;YACf,aAAa;YACb,SAAS;YACT,0BAA0B;SAC3B;QACD,YAAY,EAAE,CAAC,gBAAgB,CAAC;QAChC,OAAO,EAAE;YACP,eAAe;YACf,gBAAgB;SACjB;KACF,CAAC;GACW,iBAAiB,CAAG;SAApB,iBAAiB"} \ No newline at end of file diff --git a/out-tsc/app/app/app-routing.module.js b/out-tsc/app/app/app-routing.module.js new file mode 100644 index 000000000..13ebe7d98 --- /dev/null +++ b/out-tsc/app/app/app-routing.module.js @@ -0,0 +1,198 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { AccountPage, AuthGuardService, ComponentDirtyGuard, HomePage, RegisterConfirmPage, SettingsPage, SharedRoutingModule, } from '@sumaris-net/ngx-components'; +import { QuicklinkModule, QuicklinkStrategy } from 'ngx-quicklink'; +const routes = [ + // Core path + { + path: '', + component: HomePage, + }, + { + path: 'home/:action', + component: HomePage, + }, + { + path: 'confirm/:email/:code', + component: RegisterConfirmPage, + }, + { + path: 'account', + pathMatch: 'full', + component: AccountPage, + canActivate: [AuthGuardService], + canDeactivate: [ComponentDirtyGuard], + }, + { + path: 'settings', + pathMatch: 'full', + component: SettingsPage, + canDeactivate: [ComponentDirtyGuard], + }, + // Admin + { + path: 'admin', + canActivate: [AuthGuardService], + loadChildren: () => import('./admin/admin-routing.module').then((m) => m.AppAdminRoutingModule), + }, + // Referential + { + path: 'referential', + canActivate: [AuthGuardService], + loadChildren: () => import('./referential/referential-routing.module').then((m) => m.ReferentialRoutingModule), + }, + // Vessel + { + path: 'vessels', + canActivate: [AuthGuardService], + loadChildren: () => import('./vessel/vessel-routing.module').then((m) => m.VesselRoutingModule), + }, + // ScientificCruise + { + path: 'scientific-cruise', + data: { + profile: 'USER', + }, + loadChildren: () => import('./trip/scientific-cruise/scientific-cruise-routing.module').then((m) => m.AppScientificCruiseRoutingModule), + }, + // Trips + { + path: 'trips', + data: { + profile: 'USER', + }, + loadChildren: () => import('./trip/trip/trip-routing.module').then((m) => m.AppTripRoutingModule), + }, + // Observations + { + path: 'observations', + loadChildren: () => import('./trip/observedlocation/observed-location-routing.module').then((m) => m.AppObservedLocationRoutingModule), + }, + // Landings + { + path: 'landings', + canActivate: [AuthGuardService], + data: { + profile: 'USER', + }, + loadChildren: () => import('./trip/landing/landings-routing.module').then((m) => m.AppLandingsRoutingModule), + }, + // Extraction path + { + path: 'extraction', + canActivate: [AuthGuardService], + data: { + profile: 'GUEST', + }, + loadChildren: () => import('./extraction/extraction-routing.module').then((m) => m.AppExtractionRoutingModule), + }, + // Inbox message + { + path: 'inbox', + canActivate: [AuthGuardService], + data: { + profile: 'USER', + }, + loadChildren: () => import('./social/message/inbox-message-routing.module').then((m) => m.AppInboxMessageRoutingModule), + }, + // Shared page + { + path: 'share', + loadChildren: () => import('./social/social-routing.module').then((m) => m.SocialRoutingModule), + data: { + preload: false, + }, + }, + // Test module (disable in menu, by default - can be enabled by the Pod configuration page) + { + path: 'testing', + children: [ + { + path: '', + pathMatch: 'full', + redirectTo: 'shared', + data: { + preload: false, + }, + }, + // Shared module + { + path: 'shared', + loadChildren: () => import('./shared/shared.testing.module').then((m) => m.AppSharedTestingModule), + data: { + preload: false, + }, + }, + // Core module + { + path: 'core', + loadChildren: () => import('@sumaris-net/ngx-components').then((m) => m.CoreTestingModule), + data: { + preload: false, + }, + }, + // Social module + { + path: 'social', + loadChildren: () => import('@sumaris-net/ngx-components').then((m) => m.SocialTestingModule), + data: { + preload: false, + }, + }, + // Data module + { + path: 'data', + loadChildren: () => import('./data/data.testing.module').then((m) => m.DataTestingModule), + data: { + preload: false, + }, + }, + // Trip module + { + path: 'trip', + loadChildren: () => import('./trip/trip.testing.module').then((m) => m.TripTestingModule), + data: { + preload: false, + }, + }, + // Referential module + { + path: 'referential', + loadChildren: () => import('./referential/referential.testing.module').then((m) => m.ReferentialTestingModule), + data: { + preload: false, + }, + }, + ], + }, + // Other route redirection (should at the end of the array) + { + path: '**', + redirectTo: '/', + }, +]; +let AppRoutingModule = class AppRoutingModule { +}; +AppRoutingModule = __decorate([ + NgModule({ + imports: [ + QuicklinkModule, + SharedRoutingModule, + RouterModule.forRoot(routes, { + // DEBUG + //enableTracing: !environment.production, + enableTracing: false, + useHash: false, + onSameUrlNavigation: 'reload', + preloadingStrategy: QuicklinkStrategy + }) + ], + exports: [ + RouterModule, + SharedRoutingModule + ] + }) +], AppRoutingModule); +export { AppRoutingModule }; +//# sourceMappingURL=app-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/app-routing.module.js.map b/out-tsc/app/app/app-routing.module.js.map new file mode 100644 index 000000000..7c6818765 --- /dev/null +++ b/out-tsc/app/app/app-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"app-routing.module.js","sourceRoot":"","sources":["../../../src/app/app-routing.module.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/app.component.js b/out-tsc/app/app/app.component.js new file mode 100644 index 000000000..6fac6e629 --- /dev/null +++ b/out-tsc/app/app/app.component.js @@ -0,0 +1,190 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject } from '@angular/core'; +import { AccountService, ConfigService, CORE_CONFIG_OPTIONS, getColorContrast, getColorShade, getColorTint, hexToRgbArray, isNotNil, joinPropertiesPath, LocalSettingsService, mixHex, PlatformService, StatusIds, } from '@sumaris-net/ngx-components'; +import { DOCUMENT } from '@angular/common'; +import { throttleTime } from 'rxjs/operators'; +import { ReferentialRefService } from './referential/services/referential-ref.service'; +import { MatIconRegistry } from '@angular/material/icon'; +import { DomSanitizer } from '@angular/platform-browser'; +import { APP_SOCIAL_CONFIG_OPTIONS } from '@app/social/config/social.config'; +import { DevicePositionService } from '@app/data/position/device/device-position.service'; +let AppComponent = class AppComponent { + constructor(_document, platform, accountService, referentialRefService, configService, settings, devicePositionService, matIconRegistry, domSanitizer, cd) { + this._document = _document; + this.platform = platform; + this.accountService = accountService; + this.referentialRefService = referentialRefService; + this.configService = configService; + this.settings = settings; + this.devicePositionService = devicePositionService; + this.matIconRegistry = matIconRegistry; + this.domSanitizer = domSanitizer; + this.cd = cd; + this.enabledNotificationIcons = false; + console.info('[app] Starting...'); + this.platform.start(); + } + ngOnInit() { + return __awaiter(this, void 0, void 0, function* () { + yield this.platform.ready(); + // Listen for config changed + this.configService.config.subscribe((config) => this.onConfigChanged(config)); + // Add additional account fields + this.addAccountFields(); + // Add custom icons + this.addCustomSVGIcons(); + yield this.startServiceWorkers(); + console.info('[app] Starting [OK]'); + }); + } + onActivate(event) { + // Make sure to scroll on top before changing state + // See https://stackoverflow.com/questions/48048299/angular-5-scroll-to-top-on-every-route-click + const scrollToTop = window.setInterval(() => { + const pos = window.scrollY; + if (pos > 0) { + window.scrollTo(0, pos - 20); // how far to scroll on each step + } + else { + window.clearInterval(scrollToTop); + } + }, 16); + } + onConfigChanged(config) { + this.logo = config.smallLogo || config.largeLogo; + this.appName = config.label; + // Set document title + const title = isNotNil(config.name) ? `${config.label} - ${config.name}` : this.appName; + this._document.getElementById('appTitle').textContent = title || ''; + if (config.properties) { + // Set document favicon + const favicon = config.getProperty(CORE_CONFIG_OPTIONS.FAVICON); + if (isNotNil(favicon)) { + this._document.getElementById('appFavicon').setAttribute('href', favicon); + } + // Enable user event and notification icons + this.enabledNotificationIcons = config.getPropertyAsBoolean(APP_SOCIAL_CONFIG_OPTIONS.ENABLE_NOTIFICATION_ICONS); + // Set theme colors + this.updateTheme({ + colors: { + primary: config.properties['sumaris.color.primary'], + secondary: config.properties['sumaris.color.secondary'], + tertiary: config.properties['sumaris.color.tertiary'], + success: config.properties['sumaris.color.success'], + warning: config.properties['sumaris.color.warning'], + accent: config.properties['sumaris.color.accent'], + danger: config.properties['sumaris.color.danger'], + }, + }); + this.cd.markForCheck(); + } + } + updateTheme(options) { + if (!options) + return; + // Setting colors + if (options.colors) { + console.info('[app] Changing theme colors ', options); + const style = document.documentElement.style; + // Add 100 & 900 color for primary and secondary color + ['primary', 'secondary'].forEach((colorName) => { + const color = options.colors[colorName]; + options.colors[colorName + '100'] = (color && mixHex('#ffffff', color, 10)) || undefined; + options.colors[colorName + '900'] = (color && mixHex('#000000', color, 12)) || undefined; + }); + Object.getOwnPropertyNames(options.colors).forEach((colorName) => { + // Remove existing value + style.removeProperty(`--ion-color-${colorName}`); + style.removeProperty(`--ion-color-${colorName}-rgb`); + style.removeProperty(`--ion-color-${colorName}-contrast`); + style.removeProperty(`--ion-color-${colorName}-contrast-rgb`); + style.removeProperty(`--ion-color-${colorName}-shade`); + style.removeProperty(`--ion-color-${colorName}-tint`); + // Set new value, if any + const color = options.colors[colorName]; + if (isNotNil(color)) { + // Base color + style.setProperty(`--ion-color-${colorName}`, color); + style.setProperty(`--ion-color-${colorName}-rgb`, hexToRgbArray(color).join(', ')); + // Contrast color + const contrastColor = getColorContrast(color, true); + style.setProperty(`--ion-color-${colorName}-contrast`, contrastColor); + style.setProperty(`--ion-color-${colorName}-contrast-rgb`, hexToRgbArray(contrastColor).join(', ')); + // Shade color + style.setProperty(`--ion-color-${colorName}-shade`, getColorShade(color)); + // Tint color + style.setProperty(`--ion-color-${colorName}-tint`, getColorTint(color)); + } + }); + } + } + addAccountFields() { + console.debug('[app] Add additional account fields...'); + const departmentAttributes = this.settings.getFieldDisplayAttributes('department'); + const departmentDefinition = { + key: 'department', + label: 'USER.DEPARTMENT.TITLE', + type: 'entity', + autocomplete: { + suggestFn: (value, filter) => this.referentialRefService.suggest(value, Object.assign({ statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] }, filter)), + filter: { entityName: 'Department' }, + displayWith: (value) => value && joinPropertiesPath(value, departmentAttributes), + attributes: departmentAttributes, + }, + extra: { + registration: { + required: true, + }, + account: { + required: true, + disabled: true, + }, + }, + }; + // Add account field: department + this.accountService.registerAdditionalField(departmentDefinition); + // When settings changed + this.settings.onChange.pipe(throttleTime(400)).subscribe(() => { + // Update the display fn + const attributes = this.settings.getFieldDisplayAttributes('department'); + departmentDefinition.autocomplete.attributes = attributes; + departmentDefinition.autocomplete.displayWith = (value) => (value && joinPropertiesPath(value, attributes)) || undefined; + }); + } + addCustomSVGIcons() { + [ + 'fish', + 'fish-oblique', + 'fish-packet', + 'down-arrow', + 'rollback-arrow', + // ,'dolphin-damage' //PIFIL + ].forEach((filename) => this.matIconRegistry.addSvgIcon(filename, this.domSanitizer.bypassSecurityTrustResourceUrl(`../assets/icons/${filename}.svg`))); + } + startServiceWorkers() { + return __awaiter(this, void 0, void 0, function* () { + yield this.devicePositionService.start(); + }); + } +}; +AppComponent = __decorate([ + Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __param(0, Inject(DOCUMENT)), + __metadata("design:paramtypes", [Document, + PlatformService, + AccountService, + ReferentialRefService, + ConfigService, + LocalSettingsService, + DevicePositionService, + MatIconRegistry, + DomSanitizer, + ChangeDetectorRef]) +], AppComponent); +export { AppComponent }; +//# sourceMappingURL=app.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/app.component.js.map b/out-tsc/app/app/app.component.js.map new file mode 100644 index 000000000..9a1c8ddb3 --- /dev/null +++ b/out-tsc/app/app/app.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"app.component.js","sourceRoot":"","sources":["../../../src/app/app.component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/app.module.js b/out-tsc/app/app/app.module.js new file mode 100644 index 000000000..44956f75d --- /dev/null +++ b/out-tsc/app/app/app.module.js @@ -0,0 +1,419 @@ +import { __decorate, __metadata } from "tslib"; +import { APP_BASE_HREF } from "@angular/common"; +import { BrowserModule, HAMMER_GESTURE_CONFIG, HammerModule } from "@angular/platform-browser"; +import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from "@angular/core"; +import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from "@angular/material/core"; +import { MAT_MOMENT_DATE_ADAPTER_OPTIONS, MomentDateAdapter } from "@angular/material-moment-adapter"; +// App modules +import { AppComponent } from "./app.component"; +import { AppRoutingModule } from "./app-routing.module"; +import { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_DEBUG_DATA_SERVICE, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_JOB_PROGRESSION_SERVICE, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_LOCALES, APP_LOGGING_SERVICE, APP_MENU_ITEMS, APP_MENU_OPTIONS, APP_PROGRESS_BAR_SERVICE, APP_SETTINGS_MENU_ITEMS, APP_STORAGE, APP_TESTING_PAGES, APP_USER_EVENT_SERVICE, AppGestureConfig, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, DATE_ISO_PATTERN, ENVIRONMENT, EnvironmentHttpLoader, EnvironmentLoader, isAndroid, isCapacitor, isIOS, isMobile, JobModule, LoggingService, ProgressBarService, ProgressInterceptor, SOCIAL_TESTING_PAGES, StorageService, UserEventModule, } from '@sumaris-net/ngx-components'; +import { environment } from '@environments/environment'; +import { HTTP_INTERCEPTORS, HttpClient, HttpClientModule } from '@angular/common/http'; +import { Network } from '@awesome-cordova-plugins/network/ngx'; +import { AudioManagement } from '@ionic-native/audio-management/ngx'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { TRIP_CONFIG_OPTIONS, TRIP_GRAPHQL_TYPE_POLICIES, TRIP_LOCAL_SETTINGS_OPTIONS, TRIP_STORAGE_TYPE_POLICIES } from './trip/trip.config'; +import { IonicStorageModule } from '@ionic/storage-angular'; +import { IonicModule } from '@ionic/angular'; +import { CacheModule } from 'ionic-cache'; +import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; +import { TRIP_TESTING_PAGES } from './trip/trip.testing.module'; +import { EXTRACTION_CONFIG_OPTIONS, EXTRACTION_GRAPHQL_TYPE_POLICIES } from './extraction/common/extraction.config'; +import { REFERENTIAL_CONFIG_OPTIONS, REFERENTIAL_GRAPHQL_TYPE_POLICIES, REFERENTIAL_LOCAL_SETTINGS_OPTIONS } from "./referential/services/config/referential.config"; +import { DATA_CONFIG_OPTIONS, DATA_GRAPHQL_TYPE_POLICIES } from "./data/data.config"; +import { VESSEL_CONFIG_OPTIONS, VESSEL_GRAPHQL_TYPE_POLICIES, VESSEL_LOCAL_SETTINGS_OPTIONS } from "./vessel/services/config/vessel.config"; +import { JDENTICON_CONFIG } from "ngx-jdenticon"; +import { REFERENTIAL_TESTING_PAGES } from "./referential/referential.testing.module"; +import { TranslateHttpLoader } from "@ngx-translate/http-loader"; +import { AppSharedModule } from "@app/shared/shared.module"; +import { APP_CORE_CONFIG_OPTIONS } from "@app/core/services/config/core.config"; +import { AppCoreModule } from "@app/core/core.module"; +import { SAMPLE_VALIDATOR_I18N_ERROR_KEYS } from "@app/trip/sample/sample.validator"; +import { Downloader } from "@ionic-native/downloader/ngx"; +import { OPERATION_VALIDATOR_I18N_ERROR_KEYS } from "@app/trip/operation/operation.validator"; +import { APP_SHARED_TESTING_PAGES } from "@app/shared/shared.testing.module"; +import { UserEventService } from "@app/social/user-event/user-event.service"; +import { ApolloModule } from "apollo-angular"; +import { DATA_TESTING_PAGES } from "@app/data/data.testing.module"; +import { JobProgressionService } from "@app/social/job/job-progression.service"; +import { APP_SOCIAL_CONFIG_OPTIONS } from "@app/social/config/social.config"; +import { BATCH_VALIDATOR_I18N_ERROR_KEYS } from "@app/trip/batch/common/batch.validator"; +import { DEVICE_POSITION_CONFIG_OPTION, DEVICE_POSITION_ENTITY_SERVICES } from "@app/data/position/device/device-position.config"; +import { TripService } from "@app/trip/trip/trip.service"; +import { ObservedLocationService } from "@app/trip/observedlocation/observed-location.service"; +import { DevicePositionService } from "@app/data/position/device/device-position.service"; +import { SHARED_LOCAL_SETTINGS_OPTIONS } from "@app/shared/shared.config"; +import { NgChartsModule } from "ng2-charts"; +import { PMFM_VALIDATOR_I18N_ERROR_KEYS } from "@app/referential/services/validator/pmfm.validators"; +import { IchthyometerService } from "@app/shared/ichthyometer/ichthyometer.service"; +import { SCIENTIFIC_CRUISE_CONFIG_OPTIONS } from "@app/trip/scientific-cruise/scientific-cruise.config"; +import { AppMarkdownModule } from '@app/shared/markdown/markdown.module'; +let AppModule = class AppModule { + constructor() { + console.debug('[app] Creating module'); + } +}; +AppModule = __decorate([ + NgModule({ + declarations: [AppComponent], + imports: [ + BrowserModule, + BrowserAnimationsModule, + HttpClientModule, + ApolloModule, + IonicModule.forRoot({ + innerHTMLTemplatesEnabled: true, + // Override platform detection (see issue #323) + platform: { + mobile: isMobile, + ios: isIOS, + android: isAndroid, + capacitor: isCapacitor, + }, + }), + CacheModule.forRoot(Object.assign({ keyPrefix: '' }, environment.cache)), + IonicStorageModule.forRoot(Object.assign({ name: 'sumaris' }, environment.storage)), + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: (httpClient) => { + if (environment.production) { + // This is need to force a reload, after an app update + return new TranslateHttpLoader(httpClient, './assets/i18n/', `-${environment.version}.json`); + } + return new TranslateHttpLoader(httpClient, './assets/i18n/', `.json`); + }, + deps: [HttpClient], + }, + }), + AppMarkdownModule.forRoot(), + NgChartsModule.forRoot({ + plugins: [], + }), + // Need for tap event, in app-toolbar + HammerModule, + // functional modules + AppSharedModule.forRoot({ + loader: { + provide: EnvironmentLoader, + deps: [HttpClient], + useFactory: (httpClient) => new EnvironmentHttpLoader(httpClient, environment), + }, + }), + AppCoreModule.forRoot(), + AppRoutingModule, + UserEventModule, + JobModule, + ], + providers: [ + // Cordova plugins + Network, + AudioManagement, + Downloader, + { + provide: APP_BASE_HREF, + useFactory: () => { + try { + return document.getElementsByTagName('base')[0].href; + } + catch (err) { + console.error(err); + return environment.baseUrl || '/'; + } + }, + }, + { provide: APP_STORAGE, useExisting: StorageService }, + //{ provide: ErrorHandler, useClass: IonicErrorHandler }, + { provide: APP_PROGRESS_BAR_SERVICE, useClass: ProgressBarService }, + { provide: HTTP_INTERCEPTORS, useClass: ProgressInterceptor, multi: true, deps: [APP_PROGRESS_BAR_SERVICE] }, + { + provide: APP_LOCALES, + useValue: [ + { + key: 'fr', + value: 'Français', + country: 'fr', + }, + { + key: 'en', + value: 'English (UK)', + country: 'gb', + }, + { + key: 'en-US', + value: 'English (US)', + country: 'us', + }, + ], + }, + { provide: MAT_DATE_LOCALE, useValue: environment.defaultLocale || 'en' }, + { + provide: MAT_DATE_FORMATS, + useValue: { + parse: { + dateInput: DATE_ISO_PATTERN, + }, + display: { + dateInput: 'L', + monthYearLabel: 'MMM YYYY', + dateA11yLabel: 'LL', + monthYearA11yLabel: 'MMMM YYYY', + }, + }, + }, + { + provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, + useValue: { strict: false }, + }, + { provide: MomentDateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS] }, + { provide: DateAdapter, useExisting: MomentDateAdapter }, + // Logging + { provide: APP_LOGGING_SERVICE, useClass: LoggingService }, + // User event + { provide: UserEventService, useClass: UserEventService }, + { provide: APP_USER_EVENT_SERVICE, useExisting: UserEventService }, + { provide: APP_DEBUG_DATA_SERVICE, useExisting: UserEventService }, + // Job + { provide: JobProgressionService, useClass: JobProgressionService }, + { provide: APP_JOB_PROGRESSION_SERVICE, useExisting: JobProgressionService }, + // Device position + { provide: DevicePositionService, useClass: DevicePositionService }, + // Ichthyometer + { provide: IchthyometerService, useClass: IchthyometerService }, + // Form errors translations + { + provide: APP_FORM_ERROR_I18N_KEYS, + useValue: Object.assign(Object.assign(Object.assign(Object.assign({}, PMFM_VALIDATOR_I18N_ERROR_KEYS), OPERATION_VALIDATOR_I18N_ERROR_KEYS), BATCH_VALIDATOR_I18N_ERROR_KEYS), SAMPLE_VALIDATOR_I18N_ERROR_KEYS), + }, + // Configure hammer gesture + // FIXME: not working well on tablet + { provide: HAMMER_GESTURE_CONFIG, useClass: AppGestureConfig }, + // Settings default values + { + provide: APP_LOCAL_SETTINGS, + useValue: { + pageHistoryMaxSize: 3, + }, + }, + // Setting options definition + { + provide: APP_LOCAL_SETTINGS_OPTIONS, + useValue: { + serializeAsString: true, + options: Object.assign(Object.assign(Object.assign(Object.assign({}, SHARED_LOCAL_SETTINGS_OPTIONS), REFERENTIAL_LOCAL_SETTINGS_OPTIONS), VESSEL_LOCAL_SETTINGS_OPTIONS), TRIP_LOCAL_SETTINGS_OPTIONS), + }, + }, + // Config options definition (Core + trip) + { + provide: APP_CONFIG_OPTIONS, + useValue: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, CORE_CONFIG_OPTIONS), APP_CORE_CONFIG_OPTIONS), APP_SOCIAL_CONFIG_OPTIONS), REFERENTIAL_CONFIG_OPTIONS), VESSEL_CONFIG_OPTIONS), DATA_CONFIG_OPTIONS), EXTRACTION_CONFIG_OPTIONS), SCIENTIFIC_CRUISE_CONFIG_OPTIONS), TRIP_CONFIG_OPTIONS), DEVICE_POSITION_CONFIG_OPTION), + }, + // Menu config + { + provide: APP_MENU_OPTIONS, + deps: [ENVIRONMENT], + useFactory: (environment) => (Object.assign(Object.assign({ enableSubMenus: true, enableSubMenuIcon: true }, environment === null || environment === void 0 ? void 0 : environment.menu), environment === null || environment === void 0 ? void 0 : environment.menu)), + }, + // Menu items + { + provide: APP_MENU_ITEMS, + useValue: [ + { title: 'MENU.HOME', path: '/', icon: 'home' }, + // Data entry + { title: 'MENU.DATA_ENTRY_DIVIDER', profile: 'USER' }, + { + title: 'MENU.SCIENTIFIC_CRUISES', + path: '/scientific-cruise', + matIcon: 'travel_explore', + profile: 'USER', + ifProperty: 'sumaris.scientificCruise.enable', + titleProperty: 'sumaris.scientificCruise.name', + }, + { + title: 'MENU.TRIPS', + path: '/trips', + matIcon: 'explore', + profile: 'USER', + ifProperty: 'sumaris.trip.enable', + titleProperty: 'sumaris.trip.name', + }, + { + title: 'MENU.OCCASIONS', + path: '/observations', + icon: 'location', + profile: 'USER', + ifProperty: 'sumaris.observedLocation.enable', + titleProperty: 'sumaris.observedLocation.name', + }, + // Data extraction + { title: 'MENU.DATA_ACCESS_DIVIDER', ifProperty: 'sumaris.extraction.enabled', profile: 'GUEST' }, + { + title: 'MENU.DOWNLOADS', + path: '/extraction/data', + icon: 'cloud-download', + ifProperty: 'sumaris.extraction.product.enable', + profile: 'GUEST', + }, + { title: 'MENU.MAP', path: '/extraction/map', icon: 'earth', ifProperty: 'sumaris.extraction.map.enable', profile: 'GUEST' }, + { + title: 'MENU.DEVICE_POSITION', + path: '/extraction/device-position', + icon: 'location-outline', + ifProperty: 'sumaris.device.position.tracking.enable', + profile: 'ADMIN', + }, + // Referential + { title: 'MENU.REFERENTIAL_DIVIDER', profile: 'USER' }, + { title: 'MENU.VESSELS', path: '/vessels', icon: 'boat', ifProperty: 'sumaris.referential.vessel.enable', profile: 'USER' }, + { title: 'MENU.PROGRAMS', path: '/referential/programs', icon: 'contract', profile: 'SUPERVISOR' }, + { title: 'MENU.REFERENTIAL', path: '/referential/list', icon: 'list', profile: 'ADMIN' }, + { title: 'MENU.USERS', path: '/admin/users', icon: 'people', profile: 'ADMIN' }, + { title: 'MENU.SYSTEM_DIVIDER', profile: 'ADMIN' }, + { title: 'MENU.SERVER', path: '/admin/config', icon: 'server', profile: 'ADMIN' }, + // Settings + { title: '' /*empty divider*/, cssClass: 'flex-spacer' }, + { title: 'MENU.TESTING', path: '/testing', icon: 'code', color: 'danger', ifProperty: 'sumaris.testing.enable', profile: 'SUPERVISOR' }, + { title: 'MENU.INBOX', path: '/inbox', icon: 'mail', profile: 'USER', ifProperty: 'sumaris.social.notification.icons.enable' }, + { title: 'MENU.LOCAL_SETTINGS', path: '/settings', icon: 'settings', color: 'medium' }, + { title: 'MENU.ABOUT', action: 'about', matIcon: 'help_outline', color: 'medium', cssClass: 'visible-mobile' }, + // Logout + { title: 'MENU.LOGOUT', action: 'logout', icon: 'log-out', profile: 'GUEST', color: 'medium hidden-mobile' }, + { title: 'MENU.LOGOUT', action: 'logout', icon: 'log-out', profile: 'GUEST', color: 'danger visible-mobile' }, + ], + }, + // Home buttons + { + provide: APP_HOME_BUTTONS, + useValue: [ + // Data entry + { title: 'MENU.DATA_ENTRY_DIVIDER', profile: 'USER' }, + { + title: 'MENU.TRIPS', + path: '/trips', + matIcon: 'explore', + profile: 'USER', + ifProperty: 'sumaris.trip.enable', + titleProperty: 'sumaris.trip.name', + }, + { + title: 'MENU.OCCASIONS', + path: '/observations', + matIcon: 'verified', + profile: 'USER', + ifProperty: 'sumaris.observedLocation.enable', + titleProperty: 'sumaris.observedLocation.name', + }, + { title: '' /*empty divider*/, cssClass: 'visible-mobile' }, + ], + }, + // Settings menu options + { + provide: APP_SETTINGS_MENU_ITEMS, + useValue: [ + { title: 'MENU.TESTING', path: '/testing', icon: 'code', color: 'danger', ifProperty: 'sumaris.testing.enable', profile: 'SUPERVISOR' }, + ], + }, + // About developers + { + provide: APP_ABOUT_DEVELOPERS, + useValue: [ + { siteUrl: 'https://www.e-is.pro', logo: 'assets/img/logo/logo-eis_50px.png', label: 'Environmental Information Systems' }, + ], + }, + // About partners + { + provide: APP_ABOUT_PARTNERS, + useValue: [ + { + siteUrl: 'https://www.interreg2seas.eu', + logo: 'assets/img/logo/logo-interreg2seas.png', + }, + { + siteUrl: 'https://www.fromnord.fr', + logo: 'assets/img/logo/logo-fromnord_50px.png', + }, + { + siteUrl: 'https://www.rederscentrale.be', + logo: 'assets/img/logo/logo-redercentrale.png', + }, + { + siteUrl: 'https://www.ifremer.fr', + logo: 'assets/img/logo/logo-ifremer.png', + }, + { + siteUrl: 'https://www.ilvo.vlaanderen.be/', + logo: 'assets/img/logo/logo-ilvo-text.png', + }, + { + siteUrl: 'https://www.nausicaa.fr', + logo: 'assets/img/logo/logo-nausicaa.png', + }, + { + siteUrl: 'https://www.pecheursdebretagne.eu', + logo: 'assets/img/logo/logo-lpdb.png', + }, + { + siteUrl: 'https://www.aglia.fr', + logo: 'assets/img/logo/logo-aglia.png', + }, + { + siteUrl: 'https://www.sfa.sc', + logo: 'assets/img/logo/logo-sfa.png', + }, + { + siteUrl: 'https://www.comite-peches.fr/', + logo: 'assets/img/logo/logo-cnpmem.png', + }, + ], + }, + // Entities Apollo cache options + { + provide: APP_GRAPHQL_TYPE_POLICIES, + useValue: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, REFERENTIAL_GRAPHQL_TYPE_POLICIES), DATA_GRAPHQL_TYPE_POLICIES), VESSEL_GRAPHQL_TYPE_POLICIES), TRIP_GRAPHQL_TYPE_POLICIES), EXTRACTION_GRAPHQL_TYPE_POLICIES), + }, + // Entities storage options + { + provide: APP_LOCAL_STORAGE_TYPE_POLICIES, + useValue: Object.assign({}, TRIP_STORAGE_TYPE_POLICIES), + }, + // Testing pages + { + provide: APP_TESTING_PAGES, + useValue: [ + ...APP_SHARED_TESTING_PAGES, + ...REFERENTIAL_TESTING_PAGES, + ...CORE_TESTING_PAGES, + ...SOCIAL_TESTING_PAGES, + ...DATA_TESTING_PAGES, + ...TRIP_TESTING_PAGES, + ], + }, + // Custom identicon style + // https://jdenticon.com/icon-designer.html?config=4451860010ff320028501e5a + { + provide: JDENTICON_CONFIG, + useValue: { + lightness: { + color: [0.26, 0.8], + grayscale: [0.3, 0.9], + }, + saturation: { + color: 0.5, + grayscale: 0.46, + }, + backColor: '#0000', + }, + }, + { + provide: DEVICE_POSITION_ENTITY_SERVICES, + useValue: [TripService, ObservedLocationService], + }, + ], + bootstrap: [AppComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }), + __metadata("design:paramtypes", []) +], AppModule); +export { AppModule }; +//# sourceMappingURL=app.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/app.module.js.map b/out-tsc/app/app/app.module.js.map new file mode 100644 index 000000000..a81340c93 --- /dev/null +++ b/out-tsc/app/app/app.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../../../src/app/app.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC/F,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,+BAA+B,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAEtG,cAAc;AACd,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,gBAAgB,EAChB,2BAA2B,EAC3B,kBAAkB,EAClB,0BAA0B,EAC1B,+BAA+B,EAC/B,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAGhB,WAAW,EACX,qBAAqB,EACrB,iBAAiB,EAGjB,SAAS,EACT,WAAW,EACX,KAAK,EACL,QAAQ,EACR,SAAS,EAGT,cAAc,EAEd,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EAEd,eAAe,GAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC9I,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACpH,OAAO,EACL,0BAA0B,EAC1B,iCAAiC,EACjC,kCAAkC,EACnC,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gCAAgC,EAAE,MAAM,mCAAmC,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,mCAAmC,EAAE,MAAM,yCAAyC,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,+BAA+B,EAAE,MAAM,wCAAwC,CAAC;AACzF,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,EAChC,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sDAAsD,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,8BAA8B,EAAE,MAAM,qDAAqD,CAAC;AACrG,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,gCAAgC,EAAE,MAAM,sDAAsD,CAAC;AAExG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAgblE,IAAM,SAAS,GAAf,MAAM,SAAS;IACpB;QACE,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACzC,CAAC;CACF,CAAA;AAJY,SAAS;IA9arB,QAAQ,CAAC;QACR,YAAY,EAAE,CAAC,YAAY,CAAC;QAC5B,OAAO,EAAE;YACP,aAAa;YACb,uBAAuB;YACvB,gBAAgB;YAChB,YAAY;YACZ,WAAW,CAAC,OAAO,CAAC;gBAClB,yBAAyB,EAAE,IAAI;gBAC/B,+CAA+C;gBAC/C,QAAQ,EAAE;oBACR,MAAM,EAAE,QAAQ;oBAChB,GAAG,EAAE,KAAK;oBACV,OAAO,EAAE,SAAS;oBAClB,SAAS,EAAE,WAAW;iBACvB;aACF,CAAC;YACF,WAAW,CAAC,OAAO,iBACjB,SAAS,EAAE,EAAE,IACV,WAAW,CAAC,KAAK,EACpB;YACF,kBAAkB,CAAC,OAAO,iBACxB,IAAI,EAAE,SAAS,IACZ,WAAW,CAAC,OAAO,EACtB;YACF,eAAe,CAAC,OAAO,CAAC;gBACtB,MAAM,EAAE;oBACN,OAAO,EAAE,eAAe;oBACxB,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE;wBACzB,IAAI,WAAW,CAAC,UAAU,EAAE;4BAC1B,sDAAsD;4BACtD,OAAO,IAAI,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,EAAE,IAAI,WAAW,CAAC,OAAO,OAAO,CAAC,CAAC;yBAC9F;wBACD,OAAO,IAAI,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;oBACxE,CAAC;oBACD,IAAI,EAAE,CAAC,UAAU,CAAC;iBACnB;aACF,CAAC;YACF,iBAAiB,CAAC,OAAO,EAAE;YAC3B,cAAc,CAAC,OAAO,CAAC;gBACrB,OAAO,EAAE,EAAE;aACZ,CAAC;YAEF,qCAAqC;YACrC,YAAY;YAEZ,qBAAqB;YACrB,eAAe,CAAC,OAAO,CAAC;gBACtB,MAAM,EAAE;oBACN,OAAO,EAAE,iBAAiB;oBAC1B,IAAI,EAAE,CAAC,UAAU,CAAC;oBAClB,UAAU,EAAE,CAAC,UAAsB,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAAC,UAAU,EAAE,WAAW,CAAC;iBAC3F;aACF,CAAC;YACF,aAAa,CAAC,OAAO,EAAE;YACvB,gBAAgB;YAChB,eAAe;YACf,SAAS;SACV;QACD,SAAS,EAAE;YACT,kBAAkB;YAClB,OAAO;YACP,eAAe;YACf,UAAU;YAEV;gBACE,OAAO,EAAE,aAAa;gBACtB,UAAU,EAAE,GAAG,EAAE;oBACf,IAAI;wBACF,OAAO,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;qBACtD;oBAAC,OAAO,GAAG,EAAE;wBACZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACnB,OAAO,WAAW,CAAC,OAAO,IAAI,GAAG,CAAC;qBACnC;gBACH,CAAC;aACF;YAED,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE;YACrD,yDAAyD;YACzD,EAAE,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,kBAAkB,EAAE;YACnE,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,wBAAwB,CAAC,EAAE;YAE5G;gBACE,OAAO,EAAE,WAAW;gBACpB,QAAQ,EAAE;oBACR;wBACE,GAAG,EAAE,IAAI;wBACT,KAAK,EAAE,UAAU;wBACjB,OAAO,EAAE,IAAI;qBACd;oBACD;wBACE,GAAG,EAAE,IAAI;wBACT,KAAK,EAAE,cAAc;wBACrB,OAAO,EAAE,IAAI;qBACd;oBACD;wBACE,GAAG,EAAE,OAAO;wBACZ,KAAK,EAAE,cAAc;wBACrB,OAAO,EAAE,IAAI;qBACd;iBACF;aACF;YAED,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,CAAC,aAAa,IAAI,IAAI,EAAE;YACzE;gBACE,OAAO,EAAE,gBAAgB;gBACzB,QAAQ,EAAE;oBACR,KAAK,EAAE;wBACL,SAAS,EAAE,gBAAgB;qBAC5B;oBACD,OAAO,EAAE;wBACP,SAAS,EAAE,GAAG;wBACd,cAAc,EAAE,UAAU;wBAC1B,aAAa,EAAE,IAAI;wBACnB,kBAAkB,EAAE,WAAW;qBAChC;iBACF;aACF;YACD;gBACE,OAAO,EAAE,+BAA+B;gBACxC,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;aAC5B;YACD,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,eAAe,EAAE,+BAA+B,CAAC,EAAE;YACrH,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE;YAExD,UAAU;YACV,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,EAAE;YAE1D,aAAa;YACb,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAE;YACzD,EAAE,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,gBAAgB,EAAE;YAClE,EAAE,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,gBAAgB,EAAE;YAElE,MAAM;YACN,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,qBAAqB,EAAE;YACnE,EAAE,OAAO,EAAE,2BAA2B,EAAE,WAAW,EAAE,qBAAqB,EAAE;YAE5E,kBAAkB;YAClB,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,qBAAqB,EAAE;YAEnE,eAAe;YACf,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YAE/D,2BAA2B;YAC3B;gBACE,OAAO,EAAE,wBAAwB;gBACjC,QAAQ,8DACH,8BAA8B,GAC9B,mCAAmC,GACnC,+BAA+B,GAC/B,gCAAgC,CACpC;aACF;YAED,2BAA2B;YAC3B,oCAAoC;YACpC,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,gBAAgB,EAAE;YAE9D,0BAA0B;YAC1B;gBACE,OAAO,EAAE,kBAAkB;gBAC3B,QAAQ,EAA0B;oBAChC,kBAAkB,EAAE,CAAC;iBACtB;aACF;YAED,6BAA6B;YAC7B;gBACE,OAAO,EAAE,0BAA0B;gBACnC,QAAQ,EAAwB;oBAC9B,iBAAiB,EAAE,IAAI;oBACvB,OAAO,8DACF,6BAA6B,GAC7B,kCAAkC,GAClC,6BAA6B,GAC7B,2BAA2B,CAC/B;iBACF;aACF;YAED,0CAA0C;YAC1C;gBACE,OAAO,EAAE,kBAAkB;gBAC3B,QAAQ,EAAE,gJACL,mBAAmB,GACnB,uBAAuB,GACvB,yBAAyB,GACzB,0BAA0B,GAC1B,qBAAqB,GACrB,mBAAmB,GACnB,yBAAyB,GACzB,gCAAgC,GAChC,mBAAmB,GACnB,6BAA6B,CACjC;aACF;YAED,cAAc;YACd;gBACE,OAAO,EAAE,gBAAgB;gBACzB,IAAI,EAAE,CAAC,WAAW,CAAC;gBACnB,UAAU,EAAE,CAAC,WAA2B,EAAE,EAAE,CAC1C,CAAA,8BACE,cAAc,EAAE,IAAI,EACtB,iBAAiB,EAAE,IAAI,IAClB,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,GACjB,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,CACrB,CAAA;aACJ;YAED,aAAa;YACb;gBACE,OAAO,EAAE,cAAc;gBACvB,QAAQ,EAAe;oBACrB,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;oBAE/C,aAAa;oBACb,EAAE,KAAK,EAAE,yBAAyB,EAAE,OAAO,EAAE,MAAM,EAAE;oBACrD;wBACE,KAAK,EAAE,yBAAyB;wBAChC,IAAI,EAAE,oBAAoB;wBAC1B,OAAO,EAAE,gBAAgB;wBACzB,OAAO,EAAE,MAAM;wBACf,UAAU,EAAE,iCAAiC;wBAC7C,aAAa,EAAE,+BAA+B;qBAC/C;oBACD;wBACE,KAAK,EAAE,YAAY;wBACnB,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,SAAS;wBAClB,OAAO,EAAE,MAAM;wBACf,UAAU,EAAE,qBAAqB;wBACjC,aAAa,EAAE,mBAAmB;qBACnC;oBACD;wBACE,KAAK,EAAE,gBAAgB;wBACvB,IAAI,EAAE,eAAe;wBACrB,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE,MAAM;wBACf,UAAU,EAAE,iCAAiC;wBAC7C,aAAa,EAAE,+BAA+B;qBAC/C;oBAED,kBAAkB;oBAClB,EAAE,KAAK,EAAE,0BAA0B,EAAE,UAAU,EAAE,4BAA4B,EAAE,OAAO,EAAE,OAAO,EAAE;oBACjG;wBACE,KAAK,EAAE,gBAAgB;wBACvB,IAAI,EAAE,kBAAkB;wBACxB,IAAI,EAAE,gBAAgB;wBACtB,UAAU,EAAE,mCAAmC;wBAC/C,OAAO,EAAE,OAAO;qBACjB;oBACD,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,+BAA+B,EAAE,OAAO,EAAE,OAAO,EAAE;oBAC5H;wBACE,KAAK,EAAE,sBAAsB;wBAC7B,IAAI,EAAE,6BAA6B;wBACnC,IAAI,EAAE,kBAAkB;wBACxB,UAAU,EAAE,yCAAyC;wBACrD,OAAO,EAAE,OAAO;qBACjB;oBAED,cAAc;oBACd,EAAE,KAAK,EAAE,0BAA0B,EAAE,OAAO,EAAE,MAAM,EAAE;oBACtD,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,mCAAmC,EAAE,OAAO,EAAE,MAAM,EAAE;oBAC3H,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE;oBAClG,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;oBACxF,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE;oBAE/E,EAAE,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,OAAO,EAAE;oBAClD,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE;oBAEjF,WAAW;oBACX,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,aAAa,EAAE;oBACxD,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,wBAAwB,EAAE,OAAO,EAAE,YAAY,EAAE;oBACvI,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,0CAA0C,EAAE;oBAC9H,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;oBACtF,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE;oBAE9G,SAAS;oBACT,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE;oBAC5G,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE;iBAC9G;aACF;YAED,eAAe;YACf;gBACE,OAAO,EAAE,gBAAgB;gBACzB,QAAQ,EAAE;oBACR,aAAa;oBACb,EAAE,KAAK,EAAE,yBAAyB,EAAE,OAAO,EAAE,MAAM,EAAE;oBACrD;wBACE,KAAK,EAAE,YAAY;wBACnB,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,SAAS;wBAClB,OAAO,EAAE,MAAM;wBACf,UAAU,EAAE,qBAAqB;wBACjC,aAAa,EAAE,mBAAmB;qBACnC;oBACD;wBACE,KAAK,EAAE,gBAAgB;wBACvB,IAAI,EAAE,eAAe;wBACrB,OAAO,EAAE,UAAU;wBACnB,OAAO,EAAE,MAAM;wBACf,UAAU,EAAE,iCAAiC;wBAC7C,aAAa,EAAE,+BAA+B;qBAC/C;oBACD,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,gBAAgB,EAAE;iBAC5D;aACF;YAED,wBAAwB;YACxB;gBACE,OAAO,EAAE,uBAAuB;gBAChC,QAAQ,EAAe;oBACrB,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,wBAAwB,EAAE,OAAO,EAAE,YAAY,EAAE;iBACxI;aACF;YAED,mBAAmB;YACnB;gBACE,OAAO,EAAE,oBAAoB;gBAC7B,QAAQ,EAAyB;oBAC/B,EAAE,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,mCAAmC,EAAE,KAAK,EAAE,mCAAmC,EAAE;iBAC3H;aACF;YAED,iBAAiB;YACjB;gBACE,OAAO,EAAE,kBAAkB;gBAC3B,QAAQ,EAAyB;oBAC/B;wBACE,OAAO,EAAE,8BAA8B;wBACvC,IAAI,EAAE,wCAAwC;qBAC/C;oBACD;wBACE,OAAO,EAAE,yBAAyB;wBAClC,IAAI,EAAE,wCAAwC;qBAC/C;oBACD;wBACE,OAAO,EAAE,+BAA+B;wBACxC,IAAI,EAAE,wCAAwC;qBAC/C;oBACD;wBACE,OAAO,EAAE,wBAAwB;wBACjC,IAAI,EAAE,kCAAkC;qBACzC;oBACD;wBACE,OAAO,EAAE,iCAAiC;wBAC1C,IAAI,EAAE,oCAAoC;qBAC3C;oBACD;wBACE,OAAO,EAAE,yBAAyB;wBAClC,IAAI,EAAE,mCAAmC;qBAC1C;oBACD;wBACE,OAAO,EAAE,mCAAmC;wBAC5C,IAAI,EAAE,+BAA+B;qBACtC;oBACD;wBACE,OAAO,EAAE,sBAAsB;wBAC/B,IAAI,EAAE,gCAAgC;qBACvC;oBACD;wBACE,OAAO,EAAE,oBAAoB;wBAC7B,IAAI,EAAE,8BAA8B;qBACrC;oBACD;wBACE,OAAO,EAAE,+BAA+B;wBACxC,IAAI,EAAE,iCAAiC;qBACxC;iBACF;aACF;YAED,gCAAgC;YAChC;gBACE,OAAO,EAAE,yBAAyB;gBAClC,QAAQ,EAAE,0EACL,iCAAiC,GACjC,0BAA0B,GAC1B,4BAA4B,GAC5B,0BAA0B,GAC1B,gCAAgC,CACpC;aACF;YAED,2BAA2B;YAC3B;gBACE,OAAO,EAAE,+BAA+B;gBACxC,QAAQ,EAAE,kBACL,0BAA0B,CAC9B;aACF;YAED,gBAAgB;YAChB;gBACE,OAAO,EAAE,iBAAiB;gBAC1B,QAAQ,EAAiB;oBACvB,GAAG,wBAAwB;oBAC3B,GAAG,yBAAyB;oBAC5B,GAAG,kBAAkB;oBACrB,GAAG,oBAAoB;oBACvB,GAAG,kBAAkB;oBACrB,GAAG,kBAAkB;iBACtB;aACF;YAED,yBAAyB;YACzB,2EAA2E;YAC3E;gBACE,OAAO,EAAE,gBAAgB;gBACzB,QAAQ,EAAE;oBACR,SAAS,EAAE;wBACT,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC;wBAClB,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;qBACtB;oBACD,UAAU,EAAE;wBACV,KAAK,EAAE,GAAG;wBACV,SAAS,EAAE,IAAI;qBAChB;oBACD,SAAS,EAAE,OAAO;iBACnB;aACF;YACD;gBACE,OAAO,EAAE,+BAA+B;gBACxC,QAAQ,EAAE,CAAC,WAAW,EAAE,uBAAuB,CAAC;aACjD;SACF;QACD,SAAS,EAAE,CAAC,YAAY,CAAC;QACzB,OAAO,EAAE,CAAC,sBAAsB,CAAC;KAClC,CAAC;;GACW,SAAS,CAIrB;SAJY,SAAS"} \ No newline at end of file diff --git a/out-tsc/app/app/core/core.module.js b/out-tsc/app/app/core/core.module.js new file mode 100644 index 000000000..4d1a18af3 --- /dev/null +++ b/out-tsc/app/app/core/core.module.js @@ -0,0 +1,46 @@ +var AppCoreModule_1; +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { IonicStorageModule } from '@ionic/storage-angular'; +import { HttpClientModule } from '@angular/common/http'; +import { CacheModule } from 'ionic-cache'; +import { AppGraphQLModule, CoreModule } from '@sumaris-net/ngx-components'; +import { AppSharedModule } from '@app/shared/shared.module'; +import { IsEmptyReferentialPipe, IsNotEmptyReferentialPipe } from '@app/core/pipes/core.pipe'; +let AppCoreModule = AppCoreModule_1 = class AppCoreModule { + static forRoot() { + return { + ngModule: AppCoreModule_1, + providers: [ + ...CoreModule.forRoot().providers + ] + }; + } +}; +AppCoreModule = AppCoreModule_1 = __decorate([ + NgModule({ + imports: [ + CoreModule, + HttpClientModule, + CacheModule, + IonicStorageModule, + // App modules + AppSharedModule, + AppGraphQLModule + ], + declarations: [ + // Pipes + IsNotEmptyReferentialPipe, + IsEmptyReferentialPipe + ], + exports: [ + CoreModule, + AppSharedModule, + // Pipes + IsNotEmptyReferentialPipe, + IsEmptyReferentialPipe + ] + }) +], AppCoreModule); +export { AppCoreModule }; +//# sourceMappingURL=core.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/core/core.module.js.map b/out-tsc/app/app/core/core.module.js.map new file mode 100644 index 000000000..1e495c3b1 --- /dev/null +++ b/out-tsc/app/app/core/core.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"core.module.js","sourceRoot":"","sources":["../../../../src/app/core/core.module.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAsB,QAAQ,EAAC,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAC,kBAAkB,EAAC,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,EAAC,gBAAgB,EAAE,UAAU,EAAC,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAC,eAAe,EAAC,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAC,sBAAsB,EAAE,yBAAyB,EAAC,MAAM,2BAA2B,CAAC;AA4BrF,IAAM,aAAa,qBAAnB,MAAM,aAAa;IAExB,MAAM,CAAC,OAAO;QAEZ,OAAO;YACL,QAAQ,EAAE,eAAa;YACvB,SAAS,EAAE;gBACT,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,SAAS;aAClC;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAXY,aAAa;IAzBzB,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,UAAU;YACV,gBAAgB;YAChB,WAAW;YACX,kBAAkB;YAElB,cAAc;YACd,eAAe;YACf,gBAAgB;SACjB;QACD,YAAY,EAAE;YACZ,QAAQ;YACR,yBAAyB;YACzB,sBAAsB;SACvB;QACD,OAAO,EAAE;YACP,UAAU;YACV,eAAe;YAEf,QAAQ;YACR,yBAAyB;YACzB,sBAAsB;SACvB;KACF,CAAC;GACW,aAAa,CAWzB;SAXY,aAAa"} \ No newline at end of file diff --git a/out-tsc/app/app/core/pipes/core.pipe.js b/out-tsc/app/app/core/pipes/core.pipe.js new file mode 100644 index 000000000..6678cf9c3 --- /dev/null +++ b/out-tsc/app/app/core/pipes/core.pipe.js @@ -0,0 +1,26 @@ +import { __decorate } from "tslib"; +import { Pipe } from '@angular/core'; +import { ReferentialUtils } from '@sumaris-net/ngx-components'; +let IsNotEmptyReferentialPipe = class IsNotEmptyReferentialPipe { + transform(obj) { + return ReferentialUtils.isNotEmpty(obj); + } +}; +IsNotEmptyReferentialPipe = __decorate([ + Pipe({ + name: 'isNotEmptyReferential' + }) +], IsNotEmptyReferentialPipe); +export { IsNotEmptyReferentialPipe }; +let IsEmptyReferentialPipe = class IsEmptyReferentialPipe { + transform(obj) { + return ReferentialUtils.isEmpty(obj); + } +}; +IsEmptyReferentialPipe = __decorate([ + Pipe({ + name: 'isEmptyReferential' + }) +], IsEmptyReferentialPipe); +export { IsEmptyReferentialPipe }; +//# sourceMappingURL=core.pipe.js.map \ No newline at end of file diff --git a/out-tsc/app/app/core/pipes/core.pipe.js.map b/out-tsc/app/app/core/pipes/core.pipe.js.map new file mode 100644 index 000000000..6ab625644 --- /dev/null +++ b/out-tsc/app/app/core/pipes/core.pipe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"core.pipe.js","sourceRoot":"","sources":["../../../../../src/app/core/pipes/core.pipe.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAiB,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAKxD,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IAEpC,SAAS,CAAC,GAAQ;QAChB,OAAO,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;CACF,CAAA;AALY,yBAAyB;IAHrC,IAAI,CAAC;QACJ,IAAI,EAAE,uBAAuB;KAC9B,CAAC;GACW,yBAAyB,CAKrC;SALY,yBAAyB;AAU/B,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAEjC,SAAS,CAAC,GAAQ;QAChB,OAAO,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;CACF,CAAA;AALY,sBAAsB;IAHlC,IAAI,CAAC;QACJ,IAAI,EAAE,oBAAoB;KAC3B,CAAC;GACW,sBAAsB,CAKlC;SALY,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/core/services/config/core.config.js b/out-tsc/app/app/core/services/config/core.config.js new file mode 100644 index 000000000..45625681e --- /dev/null +++ b/out-tsc/app/app/core/services/config/core.config.js @@ -0,0 +1,40 @@ +export const APP_CORE_CONFIG_OPTIONS = Object.freeze({ + UPDATE_TECHNICAL_TABLES: { + key: 'sumaris.persistence.technicalTables.update', + label: 'CONFIGURATION.OPTIONS.UPDATE_TECHNICAL_TABLES', + type: 'boolean', + defaultValue: false + }, + GEOMETRY_SRID: { + key: 'sumaris.geometry.srid', + label: 'CONFIGURATION.OPTIONS.GEOMETRY_SRID', + type: 'integer', + defaultValue: 0 + }, + // Enumerations + PROFILE_ADMIN_LABEL: { + key: 'sumaris.enumeration.UserProfile.ADMIN.label', + label: 'CONFIGURATION.OPTIONS.PROFILE.ADMIN', + type: 'string', + defaultValue: 'ADMIN' + }, + PROFILE_USER_LABEL: { + key: 'sumaris.enumeration.UserProfile.USER.label', + label: 'CONFIGURATION.OPTIONS.PROFILE.USER', + type: 'string', + defaultValue: 'USER' + }, + PROFILE_SUPERVISOR_LABEL: { + key: 'sumaris.enumeration.UserProfile.SUPERVISOR.label', + label: 'CONFIGURATION.OPTIONS.PROFILE.SUPERVISOR', + type: 'string', + defaultValue: 'SUPERVISOR' + }, + PROFILE_GUEST_LABEL: { + key: 'sumaris.enumeration.UserProfile.GUEST.label', + label: 'CONFIGURATION.OPTIONS.PROFILE.GUEST', + type: 'string', + defaultValue: 'GUEST' + } +}); +//# sourceMappingURL=core.config.js.map \ No newline at end of file diff --git a/out-tsc/app/app/core/services/config/core.config.js.map b/out-tsc/app/app/core/services/config/core.config.js.map new file mode 100644 index 000000000..3ac792603 --- /dev/null +++ b/out-tsc/app/app/core/services/config/core.config.js.map @@ -0,0 +1 @@ +{"version":3,"file":"core.config.js","sourceRoot":"","sources":["../../../../../../src/app/core/services/config/core.config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC;IAEnD,uBAAuB,EAAwB;QAC7C,GAAG,EAAE,4CAA4C;QACjD,KAAK,EAAE,+CAA+C;QACtD,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,KAAK;KACpB;IACD,aAAa,EAAwB;QACnC,GAAG,EAAE,uBAAuB;QAC5B,KAAK,EAAE,qCAAqC;QAC5C,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,CAAC;KAChB;IAED,eAAe;IACf,mBAAmB,EAAuB;QACtC,GAAG,EAAE,6CAA6C;QAClD,KAAK,EAAE,qCAAqC;QAC5C,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,OAAO;KACxB;IACD,kBAAkB,EAAuB;QACrC,GAAG,EAAE,4CAA4C;QACjD,KAAK,EAAE,oCAAoC;QAC3C,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,MAAM;KACvB;IACD,wBAAwB,EAAuB;QAC3C,GAAG,EAAE,kDAAkD;QACvD,KAAK,EAAE,0CAA0C;QACjD,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,YAAY;KAC7B;IACD,mBAAmB,EAAuB;QACtC,GAAG,EAAE,6CAA6C;QAClD,KAAK,EAAE,qCAAqC;QAC5C,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,OAAO;KACxB;CACF,CAAC,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/core/services/errors.js b/out-tsc/app/app/core/services/errors.js new file mode 100644 index 000000000..d4bb2ea18 --- /dev/null +++ b/out-tsc/app/app/core/services/errors.js @@ -0,0 +1,5 @@ +export const AppCoreErrorCodes = { + LOAD_TRASH_ENTITY_ERROR: 800, + DELETE_TRASH_ENTITY_ERROR: 801 +}; +//# sourceMappingURL=errors.js.map \ No newline at end of file diff --git a/out-tsc/app/app/core/services/errors.js.map b/out-tsc/app/app/core/services/errors.js.map new file mode 100644 index 000000000..6a155ecc8 --- /dev/null +++ b/out-tsc/app/app/core/services/errors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../../src/app/core/services/errors.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,uBAAuB,EAAE,GAAG;IAC5B,yBAAyB,EAAE,GAAG;CAC/B,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/core/services/model/referential.utils.js b/out-tsc/app/app/core/services/model/referential.utils.js new file mode 100644 index 000000000..9c37756ce --- /dev/null +++ b/out-tsc/app/app/core/services/model/referential.utils.js @@ -0,0 +1,86 @@ +import { EntityUtils, isNil, isNotNil, isNotNilOrBlank } from '@sumaris-net/ngx-components'; +export const NOT_MINIFY_OPTIONS = { minify: false }; +export const MINIFY_OPTIONS = { minify: true }; +export class AppReferentialUtils { + static getEntityName(source) { + if (!source) + return undefined; + if (source['entityName']) + return source['entityName']; + const typename = source['__typename']; + if (typename) + return typename.replace(/VO$/, ''); // Remove VO at end (if present) + return undefined; + } + static getId(value) { + if (value && EntityUtils.isNotEmpty(value, 'id')) { + return value['id']; + } + return value; + } + /** + * Used to clean an object tree, with some remote id (e.g. Strategy, when download as JSON file) + * + * @param source + * @param recursive + */ + static cleanIdAndDates(source, recursive, excludedKeys, path = '') { + if (!source || isNil(source['__typename'])) + return; // Skip + // DEBUG + //if (path) console.debug(`[referential-utils] Cleaning ${path}...`); + EntityUtils.cleanIdAndUpdateDate(source); + if (source['creationDate']) + source['creationDate'] = null; + // If use the generic class ReferentialVO, remove some other id fields + if (source['__typename'] === 'ReferentialVO') { + if (typeof source['levelId'] === 'number') + source['levelId'] = null; + if (typeof source['parentId'] === 'number') + source['parentId'] = null; + } + // Loop to children objects + if (recursive) { + const pathPrefix = isNotNilOrBlank(path) ? path + '.' : path; + Object.entries(source) + .filter(([k, v]) => isNotNil(v) && (!excludedKeys || !excludedKeys.includes(pathPrefix + k))) + .forEach(([k, v]) => { + if (Array.isArray(v)) { + // Recursive call + v.forEach((value, index) => this.cleanIdAndDates(value, recursive, excludedKeys, pathPrefix + k + `[${index}]`)); + } + else { + this.cleanIdAndDates(v, recursive, excludedKeys, pathPrefix + k); + } + }); + } + } + /** + * Used to clean an object tree, with some remote id (e.g. Strategy, when download as JSON file) + * + * @param source + * @param recursive + */ + static collectEntities(source, excludedKeys, path = '', result = []) { + if (!source || isNil(source['__typename'])) + return; // Skip + // DEBUG + //if (path) console.debug(`[referential-utils] Collecting ${path}...`); + result.push(source); + // Loop to children objects + const pathPrefix = isNotNilOrBlank(path) ? path + '.' : path; + Object.entries(source) + .filter(([k, v]) => isNotNil(v) && (!excludedKeys || !excludedKeys.includes(pathPrefix + k))) + .forEach(([k, v]) => { + if (Array.isArray(v)) { + // Recursive call + v.forEach((value, index) => this.collectEntities(value, excludedKeys, pathPrefix + k + `[${index}]`, result)); + } + else { + this.collectEntities(v, excludedKeys, pathPrefix + k, result); + } + }); + return result; + } +} +//# sourceMappingURL=referential.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/core/services/model/referential.utils.js.map b/out-tsc/app/app/core/services/model/referential.utils.js.map new file mode 100644 index 000000000..4ba3dad44 --- /dev/null +++ b/out-tsc/app/app/core/services/model/referential.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential.utils.js","sourceRoot":"","sources":["../../../../../../src/app/core/services/model/referential.utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/core/services/trash-remote.service.js b/out-tsc/app/app/core/services/trash-remote.service.js new file mode 100644 index 000000000..3589359ca --- /dev/null +++ b/out-tsc/app/app/core/services/trash-remote.service.js @@ -0,0 +1,76 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { BaseGraphqlService, chainPromises, GraphqlService } from '@sumaris-net/ngx-components'; +import { AppCoreErrorCodes } from '@app/core/services/errors'; +import { environment } from '@environments/environment'; +// Load a trash file +const LoadQuery = gql ` + query TrashEntity($entityName:String, $id: String){ + trashEntity(entityName: $entityName, id: $id) + } +`; +// Delete a trash file +const DeleteMutation = gql ` + mutation DeleteTrashEntity($entityName:String, $id: String){ + deleteTrashEntity(entityName: $entityName, id: $id) + } +`; +let TrashRemoteService = class TrashRemoteService extends BaseGraphqlService { + constructor(graphql) { + super(graphql, environment); + this.graphql = graphql; + if (this._debug) + console.debug('[trash-service] Creating service'); + } + load(entityName, id) { + return __awaiter(this, void 0, void 0, function* () { + if (this._debug) + console.debug(`[trash-service] Load ${entityName}#${id} from the remote trash...`); + // Execute mutation + const res = yield this.graphql.query({ + query: LoadQuery, + variables: { + entityName, + id + }, + error: { + code: AppCoreErrorCodes.LOAD_TRASH_ENTITY_ERROR, + message: 'ERROR.LOAD_TRASH_ENTITY_ERROR' + } + }); + return res && res.trashEntity && JSON.parse(res.trashEntity); + }); + } + delete(entityName, id) { + return __awaiter(this, void 0, void 0, function* () { + if (this._debug) + console.debug(`[trash-service] Deleting ${entityName}#${id} from the remote trash...`); + // Execute mutation + yield this.graphql.mutate({ + mutation: DeleteMutation, + variables: { + entityName, + id + }, + error: { + code: AppCoreErrorCodes.DELETE_TRASH_ENTITY_ERROR, + message: 'ERROR.DELETE_TRASH_ENTITY_ERROR' + } + }); + }); + } + deleteAll(entityName, ids) { + return __awaiter(this, void 0, void 0, function* () { + // Delete one by one + return chainPromises((ids || []) + .map(id => (() => this.delete(entityName, id)))); + }); + } +}; +TrashRemoteService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [GraphqlService]) +], TrashRemoteService); +export { TrashRemoteService }; +//# sourceMappingURL=trash-remote.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/core/services/trash-remote.service.js.map b/out-tsc/app/app/core/services/trash-remote.service.js.map new file mode 100644 index 000000000..e1d33b48e --- /dev/null +++ b/out-tsc/app/app/core/services/trash-remote.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trash-remote.service.js","sourceRoot":"","sources":["../../../../../src/app/core/services/trash-remote.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,GAAG,EAAC,MAAM,qBAAqB,CAAC;AACxC,OAAO,EAAC,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAC,MAAM,6BAA6B,CAAC;AAC9F,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AAEtD,oBAAoB;AACpB,MAAM,SAAS,GAAQ,GAAG,CAAA;;;;CAIzB,CAAC;AACF,sBAAsB;AACtB,MAAM,cAAc,GAAQ,GAAG,CAAA;;;;CAI9B,CAAC;AAGK,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,kBAA+B;IAGrE,YACY,OAAuB;QAEjC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAFlB,YAAO,GAAP,OAAO,CAAgB;QAIjC,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACrE,CAAC;IAEK,IAAI,CAAC,UAAkB,EAAE,EAAU;;YACvC,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,KAAK,CAAC,wBAAwB,UAAU,IAAI,EAAE,2BAA2B,CAAC,CAAC;YAEpG,mBAAmB;YACnB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAwB;gBAC1D,KAAK,EAAE,SAAS;gBAChB,SAAS,EAAE;oBACT,UAAU;oBACV,EAAE;iBACH;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,iBAAiB,CAAC,uBAAuB;oBAC/C,OAAO,EAAE,+BAA+B;iBACzC;aACF,CAAC,CAAC;YAEH,OAAO,GAAG,IAAI,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/D,CAAC;KAAA;IAEK,MAAM,CAAC,UAAkB,EAAE,EAAU;;YACzC,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,KAAK,CAAC,4BAA4B,UAAU,IAAI,EAAE,2BAA2B,CAAC,CAAC;YAExG,mBAAmB;YACnB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAM;gBAC7B,QAAQ,EAAE,cAAc;gBACxB,SAAS,EAAE;oBACT,UAAU;oBACV,EAAE;iBACH;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,iBAAiB,CAAC,yBAAyB;oBACjD,OAAO,EAAE,iCAAiC;iBAC3C;aACF,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,SAAS,CAAC,UAAkB,EAAE,GAAa;;YAC/C,oBAAoB;YACpB,OAAO,aAAa,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;iBAC7B,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;KAAA;CACF,CAAA;AApDY,kBAAkB;IAD9B,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAKV,cAAc;GAJxB,kBAAkB,CAoD9B;SApDY,kBAAkB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/data.config.js b/out-tsc/app/app/data/data.config.js new file mode 100644 index 000000000..0834a137e --- /dev/null +++ b/out-tsc/app/app/data/data.config.js @@ -0,0 +1,157 @@ +import { PRIORITIZED_AUTHORITIES, StatusIds } from '@sumaris-net/ngx-components'; +export const DATA_GRAPHQL_TYPE_POLICIES = { + DataReferenceVO: { + keyFields: ['entityName', 'id'], + }, +}; +export const DATA_IMPORT_PERIODS = Object.freeze([ + { value: 1, unit: 'week' }, + { value: 15, unit: 'day' }, + { value: 1, unit: 'month' }, + { value: 3, unit: 'month' }, + { value: 6, unit: 'month' } +]); +export const DATA_CONFIG_OPTIONS = Object.freeze({ + ENTITY_TRASH: { + key: 'sumaris.persistence.trash.enable', + label: 'CONFIGURATION.OPTIONS.ENTITY_TRASH', + type: 'boolean', + defaultValue: true + }, + ADAGIO_OPTIMIZATION: { + key: 'sumaris.persistence.adagio.optimization', + label: 'CONFIGURATION.OPTIONS.ADAGIO_OPTIMIZATION', + type: 'boolean', + defaultValue: false + }, + ADAGIO_SCHEMA: { + key: 'sumaris.persistence.adagio.schema', + label: 'CONFIGURATION.OPTIONS.ADAGIO_SCHEMA', + type: 'string', + defaultValue: '' + }, + SAMPLE_HASH_OPTIMIZATION: { + key: 'sumaris.persistence.sample.hashOptimization', + label: 'CONFIGURATION.OPTIONS.SAMPLE_HASH_OPTIMIZATION', + type: 'boolean', + defaultValue: false + }, + SAMPLE_UNIQUE_TAG: { + key: 'sumaris.persistence.sample.uniqueTag', + label: 'CONFIGURATION.OPTIONS.SAMPLE_UNIQUE_TAG', + type: 'boolean', + defaultValue: false + }, + BATCH_HASH_OPTIMIZATION: { + key: 'sumaris.persistence.batch.hashOptimization', + label: 'CONFIGURATION.OPTIONS.BATCH_HASH_OPTIMIZATION', + type: 'boolean', + defaultValue: false + }, + PHYSICAL_GEAR_HASH_OPTIMIZATION: { + key: 'sumaris.persistence.physicalGear.hashOptimization', + label: 'CONFIGURATION.OPTIONS.PHYSICAL_GEAR_HASH_OPTIMIZATION', + type: 'boolean', + defaultValue: false + }, + ACCESS_PROGRAM_IDS: { + key: 'sumaris.data.program.ids', + label: 'CONFIGURATION.OPTIONS.ACCESS_PROGRAM_IDS', + type: 'entities', + autocomplete: { + attributes: ['label'], + filter: { + entityName: 'Program', + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] + } + }, + defaultValue: '', + }, + ACCESS_NOT_SELF_DATA_ROLE: { + key: 'sumaris.data.accessNotSelfData.role', + label: 'CONFIGURATION.OPTIONS.ACCESS_NOT_SELF_DATA_MIN_ROLE', + type: 'enum', + values: PRIORITIZED_AUTHORITIES.map(key => ({ + key: 'ROLE_' + key, + value: 'USER.PROFILE_ENUM.' + key + })), + defaultValue: 'ROLE_ADMIN', + }, + ACCESS_NOT_SELF_DATA_DEPARTMENT_IDS: { + key: 'sumaris.data.accessNotSelfData.department.ids', + label: 'CONFIGURATION.OPTIONS.ACCESS_NOT_SELF_DATA_DEPARTMENT_IDS', + type: 'entities', + autocomplete: { + attributes: ['label'], + filter: { + entityName: 'Department', + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] + } + }, + defaultValue: '', + }, + QUALITY_PROCESS_ENABLE: { + key: 'sumaris.data.quality.process.enable', + label: 'CONFIGURATION.OPTIONS.DATA_QUALITY_PROCESS_ENABLE', + type: 'boolean', + defaultValue: true + }, + SHOW_RECORDER: { + key: 'sumaris.data.show.recorder.enable', + label: 'CONFIGURATION.OPTIONS.DATA_SHOW_RECORDER', + type: 'boolean', + defaultValue: true + }, + SHOW_OBSERVERS: { + key: 'sumaris.data.show.observer.enable', + label: 'CONFIGURATION.OPTIONS.DATA_SHOW_OBSERVERS', + type: 'boolean', + defaultValue: true + }, + SHOW_FILTER_PROGRAM: { + key: 'sumaris.data.landing.show.filter.program.enable', + label: 'CONFIGURATION.OPTIONS.LANDING.FILTER_PROGRAM', + type: 'boolean', + defaultValue: true + }, + SHOW_FILTER_LOCATION: { + key: 'sumaris.data.landing.show.filter.location.enable', + label: 'CONFIGURATION.OPTIONS.LANDING.FILTER_LOCATION', + type: 'boolean', + defaultValue: true + }, + SHOW_FILTER_PERIOD: { + key: 'sumaris.data.landing.show.filter.period.enable', + label: 'CONFIGURATION.OPTIONS.LANDING.FILTER_PERIOD', + type: 'boolean', + defaultValue: true + }, + DATA_IMPORT_DEFAULT_PERIOD: { + key: 'sumaris.data.import.predoc.period', + label: 'CONFIGURATION.OPTIONS.DATA_IMPORT_DEFAULT_PERIOD', + type: 'enum', + defaultValue: '1 month', + values: DATA_IMPORT_PERIODS.map(({ value, unit }) => ({ + key: `${value} ${unit}`, + value: `${value} ${unit}` + })) + }, + DATA_IMAGES_ENABLE: { + key: 'sumaris.data.images.enable', + label: 'CONFIGURATION.OPTIONS.DATA_IMAGES_ENABLE', + type: 'boolean', + defaultValue: 'false' + }, + DATA_VESSEL_TYPE_IDS: { + key: 'sumaris.data.vessel.type.ids', + label: 'CONFIGURATION.OPTIONS.DATA_VESSEL_TYPE_IDS', + type: 'entities', + autocomplete: { + filter: { + entityName: 'VesselType', + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] + } + } + }, +}); +//# sourceMappingURL=data.config.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/data.config.js.map b/out-tsc/app/app/data/data.config.js.map new file mode 100644 index 000000000..b91b26f78 --- /dev/null +++ b/out-tsc/app/app/data/data.config.js.map @@ -0,0 +1 @@ +{"version":3,"file":"data.config.js","sourceRoot":"","sources":["../../../../src/app/data/data.config.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/data.module.js b/out-tsc/app/app/data/data.module.js new file mode 100644 index 000000000..c0782a7f0 --- /dev/null +++ b/out-tsc/app/app/data/data.module.js @@ -0,0 +1,51 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { AppReferentialModule } from '../referential/referential.module'; +import { CoreModule, MessageModule } from '@sumaris-net/ngx-components'; +import { StrategySummaryCardComponent } from './strategy/strategy-summary-card.component'; +import { IsMeasurementFormValuesPipe, IsMeasurementModelValuesPipe, MeasurementValueGetPipe } from '@app/data/measurement/measurements.pipe'; +import { AppImageAttachmentModule } from '@app/data/image/image-attachment.module'; +import { AppSharedModule } from '@app/shared/shared.module'; +import { AppEntityQualityModule } from '@app/data/quality/entity-quality.module'; +import { DevicePositionService } from '@app/data/position/device/device-position.service'; +import { AppDataEntityPipesModule } from '@app/data/pipes/pipes.module'; +let AppDataModule = class AppDataModule { +}; +AppDataModule = __decorate([ + NgModule({ + imports: [ + CoreModule, + AppSharedModule, + AppReferentialModule, + // Sub modules + AppImageAttachmentModule, + AppEntityQualityModule, + AppDataEntityPipesModule, + MessageModule, + ], + declarations: [ + // Pipes + IsMeasurementFormValuesPipe, + IsMeasurementModelValuesPipe, + MeasurementValueGetPipe, + // Components + StrategySummaryCardComponent, + //AppEditorFooterComponent, + ], + exports: [ + // Sub modules + AppImageAttachmentModule, + AppEntityQualityModule, + AppDataEntityPipesModule, + // Pipes + IsMeasurementFormValuesPipe, + IsMeasurementModelValuesPipe, + MeasurementValueGetPipe, + // Components + StrategySummaryCardComponent, + ], + providers: [DevicePositionService], + }) +], AppDataModule); +export { AppDataModule }; +//# sourceMappingURL=data.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/data.module.js.map b/out-tsc/app/app/data/data.module.js.map new file mode 100644 index 000000000..fc024bbb4 --- /dev/null +++ b/out-tsc/app/app/data/data.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"data.module.js","sourceRoot":"","sources":["../../../../src/app/data/data.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAC1F,OAAO,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAC7I,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAwCjE,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,aAAa;IAtCzB,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,UAAU;YACV,eAAe;YACf,oBAAoB;YAEpB,cAAc;YACd,wBAAwB;YACxB,sBAAsB;YACtB,wBAAwB;YACxB,aAAa;SACd;QACD,YAAY,EAAE;YACZ,QAAQ;YACR,2BAA2B;YAC3B,4BAA4B;YAC5B,uBAAuB;YAEvB,aAAa;YACb,4BAA4B;YAC5B,2BAA2B;SAC5B;QACD,OAAO,EAAE;YACP,cAAc;YACd,wBAAwB;YACxB,sBAAsB;YACtB,wBAAwB;YAExB,QAAQ;YACR,2BAA2B;YAC3B,4BAA4B;YAC5B,uBAAuB;YAEvB,aAAa;YACb,4BAA4B;SAC7B;QACD,SAAS,EAAE,CAAC,qBAAqB,CAAC;KACnC,CAAC;GACW,aAAa,CAAG;SAAhB,aAAa"} \ No newline at end of file diff --git a/out-tsc/app/app/data/data.testing.module.js b/out-tsc/app/app/data/data.testing.module.js new file mode 100644 index 000000000..02777fdaf --- /dev/null +++ b/out-tsc/app/app/data/data.testing.module.js @@ -0,0 +1,43 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { TranslateModule } from '@ngx-translate/core'; +import { RouterModule } from '@angular/router'; +import { ImageAttachmentTestPage } from '@app/data/image/testing/image-attachment.test'; +import { AppImageAttachmentTestingModule } from '@app/data/image/testing/image-attachment.testing.module'; +export const DATA_TESTING_PAGES = [ + { label: 'Data components', divider: true }, + { label: 'Image attachment', page: '/testing/data/image' } +]; +const routes = [ + { + path: '', + pathMatch: 'full', + redirectTo: 'image' + }, + { + path: 'image', + pathMatch: 'full', + component: ImageAttachmentTestPage + } +]; +let DataTestingModule = class DataTestingModule { +}; +DataTestingModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TranslateModule.forChild(), + RouterModule.forChild(routes), + // Sub modules + AppImageAttachmentTestingModule + ], + exports: [ + RouterModule, + // Sub modules + AppImageAttachmentTestingModule + ] + }) +], DataTestingModule); +export { DataTestingModule }; +//# sourceMappingURL=data.testing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/data.testing.module.js.map b/out-tsc/app/app/data/data.testing.module.js.map new file mode 100644 index 000000000..30910b728 --- /dev/null +++ b/out-tsc/app/app/data/data.testing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"data.testing.module.js","sourceRoot":"","sources":["../../../../src/app/data/data.testing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AACvC,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAC,YAAY,EAAS,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAC,uBAAuB,EAAC,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAC,+BAA+B,EAAC,MAAM,yDAAyD,CAAC;AAExG,MAAM,CAAC,MAAM,kBAAkB,GAAkB;IAC/C,EAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAC;IACzC,EAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,qBAAqB,EAAC;CACzD,CAAC;AAEF,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,UAAU,EAAE,OAAO;KACpB;IACD;QACE,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,uBAAuB;KACnC;CACF,CAAC;AAkBK,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAC7B,CAAA;AADY,iBAAiB;IAhB7B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,eAAe,CAAC,QAAQ,EAAE;YAC1B,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAE7B,cAAc;YACd,+BAA+B;SAChC;QACD,OAAO,EAAE;YACP,YAAY;YAEZ,cAAc;YACd,+BAA+B;SAChC;KACF,CAAC;GACW,iBAAiB,CAC7B;SADY,iBAAiB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/fishing-area/fishing-area.form.js b/out-tsc/app/app/data/fishing-area/fishing-area.form.js new file mode 100644 index 000000000..ede251550 --- /dev/null +++ b/out-tsc/app/app/data/fishing-area/fishing-area.form.js @@ -0,0 +1,131 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { FishingArea } from './fishing-area.model'; +import { UntypedFormBuilder } from '@angular/forms'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { ModalController } from '@ionic/angular'; +import { AppForm, NetworkService, ReferentialUtils, StatusIds } from '@sumaris-net/ngx-components'; +import { FishingAreaValidatorService } from './fishing-area.validator'; +import { LocationLevelIds } from '@app/referential/services/model/model.enum'; +import { map, startWith } from 'rxjs/operators'; +let FishingAreaForm = class FishingAreaForm extends AppForm { + constructor(injector, formBuilder, validatorService, referentialRefService, modalCtrl, network, cd) { + super(injector, validatorService.getFormGroup()); + this.formBuilder = formBuilder; + this.validatorService = validatorService; + this.referentialRefService = referentialRefService; + this.modalCtrl = modalCtrl; + this.network = network; + this.cd = cd; + this.required = true; + this.showError = true; + this.showDistanceToCoastGradient = true; + this.showDepthGradient = true; + this.showNearbySpecificArea = true; + this.locationLevelIds = [LocationLevelIds.RECTANGLE_ICES]; + this.mobile = this.settings.mobile; + } + get empty() { + return FishingArea.isEmpty(this.value); + } + get valid() { + return this.form && (this.required ? this.form.valid : (this.form.valid || this.empty)); + } + get locationControl() { + return this.form.get('location'); + } + get hasNoLocation$() { + return this.locationControl.valueChanges + .pipe(startWith(this.locationControl.value), map(ReferentialUtils.isEmpty)); + } + get value() { + const value = super.value; + // Do NOT return a value, if no location (has it mandatory in DB) + if (ReferentialUtils.isEmpty(value.location)) + return null; + return value; + } + set value(value) { + super.value = value; + } + ngOnInit() { + super.ngOnInit(); + // Set if required or not + this.validatorService.updateFormGroup(this.form, { required: this.required }); + // Combo: fishing area location + const fishingAreaAttributes = this.settings.getFieldDisplayAttributes('fishingAreaLocation'); + this.registerAutocompleteField('fishingAreaLocation', { + suggestFn: (value, filter) => this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { levelIds: this.locationLevelIds })), + filter: { + entityName: 'Location', + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE] + }, + attributes: fishingAreaAttributes, + mobile: this.mobile + }); + // Combo: distance to coast gradient + this.registerAutocompleteField('distanceToCoastGradient', { + suggestFn: (value, options) => this.suggest(value, options, 'DistanceToCoastGradient'), + mobile: this.mobile + }); + // Combo: depth gradient + this.registerAutocompleteField('depthGradient', { + suggestFn: (value, options) => this.suggest(value, options, 'DepthToCoastGradient'), + mobile: this.mobile + }); + // Combo: nearby specific area + this.registerAutocompleteField('nearbySpecificArea', { + suggestFn: (value, options) => this.suggest(value, options, 'NearbySpecificArea'), + mobile: this.mobile + }); + } + suggest(value, options, entityName) { + return this.referentialRefService.suggest(value, { + entityName, + searchAttribute: options && options.searchAttribute + }, 'rankOrder', 'asc'); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], FishingAreaForm.prototype, "required", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], FishingAreaForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], FishingAreaForm.prototype, "showDistanceToCoastGradient", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], FishingAreaForm.prototype, "showDepthGradient", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], FishingAreaForm.prototype, "showNearbySpecificArea", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], FishingAreaForm.prototype, "locationLevelIds", void 0); +FishingAreaForm = __decorate([ + Component({ + selector: 'app-fishing-area-form', + templateUrl: './fishing-area.form.html', + styleUrls: ['./fishing-area.form.scss'], + }), + __metadata("design:paramtypes", [Injector, + UntypedFormBuilder, + FishingAreaValidatorService, + ReferentialRefService, + ModalController, + NetworkService, + ChangeDetectorRef]) +], FishingAreaForm); +export { FishingAreaForm }; +//# sourceMappingURL=fishing-area.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/fishing-area/fishing-area.form.js.map b/out-tsc/app/app/data/fishing-area/fishing-area.form.js.map new file mode 100644 index 000000000..f08229dec --- /dev/null +++ b/out-tsc/app/app/data/fishing-area/fishing-area.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"fishing-area.form.js","sourceRoot":"","sources":["../../../../../src/app/data/fishing-area/fishing-area.form.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAU,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAmB,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACnG,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAE9E,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAOzC,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,OAAoB;IA0CvD,YACE,QAAkB,EACR,WAA+B,EAC/B,gBAA6C,EAC7C,qBAA4C,EAC5C,SAA0B,EAC7B,OAAuB,EACpB,EAAqB;QAE/B,KAAK,CAAC,QAAQ,EAAE,gBAAgB,CAAC,YAAY,EAAE,CAAC,CAAC;QAPvC,gBAAW,GAAX,WAAW,CAAoB;QAC/B,qBAAgB,GAAhB,gBAAgB,CAA6B;QAC7C,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,cAAS,GAAT,SAAS,CAAiB;QAC7B,YAAO,GAAP,OAAO,CAAgB;QACpB,OAAE,GAAF,EAAE,CAAmB;QA7CxB,aAAQ,GAAG,IAAI,CAAC;QAChB,cAAS,GAAG,IAAI,CAAC;QACjB,gCAA2B,GAAG,IAAI,CAAC;QACnC,sBAAiB,GAAG,IAAI,CAAC;QACzB,2BAAsB,GAAG,IAAI,CAAC;QAC9B,qBAAgB,GAAG,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;QA2C5D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IACrC,CAAC;IA1CD,IAAI,KAAK;QACP,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1F,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY;aACrC,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EACrC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAC9B,CAAC;IACN,CAAC;IAED,IAAI,KAAK;QACP,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,iEAAiE;QACjE,IAAI,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,CAAC,KAAU;QAClB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACtB,CAAC;IAeD,QAAQ;QACN,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEjB,yBAAyB;QACzB,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,EAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAC,CAAC,CAAC;QAE5E,+BAA+B;QAC/B,MAAM,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,qBAAqB,CAAC,CAAC;QAC7F,IAAI,CAAC,yBAAyB,CAAC,qBAAqB,EAAE;YACpD,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,kCACjE,MAAM,KACT,QAAQ,EAAE,IAAI,CAAC,gBAAgB,IAC/B;YACF,MAAM,EAAE;gBACN,UAAU,EAAE,UAAU;gBACtB,SAAS,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC;aACnD;YACD,UAAU,EAAE,qBAAqB;YACjC,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,oCAAoC;QACpC,IAAI,CAAC,yBAAyB,CAAC,yBAAyB,EAAE;YACxD,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,yBAAyB,CAAC;YACtF,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,wBAAwB;QACxB,IAAI,CAAC,yBAAyB,CAAC,eAAe,EAAE;YAC9C,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,sBAAsB,CAAC;YACnF,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,8BAA8B;QAC9B,IAAI,CAAC,yBAAyB,CAAC,oBAAoB,EAAE;YACnD,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,oBAAoB,CAAC;YACjF,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IAEO,OAAO,CAAC,KAAa,EAAE,OAAY,EAAE,UAAkB;QAC7D,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE;YAC7C,UAAU;YACV,eAAe,EAAE,OAAO,IAAI,OAAO,CAAC,eAAe;SACpD,EACD,WAAW,EACX,KAAK,CAAC,CAAC;IACX,CAAC;IAES,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;CACF,CAAA;AAvGC;IAAC,KAAK,EAAE;;iDAAiB;AACzB;IAAC,KAAK,EAAE;;kDAAkB;AAC1B;IAAC,KAAK,EAAE;;oEAAoC;AAC5C;IAAC,KAAK,EAAE;;0DAA0B;AAClC;IAAC,KAAK,EAAE;;+DAA+B;AACvC;IAAC,KAAK,EAAE;;yDAAsD;AATnD,eAAe;IAL3B,SAAS,CAAC;QACT,QAAQ,EAAE,uBAAuB;QACjC,WAAW,EAAE,0BAA0B;QACvC,SAAS,EAAE,CAAC,0BAA0B,CAAC;KACxC,CAAC;qCA4CY,QAAQ;QACK,kBAAkB;QACb,2BAA2B;QACtB,qBAAqB;QACjC,eAAe;QACpB,cAAc;QAChB,iBAAiB;GAjDtB,eAAe,CA2G3B;SA3GY,eAAe"} \ No newline at end of file diff --git a/out-tsc/app/app/data/fishing-area/fishing-area.model.js b/out-tsc/app/app/data/fishing-area/fishing-area.model.js new file mode 100644 index 000000000..ecaefdb5b --- /dev/null +++ b/out-tsc/app/app/data/fishing-area/fishing-area.model.js @@ -0,0 +1,73 @@ +var FishingArea_1; +import { __decorate, __metadata } from "tslib"; +import { DataEntity } from '../services/model/data-entity.model'; +import { EntityClass, isNotNil, ReferentialRef, ReferentialUtils } from '@sumaris-net/ngx-components'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +import { Geometries } from '@app/shared/geometries.utils'; +import { LocationUtils } from '@app/referential/location/location.utils'; +let FishingArea = FishingArea_1 = class FishingArea extends DataEntity { + // operationId: number; + constructor() { + super(FishingArea_1.TYPENAME); + this.location = null; + this.distanceToCoastGradient = null; + this.depthGradient = null; + this.nearbySpecificArea = null; + // this.operationId = null; + } + static equals(o1, o2) { + return ((isNotNil(o1 === null || o1 === void 0 ? void 0 : o1.id) && o1.id === (o2 === null || o2 === void 0 ? void 0 : o2.id)) || + (!!o1 && + o2 && + ReferentialUtils.equals(o1 === null || o1 === void 0 ? void 0 : o1.distanceToCoastGradient, o2.distanceToCoastGradient) && + ReferentialUtils.equals(o1 === null || o1 === void 0 ? void 0 : o1.depthGradient, o2.depthGradient) && + ReferentialUtils.equals(o1 === null || o1 === void 0 ? void 0 : o1.nearbySpecificArea, o2.nearbySpecificArea))); + } + static isEmpty(value) { + return (!value || + (ReferentialUtils.isEmpty(value.location) && + ReferentialUtils.isEmpty(value.distanceToCoastGradient) && + ReferentialUtils.isEmpty(value.depthGradient) && + ReferentialUtils.isEmpty(value.nearbySpecificArea))); + } + asObject(options) { + const target = super.asObject(options); + target.location = (this.location && this.location.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS))) || undefined; + target.distanceToCoastGradient = + (this.distanceToCoastGradient && this.distanceToCoastGradient.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS))) || undefined; + target.depthGradient = (this.depthGradient && this.depthGradient.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS))) || undefined; + target.nearbySpecificArea = (this.nearbySpecificArea && this.nearbySpecificArea.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS))) || undefined; + return target; + } + fromObject(source) { + super.fromObject(source); + this.location = source.location && ReferentialRef.fromObject(source.location); + this.distanceToCoastGradient = source.distanceToCoastGradient && ReferentialRef.fromObject(source.distanceToCoastGradient); + this.depthGradient = source.depthGradient && ReferentialRef.fromObject(source.depthGradient); + this.nearbySpecificArea = source.nearbySpecificArea && ReferentialRef.fromObject(source.nearbySpecificArea); + // this.operationId = source.operationId; + return this; + } + equals(other) { + return ((super.equals(other) && isNotNil(this.id)) || + (ReferentialUtils.equals(this.location, other.location) && + ReferentialUtils.equals(this.distanceToCoastGradient, other.distanceToCoastGradient) && + ReferentialUtils.equals(this.depthGradient, other.depthGradient) && + ReferentialUtils.equals(this.nearbySpecificArea, other.nearbySpecificArea))); + } +}; +FishingArea = FishingArea_1 = __decorate([ + EntityClass({ typename: 'FishingAreaVO' }), + __metadata("design:paramtypes", []) +], FishingArea); +export { FishingArea }; +export class FishingAreaUtils { + static createBBoxFilter(boundingBox) { + return (fa) => { + var _a; + const rectBbox = LocationUtils.getBBoxFromRectangleLabel((_a = fa.location) === null || _a === void 0 ? void 0 : _a.label); + return rectBbox && Geometries.isBBoxInside(rectBbox, boundingBox); + }; + } +} +//# sourceMappingURL=fishing-area.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/fishing-area/fishing-area.model.js.map b/out-tsc/app/app/data/fishing-area/fishing-area.model.js.map new file mode 100644 index 000000000..861e2a421 --- /dev/null +++ b/out-tsc/app/app/data/fishing-area/fishing-area.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"fishing-area.model.js","sourceRoot":"","sources":["../../../../../src/app/data/fishing-area/fishing-area.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/fishing-area/fishing-area.module.js b/out-tsc/app/app/data/fishing-area/fishing-area.module.js new file mode 100644 index 000000000..d4b27154d --- /dev/null +++ b/out-tsc/app/app/data/fishing-area/fishing-area.module.js @@ -0,0 +1,28 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { FishingAreaForm } from './fishing-area.form'; +import { TranslateModule } from '@ngx-translate/core'; +import { AppSharedModule } from '@app/shared/shared.module'; +let AppFishingAreaModule = class AppFishingAreaModule { + constructor() { + console.debug('[fishing-area] Creating module...'); + } +}; +AppFishingAreaModule = __decorate([ + NgModule({ + imports: [ + AppSharedModule, + TranslateModule.forChild() + ], + declarations: [ + FishingAreaForm + ], + exports: [ + // Components + FishingAreaForm + ] + }), + __metadata("design:paramtypes", []) +], AppFishingAreaModule); +export { AppFishingAreaModule }; +//# sourceMappingURL=fishing-area.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/fishing-area/fishing-area.module.js.map b/out-tsc/app/app/data/fishing-area/fishing-area.module.js.map new file mode 100644 index 000000000..95ae8012f --- /dev/null +++ b/out-tsc/app/app/data/fishing-area/fishing-area.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"fishing-area.module.js","sourceRoot":"","sources":["../../../../../src/app/data/fishing-area/fishing-area.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAgBrD,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAE/B;QACE,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACrD,CAAC;CACF,CAAA;AALY,oBAAoB;IAbhC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,eAAe;YACf,eAAe,CAAC,QAAQ,EAAE;SAC3B;QACD,YAAY,EAAE;YACZ,eAAe;SAChB;QACD,OAAO,EAAE;YACP,aAAa;YACb,eAAe;SAChB;KACF,CAAC;;GACW,oBAAoB,CAKhC;SALY,oBAAoB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/fishing-area/fishing-area.validator.js b/out-tsc/app/app/data/fishing-area/fishing-area.validator.js new file mode 100644 index 000000000..963c3cf92 --- /dev/null +++ b/out-tsc/app/app/data/fishing-area/fishing-area.validator.js @@ -0,0 +1,73 @@ +var FishingAreaValidatorService_1; +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { DataEntityValidatorService } from '../services/validator/data-entity.validator'; +import { FishingArea } from './fishing-area.model'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { LocalSettingsService, SharedFormGroupValidators, SharedValidators, toBoolean } from '@sumaris-net/ngx-components'; +import { TranslateService } from '@ngx-translate/core'; +let FishingAreaValidatorService = FishingAreaValidatorService_1 = class FishingAreaValidatorService extends DataEntityValidatorService { + constructor(formBuilder, translate, settings) { + super(formBuilder, translate, settings); + this.formBuilder = formBuilder; + this.translate = translate; + this.settings = settings; + } + getFormGroupConfig(data, opts) { + return Object.assign(super.getFormGroupConfig(data, opts), { + __typename: [FishingArea.TYPENAME], + location: [data && data.location || null, this.getLocationValidators(opts)], + distanceToCoastGradient: [data && data.distanceToCoastGradient || null, SharedValidators.entity], + depthGradient: [data && data.depthGradient || null, SharedValidators.entity], + nearbySpecificArea: [data && data.nearbySpecificArea || null, SharedValidators.entity] + }); + } + getFormGroupOptions(data, opts) { + // Location if required only if the fishing area is NOT already required + if (!opts || opts.required !== true) { + return { + validator: [ + SharedFormGroupValidators.requiredIf('location', 'distanceToCoastGradient'), + SharedFormGroupValidators.requiredIf('location', 'depthGradient'), + SharedFormGroupValidators.requiredIf('location', 'nearbySpecificArea') + ] + }; + } + else { + // Location control is already required (see getLocationValidators() ) + return null; + } + } + updateFormGroup(formGroup, opts) { + var _a; + opts = this.fillDefaultOptions(opts); + const locationValidators = this.getLocationValidators(opts); + formGroup.get('location').setValidators(locationValidators); + // Set form group validators + formGroup.setValidators((_a = this.getFormGroupOptions(null, opts)) === null || _a === void 0 ? void 0 : _a.validators); + formGroup.updateValueAndValidity({ emitEvent: false }); + } + getLocationValidators(opts) { + return (opts && opts.required) ? Validators.compose([Validators.required, FishingAreaValidatorService_1.entity]) : SharedValidators.entity; + } + fillDefaultOptions(opts) { + opts = super.fillDefaultOptions(opts); + opts.required = toBoolean(opts.required, true); + return opts; + } + static entity(control) { + const value = control.value; + if (value && (typeof value !== 'object' || value.id === undefined || value.id === null)) { + return { entity: true }; + } + return null; + } +}; +FishingAreaValidatorService = FishingAreaValidatorService_1 = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + LocalSettingsService]) +], FishingAreaValidatorService); +export { FishingAreaValidatorService }; +//# sourceMappingURL=fishing-area.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/fishing-area/fishing-area.validator.js.map b/out-tsc/app/app/data/fishing-area/fishing-area.validator.js.map new file mode 100644 index 000000000..0f3c3cbda --- /dev/null +++ b/out-tsc/app/app/data/fishing-area/fishing-area.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"fishing-area.validator.js","sourceRoot":"","sources":["../../../../../src/app/data/fishing-area/fishing-area.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/form/data-editor.class.js b/out-tsc/app/app/data/form/data-editor.class.js new file mode 100644 index 000000000..1adfe5cd5 --- /dev/null +++ b/out-tsc/app/app/data/form/data-editor.class.js @@ -0,0 +1,402 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Directive, EventEmitter, Injector } from '@angular/core'; +import { merge, Observable } from 'rxjs'; +import { AppEditorOptions, AppEntityEditor, changeCaseToUnderscore, ConfigService, DateUtils, fromDateISOString, isEmptyArray, isNil, isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrBlank, LocalSettingsService, MessageService, PersonService, ReferentialUtils, toBoolean, } from '@sumaris-net/ngx-components'; +import { catchError, distinctUntilChanged, filter, map, mergeMap, switchMap } from 'rxjs/operators'; +import { Program } from '@app/referential/services/model/program.model'; +import { Strategy } from '@app/referential/services/model/strategy.model'; +import { StrategyRefService } from '@app/referential/services/strategy-ref.service'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { noHtml } from '@app/shared/functions'; +import { RxState } from '@rx-angular/state'; +import { APP_SOCIAL_CONFIG_OPTIONS } from '@app/social/config/social.config'; +import { DataStrategyResolutions } from '@app/data/form/data-editor.utils'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { environment } from '@environments/environment'; +import { RxStateProperty, RxStateRegister, RxStateSelect } from '@app/shared/state/state.decorator'; +export class DataEditorOptions extends AppEditorOptions { +} +let AppDataEntityEditor = class AppDataEntityEditor extends AppEntityEditor { + constructor(injector, dataType, dataService, options) { + super(injector, dataType, dataService, Object.assign({ autoOpenNextTab: !(injector.get(LocalSettingsService).mobile) }, options)); + this._reloadProgramSubject = new EventEmitter(); + this._reloadStrategySubject = new EventEmitter(); + this.logPrefix = null; + this.canSendMessage = false; + this.programRefService = injector.get(ProgramRefService); + this.strategyRefService = injector.get(StrategyRefService); + this.messageService = injector.get(MessageService); + this.personService = injector.get(PersonService); + this.configService = injector.get(ConfigService); + this.mobile = this.settings.mobile; + this.acquisitionLevel = options === null || options === void 0 ? void 0 : options.acquisitionLevel; + this.settingsId = (options === null || options === void 0 ? void 0 : options.settingsId) || this.acquisitionLevel || `editor-${this.constructor.name}`; + this.requiredStrategy = true; + // FOR DEV ONLY ---- + this.logPrefix = '[base-data-editor] '; + this.canDebug = !environment.production; + this.debug = toBoolean(this.settings.getPageSettings(this.settingsId, 'debug'), this.canDebug); + } + ngOnInit() { + super.ngOnInit(); + // Watch program, to configure tables from program properties + this._state.connect('program', merge(this.programLabel$.pipe(distinctUntilChanged()), + // Allow to force reload (e.g. when program remotely changes - see startListenProgramRemoteChanges() ) + this._reloadProgramSubject.pipe(map(() => this.programLabel))) + .pipe(filter(isNotNilOrBlank), + // DEBUG -- + //tap(programLabel => console.debug('DEV - Getting programLabel=' + programLabel)), + switchMap((programLabel) => this.programRefService.watchByLabel(programLabel, { debug: this.debug })), catchError((err, _) => { + this.setError(err); + return Promise.resolve(null); + }))); + const programLoaded$ = this.program$.pipe(filter(isNotNil), mergeMap((program) => this.setProgram(program) + .then(() => program) + .catch(err => { + this.setError(err); + return undefined; + })), filter(isNotNil)); + this._state.connect('strategyFilter', programLoaded$.pipe(mergeMap(program => this.watchStrategyFilter(program)))); + // Load strategy from strategyLabel (after program loaded) + this._state.connect('strategy', merge(this.strategyFilter$, this._reloadStrategySubject.pipe(map(_ => this.strategyFilter))) + .pipe(filter(strategyFilter => this.canLoadStrategy(this.program, strategyFilter)), mergeMap((strategyFilter) => this.loadStrategy(strategyFilter) + .catch(err => { + this.setError(err); + return undefined; + })))); + this._state.connect('requiredStrategy', this.strategyResolution$.pipe(filter(isNotNil), map(r => r !== DataStrategyResolutions.NONE))); + this._state.hold(this.strategy$, strategy => this.setStrategy(strategy)); + // Listen config + if (!this.mobile) { + this._state.hold(this.configService.config, (config) => this.onConfigLoaded(config)); + } + } + ngOnDestroy() { + super.ngOnDestroy(); + this._state.ngOnDestroy(); + this._reloadProgramSubject.complete(); + this._reloadProgramSubject.unsubscribe(); + this._reloadStrategySubject.complete(); + this._reloadStrategySubject.unsubscribe(); + } + canUserWrite(data, opts) { + return this.dataService.canUserWrite(data, Object.assign({ program: this.program }, opts)); + } + enable(opts) { + if (!this.data) + return false; + super.enable(opts); + return true; + } + watchStrategyFilter(program) { + if (!this.strategyResolution) + throw new Error('Missing strategy resolution. Please check super.setProgram() has been called'); + switch (this.strategyResolution) { + // Most recent + case DataStrategyResolutions.LAST: + default: + return this.acquisitionLevel$.pipe(map(acquisitionLevel => { + return { + programId: program.id, + acquisitionLevel, + }; + })); + } + } + canLoadStrategy(program, strategyFilter) { + // None: avoid to load + if (this.strategyResolution === DataStrategyResolutions.NONE) + return false; + // Check program + if (!program) + return false; + // Check acquisition level + if (isNilOrBlank(strategyFilter === null || strategyFilter === void 0 ? void 0 : strategyFilter.acquisitionLevel) && isEmptyArray(strategyFilter === null || strategyFilter === void 0 ? void 0 : strategyFilter.acquisitionLevels)) { + return false; + } + // Spatio-temporal + if (this.strategyResolution === DataStrategyResolutions.SPATIO_TEMPORAL) { + return ReferentialUtils.isNotEmpty(strategyFilter === null || strategyFilter === void 0 ? void 0 : strategyFilter.location) && isNotNil(strategyFilter === null || strategyFilter === void 0 ? void 0 : strategyFilter.startDate); + } + // User select + if (this.strategyResolution === DataStrategyResolutions.USER_SELECT) { + return isNotEmptyArray(strategyFilter === null || strategyFilter === void 0 ? void 0 : strategyFilter.includedIds) || isNotNilOrBlank(strategyFilter === null || strategyFilter === void 0 ? void 0 : strategyFilter.label); + } + // Last + return true; + } + loadStrategy(strategyFilter) { + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.debug(this.logPrefix + 'Loading strategy, using filter:', strategyFilter); + try { + return yield this.strategyRefService.loadByFilter(strategyFilter, { + fullLoad: false, + failIfMissing: this.requiredStrategy, + debug: this.debug + }); + } + catch (err) { + console.error((err === null || err === void 0 ? void 0 : err.message) || err, err); + return undefined; + } + }); + } + setProgram(program) { + return __awaiter(this, void 0, void 0, function* () { + // Can be overridden by subclasses + if (!program) + return; // Skip + // DEBUG + if (this.debug) + console.debug(this.logPrefix + `Program ${program.label} loaded`); + // Set strategy resolution + const strategyResolution = program.getProperty(ProgramProperties.DATA_STRATEGY_RESOLUTION); + console.info(this.logPrefix + 'Strategy resolution: ' + strategyResolution); + this.strategyResolution = strategyResolution; + }); + } + setStrategy(strategy) { + return __awaiter(this, void 0, void 0, function* () { + // Can be overridden by subclasses + // DEBUG + if (strategy && this.debug) + console.debug(this.logPrefix + `Strategy #${strategy.id} loaded`, strategy); + }); + } + setError(error, opts) { + var _a, _b; + if (error && typeof error !== 'string') { + // Convert form errors + if ((_a = error.details) === null || _a === void 0 ? void 0 : _a.errors) { + // Create a details message, from errors in forms (e.g. returned by control()) + const formErrors = error.details.errors; + if (formErrors) { + const i18FormError = this.errorTranslator.translateErrors(formErrors, { + separator: ', ', + controlPathTranslator: this, + }); + if (isNotNilOrBlank(i18FormError)) { + error.details.message = i18FormError; + } + } + } + // Keep details message, if main message is the default message + if (error.message === 'COMMON.FORM.HAS_ERROR' && isNotNilOrBlank((_b = error.details) === null || _b === void 0 ? void 0 : _b.message)) { + error.message = error.details.message; + delete error.details; + } + } + super.setError(error, opts); + } + /* -- protected methods -- */ + translateControlPath(controlPath) { + const i18nKey = (this.i18nContext.prefix || '') + changeCaseToUnderscore(controlPath).toUpperCase(); + return this.translate.instant(i18nKey); + } + startListenProgramRemoteChanges(program) { + var _a; + if (!program || isNil(program.id)) + return; // Skip if program is missing + console.debug(`[root-data-editor] Listening program #${program.id} changes...`); + // Remove previous subscription, if exists + (_a = this.remoteProgramSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + const previousUpdateDate = fromDateISOString(program.updateDate) || DateUtils.moment(); + const subscription = this.programRefService + .listenChanges(program.id) + .pipe(filter(isNotNil), + // Avoid reloading while editing the page + filter(() => !this.dirty), + // Filter or newer program only + filter((data) => previousUpdateDate.isBefore(data.updateDate)), + // Reload program & strategies + mergeMap((_) => this.reloadProgram())) + .subscribe(); + // DEBUG + //.add(() => console.debug(`[root-data-editor] [WS] Stop listening to program changes on server.`)) + subscription.add(() => this.unregisterSubscription(subscription)); + this.registerSubscription(subscription); + this.remoteProgramSubscription = subscription; + } + startListenStrategyRemoteChanges(program) { + var _a; + if (!program || isNil(program.id)) + return; // Skip + // Remove previous listener (e.g. on a previous program id) + (_a = this.remoteStrategySubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + const previousUpdateDate = fromDateISOString(program.updateDate) || DateUtils.moment(); + const subscription = this.strategyRefService + .listenChangesByProgram(program.id) + .pipe(filter(isNotNil), + // Avoid reloading while editing the page + filter(() => !this.dirty), + // Filter or newer strategy only + filter((updateDate) => previousUpdateDate.isBefore(updateDate)), + // Reload strategies + mergeMap((_) => this.reloadStrategy())) + .subscribe(); + // DEBUG + //.add(() => console.debug(`[base-data-editor] [WS] Stop listening to strategies changes on server.`)) + subscription.add(() => this.unregisterSubscription(subscription)); + this.registerSubscription(subscription); + this.remoteStrategySubscription = subscription; + } + /** + * Force to reload the program + * + * @protected + */ + reloadProgram(opts = { clearCache: true }) { + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.debug(`[base-data-editor] Force program reload...`); + // Cache clear + if ((opts === null || opts === void 0 ? void 0 : opts.clearCache) !== false) { + yield this.programRefService.clearCache(); + } + this._reloadProgramSubject.next(); + }); + } + /** + * Force to reload the strategy + * + * @protected + */ + reloadStrategy(opts = { clearCache: true }) { + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.debug(`[base-data-editor] Force strategy reload...`); + // Cache clear (by default) + if (!opts || opts.clearCache !== false) { + yield this.strategyRefService.clearCache(); + } + this._reloadStrategySubject.next(); + }); + } + /** + * Override default function, to add the entity program as subtitle) + * + * @param page + * @param opts + */ + addToPageHistory(page, opts) { + const _super = Object.create(null, { + addToPageHistory: { get: () => super.addToPageHistory } + }); + return __awaiter(this, void 0, void 0, function* () { + page.subtitle = page.subtitle || this.programLabel; + return _super.addToPageHistory.call(this, page, opts); + }); + } + onConfigLoaded(config) { + return __awaiter(this, void 0, void 0, function* () { + console.info('[base-data-editor] Init using config', config); + const canSendMessage = config.getPropertyAsBoolean(APP_SOCIAL_CONFIG_OPTIONS.ENABLE_NOTIFICATION_ICONS); + if (this.canSendMessage !== canSendMessage) { + this.canSendMessage = canSendMessage; + this.markForCheck(); + } + }); + } + openComposeMessageModal(recipient, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!this.canSendMessage) + return; // Skip if disabled + console.debug(this.logPrefix + 'Writing a message to:', recipient); + const title = (_a = noHtml((opts === null || opts === void 0 ? void 0 : opts.title) || this.titleSubject.value)) === null || _a === void 0 ? void 0 : _a.toLowerCase(); + const url = this.router.url; + const body = this.translate.instant('DATA.MESSAGE_BODY', { title, url }); + yield this.messageService.openComposeModal({ + suggestFn: (value, filter) => this.personService.suggest(value, filter), + data: { + subject: title, + recipients: recipient ? [recipient] : [], + body, + }, + }); + }); + } + devToggleDebug() { + this.debug = !this.debug; + this.markForCheck(); + // Save it into local settings + this.settings.savePageSetting(this.settingsId, this.debug, 'debug'); + } +}; +__decorate([ + RxStateRegister(), + __metadata("design:type", RxState) +], AppDataEntityEditor.prototype, "_state", void 0); +__decorate([ + RxStateSelect('acquisitionLevel'), + __metadata("design:type", Observable) +], AppDataEntityEditor.prototype, "acquisitionLevel$", void 0); +__decorate([ + RxStateSelect(), + __metadata("design:type", Observable) +], AppDataEntityEditor.prototype, "programLabel$", void 0); +__decorate([ + RxStateSelect(), + __metadata("design:type", Observable) +], AppDataEntityEditor.prototype, "program$", void 0); +__decorate([ + RxStateSelect(), + __metadata("design:type", Observable) +], AppDataEntityEditor.prototype, "strategyResolution$", void 0); +__decorate([ + RxStateSelect(), + __metadata("design:type", Observable) +], AppDataEntityEditor.prototype, "requiredStrategy$", void 0); +__decorate([ + RxStateSelect(), + __metadata("design:type", Observable) +], AppDataEntityEditor.prototype, "strategyFilter$", void 0); +__decorate([ + RxStateSelect(), + __metadata("design:type", Observable) +], AppDataEntityEditor.prototype, "strategy$", void 0); +__decorate([ + RxStateSelect(), + __metadata("design:type", Observable) +], AppDataEntityEditor.prototype, "pmfms$", void 0); +__decorate([ + RxStateProperty(), + __metadata("design:type", String) +], AppDataEntityEditor.prototype, "acquisitionLevel", void 0); +__decorate([ + RxStateProperty(), + __metadata("design:type", String) +], AppDataEntityEditor.prototype, "programLabel", void 0); +__decorate([ + RxStateProperty(), + __metadata("design:type", Program) +], AppDataEntityEditor.prototype, "program", void 0); +__decorate([ + RxStateProperty(), + __metadata("design:type", String) +], AppDataEntityEditor.prototype, "strategyResolution", void 0); +__decorate([ + RxStateProperty(), + __metadata("design:type", Boolean) +], AppDataEntityEditor.prototype, "requiredStrategy", void 0); +__decorate([ + RxStateProperty(), + __metadata("design:type", Object) +], AppDataEntityEditor.prototype, "strategyFilter", void 0); +__decorate([ + RxStateProperty(), + __metadata("design:type", Strategy) +], AppDataEntityEditor.prototype, "strategy", void 0); +__decorate([ + RxStateProperty(), + __metadata("design:type", Object) +], AppDataEntityEditor.prototype, "pmfms", void 0); +AppDataEntityEditor = __decorate([ + Directive() + // tslint:disable-next-line:directive-class-suffix + , + __metadata("design:paramtypes", [Injector, Function, Object, DataEditorOptions]) +], AppDataEntityEditor); +export { AppDataEntityEditor }; +//# sourceMappingURL=data-editor.class.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/form/data-editor.class.js.map b/out-tsc/app/app/data/form/data-editor.class.js.map new file mode 100644 index 000000000..cd4cabe7d --- /dev/null +++ b/out-tsc/app/app/data/form/data-editor.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"data-editor.class.js","sourceRoot":"","sources":["../../../../../src/app/data/form/data-editor.class.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/form/data-editor.utils.js b/out-tsc/app/app/data/form/data-editor.utils.js new file mode 100644 index 000000000..cda1a6601 --- /dev/null +++ b/out-tsc/app/app/data/form/data-editor.utils.js @@ -0,0 +1,9 @@ +import { InjectionToken } from '@angular/core'; +export const APP_DATA_ENTITY_EDITOR = new InjectionToken('AppDataEditor'); +export const DataStrategyResolutions = Object.freeze({ + LAST: 'last', + USER_SELECT: 'user-select', + SPATIO_TEMPORAL: 'spatio-temporal', + NONE: 'none', // e.g. Scientific cruise (Ifremer) +}); +//# sourceMappingURL=data-editor.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/form/data-editor.utils.js.map b/out-tsc/app/app/data/form/data-editor.utils.js.map new file mode 100644 index 000000000..1a10e50a9 --- /dev/null +++ b/out-tsc/app/app/data/form/data-editor.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"data-editor.utils.js","sourceRoot":"","sources":["../../../../../src/app/data/form/data-editor.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,cAAc,CAAiC,eAAe,CAAC,CAAC;AAG1G,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC;IACnD,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,aAAa;IAC1B,eAAe,EAAE,iBAAiB;IAClC,IAAI,EAAE,MAAM,EAAE,mCAAmC;CAClD,CAAC,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/data/form/root-data-editor.class.js b/out-tsc/app/app/data/form/root-data-editor.class.js new file mode 100644 index 000000000..bfa47a2a1 --- /dev/null +++ b/out-tsc/app/app/data/form/root-data-editor.class.js @@ -0,0 +1,96 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Directive, Injector } from '@angular/core'; +import { isNil, isNotNil, ReferentialRef, ReferentialUtils, } from '@sumaris-net/ngx-components'; +import { startWith } from 'rxjs/operators'; +import { AppDataEntityEditor, DataEditorOptions } from '@app/data/form/data-editor.class'; +export class RootDataEditorOptions extends DataEditorOptions { +} +let AppRootDataEntityEditor = class AppRootDataEntityEditor extends AppDataEntityEditor { + constructor(injector, dataType, dataService, options) { + super(injector, dataType, dataService, options); + // FOR DEV ONLY ---- + //this.debug = !environment.production; + } + get programControl() { + return this.form.controls.program; + } + canUserWrite(data, opts) { + return isNil(data.validationDate) && super.canUserWrite(data, opts); + } + load(id, options) { + const _super = Object.create(null, { + load: { get: () => super.load } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.load.call(this, id, options); + // New data + if (isNil(id)) { + this.startListenProgramChanges(); + } + }); + } + enable(opts) { + if (!this.data || isNotNil(this.data.validationDate)) + return false; + super.enable(opts); + // Leave program disable once saved + if (!this.isNewData) + this.programControl.disable(opts); + this.markForCheck(); + return true; + } + /* -- protected methods -- */ + /** + * Listen program changes (only if new data) + * + * @protected + */ + startListenProgramChanges() { + if (this.programChangesSubscription) + return; // Already listening: skip + const subscription = this.programControl.valueChanges.pipe(startWith(this.programControl.value)).subscribe((program) => { + if (ReferentialUtils.isNotEmpty(program)) { + console.debug('[root-data-editor] Propagate program change: ' + program.label); + this.programLabel = program.label; + } + }); + subscription.add(() => this.unregisterSubscription(subscription)); + this.registerSubscription(subscription); + this.programChangesSubscription = subscription; + } + /** + * Override default function, to add the entity program as subtitle + * + * @param page + * @param opts + */ + addToPageHistory(page, opts) { + const _super = Object.create(null, { + addToPageHistory: { get: () => super.addToPageHistory } + }); + var _a; + return __awaiter(this, void 0, void 0, function* () { + page.subtitle = page.subtitle || ((_a = this.data.program) === null || _a === void 0 ? void 0 : _a.label) || this.programLabel; + return _super.addToPageHistory.call(this, page, opts); + }); + } + getValue() { + const _super = Object.create(null, { + getValue: { get: () => super.getValue } + }); + return __awaiter(this, void 0, void 0, function* () { + const data = yield _super.getValue.call(this); + // Re add program, because program control can be disabled + data.program = ReferentialRef.fromObject(this.programControl.value); + return data; + }); + } +}; +AppRootDataEntityEditor = __decorate([ + Directive() + // tslint:disable-next-line:directive-class-suffix + , + __metadata("design:paramtypes", [Injector, Function, Object, RootDataEditorOptions]) +], AppRootDataEntityEditor); +export { AppRootDataEntityEditor }; +//# sourceMappingURL=root-data-editor.class.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/form/root-data-editor.class.js.map b/out-tsc/app/app/data/form/root-data-editor.class.js.map new file mode 100644 index 000000000..f2170f6dd --- /dev/null +++ b/out-tsc/app/app/data/form/root-data-editor.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"root-data-editor.class.js","sourceRoot":"","sources":["../../../../../src/app/data/form/root-data-editor.class.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/image/image-attachment-gallery.component.js b/out-tsc/app/app/data/image/image-attachment-gallery.component.js new file mode 100644 index 000000000..8ca897b19 --- /dev/null +++ b/out-tsc/app/app/data/image/image-attachment-gallery.component.js @@ -0,0 +1,187 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, Output, Self } from '@angular/core'; +import { APP_IMAGE_ATTACHMENT_SERVICE } from './image-attachment.service'; +import { ImageAttachment, ImageAttachmentFilter } from './image-attachment.model'; +import { BehaviorSubject, of, Subscription } from 'rxjs'; +import { ModalController } from '@ionic/angular'; +import { EntitiesTableDataSource, EntityUtils, InMemoryEntitiesService, isNil, LocalSettingsService, toBoolean, } from '@sumaris-net/ngx-components'; +import { startWith, switchMap } from 'rxjs/operators'; +import { environment } from '@environments/environment'; +import { getMaxRankOrder } from '@app/data/services/model/model.utils'; +let AppImageAttachmentGallery = class AppImageAttachmentGallery { + constructor(modalCtrl, settings, cd, dataService) { + this.modalCtrl = modalCtrl; + this.settings = settings; + this.cd = cd; + this.dataService = dataService; + this._subscription = new Subscription(); + this.readySubject = new BehaviorSubject(false); + this.dirtySubject = new BehaviorSubject(false); + this.cardColor = 'light'; + this.disabled = false; + this.readOnly = false; + this.autoLoad = true; + this.refresh = new EventEmitter(); + this.dataSource = new EntitiesTableDataSource(ImageAttachment, this.dataService, null, { + prependNewElements: false, + }); + this.debug = !environment.production; + } + set value(value) { + // DEBUG + if (this.debug) + console.debug(`[image-gallery] Setting ${(value === null || value === void 0 ? void 0 : value.length) || 0} image(s): `); + // Fill rankOrder (keep original order) - need by the equals() function + ImageAttachment.fillRankOrder(value); + this.dataService.setValue(value); + } + get value() { + return (this.dataService.value || []).map(ImageAttachment.fromObject); + } + get galleryDataSource() { + return this.dataSource; + } + get enabled() { + return !this.disabled; + } + get dirty() { + return this.dataService.dirty || this.dirtySubject.value; + } + enable(opts) { + if (this.disabled) { + this.disabled = false; + this.markForCheck(); + } + } + disable(opts) { + if (!this.disabled) { + this.disabled = true; + this.markForCheck(); + } + } + markAsReady() { + if (!this.readySubject.value) { + this.readySubject.next(true); + } + } + markAsDirty() { + if (!this.dirtySubject.value) { + this.dirtySubject.next(true); + } + } + markAsPristine() { + if (this.dirtySubject.value) { + this.dirtySubject.next(false); + } + } + ngOnInit() { + // Set defaults + this.mobile = toBoolean(this.mobile, this.settings.mobile); + this.showToolbar = toBoolean(this.showToolbar, !this.mobile); + // Call datasource refresh, on each refresh events + this._subscription.add(this.refresh + .pipe(startWith((this.autoLoad ? {} : 'skip')), switchMap((event) => { + if (event === 'skip') { + return of(undefined); + } + if (this.debug) + console.debug('[image-attachment-gallery] Calling dataSource.watchAll()...'); + return this.dataSource.watchAll(0, 100, null, null, null); + })) + .subscribe()); + } + ngOnDestroy() { + this._subscription.unsubscribe(); + } + onAfterAddRows(rows) { + return __awaiter(this, void 0, void 0, function* () { + // Fill rankOrder + let rankOrder = getMaxRankOrder(this.dataSource.getData()) + 1; + (rows || []).forEach((row) => { + const data = row.currentData; + if (isNil(data.rankOrder)) { + data.rankOrder = rankOrder++; + row.currentData = data; + } + }); + yield this.save(); + this.markAsDirty(); + }); + } + save() { + return this.dataSource.save(); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Boolean) +], AppImageAttachmentGallery.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], AppImageAttachmentGallery.prototype, "mode", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], AppImageAttachmentGallery.prototype, "cardColor", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppImageAttachmentGallery.prototype, "disabled", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppImageAttachmentGallery.prototype, "readOnly", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], AppImageAttachmentGallery.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], AppImageAttachmentGallery.prototype, "showFabButton", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], AppImageAttachmentGallery.prototype, "showAddCardButton", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppImageAttachmentGallery.prototype, "autoLoad", void 0); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], AppImageAttachmentGallery.prototype, "value", null); +__decorate([ + Output(), + __metadata("design:type", Object) +], AppImageAttachmentGallery.prototype, "refresh", void 0); +AppImageAttachmentGallery = __decorate([ + Component({ + selector: 'app-image-attachment-gallery', + templateUrl: './image-attachment-gallery.component.html', + styleUrls: ['./image-attachment-gallery.component.scss'], + providers: [ + { + provide: APP_IMAGE_ATTACHMENT_SERVICE, + useFactory: () => new InMemoryEntitiesService(ImageAttachment, ImageAttachmentFilter, { + equals: ImageAttachment.equals, + onSort: (data, sortBy = 'rankOrder', sortDirection) => EntityUtils.sort(data, sortBy, sortDirection), + }), + }, + ], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __param(3, Self()), + __param(3, Inject(APP_IMAGE_ATTACHMENT_SERVICE)), + __metadata("design:paramtypes", [ModalController, + LocalSettingsService, + ChangeDetectorRef, + InMemoryEntitiesService]) +], AppImageAttachmentGallery); +export { AppImageAttachmentGallery }; +//# sourceMappingURL=image-attachment-gallery.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/image/image-attachment-gallery.component.js.map b/out-tsc/app/app/data/image/image-attachment-gallery.component.js.map new file mode 100644 index 000000000..0ffea96e8 --- /dev/null +++ b/out-tsc/app/app/data/image/image-attachment-gallery.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"image-attachment-gallery.component.js","sourceRoot":"","sources":["../../../../../src/app/data/image/image-attachment-gallery.component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/image/image-attachment.modal.js b/out-tsc/app/app/data/image/image-attachment.modal.js new file mode 100644 index 000000000..87db5d353 --- /dev/null +++ b/out-tsc/app/app/data/image/image-attachment.modal.js @@ -0,0 +1,91 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { Component, Inject, Input, Self, ViewChild } from '@angular/core'; +import { APP_IMAGE_ATTACHMENT_SERVICE } from './image-attachment.service'; +import { ImageAttachment, ImageAttachmentFilter } from './image-attachment.model'; +import { Subscription } from 'rxjs'; +import { ModalController } from '@ionic/angular'; +import { EntityUtils, InMemoryEntitiesService, toBoolean } from '@sumaris-net/ngx-components'; +import { AppImageAttachmentGallery } from '@app/data/image/image-attachment-gallery.component'; +let AppImageAttachmentsModal = class AppImageAttachmentsModal { + constructor(modalCtrl, dataService) { + this.modalCtrl = modalCtrl; + this.dataService = dataService; + this._subscription = new Subscription(); + this.title = ''; + } + get loading() { + return false; + } + get invalid() { + return false; + } + get valid() { + return !this.invalid; + } + ngOnInit() { + // Default values + this.disabled = toBoolean(this.disabled, false); + // Set value + this.gallery.markAsReady(); + this.gallery.value = this.data; + } + ngOnDestroy() { + this._subscription.unsubscribe(); + } + cancel(event) { + this.modalCtrl.dismiss(); + } + close(event) { + this.cancel(event); + } + onSubmit(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.disabled) + return this.cancel(); + if (this.gallery.dirty) { + const saved = yield this.gallery.save(); + if (!saved) + return; // Stop + } + this.data = this.gallery.value; + return this.modalCtrl.dismiss(this.data); + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], AppImageAttachmentsModal.prototype, "title", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], AppImageAttachmentsModal.prototype, "disabled", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], AppImageAttachmentsModal.prototype, "data", void 0); +__decorate([ + ViewChild('gallery', { static: true }), + __metadata("design:type", AppImageAttachmentGallery) +], AppImageAttachmentsModal.prototype, "gallery", void 0); +AppImageAttachmentsModal = __decorate([ + Component({ + selector: 'app-image-attachment-modal', + templateUrl: './image-attachment.modal.html', + styleUrls: ['./image-attachment.modal.scss'], + providers: [ + { + provide: APP_IMAGE_ATTACHMENT_SERVICE, + useFactory: () => new InMemoryEntitiesService(ImageAttachment, ImageAttachmentFilter, { + equals: EntityUtils.equals + }) + } + ] + }), + __param(1, Self()), + __param(1, Inject(APP_IMAGE_ATTACHMENT_SERVICE)), + __metadata("design:paramtypes", [ModalController, + InMemoryEntitiesService]) +], AppImageAttachmentsModal); +export { AppImageAttachmentsModal }; +//# sourceMappingURL=image-attachment.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/image/image-attachment.modal.js.map b/out-tsc/app/app/data/image/image-attachment.modal.js.map new file mode 100644 index 000000000..78ea59cc2 --- /dev/null +++ b/out-tsc/app/app/data/image/image-attachment.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"image-attachment.modal.js","sourceRoot":"","sources":["../../../../../src/app/data/image/image-attachment.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/image/image-attachment.model.js b/out-tsc/app/app/data/image/image-attachment.model.js new file mode 100644 index 000000000..c5831e9cc --- /dev/null +++ b/out-tsc/app/app/data/image/image-attachment.model.js @@ -0,0 +1,80 @@ +var ImageAttachment_1; +import { __decorate, __metadata } from "tslib"; +import { EntityClass, EntityFilter, fromDateISOString, isNotNil, Person, toDateISOString, toNumber } from '@sumaris-net/ngx-components'; +import { DataEntity } from '@app/data/services/model/data-entity.model'; +export class ImageAttachmentComparators { + static sortByIdOrRankOrder(n1, n2) { + const d1 = toNumber(n1.id, n1.rankOrder); + const d2 = toNumber(n2.id, n2.rankOrder); + return d1 === d2 ? 0 : d1 > d2 ? 1 : -1; + } +} +let ImageAttachment = ImageAttachment_1 = class ImageAttachment extends DataEntity { + constructor() { + super(ImageAttachment_1.TYPENAME); + this.url = null; + this.dataUrl = null; + this.comments = null; + this.dateTime = null; + this.rankOrder = null; + this.creationDate = null; + } + static fillRankOrder(images) { + // Make sure to set a rankOrder (keep original order) + // This is need by the equals() function + images.map((image, index) => { + image.rankOrder = index + 1; + }); + } + static equals(s1, s2) { + return isNotNil(s1.id) && s1.id === s2.id + // Or functional equals + || ( + // Same xxx attribute + s1.rankOrder === s2.rankOrder + && s1.comments === s2.comments); + } + static isEmpty(source) { + return !source.url && !source.comments && !source.dataUrl; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.url = source.url; + this.dataUrl = source.dataUrl; + this.comments = source.comments; + this.dateTime = fromDateISOString(source.dateTime); + this.creationDate = fromDateISOString(source.creationDate); + this.recorderPerson = source.recorderPerson && Person.fromObject(source.recorderPerson); + this.rankOrder = source.rankOrder; + } + asObject(opts) { + const target = super.asObject(opts); + target.dateTime = toDateISOString(this.dateTime); + target.creationDate = toDateISOString(this.creationDate); + target.recorderPerson = this.recorderPerson && this.recorderPerson.asObject(opts) || undefined; + // For pod + if (opts && opts.keepLocalId === false) { + // Reset unused attributes + delete target.rankOrder; + } + return target; + } + get title() { + return this.comments; + } + set title(value) { + this.comments = value; + } +}; +ImageAttachment = ImageAttachment_1 = __decorate([ + EntityClass({ typename: 'ImageAttachmentVO' }), + __metadata("design:paramtypes", []) +], ImageAttachment); +export { ImageAttachment }; +let ImageAttachmentFilter = class ImageAttachmentFilter extends EntityFilter { +}; +ImageAttachmentFilter = __decorate([ + EntityClass({ typename: 'ImageAttachmentFilterVO' }) +], ImageAttachmentFilter); +export { ImageAttachmentFilter }; +//# sourceMappingURL=image-attachment.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/image/image-attachment.model.js.map b/out-tsc/app/app/data/image/image-attachment.model.js.map new file mode 100644 index 000000000..3dffbed9e --- /dev/null +++ b/out-tsc/app/app/data/image/image-attachment.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"image-attachment.model.js","sourceRoot":"","sources":["../../../../../src/app/data/image/image-attachment.model.ts"],"names":[],"mappings":";;AAAA,OAAO,EAA6C,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAS,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAG1L,OAAO,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AAExE,MAAM,OAAO,0BAA0B;IACrC,MAAM,CAAC,mBAAmB,CAAC,EAAmB,EAAE,EAAmB;QACjE,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;CACF;AAGM,IAAM,eAAe,uBAArB,MAAM,eAAgB,SAAQ,UAA2B;IA2B9D;QACE,KAAK,CAAC,iBAAe,CAAC,QAAQ,CAAC,CAAC;QAGlC,QAAG,GAAW,IAAI,CAAC;QACnB,YAAO,GAAW,IAAI,CAAC;QACvB,aAAQ,GAAW,IAAI,CAAC;QACxB,aAAQ,GAAW,IAAI,CAAC;QACxB,cAAS,GAAW,IAAI,CAAC;QAEzB,iBAAY,GAAW,IAAI,CAAC;IAR5B,CAAC;IAxBD,MAAM,CAAC,aAAa,CAAC,MAAyB;QAC5C,qDAAqD;QACrD,wCAAwC;QACxC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC1B,KAAK,CAAC,SAAS,GAAG,KAAK,GAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,EAAmB,EAAE,EAAmB;QACpD,OAAO,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;YACvC,uBAAuB;eACpB;YACD,qBAAqB;YACrB,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS;mBAC1B,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,CAC/B,CAAC;IACN,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,MAAuB;QACpC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC5D,CAAC;IAeD,UAAU,CAAC,MAAW,EAAE,IAAU;QAChC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC3D,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACxF,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACpC,CAAC;IAED,QAAQ,CAAC,IAA4B;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzD,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;QAE/F,UAAU;QACV,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;YACtC,0BAA0B;YAC1B,OAAO,MAAM,CAAC,SAAS,CAAC;SACzB;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAI,KAAK,CAAC,KAAa;QACrB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;CACF,CAAA;AAxEY,eAAe;IAD3B,WAAW,CAAC,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC;;GAClC,eAAe,CAwE3B;SAxEY,eAAe;AA4ErB,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,YAAoD;CAI9F,CAAA;AAJY,qBAAqB;IADjC,WAAW,CAAC,EAAE,QAAQ,EAAE,yBAAyB,EAAE,CAAC;GACxC,qBAAqB,CAIjC;SAJY,qBAAqB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/image/image-attachment.module.js b/out-tsc/app/app/data/image/image-attachment.module.js new file mode 100644 index 000000000..0a912205f --- /dev/null +++ b/out-tsc/app/app/data/image/image-attachment.module.js @@ -0,0 +1,30 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { CoreModule, ImageGalleryModule } from '@sumaris-net/ngx-components'; +import { AppImageAttachmentGallery } from './image-attachment-gallery.component'; +import { TranslateModule } from '@ngx-translate/core'; +import { AppImageAttachmentsModal } from '@app/data/image/image-attachment.modal'; +let AppImageAttachmentModule = class AppImageAttachmentModule { +}; +AppImageAttachmentModule = __decorate([ + NgModule({ + imports: [ + CoreModule, + ImageGalleryModule, + TranslateModule.forChild() + ], + declarations: [ + // Components + AppImageAttachmentGallery, + AppImageAttachmentsModal + ], + exports: [ + TranslateModule, + // Components + AppImageAttachmentGallery, + AppImageAttachmentsModal + ] + }) +], AppImageAttachmentModule); +export { AppImageAttachmentModule }; +//# sourceMappingURL=image-attachment.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/image/image-attachment.module.js.map b/out-tsc/app/app/data/image/image-attachment.module.js.map new file mode 100644 index 000000000..289f5d5b5 --- /dev/null +++ b/out-tsc/app/app/data/image/image-attachment.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"image-attachment.module.js","sourceRoot":"","sources":["../../../../../src/app/data/image/image-attachment.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAqB3E,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;CAEpC,CAAA;AAFY,wBAAwB;IAnBpC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,UAAU;YACV,kBAAkB;YAClB,eAAe,CAAC,QAAQ,EAAE;SAC3B;QACD,YAAY,EAAE;YACZ,aAAa;YACb,yBAAyB;YACzB,wBAAwB;SAEzB;QACD,OAAO,EAAE;YACP,eAAe;YACf,aAAa;YACb,yBAAyB;YACzB,wBAAwB;SACzB;KACF,CAAC;GACW,wBAAwB,CAEpC;SAFY,wBAAwB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/image/image-attachment.service.js b/out-tsc/app/app/data/image/image-attachment.service.js new file mode 100644 index 000000000..0708ece1a --- /dev/null +++ b/out-tsc/app/app/data/image/image-attachment.service.js @@ -0,0 +1,64 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable, InjectionToken } from '@angular/core'; +import { AccountService, BaseEntityService, GraphqlService, PlatformService } from '@sumaris-net/ngx-components'; +import { ImageAttachment, ImageAttachmentFilter } from '@app/data/image/image-attachment.model'; +import { gql } from '@apollo/client/core'; +export const APP_IMAGE_ATTACHMENT_SERVICE = new InjectionToken('ImageAttachmentService'); +export const ImageAttachmentFragments = { + light: gql `fragment LightImageAttachmentFragment on ImageAttachmentVO { + id + url + comments + updateDate + creationDate + __typename + }`, + full: gql `fragment ImageAttachmentFragment on ImageAttachmentVO { + id + url + comments + updateDate + creationDate + qualityFlagId + contentType + recorderDepartment { + ...LightDepartmentFragment + } + recorderPerson { + ...LightPersonFragment + } + __typename + }` +}; +const ImageAttachmentQueries = { + loadAll: gql `query Images($filter: ImageAttachmentVOInput) { + data: images(filter: $filter) { + ...LightImageAttachmentFragment + } + } + ${ImageAttachmentFragments.light}`, +}; +let ImageAttachmentService = class ImageAttachmentService extends BaseEntityService { + constructor(graphql, platform, accountService) { + super(graphql, platform, ImageAttachment, ImageAttachmentFilter, { + queries: ImageAttachmentQueries + }); + this.accountService = accountService; + console.debug('[image-attachment] Creating service'); + } + canUserWrite(data, opts) { + // Only admin can manage images globally + return super.canUserWrite(data, opts) && this.accountService.isAdmin(); + } + asFilter(filter) { + return ImageAttachmentFilter.fromObject(filter); + } +}; +ImageAttachmentService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [GraphqlService, + PlatformService, + AccountService]) +], ImageAttachmentService); +export { ImageAttachmentService }; +//# sourceMappingURL=image-attachment.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/image/image-attachment.service.js.map b/out-tsc/app/app/data/image/image-attachment.service.js.map new file mode 100644 index 000000000..cdbfac9ad --- /dev/null +++ b/out-tsc/app/app/data/image/image-attachment.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"image-attachment.service.js","sourceRoot":"","sources":["../../../../../src/app/data/image/image-attachment.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,cAAc,EAA4B,iBAAiB,EAAE,cAAc,EAAoB,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC7J,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAChG,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,cAAc,CAA2D,wBAAwB,CAAC,CAAC;AAEnJ,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,KAAK,EAAE,GAAG,CAAA;;;;;;;IAOR;IAEF,IAAI,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;IAeP;CACH,CAAC;AAEF,MAAM,sBAAsB,GAA6B;IACvD,OAAO,EAAE,GAAG,CAAA;;;;;IAKV,wBAAwB,CAAC,KAAK,EAAE;CACnC,CAAC;AAIK,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,iBAAyD;IAGnG,YAAY,OAAuB,EACvB,QAAyB,EACf,cAA8B;QAElD,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,qBAAqB,EAAE;YAC/D,OAAO,EAAE,sBAAsB;SAChC,CAAC,CAAC;QAJiB,mBAAc,GAAd,cAAc,CAAgB;QAKlD,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACvD,CAAC;IAED,YAAY,CAAC,IAAqB,EAAE,IAAU;QAC5C,wCAAwC;QACxC,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IACzE,CAAC;IAED,QAAQ,CAAC,MAAW;QAClB,OAAO,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;CACF,CAAA;AArBY,sBAAsB;IADlC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAIV,cAAc;QACb,eAAe;QACC,cAAc;GALzC,sBAAsB,CAqBlC;SArBY,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/image/image-attachment.validator.js b/out-tsc/app/app/data/image/image-attachment.validator.js new file mode 100644 index 000000000..0c427e653 --- /dev/null +++ b/out-tsc/app/app/data/image/image-attachment.validator.js @@ -0,0 +1,28 @@ +import { __decorate } from "tslib"; +import { Injectable } from '@angular/core'; +import { AppValidatorService, SharedValidators } from '@sumaris-net/ngx-components'; +import { ImageAttachment } from '@app/data/image/image-attachment.model'; +import { Validators } from '@angular/forms'; +import { QualityFlagIds } from '@app/referential/services/model/model.enum'; +let ImageAttachmentValidator = class ImageAttachmentValidator extends AppValidatorService { + getFormGroupConfig(data) { + return { + __typename: ImageAttachment.TYPENAME, + id: [(data === null || data === void 0 ? void 0 : data.id) || null], + url: [(data === null || data === void 0 ? void 0 : data.url) || null], + dataUrl: [(data === null || data === void 0 ? void 0 : data.dataUrl) || null], + dateTime: [(data === null || data === void 0 ? void 0 : data.dateTime) || null], + comments: [(data === null || data === void 0 ? void 0 : data.comments) || null, Validators.maxLength(2000)], + updateDate: [(data === null || data === void 0 ? void 0 : data.updateDate) || null], + creationDate: [(data === null || data === void 0 ? void 0 : data.creationDate) || null], + qualityFlagId: [(data === null || data === void 0 ? void 0 : data.qualityFlagId) || QualityFlagIds.NOT_QUALIFIED], + recorderDepartment: [(data === null || data === void 0 ? void 0 : data.recorderDepartment) || null, SharedValidators.entity], + recorderPerson: [(data === null || data === void 0 ? void 0 : data.recorderPerson) || null, SharedValidators.entity] + }; + } +}; +ImageAttachmentValidator = __decorate([ + Injectable({ providedIn: 'root' }) +], ImageAttachmentValidator); +export { ImageAttachmentValidator }; +//# sourceMappingURL=image-attachment.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/image/image-attachment.validator.js.map b/out-tsc/app/app/data/image/image-attachment.validator.js.map new file mode 100644 index 000000000..d44085627 --- /dev/null +++ b/out-tsc/app/app/data/image/image-attachment.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"image-attachment.validator.js","sourceRoot":"","sources":["../../../../../src/app/data/image/image-attachment.validator.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAGrE,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,mBAAmB;IAE/D,kBAAkB,CAAC,IAAU;QAC3B,OAAO;YACL,UAAU,EAAE,eAAe,CAAC,QAAQ;YACpC,EAAE,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,EAAE,KAAI,IAAI,CAAC;YACtB,GAAG,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,KAAI,IAAI,CAAC;YACxB,OAAO,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,KAAI,IAAI,CAAC;YAChC,QAAQ,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,IAAI,CAAC;YAClC,QAAQ,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9D,UAAU,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,KAAI,IAAI,CAAC;YACtC,YAAY,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,KAAI,IAAI,CAAC;YAC1C,aAAa,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,KAAI,cAAc,CAAC,aAAa,CAAC;YACpE,kBAAkB,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,kBAAkB,KAAI,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC;YAC/E,cAAc,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,KAAI,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC;SACxE,CAAC;IACJ,CAAC;CACF,CAAA;AAjBY,wBAAwB;IADpC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;GACpB,wBAAwB,CAiBpC;SAjBY,wBAAwB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/image/testing/image-attachment.test.js b/out-tsc/app/app/data/image/testing/image-attachment.test.js new file mode 100644 index 000000000..b0304f1c3 --- /dev/null +++ b/out-tsc/app/app/data/image/testing/image-attachment.test.js @@ -0,0 +1,30 @@ +import { __decorate, __metadata } from "tslib"; +import { Component, ViewChild } from '@angular/core'; +import { MatTabGroup } from '@angular/material/tabs'; +import { AppImageAttachmentGallery } from '@app/data/image/image-attachment-gallery.component'; +let ImageAttachmentTestPage = class ImageAttachmentTestPage { + constructor() { + } + ngOnInit() { + } + applyExample() { + } +}; +__decorate([ + ViewChild('mobileGallery'), + __metadata("design:type", AppImageAttachmentGallery) +], ImageAttachmentTestPage.prototype, "mobileGallery", void 0); +__decorate([ + ViewChild('tabGroup'), + __metadata("design:type", MatTabGroup) +], ImageAttachmentTestPage.prototype, "tabGroup", void 0); +ImageAttachmentTestPage = __decorate([ + Component({ + selector: 'app-image-attachment-test', + templateUrl: './image-attachment.test.html', + styleUrls: ['./image-attachment.test.scss'] + }), + __metadata("design:paramtypes", []) +], ImageAttachmentTestPage); +export { ImageAttachmentTestPage }; +//# sourceMappingURL=image-attachment.test.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/image/testing/image-attachment.test.js.map b/out-tsc/app/app/data/image/testing/image-attachment.test.js.map new file mode 100644 index 000000000..eefe2c7e0 --- /dev/null +++ b/out-tsc/app/app/data/image/testing/image-attachment.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"image-attachment.test.js","sourceRoot":"","sources":["../../../../../../src/app/data/image/testing/image-attachment.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAU,SAAS,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AAQxF,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAQlC;IAGA,CAAC;IAED,QAAQ;IAER,CAAC;IAED,YAAY;IAEZ,CAAC;CACF,CAAA;AAhBC;IAAC,SAAS,CAAC,eAAe,CAAC;8BAAgB,yBAAyB;8DAAC;AACrE;IAAC,SAAS,CAAC,UAAU,CAAC;8BAAW,WAAW;yDAAC;AALlC,uBAAuB;IALnC,SAAS,CAAC;QACT,QAAQ,EAAE,2BAA2B;QACrC,WAAW,EAAE,8BAA8B;QAC3C,SAAS,EAAE,CAAC,8BAA8B,CAAC;KAC5C,CAAC;;GACW,uBAAuB,CAoBnC;SApBY,uBAAuB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/image/testing/image-attachment.testing.module.js b/out-tsc/app/app/data/image/testing/image-attachment.testing.module.js new file mode 100644 index 000000000..5f1a0e559 --- /dev/null +++ b/out-tsc/app/app/data/image/testing/image-attachment.testing.module.js @@ -0,0 +1,28 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { TranslateModule } from '@ngx-translate/core'; +import { ImageAttachmentTestPage } from '@app/data/image/testing/image-attachment.test'; +import { CoreModule } from '@sumaris-net/ngx-components'; +import { AppImageAttachmentModule } from '@app/data/image/image-attachment.module'; +let AppImageAttachmentTestingModule = class AppImageAttachmentTestingModule { +}; +AppImageAttachmentTestingModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + CoreModule, + TranslateModule.forChild(), + AppImageAttachmentModule + ], + declarations: [ + ImageAttachmentTestPage + ], + exports: [ + ImageAttachmentTestPage, + TranslateModule + ] + }) +], AppImageAttachmentTestingModule); +export { AppImageAttachmentTestingModule }; +//# sourceMappingURL=image-attachment.testing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/image/testing/image-attachment.testing.module.js.map b/out-tsc/app/app/data/image/testing/image-attachment.testing.module.js.map new file mode 100644 index 000000000..452ab28e3 --- /dev/null +++ b/out-tsc/app/app/data/image/testing/image-attachment.testing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"image-attachment.testing.module.js","sourceRoot":"","sources":["../../../../../../src/app/data/image/testing/image-attachment.testing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AAkB5E,IAAM,+BAA+B,GAArC,MAAM,+BAA+B;CAC3C,CAAA;AADY,+BAA+B;IAf3C,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,UAAU;YACV,eAAe,CAAC,QAAQ,EAAE;YAC1B,wBAAwB;SACzB;QACD,YAAY,EAAE;YACZ,uBAAuB;SACxB;QACD,OAAO,EAAE;YACP,uBAAuB;YACvB,eAAe;SAChB;KACF,CAAC;GACW,+BAA+B,CAC3C;SADY,+BAA+B"} \ No newline at end of file diff --git a/out-tsc/app/app/data/measurement/measurement-values.form.class.js b/out-tsc/app/app/data/measurement/measurement-values.form.class.js new file mode 100644 index 000000000..77cfd9a3b --- /dev/null +++ b/out-tsc/app/app/data/measurement/measurement-values.form.class.js @@ -0,0 +1,597 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectorRef, Directive, EventEmitter, Injector, Input, Optional, Output } from '@angular/core'; +import { isObservable, merge } from 'rxjs'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { MeasurementsValidatorService } from './measurement.validator'; +import { filter, map } from 'rxjs/operators'; +import { MeasurementValuesUtils } from './measurement.model'; +import { AppForm, changeCaseToUnderscore, equals, firstNotNilPromise, firstTrue, isNil, toNumber } from '@sumaris-net/ngx-components'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { RxState } from '@rx-angular/state'; +import { environment } from '@environments/environment'; +import { PmfmNamePipe } from '@app/referential/pipes/pmfms.pipe'; +import { RxStateProperty } from '@app/shared/state/state.decorator'; +export const MeasurementsFormReadySteps = Object.freeze({ + STARTING: 0, + LOADING_PMFMS: 1, + SETTING_PMFMS: 2, + UPDATING_FORM_GROUP: 3, + FORM_GROUP_READY: 4 // OK, the form is ready +}); +let MeasurementValuesForm = class MeasurementValuesForm extends AppForm { + constructor(injector, measurementsValidatorService, formBuilder, programRefService, form, options) { + super(injector, form); + this.measurementsValidatorService = measurementsValidatorService; + this.formBuilder = formBuilder; + this.programRefService = programRefService; + this._state = new RxState(); + this._onRefreshPmfms = new EventEmitter(); + this.applyingValue = false; + this.cd = null; + this.acquisitionLevel$ = this._state.select('acquisitionLevel'); + this.programLabel$ = this._state.select('programLabel'); + this.strategyId$ = this._state.select('strategyId'); + this.strategyLabel$ = this._state.select('strategyLabel'); + this.pmfms$ = this._state.select('pmfms'); + this.ready$ = this._state.select('ready'); + this.compact = false; + this.floatLabel = 'auto'; + this.i18nPmfmPrefix = null; + this.i18nSuffix = null; + this.valueChanges = new EventEmitter(); + this.cd = injector.get(ChangeDetectorRef); + this._pmfmNamePipe = injector.get(PmfmNamePipe); + this.options = Object.assign({ skipComputedPmfmControl: true, skipDisabledPmfmControl: true }, options); + // Initial state + this._state.set({ + readyStep: MeasurementsFormReadySteps.STARTING, + forceOptional: false, + requiredStrategy: false, + requiredGear: false, + }); + if (!this.cd && !environment.production) { + console.warn(this._logPrefix + 'No injected ChangeDetectorRef found! Please make sure your component has \'changeDetection: ChangeDetectionStrategy.OnPush\''); + } + // DEBUG + this._logPrefix = '[measurements-values] '; + //this.debug = !environment.production; + } + set pmfms(pmfms) { + // /!\ DO NOT emit event if not loaded. + // (e.g. Required to avoid form ready to be resetted, when pmfms not changed) + this.setPmfms(pmfms, { emitEvent: false }); + } + get pmfms() { + return this._state.get('pmfms'); + } + set value(value) { + this.applyValue(value); + } + get value() { + return this.getValue(); + } + get starting() { + return this.readyStep === MeasurementsFormReadySteps.STARTING; + } + get isNewData() { + var _a; + return isNil((_a = this.data) === null || _a === void 0 ? void 0 : _a.id); + } + get programControl() { + return this.form.get('program'); + } + get measurementValuesForm() { + return this._measurementValuesForm || this.form.controls.measurementValues; + } + ngOnInit() { + super.ngOnInit(); + this._state.hold(this._state.select('acquisitionLevel'), acquisitionLevel => { + this._logPrefix = `[measurements-values] (${acquisitionLevel}) `; + }); + // Load pmfms; when input property set (skip if component is starting = waiting markAsReady()) + this._state.hold(merge(this._state.select(['programLabel', 'acquisitionLevel', 'forceOptional'], res => res), this._state.select(['requiredStrategy', 'strategyLabel'], res => res), this._state.select(['requiredStrategy', 'strategyId'], res => res), this._state.select(['requiredGear', 'gearId'], res => res)) + .pipe( + // Only if markAsReady() called + filter(_ => !this.starting)), + // /!\ DO NOT emit event if not loaded. + // (e.g. Required to avoid CatchBatchForm to have 'loading=true', when gearId is set) + (_) => this.loadPmfms({ emitEvent: false })); + // Update form, when pmfms set + this._state.hold(this.pmfms$, (pmfms) => this.updateFormGroup(pmfms)); + this._state.connect('ready', this._state.select('readyStep') + .pipe(map(step => step >= MeasurementsFormReadySteps.FORM_GROUP_READY))); + // Listen form changes + this.registerSubscription(this.form.valueChanges + .pipe(filter(() => !this.loading && !this.applyingValue && this.valueChanges.observers.length > 0)) + .subscribe((_) => this.valueChanges.emit(this.value))); + } + ngOnDestroy() { + super.ngOnDestroy(); + this._state.ngOnDestroy(); + } + /** + * Reset all data to original value. Useful sometimes, to re init the component (e.g. physical gear form). + * Note: Keep @Input() attributes unchanged + */ + unload() { + this.data = null; + this.applyingValue = false; + this._measurementValuesForm = null; + this.loadingSubject.next(true); + this.readySubject.next(false); + this.errorSubject.next(null); + this.resetPmfms(); + } + setValue(data, opts) { + return this.applyValue(data, opts); + } + reset(data, opts) { + // Applying value to form (that should be ready). + return this.updateView(data, opts); + } + markAsReady(opts) { + // Start loading pmfms + if (this.starting) { + this.setReadyStep(MeasurementsFormReadySteps.LOADING_PMFMS); + this.loadPmfms(); + } + // Wait form ready, before mark as ready + this.doWhenReady(() => super.markAsReady(opts)); + } + markAsLoaded(opts) { + // Wait form loaded, before mark as loaded + this.doWhenReady(() => super.markAsLoaded(opts)); + } + trackPmfmFn(index, pmfm) { + // Add properties that can be changed + return `${pmfm.id}-${pmfm.required}-${pmfm.hidden}`; + } + isVisiblePmfm(pmfm) { + return !pmfm.hidden; + } + /* -- protected methods -- */ + doWhenReady(runnable) { + // Wait form ready, before executing + this._state.hold(firstTrue(this.ready$), runnable); + } + /** + * Wait form is ready, before setting the value to form + * /!\ should NOT be overwritten by subclasses. + * + * @param data + * @param opts + */ + applyValue(data, opts) { + return __awaiter(this, void 0, void 0, function* () { + this.applyingValue = true; + try { + // Will avoid data to be set inside function updateFormGroup() + this.data = data; + if (this.debug) + console.debug(`${this._logPrefix} Applying value...`, data); + this.onApplyingEntity(data, opts); + // Wait form is ready, before applying the data + yield this.ready({ stop: this.destroySubject }); + // Data is still the same (not changed : applying) + if (data && data === this.data) { + // Applying value to form (that should be ready). + yield this.updateView(data, opts); + this.markAsLoaded(); + } + } + catch (err) { + console.error(err); + this.error = err && err.message || err; + this.markAsLoaded(); + } + finally { + this.applyingValue = false; + } + }); + } + onApplyingEntity(data, opts) { + var _a; + // Propagate program + if ((_a = data === null || data === void 0 ? void 0 : data.program) === null || _a === void 0 ? void 0 : _a.label) { + this.programLabel = data.program.label; + } + } + updateView(data, opts) { + const _super = Object.create(null, { + setValue: { get: () => super.setValue } + }); + var _a; + return __awaiter(this, void 0, void 0, function* () { + // Warn is form is NOT ready + if (this.debug && this.readyStep < MeasurementsFormReadySteps.FORM_GROUP_READY) { + console.warn(`${this._logPrefix} Trying to set value, but form may be not ready!`); + } + // DEBUG + if (this.debug) + console.debug(`${this._logPrefix} updateView() with value:`, data); + // Adapt measurement values to form (if not skip) + if (!opts || opts.normalizeEntityToForm !== false) { + this.normalizeEntityToForm(data); + } + // If a program has been filled, always keep it + const program = (_a = this.programControl) === null || _a === void 0 ? void 0 : _a.value; + if (data && (program === null || program === void 0 ? void 0 : program.label)) { + data.program = program; + } + this.data = data; + yield _super.setValue.call(this, data, opts); + if (!opts || opts.emitEvent !== false) { + this.form.markAsPristine(); + this.form.markAsUntouched(); + this.markForCheck(); + } + // Restore form status + this.updateViewState(Object.assign({ onlySelf: true }, opts)); + }); + } + getValue() { + var _a, _b; + if (this.loading) + return this.data; // Avoid to return not well loaded data + const measurementValuesForm = this.measurementValuesForm; + const json = this.form.value; + if (measurementValuesForm) { + // Filter pmfms, to avoid saving all, when update + const filteredPmfms = (this.pmfms || []) + .filter(pmfm => { + const control = measurementValuesForm.controls[pmfm.id]; + return control + // Disabled (skipped by default) + && (!control.disabled || this.options.skipDisabledPmfmControl === false) + // Computed (skipped by default) + && (!pmfm.isComputed || this.options.skipComputedPmfmControl === false); + }); + if (filteredPmfms.length) { + json.measurementValues = Object.assign(((_a = this.data) === null || _a === void 0 ? void 0 : _a.measurementValues) || {}, MeasurementValuesUtils.normalizeValuesToModel(json.measurementValues, filteredPmfms, { keepSourceObject: false })); + } + } + // Restore program, if disabled + const programControl = this.form.get('program'); + if (programControl === null || programControl === void 0 ? void 0 : programControl.disabled) { + json.program = programControl.value; + } + if ((_b = this.data) === null || _b === void 0 ? void 0 : _b.fromObject) { + this.data.fromObject(json); + } + else { + this.data = json; + } + return this.data; + } + setReadyStep(step) { + // /!\ do NOT use STARTING step here (only used to avoid to many refresh, BEFORE ngOnInit()) + step = toNumber(step, MeasurementsFormReadySteps.LOADING_PMFMS); + // Emit, if changed + if (this.readyStep !== step) { + // DEBUG + if (this.debug) + console.debug(`${this._logPrefix} Loading step -> ${step}`); + this.readyStep = step; + } + // Call markAsLoading, if the step is the first step + if (this.loaded && step <= MeasurementsFormReadySteps.LOADING_PMFMS) { + if (this.dirty) + this.data = this.value; + this.markAsLoading(); + } + } + /** + * Check if can load (must have: program, acquisition - and gear if required) + */ + canLoadPmfms() { + // Check if can load (must have: program, acquisition - and gear if required) + if (isNil(this.programLabel) + || isNil(this.acquisitionLevel) + || (this.requiredStrategy && isNil(this.strategyLabel)) + || (this.requiredGear && isNil(this.gearId))) { + // DEBUG + //if (this.debug) console.debug(`${this._logPrefix} cannot load pmfms (missing some inputs)`); + return false; + } + return true; + } + loadPmfms(opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.canLoadPmfms()) + return; + // DEBUG + //if (this.debug) console.debug(`${this.logPrefix} loadPmfms()`); + if (!opts || opts.emitEvent !== false) { + this.setReadyStep(MeasurementsFormReadySteps.LOADING_PMFMS); + } + let pmfms; + try { + // Load pmfms + // DO NOT call loadProgramPmfms(). Next setPmfms() will call a firstNotNilPromise() with options.stop + pmfms = this.programRefService.watchProgramPmfms(this.programLabel, { + strategyId: this.strategyId, + strategyLabel: this.strategyLabel, + acquisitionLevel: this.acquisitionLevel, + gearId: this.gearId + }); + } + catch (err) { + console.error(`${this._logPrefix} Error while loading pmfms: ${err && err.message || err}`, err); + pmfms = undefined; + } + // Apply pmfms + yield this.setPmfms(pmfms, opts); + }); + } + setPmfms(pmfms, opts) { + return __awaiter(this, void 0, void 0, function* () { + // If undefined: reset pmfms + if (!pmfms) { + this.resetPmfms(); + return undefined; // break + } + // DEBUG + //if (this.debug) console.debug(`${this._logPrefix} setPmfms()`); + // Mark as settings pmfms + if (!opts || opts.emitEvent !== false) { + this.setReadyStep(MeasurementsFormReadySteps.SETTING_PMFMS); + } + try { + // Wait loaded, if observable + if (isObservable(pmfms)) { + if (this.debug) + console.debug(`${this._logPrefix} setPmfms(): waiting pmfms observable...`); + pmfms = yield firstNotNilPromise(pmfms, { stop: this.destroySubject }); + if (this.debug) + console.debug(`${this._logPrefix} setPmfms(): waiting pmfms observable [OK]`); + } + // If force to optional, create a copy of each pmfms that should be forced + if (this.forceOptional) { + const excludedPmfmIds = this.forceOptionalExcludedPmfmIds || []; + pmfms = pmfms.map(pmfm => { + if (pmfm.required && !excludedPmfmIds.includes(pmfm.id)) { + // Create a copy of each required pmfms + // To keep unchanged the original entity + pmfm = pmfm.clone(); + pmfm.required = false; + } + // Return original pmfm, as not need to be overwritten + return pmfm; + }); + } + // Call the map function + if (this.options.mapPmfms) { + pmfms = yield this.options.mapPmfms(pmfms); + } + // Apply (if changed) + if (!equals(pmfms, this.pmfms)) { + // DEBUG log + if (this.debug) + console.debug(`${this._logPrefix} Pmfms changed: `, pmfms); + // next step + if (!opts || opts.emitEvent !== false) { + this.setReadyStep(MeasurementsFormReadySteps.UPDATING_FORM_GROUP); + } + // Apply pmfms to state + this._state.set('pmfms', () => pmfms); + } + return pmfms; + } + catch (err) { + if ((err === null || err === void 0 ? void 0 : err.message) !== 'stop') { + console.error(`${this._logPrefix} Error while applying pmfms: ${err && err.message || err}`, err); + } + this.resetPmfms(); + return undefined; + } + }); + } + resetPmfms() { + if (isNil(this.pmfms)) + return; // Already reset + if (this.debug) + console.warn(`${this._logPrefix} Reset pmfms`); + // Reset step + if (!this.starting && this.loaded) + this.setReadyStep(MeasurementsFormReadySteps.STARTING); + // Update state + this._state.set('pmfms', (_) => undefined); + } + translateControlPath(path, pmfms) { + if (path.includes('measurementValues.')) { + pmfms = pmfms || this.pmfms; + const parts = path.split('.'); + const pmfmId = parseInt(parts[parts.length - 1]); + const pmfm = pmfms === null || pmfms === void 0 ? void 0 : pmfms.find(p => p.id === pmfmId); + if (pmfm) { + return this._pmfmNamePipe.transform(pmfm, { i18nPrefix: this.i18nPmfmPrefix, i18nContext: this.i18nSuffix }); + } + } + const fieldName = path.substring(path.lastIndexOf('.') + 1); + const i18nKey = (this.i18nFieldPrefix || '') + changeCaseToUnderscore(fieldName).toUpperCase(); + return this.translate.instant(i18nKey); + } + updateFormGroup(pmfms, opts) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + pmfms = pmfms || this.pmfms; + if (!pmfms) + return; // Skip + const form = this.form; + this._measurementValuesForm = form.get('measurementValues'); + // Disable the form (if exists) + if ((_a = this._measurementValuesForm) === null || _a === void 0 ? void 0 : _a.enabled) { + this._measurementValuesForm.disable({ onlySelf: true, emitEvent: false }); + } + // Mark as loading + this.setReadyStep(MeasurementsFormReadySteps.UPDATING_FORM_GROUP); + if (this.debug) + console.debug(`${this._logPrefix} Updating form controls, force_optional: ${this.forceOptional}}, using pmfms:`, pmfms); + // No pmfms (= empty form) + if (!pmfms.length) { + // Reset measurement form (if exists) + if (this._measurementValuesForm) { + this.measurementsValidatorService.updateFormGroup(this._measurementValuesForm, { pmfms: [], emitEvent: opts === null || opts === void 0 ? void 0 : opts.emitEvent }); + this._measurementValuesForm.reset({}, { onlySelf: true, emitEvent: false }); + } + } + else { + // Create measurementValues form group + if (!this._measurementValuesForm) { + this._measurementValuesForm = this.measurementsValidatorService.getFormGroup(null, { pmfms }); + form.addControl('measurementValues', this._measurementValuesForm, { emitEvent: opts === null || opts === void 0 ? void 0 : opts.emitEvent }); + this._measurementValuesForm.disable({ onlySelf: true, emitEvent: opts === null || opts === void 0 ? void 0 : opts.emitEvent }); + } + // Or update if already exist + else { + this.measurementsValidatorService.updateFormGroup(this._measurementValuesForm, { pmfms }); + } + } + // Call options function + if ((_b = this.options) === null || _b === void 0 ? void 0 : _b.onUpdateFormGroup) { + yield this.options.onUpdateFormGroup(form); + } + if (this.debug) + console.debug(`${this._logPrefix} Form controls updated`); + this.setReadyStep(MeasurementsFormReadySteps.FORM_GROUP_READY); + // Data already set: apply value again to fill the form + if (!this.applyingValue) { + // Update data in view + if (this.data) { + yield this.updateView(this.data, { onlySelf: true, emitEvent: false }); + this.markAsLoaded(); + } + // No data defined yet + else { + // Restore enable state (because form.setValue() can change it !) + this.updateViewState({ onlySelf: true, emitEvent: false }); + } + } + return true; + }); + } + updateViewState(opts) { + if (this._enable) { + this.enable(opts); + } + else { + this.disable(opts); + } + } + normalizeEntityToForm(data) { + if (!data) + return; // skip + // Adapt entity measurement values to reactive form + const pmfms = this.pmfms || []; + MeasurementValuesUtils.normalizeEntityToForm(data, pmfms, this.form); + } + waitIdleThenRefreshPmfms(event) { + return __awaiter(this, void 0, void 0, function* () { + try { + // Wait previous loading is finished + yield this.waitIdle({ stop: this.destroySubject, stopError: false }); + // Then refresh pmfms + yield this.loadPmfms(); + } + catch (err) { + console.error(err); + } + }); + } + markForCheck() { + var _a; + (_a = this.cd) === null || _a === void 0 ? void 0 : _a.markForCheck(); + } +}; +__decorate([ + RxStateProperty(), + __metadata("design:type", Number) +], MeasurementValuesForm.prototype, "readyStep", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], MeasurementValuesForm.prototype, "compact", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], MeasurementValuesForm.prototype, "floatLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], MeasurementValuesForm.prototype, "i18nPmfmPrefix", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], MeasurementValuesForm.prototype, "i18nSuffix", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], MeasurementValuesForm.prototype, "forceOptionalExcludedPmfmIds", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", String) +], MeasurementValuesForm.prototype, "programLabel", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", String) +], MeasurementValuesForm.prototype, "acquisitionLevel", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", String) +], MeasurementValuesForm.prototype, "strategyLabel", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", Number) +], MeasurementValuesForm.prototype, "strategyId", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", Boolean) +], MeasurementValuesForm.prototype, "requiredStrategy", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", Number) +], MeasurementValuesForm.prototype, "gearId", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", Boolean) +], MeasurementValuesForm.prototype, "requiredGear", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", Boolean) +], MeasurementValuesForm.prototype, "forceOptional", void 0); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], MeasurementValuesForm.prototype, "pmfms", null); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], MeasurementValuesForm.prototype, "value", null); +__decorate([ + Output(), + __metadata("design:type", Object) +], MeasurementValuesForm.prototype, "valueChanges", void 0); +MeasurementValuesForm = __decorate([ + Directive() + // tslint:disable-next-line:directive-class-suffix + , + __param(4, Optional()), + __param(5, Optional()), + __metadata("design:paramtypes", [Injector, + MeasurementsValidatorService, + UntypedFormBuilder, + ProgramRefService, + UntypedFormGroup, Object]) +], MeasurementValuesForm); +export { MeasurementValuesForm }; +//# sourceMappingURL=measurement-values.form.class.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/measurement/measurement-values.form.class.js.map b/out-tsc/app/app/data/measurement/measurement-values.form.class.js.map new file mode 100644 index 000000000..c2dce77ce --- /dev/null +++ b/out-tsc/app/app/data/measurement/measurement-values.form.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"measurement-values.form.class.js","sourceRoot":"","sources":["../../../../../src/app/data/measurement/measurement-values.form.class.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/measurement/measurement.model.js b/out-tsc/app/app/data/measurement/measurement.model.js new file mode 100644 index 000000000..13dcaeb47 --- /dev/null +++ b/out-tsc/app/app/data/measurement/measurement.model.js @@ -0,0 +1,369 @@ +import { DataEntity } from '@app/data/services/model/data-entity.model'; +import { UntypedFormGroup } from '@angular/forms'; +import { AppFormUtils, arraySize, fromDateISOString, isEmptyArray, isNil, isNotNil, ReferentialRef, toDateISOString, } from '@sumaris-net/ngx-components'; +import { PmfmValueUtils } from '@app/referential/services/model/pmfm-value.model'; +export const MEASUREMENT_PMFM_ID_REGEXP = /measurements\.\d+$/; +export const MEASUREMENT_VALUES_PMFM_ID_REGEXP = /measurementValues\.\d+$/; +export const MeasurementValuesTypes = { + MeasurementModelValues: 'MeasurementModelValues', + MeasurementFormValue: 'MeasurementFormValue' +}; +export class Measurement extends DataEntity { + constructor() { + super(); + this.__typename = 'MeasurementVO'; + this.rankOrder = null; + } + static fromObject(source) { + const res = new Measurement(); + res.fromObject(source); + return res; + } + copy(target) { + target.fromObject(this); + } + asObject(options) { + const target = super.asObject(options); + target.qualitativeValue = this.qualitativeValue && this.qualitativeValue.asObject(options) || undefined; + return target; + } + fromObject(source) { + super.fromObject(source); + this.pmfmId = source.pmfmId; + this.alphanumericalValue = source.alphanumericalValue; + this.numericalValue = source.numericalValue; + this.digitCount = source.digitCount; + this.rankOrder = source.rankOrder; + this.qualitativeValue = source.qualitativeValue && ReferentialRef.fromObject(source.qualitativeValue); + this.entityName = source.entityName; + return this; + } + equals(other) { + return (super.equals(other) && isNotNil(this.id)) + || ( + // Same [pmfmId, rankOrder] + (this.pmfmId === other.pmfmId && this.rankOrder === other.rankOrder)); + } +} +export class MeasurementUtils { + static initAllMeasurements(source, pmfms, entityName, keepRankOrder) { + // Work on a copy, to be able to reduce the array + let rankOrder = 1; + return (pmfms || []).map(pmfm => { + const measurement = (source || []).find(m => m.pmfmId === pmfm.id) || new Measurement(); + measurement.pmfmId = pmfm.id; // apply the pmfm (need for new object) + measurement.rankOrder = keepRankOrder ? measurement.rankOrder : rankOrder++; + // Need by GraphQL cache + measurement.entityName = measurement.entityName || entityName; + measurement.__typename = measurement.__typename || 'MeasurementVO'; + return measurement; + }); + } + static getMeasurementEntityValue(source, pmfm) { + switch (pmfm.type) { + case 'qualitative_value': + if (source.qualitativeValue && source.qualitativeValue.id) { + return pmfm.qualitativeValues.find(qv => +qv.id === +source.qualitativeValue.id); + } + return null; + case 'integer': + case 'double': + return source.numericalValue; + case 'string': + return source.alphanumericalValue; + case 'boolean': + return source.numericalValue === 1 ? true : (source.numericalValue === 0 ? false : undefined); + case 'date': + return fromDateISOString(source.alphanumericalValue); + default: + throw new Error('Unknown pmfm.type for getting value of measurement: ' + pmfm.type); + } + } + static setMeasurementValue(value, target, pmfm) { + value = (value === null || value === undefined) ? undefined : value; + switch (pmfm.type) { + case 'qualitative_value': + target.qualitativeValue = value; + break; + case 'integer': + case 'double': + target.numericalValue = value; + break; + case 'string': + target.alphanumericalValue = value; + break; + case 'boolean': + target.numericalValue = (value === true || value === 'true') ? 1 : ((value === false || value === 'false') ? 0 : undefined); + break; + case 'date': + target.alphanumericalValue = toDateISOString(value); + break; + default: + throw new Error('Unknown pmfm.type: ' + pmfm.type); + } + } + static toModelValue(value, pmfm) { + return PmfmValueUtils.toModelValue(value, pmfm); + } + static isEmpty(source) { + if (!source) + return true; + return isNil(source.alphanumericalValue) + && isNil(source.numericalValue) + && (!source.qualitativeValue || isNil(source.qualitativeValue.id)); + } + static areEmpty(source) { + if (isEmptyArray(source)) + return true; + return !source.some(MeasurementUtils.isNotEmpty); + } + static isNotEmpty(source) { + return !MeasurementUtils.isEmpty(source); + } + static toMeasurementValues(measurements) { + return measurements && measurements.reduce((map, m) => { + const value = m && m.pmfmId && [m.alphanumericalValue, m.numericalValue, m.qualitativeValue && m.qualitativeValue.id].find(isNotNil); + map[m.pmfmId] = isNotNil(value) ? value : null; + return map; + }, {}) || undefined; + } + static asBooleanValue(measurements, pmfmId) { + const measurement = measurements.find(m => m.pmfmId === pmfmId); + return measurement + ? [measurement.alphanumericalValue, measurement.numericalValue, measurement.qualitativeValue && measurement.qualitativeValue.id].find(isNotNil) === 1 + : undefined; + } + static fromMeasurementValues(measurements) { + return measurements && Object.getOwnPropertyNames(measurements).map(pmfmId => Measurement.fromObject({ + pmfmId, + alphanumericalValue: measurements[pmfmId] + })) || undefined; + } + // Update measurements from source values map + static setValuesByFormValues(target, source, pmfms) { + (target || []).forEach(m => { + const pmfm = pmfms && pmfms.find(p => p.id === m.pmfmId); + if (pmfm) + MeasurementUtils.setMeasurementValue(source[pmfm.id], m, pmfm); + }); + } + static equals(array1, array2) { + if (arraySize(array1) !== arraySize(array2)) + return false; + return MeasurementValuesUtils.equals(MeasurementUtils.toMeasurementValues(array1), MeasurementUtils.toMeasurementValues(array2)); + } + static filter(measurements, pmfms) { + const pmfmIds = (pmfms || []).map(pmfm => pmfm.id); + return (measurements || []).filter(measurement => pmfmIds.includes(measurement.pmfmId)); + } +} +export class MeasurementValuesUtils { + /** + * Extract pmfm id, used in a measurementValues object. + * Will exclude technical properties (e.g. __typename) + * @param source + */ + static getPmfmIds(source) { + return Object.getOwnPropertyNames(source || {}) + .filter(key => key !== '__typename') + .map(key => parseInt(key)) + .filter(pmfmId => !isNaN(pmfmId)); + } + static equals(m1, m2) { + return (isNil(m1) && isNil(m2)) + || (m1 && !this.getPmfmIds(Object.assign(Object.assign({}, m1), m2)).some(pmfmId => { + const isSame = PmfmValueUtils.equals(m1[pmfmId], m2 === null || m2 === void 0 ? void 0 : m2[pmfmId]); + // DEBUG + //if (!isSame) console.debug('TODO Value not equals, on pmfmId ' + pmfmId); + return !isSame; + })) + || false; + } + static equalsPmfms(m1, m2, pmfms) { + return (isNil(m1) && isNil(m2)) + || !pmfms.some(pmfm => !PmfmValueUtils.equals(m1[pmfm.id], m2[pmfm.id])); + } + static valueEquals(v1, v2) { + return PmfmValueUtils.equals(v1, v2); + } + static valueToString(value, opts) { + return PmfmValueUtils.valueToString(value, opts); + } + static hasPmfmValue(source, pmfmId, value) { + return PmfmValueUtils.equals(source[pmfmId], value); + } + static normalizeValueToModel(value, pmfm) { + return PmfmValueUtils.toModelValue(value, pmfm); + } + static isMeasurementFormValues(value) { + return value.__typename === MeasurementValuesTypes.MeasurementFormValue; + } + static isMeasurementModelValues(value) { + return value.__typename !== MeasurementValuesTypes.MeasurementFormValue; + } + static resetTypename(value) { + if (!value) + return; // skip + delete value.__typename; + } + static normalizeValuesToModel(source, pmfms, opts = { + keepSourceObject: false + }) { + // DEBUG + //console.debug('calling normalizeValuesToModel() from ' + source.__typename); + const target = opts.keepSourceObject ? source : {}; + if (this.isMeasurementFormValues(source)) { + (pmfms || []).forEach(pmfm => { + target[pmfm.id] = this.normalizeValueToModel(source[pmfm.id], pmfm); + }); + // DO NOT delete __typename, but force it to MeasurementModelValues + // If not: there is a bug when edition a row, saving and editing it again: the conversion to form is not applied! + //delete target.__typename; + target.__typename = MeasurementValuesTypes.MeasurementModelValues; + } + // Source = model values. Copy pmfm's values if need + else if (!opts.keepSourceObject) { + (pmfms || []).forEach(pmfm => { + target[pmfm.id] = source[pmfm.id]; + }); + target.__typename = MeasurementValuesTypes.MeasurementModelValues; + } + return target; + } + static normalizeValueToForm(value, pmfm) { + return PmfmValueUtils.fromModelValue(value, pmfm); + } + /** + * + * @param source + * @param pmfms + * @param opts + * - keepSourceObject: keep existing map unchanged (useful to keep extra pmfms) - false by default + * - onlyExistingPmfms: Will not init all pmfms, but only those that exists in the source map - false by default + */ + static normalizeValuesToForm(source, pmfms, opts) { + pmfms = pmfms || []; + // DEBUG + //console.debug('calling normalizeValueToForm() from ' + source.__typename); + // Normalize only given pmfms (reduce the pmfms list) + if (opts === null || opts === void 0 ? void 0 : opts.onlyExistingPmfms) { + pmfms = this.getPmfmIds(source) + .reduce((res, pmfmId) => { + const pmfm = pmfms.find(p => p.id === pmfmId); + return pmfm ? res.concat(pmfm) : res; + }, []); + } + // Create target, or copy existing (e.g. useful to keep extra pmfms) + const target = (opts === null || opts === void 0 ? void 0 : opts.keepSourceObject) + ? Object.assign({}, source) : {}; + if (this.isMeasurementModelValues(target)) { + // Copy from source, without value conversion (not need) + if (this.isMeasurementFormValues(source)) { + // Normalize all pmfms from the list + pmfms.forEach(pmfm => { + const pmfmId = pmfm === null || pmfm === void 0 ? void 0 : pmfm.id; + if (isNil(pmfmId)) { + console.warn('Invalid pmfm instance: missing required id. Please make sure to load DenormalizedPmfmStrategy or Pmfm', pmfm); + return; + } + let value = source[pmfmId]; + // Apply default value, if any + if (isNil(value) && isNotNil(pmfm.defaultValue)) { + value = PmfmValueUtils.fromModelValue(pmfm.defaultValue, pmfm); + } + if (pmfm.isMultiple) { + if (!Array.isArray(value)) { + value = [value]; + } + else if (value.length === 0) { + value = [null]; + } + } + target[pmfmId.toString()] = value; + }); + } + // Copy from source, WITH value conversion + else { + // Normalize all pmfms from the list + pmfms.forEach(pmfm => { + const pmfmId = pmfm === null || pmfm === void 0 ? void 0 : pmfm.id; + if (isNil(pmfmId)) { + console.warn('Invalid pmfm instance: missing required id. Please make sure to load DenormalizedPmfmStrategy or Pmfm', pmfm); + return; + } + target[pmfmId.toString()] = PmfmValueUtils.fromModelValue(source[pmfmId], pmfm); + }); + } + target.__typename = MeasurementValuesTypes.MeasurementFormValue; + } + return target; + } + static normalizeEntityToForm(data, pmfms, form, opts) { + if (!data) + return; // skip + // If a form exists + if (form) { + const measFormGroup = form.get('measurementValues'); + if (measFormGroup instanceof UntypedFormGroup) { + // Remove extra PMFMS values (before adapt to form) + const measurementValues = AppFormUtils.getFormValueFromEntity(data.measurementValues || {}, measFormGroup); + // Adapt to form (e.g. transform a QV_ID into an object) + data.measurementValues = this.normalizeValuesToForm(measurementValues, pmfms, { + keepSourceObject: (opts === null || opts === void 0 ? void 0 : opts.keepOtherExistingPmfms) || false, + onlyExistingPmfms: (opts === null || opts === void 0 ? void 0 : opts.onlyExistingPmfms) || false + }); + } + else { + throw Error('No measurementValues found in form ! Make sure you use the right validator'); + } + } + // No validator: just normalize values + else { + data.measurementValues = this.normalizeValuesToForm(data.measurementValues || {}, pmfms, { + // Keep extra pmfm values (not need to remove, when no validator used) + keepSourceObject: true, + onlyExistingPmfms: opts && opts.onlyExistingPmfms + }); + } + } + static asObject(source, opts) { + if (!opts || opts.minify !== true || !source) + return source; + return this.getPmfmIds(source).reduce((target, pmfmId) => { + target[pmfmId] = PmfmValueUtils.asObject(source[pmfmId]); + return target; + }, {}); + } + static getFormValue(measurementValues, pmfms, pmfmId, remove) { + if (!measurementValues || !pmfms || isNil(pmfmId)) + return undefined; + const pmfm = pmfms.find(p => p.id === +pmfmId); + if (pmfm && isNotNil(measurementValues[pmfm.id])) { + const value = this.normalizeValueToForm(measurementValues[pmfm.id], pmfm); + if (remove === true) { + console.warn('DEPRECATED used of `remove` argument, when call MeasurementValuesUtils.getFormValue()!! Please make sure you need this'); + delete measurementValues[pmfm.id]; + } + return value; + } + return undefined; + } + static setFormValue(measurementValues, pmfms, pmfmId, value) { + if (!measurementValues || !pmfms || !pmfmId) + return undefined; + const pmfm = pmfms.find(p => p.id === +pmfmId); + if (pmfm) { + measurementValues[pmfm.id] = this.normalizeValueToForm(value, pmfm); + } + return undefined; + } + static isEmpty(measurementValues) { + return isNil(measurementValues) + || isEmptyArray(Object.getOwnPropertyNames(measurementValues).filter(pmfmId => !PmfmValueUtils.isEmpty(measurementValues[pmfmId]))); + } + static isNotEmpty(measurementValues) { + return isNotNil(measurementValues) + && Object.getOwnPropertyNames(measurementValues).some(pmfmId => !PmfmValueUtils.isEmpty(measurementValues[pmfmId])); + } +} +//# sourceMappingURL=measurement.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/measurement/measurement.model.js.map b/out-tsc/app/app/data/measurement/measurement.model.js.map new file mode 100644 index 000000000..456c7133b --- /dev/null +++ b/out-tsc/app/app/data/measurement/measurement.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"measurement.model.js","sourceRoot":"","sources":["../../../../../src/app/data/measurement/measurement.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/measurement/measurement.module.js b/out-tsc/app/app/data/measurement/measurement.module.js new file mode 100644 index 000000000..3ef001be2 --- /dev/null +++ b/out-tsc/app/app/data/measurement/measurement.module.js @@ -0,0 +1,35 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { MeasurementsForm } from './measurements.form.component'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { TranslateModule } from '@ngx-translate/core'; +import { CommonModule } from '@angular/common'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppPmfmFormFieldModule } from '@app/referential/pmfm/field/pmfm.form-field.module'; +let AppMeasurementModule = class AppMeasurementModule { +}; +AppMeasurementModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TranslateModule.forChild(), + // App module + AppCoreModule, + AppReferentialModule, + AppPmfmFormFieldModule + ], + declarations: [ + MeasurementsForm + ], + exports: [ + // Modules + TranslateModule, + AppPmfmFormFieldModule, + // Pipes + // Components + MeasurementsForm + ] + }) +], AppMeasurementModule); +export { AppMeasurementModule }; +//# sourceMappingURL=measurement.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/measurement/measurement.module.js.map b/out-tsc/app/app/data/measurement/measurement.module.js.map new file mode 100644 index 000000000..a972a5a42 --- /dev/null +++ b/out-tsc/app/app/data/measurement/measurement.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"measurement.module.js","sourceRoot":"","sources":["../../../../../src/app/data/measurement/measurement.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AA0BrF,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAEhC,CAAA;AAFY,oBAAoB;IAxBhC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,eAAe,CAAC,QAAQ,EAAE;YAE1B,aAAa;YACb,aAAa;YACb,oBAAoB;YACpB,sBAAsB;SACvB;QACD,YAAY,EAAE;YACZ,gBAAgB;SACjB;QACD,OAAO,EAAE;YACP,UAAU;YACV,eAAe;YACf,sBAAsB;YAEtB,QAAQ;YAER,aAAa;YACb,gBAAgB;SACjB;KACF,CAAC;GACW,oBAAoB,CAEhC;SAFY,oBAAoB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/measurement/measurement.validator.js b/out-tsc/app/app/data/measurement/measurement.validator.js new file mode 100644 index 000000000..3181f3e91 --- /dev/null +++ b/out-tsc/app/app/data/measurement/measurement.validator.js @@ -0,0 +1,130 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { AppFormArray, isNil, LocalSettingsService, toBoolean } from '@sumaris-net/ngx-components'; +import { MeasurementUtils, MeasurementValuesTypes, MeasurementValuesUtils } from './measurement.model'; +import { PmfmValidators } from '@app/referential/services/validator/pmfm.validators'; +import { PmfmValueUtils } from '@app/referential/services/model/pmfm-value.model'; +import { TranslateService } from '@ngx-translate/core'; +let MeasurementsValidatorService = class MeasurementsValidatorService { + constructor(formBuilder, translate, settings) { + this.formBuilder = formBuilder; + this.translate = translate; + this.settings = settings; + } + getRowValidator(opts) { + return this.getFormGroup(null, opts); + } + getFormGroup(data, opts) { + opts = this.fillDefaultOptions(opts); + return this.formBuilder.group(this.getFormGroupConfig(data, opts), this.getFormGroupOptions(data, opts)); + } + getFormGroupConfig(data, opts) { + opts = this.fillDefaultOptions(opts); + // Convert the array of Measurement into a normalized map of form values + const measurementValues = data && (MeasurementValuesUtils.isMeasurementFormValues(data) + ? data + // Transform to form values, if need + : MeasurementValuesUtils.normalizeValuesToForm(MeasurementUtils.toMeasurementValues(data), opts.pmfms, { + keepSourceObject: true, + onlyExistingPmfms: false + })) || undefined; + const config = opts.pmfms.reduce((res, pmfm) => { + const value = measurementValues ? measurementValues[pmfm.id] : null; + const validator = PmfmValidators.create(pmfm, null, opts); + // If pmfm is multiple, then use a AppFormArray + if (pmfm.isMultiple) { + const formArray = new AppFormArray((v) => this.formBuilder.control(v, validator), PmfmValueUtils.equals, PmfmValueUtils.isEmpty, { + allowEmptyArray: false + }); + if (Array.isArray(value)) { + formArray.setValue(value.map(v => isNil(v) ? null : v), { emitEvent: false }); + } + else { + formArray.setValue([null], { emitEvent: false }); + } + res[pmfm.id] = formArray; + } + else { + res[pmfm.id] = validator ? [value, validator] : [value]; + } + return res; + }, {}); + // Validate __typename + if (opts.withTypename !== false) { + config['__typename'] = [measurementValues ? measurementValues.__typename : MeasurementValuesTypes.MeasurementFormValue, Validators.required]; + } + return config; + } + getFormGroupOptions(data, opts) { + return { updateOn: opts === null || opts === void 0 ? void 0 : opts.updateOn }; + } + updateFormGroup(form, opts) { + opts = this.fillDefaultOptions(opts); + // DEBUG + //console.debug(`[measurement-validator] (${opts?.pmfms?.[0]?.['acquisitionLevel']}) updateFormGroup()`) + const controlNamesToRemove = Object.getOwnPropertyNames(form.controls) + // Excluded protected attributes + .filter(controlName => (!opts.protectedAttributes || !opts.protectedAttributes.includes(controlName)) && controlName !== '__typename'); + opts.pmfms.forEach(pmfm => { + const controlName = pmfm.id.toString(); + const validator = PmfmValidators.create(pmfm, null, opts); + const defaultValue = PmfmValueUtils.fromModelValue(pmfm.defaultValue, pmfm) || null; + // Multiple acquisition: use form array + if (pmfm.isMultiple) { + const formArray = new AppFormArray((value) => this.formBuilder.control(value, validator), PmfmValueUtils.equals, PmfmValueUtils.isEmpty, { + allowEmptyArray: false + }); + // TODO set defaultValue + form.addControl(controlName, formArray, { emitEvent: opts === null || opts === void 0 ? void 0 : opts.emitEvent }); + } + // Only one acquisition + else { + let control = form.get(controlName); + // If new pmfm: add as control + if (!control) { + control = this.formBuilder.control(defaultValue, validator); + form.addControl(controlName, control, { emitEvent: opts === null || opts === void 0 ? void 0 : opts.emitEvent }); + } + else { + control.setValidators(validator); + } + } + // Remove from the remove list + const index = controlNamesToRemove.indexOf(controlName); + if (index !== -1) + controlNamesToRemove.splice(index, 1); + }); + // Remove unused controls + controlNamesToRemove.forEach(controlName => form.removeControl(controlName, { emitEvent: opts === null || opts === void 0 ? void 0 : opts.emitEvent })); + // Create control for '__typename' (required) + const typenameControl = form.get('__typename'); + if (opts.withTypename !== false) { + if (!typenameControl) { + // DEBUG + //console.debug('[measurement-validator] Re add control \'__typename\' to measurement values form group'); + form.addControl('__typename', this.formBuilder.control(MeasurementValuesTypes.MeasurementFormValue, Validators.required), { emitEvent: opts === null || opts === void 0 ? void 0 : opts.emitEvent }); + } + } + else if (typenameControl) { + console.warn('[measurement-validator] Removing control \'__typename\' from measurement values form group. This is not recommended!'); + form.removeControl('__typename', { emitEvent: opts === null || opts === void 0 ? void 0 : opts.emitEvent }); + } + } + /* -- protected functions -- */ + fillDefaultOptions(opts) { + opts = opts || {}; + opts.pmfms = opts.pmfms || []; + opts.forceOptional = toBoolean(opts.forceOptional, false); + opts.protectedAttributes = opts.protectedAttributes || ['id', 'rankOrder', 'comments', 'updateDate', '__typename']; + return opts; + } +}; +MeasurementsValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + LocalSettingsService]) +], MeasurementsValidatorService); +export { MeasurementsValidatorService }; +//# sourceMappingURL=measurement.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/measurement/measurement.validator.js.map b/out-tsc/app/app/data/measurement/measurement.validator.js.map new file mode 100644 index 000000000..616dd5dbf --- /dev/null +++ b/out-tsc/app/app/data/measurement/measurement.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"measurement.validator.js","sourceRoot":"","sources":["../../../../../src/app/data/measurement/measurement.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/measurement/measurements-table.class.js b/out-tsc/app/app/data/measurement/measurements-table.class.js new file mode 100644 index 000000000..67d698165 --- /dev/null +++ b/out-tsc/app/app/data/measurement/measurements-table.class.js @@ -0,0 +1,515 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Directive, Injector, Input } from '@angular/core'; +import { Observable } from 'rxjs'; +import { UntypedFormBuilder } from '@angular/forms'; +import { Alerts, AppFormUtils, Entity, filterNotNil, firstNotNilPromise, firstTrue, InMemoryEntitiesService, isNil, isNotEmptyArray, isNotNil, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, toNumber, } from '@sumaris-net/ngx-components'; +import { MeasurementValuesUtils } from './measurement.model'; +import { PMFM_ID_REGEXP, PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { PmfmNamePipe } from '@app/referential/pipes/pmfms.pipe'; +import { mergeMap } from 'rxjs/operators'; +import { AppBaseTable } from '@app/shared/table/base.table'; +import { MeasurementsTableEntitiesService } from './measurements-table.service'; +import { MeasurementsTableValidatorService } from './measurements-table.validator'; +import { RxStateProperty, RxStateSelect } from '@app/shared/state/state.decorator'; +let BaseMeasurementsTable = class BaseMeasurementsTable extends AppBaseTable { + constructor(injector, dataType, filterType, dataService, validatorService, options) { + var _a, _b, _c; + super(injector, dataType, filterType, + // Columns: + ((options === null || options === void 0 ? void 0 : options.reservedStartColumns) || []).concat((options === null || options === void 0 ? void 0 : options.reservedEndColumns) || []), + // Use a decorator data service + new MeasurementsTableEntitiesService(injector, dataType, dataService, { + mapPmfms: (options === null || options === void 0 ? void 0 : options.mapPmfms) || undefined, + requiredStrategy: (_a = options === null || options === void 0 ? void 0 : options.initialState) === null || _a === void 0 ? void 0 : _a.requiredStrategy, + requiredGear: (_b = options === null || options === void 0 ? void 0 : options.initialState) === null || _b === void 0 ? void 0 : _b.requiredGear, + debug: (options === null || options === void 0 ? void 0 : options.debug) || false, + }), + // Use a specific decorator validator + validatorService ? new MeasurementsTableValidatorService(injector, validatorService) : null, Object.assign(Object.assign({}, options), { + // IMPORTANT: Always use our private function onRowCreated() + onRowCreated: (row) => this._onRowCreated(row) })); + this._autoLoadAfterPmfm = true; + this._addingRow = false; + this.i18nPmfmPrefix = null; + /** + * Allow to override the rankOrder. See physical-gear, on ADAP program + */ + this.canEditRankOrder = false; + this.memoryDataService = dataService instanceof InMemoryEntitiesService ? dataService : null; + this.programRefService = injector.get(ProgramRefService); + this.pmfmNamePipe = injector.get(PmfmNamePipe); + this.formBuilder = injector.get(UntypedFormBuilder); + this.defaultPageSize = -1; // Do not use paginator + this.hasRankOrder = Object.getOwnPropertyNames(new dataType()).findIndex((key) => key === 'rankOrder') !== -1; + this.markAsLoaded({ emitEvent: false }); + this.i18nPmfmPrefix = options === null || options === void 0 ? void 0 : options.i18nPmfmPrefix; + this.defaultSortBy = 'id'; + this.defaultSortDirection = 'asc'; + this.canEdit = true; + this._state.hold(this._state.select(['programLabel', 'acquisitionLevel', 'requiredStrategy', 'strategyId', 'strategyLabel', 'requiredGear', 'gearId'], s => s), (state) => this._dataService.set(state)); + const requiredGear = ((_c = options === null || options === void 0 ? void 0 : options.initialState) === null || _c === void 0 ? void 0 : _c.requiredGear) === true; + this._state.set(Object.assign({ strategyId: null, strategyLabel: null, gearId: null, requiredGear }, options === null || options === void 0 ? void 0 : options.initialState)); + // connect + this._state.connect('pmfms', this._dataService.pmfms$); + this._state.hold(this.pmfms$, (pmfms) => { + this._dataService.pmfms = pmfms; + this.hasPmfms = isNotEmptyArray(pmfms); + }); + // For DEV only + //this.debug = !environment.production; + this.logPrefix = '[measurements-table] '; + } + set showCommentsColumn(value) { + this.setShowColumn('comments', value); + } + get showCommentsColumn() { + return this.getShowColumn('comments'); + } + set dataService(value) { + if (this._dataService.delegate !== value) { + console.warn("TODO: check if 'get dataService()' is need", new Error()); + this._dataService.delegate = value; + if (!this.loading) { + this.onRefresh.emit('new dataService'); + } + } + } + get dataService() { + return this._dataService.delegate; + } + get loading() { + return super.loading || this._dataService.loading; + } + get loaded() { + return super.loaded && !this._dataService.loading; + } + ngOnInit() { + // Remember the value of autoLoad, but force to false, to make sure pmfm will be loaded before + this._autoLoadAfterPmfm = this.autoLoad; + this.autoLoad = false; + this.i18nPmfmPrefix = this.i18nPmfmPrefix || this.i18nColumnPrefix; + this.keepEditedRowOnSave = + !this.mobile && + this.inlineEdition && + // Disable keepEditedRowOnSave, when in memory data service, because rows are reload twice after save - FIXME + !this.memoryDataService; + this.registerSubscription(firstTrue(this.readySubject) + .pipe(mergeMap((_) => { + console.debug(this.logPrefix + 'Starting measurements data service...'); + return this._dataService.start(); + })) + .subscribe()); + super.ngOnInit(); + this.registerSubscription(filterNotNil(this.pmfms$).subscribe((pmfms) => { + console.debug(this.logPrefix + 'Received PMFMs to applied: ', pmfms); + if (this.validatorService) { + this.configureValidator({ pmfms }); + this.validatorService.markAsReady(); + } + // Update the settings id, as program could have changed + this.settingsId = this.generateTableId(); + // Add pmfm columns + this.updateColumns(); + // Load (if autoLoad was enabled) + if (this._autoLoadAfterPmfm) { + this.onRefresh.emit(); + this._autoLoadAfterPmfm = false; // Avoid new execution + } + // Or reload, only if pristine (to avoid to lost not saved data) + else if (this.dataSource.loaded && !this.dirty) { + this.onRefresh.emit(); + } + })); + // Listen row edition + if (this.inlineEdition) { + this.registerSubscription(this.onStartEditingRow.subscribe((row) => this._onRowEditing(row))); + } + } + ngOnDestroy() { + var _a; + super.ngOnDestroy(); + (_a = this._dataService) === null || _a === void 0 ? void 0 : _a.stop(); + } + configureValidator(opts) { + // make sure to confirm editing row, before to change validator + this.confirmEditCreate(); + // Update validator config + if (opts) { + this.validatorService.measurementsOptions = opts; + } + } + setFilter(filterData, opts) { + opts = opts || { emitEvent: !this.loading }; + super.setFilter(filterData, opts); + } + trackByFn(index, row) { + return row.id; + } + generateTableId() { + // Append the program, if any + return [super.generateTableId(), this.programLabel].filter(isNotNil).join('-'); + } + getDisplayColumns() { + const pmfms = this.pmfms; + if (!pmfms) + return this.columns; + const userColumns = this.getUserColumns(); + const pmfmColumnNames = pmfms + //.filter(p => p.isMandatory || !userColumns || userColumns.includes(p.pmfmId.toString())) + .filter((p) => !p.hidden) + .map((p) => p.id.toString()); + const startColumns = ((this.options && this.options.reservedStartColumns) || []).filter((c) => !userColumns || userColumns.includes(c)); + const endColumns = ((this.options && this.options.reservedEndColumns) || []).filter((c) => !userColumns || userColumns.includes(c)); + return (RESERVED_START_COLUMNS.concat(startColumns) + .concat(pmfmColumnNames) + .concat(endColumns) + .concat(RESERVED_END_COLUMNS) + // Remove columns to hide + .filter((column) => !this.excludesColumns.includes(column))); + // DEBUG + //console.debug("[measurement-table] Updating columns: ", this.displayedColumns) + //if (!this.loading) this.markForCheck(); + } + setShowColumn(columnName, show) { + super.setShowColumn(columnName, show, { emitEvent: false }); + if (!this.loading) + this.updateColumns(); + } + ready(opts) { + const _super = Object.create(null, { + ready: { get: () => super.ready } + }); + return __awaiter(this, void 0, void 0, function* () { + opts = Object.assign({ stop: this.destroySubject }, opts); + yield Promise.all([_super.ready.call(this, opts), this.validatorService ? this.validatorService.ready(opts) : firstNotNilPromise(this.pmfms$, opts)]); + }); + } + /** + * Use in ngFor, for trackBy + * + * @param index + * @param pmfm + */ + trackPmfmFn(index, pmfm) { + return toNumber(pmfm === null || pmfm === void 0 ? void 0 : pmfm.id, index); + } + translateControlPath(path) { + if (path.startsWith('measurementValues.')) { + const pmfmId = parseInt(path.split('.')[1]); + const pmfm = (this.pmfms || []).find((p) => p.id === pmfmId); + if (pmfm) + return PmfmUtils.getPmfmName(pmfm); + } + return super.translateControlPath(path); + } + /** + * Convert (or clone) a row currentData, into instance (that extends Entity) + * + * @param row + * @param clone + */ + toEntity(row, clone) { + // If no validator, use currentData + const currentData = row.currentData; + // Already an entity (e.g. when no validator used): use it + if (currentData instanceof Entity) { + return (currentData && clone === true ? currentData.clone() : currentData); + } + // If JSON object (e.g. when using validator): create a new entity + else { + const target = new this.dataType(); + target.fromObject(currentData); + return target; + } + } + duplicateRow(event, row, opts) { + const skipProperties = (opts && opts.skipProperties) || ['id', 'rankOrder', 'updateDate', 'creationDate', 'label'].concat(this.hasRankOrder ? ['rankOrder'] : []); + return super.duplicateRow(event, row, Object.assign(Object.assign({}, opts), { skipProperties })); + } + waitIdle(opts) { + const _super = Object.create(null, { + waitIdle: { get: () => super.waitIdle } + }); + return __awaiter(this, void 0, void 0, function* () { + yield Promise.all([ + _super.waitIdle.call(this, opts), + // Waiting PMFMS to be loaded + this._dataService.waitIdle(opts), + ]); + }); + } + /* -- protected methods -- */ + updateColumns() { + if (!this.pmfms) + return; // skip + super.updateColumns(); + } + // Can be override by subclass + onNewEntity(data) { + const _super = Object.create(null, { + onNewEntity: { get: () => super.onNewEntity } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.onNewEntity.call(this, data); + if (this.hasRankOrder && isNil(data.rankOrder)) { + data.rankOrder = (yield this.getMaxRankOrder()) + 1; + } + }); + } + getMaxRankOrder() { + return __awaiter(this, void 0, void 0, function* () { + const rows = this.dataSource.getRows(); + return rows.reduce((res, row) => Math.max(res, row.currentData.rankOrder || 0), 0); + }); + } + existsRankOrder(rankOrder, excludedRows) { + return __awaiter(this, void 0, void 0, function* () { + const rows = this.dataSource.getRows(); + return rows.some((row) => (!excludedRows || !excludedRows.includes(row)) && row.currentData.rankOrder === rankOrder); + }); + } + canAddEntity(data) { + return __awaiter(this, void 0, void 0, function* () { + // Before using the given rankOrder, check if not already exists + if (this.canEditRankOrder && isNotNil(data.rankOrder)) { + if (yield this.existsRankOrder(data.rankOrder)) { + const message = this.translate.instant('TRIP.MEASUREMENT.ERROR.DUPLICATE_RANK_ORDER', data); + yield Alerts.showError(message, this.alertCtrl, this.translate); + return false; + } + } + return true; + }); + } + canUpdateEntity(data, row) { + return __awaiter(this, void 0, void 0, function* () { + // Before using the given rankOrder, check if not already exists + if (this.canEditRankOrder && isNotNil(data.rankOrder)) { + if (yield this.existsRankOrder(data.rankOrder, [row])) { + const message = this.translate.instant('TRIP.MEASUREMENT.ERROR.DUPLICATE_RANK_ORDER', data); + yield Alerts.showError(message, this.alertCtrl, this.translate); + return false; + } + } + return true; + }); + } + /** + * Insert an entity into the table. This can be useful when entity is created by a modal (e.g. BatchGroupTable). + * + * If hasRankOrder=true, then rankOrder is computed only once. + * Will call method normalizeEntityToRow(). + * The new row will be the edited row. + * + * @param data the entity to insert. + * @param opts + */ + addEntityToTable(data, opts) { + return __awaiter(this, void 0, void 0, function* () { + // Check entity can be added + const canAdd = yield this.canAddEntity(data); + if (!canAdd) { + console.warn(this.logPrefix + 'Cannot add entity to table'); + return undefined; + } + if (this._addingRow) { + console.warn(this.logPrefix + 'Skipping addEntityToTable(). Another add is in progress.'); + return; + } + this._addingRow = true; + try { + // Create a row + const row = yield this.addRowToTable(null, { editing: opts === null || opts === void 0 ? void 0 : opts.editing, emitEvent: opts === null || opts === void 0 ? void 0 : opts.emitEvent }); + if (!row) + throw new Error('Could not add row to table'); + // Override rankOrder (with a computed value) + if (this.hasRankOrder && + // Do NOT override if can edit it and set + (!this.canEditRankOrder || isNil(data.rankOrder))) { + data.rankOrder = row.currentData.rankOrder; + } + yield this.onNewEntity(data); + // Adapt measurement values to row + this.normalizeEntityToRow(data, row); + // Set row's data + row.currentData = data; + if (row.editing) { + // Confirm the created row + if (!opts || opts.confirmCreate !== false) { + if (row.pending) { + yield AppFormUtils.waitWhilePending(row.validator); + } + const confirmed = this.confirmEditCreate(null, row); + this.editedRow = confirmed ? null : row /*confirmation failed*/; + } + // Keep editing + else { + this.editedRow = row; + } + } + else if (!opts || opts.emitEvent !== false) { + this.markForCheck(); + } + this.markAsDirty({ emitEvent: false }); + return row; + } + catch (err) { + console.error(this.logPrefix + 'Error in addEntityToTable: ', err); + throw err; + } + finally { + this._addingRow = false; + } + }); + } + /** + * Update an row, using the given entity. Useful when entity is updated using a modal (e.g. BatchGroupModal) + * + * The updated row will be the edited row. + * Will call method normalizeEntityToRow() + * + * @param data the input entity + * @param row the row to update + * @param opts + */ + updateEntityToTable(data, row, opts) { + return super.updateEntityToTable(data, row, opts); + } + getI18nColumnName(columnName) { + // Try to resolve PMFM column, using the cached pmfm list + if (PMFM_ID_REGEXP.test(columnName)) { + const pmfmId = parseInt(columnName); + const pmfm = (this.pmfms || []).find((p) => p.id === pmfmId); + if (pmfm) + return this.getI18nPmfmName(pmfm); + } + return super.getI18nColumnName(columnName); + } + getI18nPmfmName(pmfm) { + if (pmfm) + return this.pmfmNamePipe.transform(pmfm, { + i18nPrefix: this.i18nPmfmPrefix, + i18nContext: this.i18nColumnSuffix, + }); + } + normalizeEntityToRow(data, row, opts) { + if (!data) + return; // skip + // Adapt entity measurement values to reactive form + MeasurementValuesUtils.normalizeEntityToForm(data, this.pmfms || [], row.validator, opts); + } + /* -- private function -- */ + /** + * /!\ do NOT override this function. Use onPrepareRowForm instead + * + * @param row + * @private + */ + _onRowCreated(row) { + return __awaiter(this, void 0, void 0, function* () { + // WARN: must be called BEFORE row.validator.patchValue(), to be able to add group's validators + if (row.validator && this.options.onPrepareRowForm) { + yield this.options.onPrepareRowForm(row.validator); + } + if (this._addingRow) + return; // Skip if already adding a row (e.g. when calling addEntityToTable) + this._addingRow = true; + try { + const data = row.currentData; // if validator enable, this will call a getter function + yield this.onNewEntity(data); + // Normalize measurement values + this.normalizeEntityToRow(data, row); + // Set row data + if (row.validator) { + row.validator.patchValue(data); + } + else { + row.currentData = data; + } + this.markForCheck(); + } + finally { + this._addingRow = false; + } + }); + } + _onRowEditing(row) { + return __awaiter(this, void 0, void 0, function* () { + if (row.id === -1) + return; // Skip new row, because already processed by onRowCreated() + if (row.validator && this.options.onPrepareRowForm) { + yield this.options.onPrepareRowForm(row.validator); + } + }); + } +}; +__decorate([ + RxStateSelect(), + __metadata("design:type", Observable) +], BaseMeasurementsTable.prototype, "hasPmfms$", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BaseMeasurementsTable.prototype, "canEditRankOrder", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", String) +], BaseMeasurementsTable.prototype, "programLabel", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", String) +], BaseMeasurementsTable.prototype, "acquisitionLevel", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", String) +], BaseMeasurementsTable.prototype, "strategyLabel", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", Number) +], BaseMeasurementsTable.prototype, "strategyId", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", Boolean) +], BaseMeasurementsTable.prototype, "requiredStrategy", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", Boolean) +], BaseMeasurementsTable.prototype, "requiredGear", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", Number) +], BaseMeasurementsTable.prototype, "gearId", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BaseMeasurementsTable.prototype, "showCommentsColumn", null); +__decorate([ + RxStateSelect('pmfms'), + __metadata("design:type", Observable) +], BaseMeasurementsTable.prototype, "pmfms$", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", Array) +], BaseMeasurementsTable.prototype, "pmfms", void 0); +__decorate([ + RxStateProperty(), + __metadata("design:type", Boolean) +], BaseMeasurementsTable.prototype, "hasPmfms", void 0); +BaseMeasurementsTable = __decorate([ + Directive() + // tslint:disable-next-line:directive-class-suffix + , + __metadata("design:paramtypes", [Injector, Function, Function, Object, Object, Object]) +], BaseMeasurementsTable); +export { BaseMeasurementsTable }; +//# sourceMappingURL=measurements-table.class.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/measurement/measurements-table.class.js.map b/out-tsc/app/app/data/measurement/measurements-table.class.js.map new file mode 100644 index 000000000..7b3beb47e --- /dev/null +++ b/out-tsc/app/app/data/measurement/measurements-table.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"measurements-table.class.js","sourceRoot":"","sources":["../../../../../src/app/data/measurement/measurements-table.class.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/measurement/measurements-table.service.js b/out-tsc/app/app/data/measurement/measurements-table.service.js new file mode 100644 index 000000000..f6700bee2 --- /dev/null +++ b/out-tsc/app/app/data/measurement/measurements-table.service.js @@ -0,0 +1,286 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { firstValueFrom, isObservable, Observable } from 'rxjs'; +import { filter, map, switchMap, takeUntil, tap } from 'rxjs/operators'; +import { MeasurementValuesUtils } from './measurement.model'; +import { EntityUtils, firstNotNil, firstNotNilPromise, InMemoryEntitiesService, isNil, isNotNil, StartableService, waitForFalse, } from '@sumaris-net/ngx-components'; +import { Directive, Injector, Optional } from '@angular/core'; +import { PMFM_ID_REGEXP } from '@app/referential/services/model/pmfm.model'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { equals } from '@app/shared/functions'; +import { RxState } from '@rx-angular/state'; +import { RxStateProperty, RxStateRegister, RxStateSelect } from '@app/shared/state/state.decorator'; +let MeasurementsTableEntitiesService = class MeasurementsTableEntitiesService extends StartableService { + constructor(injector, dataType, delegate, options) { + super(null); + this.dataType = dataType; + this.options = options; + this._delegate = delegate; + this.programRefService = injector.get(ProgramRefService); + // Init state defaults + const requiredGear = (options === null || options === void 0 ? void 0 : options.requiredGear) === true; + this._state.set({ + requiredStrategy: options === null || options === void 0 ? void 0 : options.requiredStrategy, + strategyId: null, + strategyLabel: null, + requiredGear, + gearId: requiredGear ? undefined : null, + }); + // Load pmfms + this._state.connect('pmfms', this._state.select(['programLabel', 'acquisitionLevel', 'requiredStrategy', 'strategyId', 'strategyLabel', 'requiredGear', 'gearId'], s => s) + .pipe(filter((s) => this.canLoadPmfms(s)), switchMap((s) => this.watchProgramPmfms(s)))); + // Apply pmfms + this._state.hold(this.pmfms$, (pmfms) => this.applyPmfms(pmfms)); + // DEBUG + this._debug = options && options.debug; + } + set delegate(value) { + this._delegate = value; + } + get delegate() { + return this._delegate; + } + get stopped() { + return super.stopped || this.pmfms === undefined || false; + } + ngOnStart() { + return __awaiter(this, void 0, void 0, function* () { + if (this.stopped) + throw Error('MeasurementService is not restartable!'); + try { + return yield firstValueFrom(firstNotNil(this.pmfms$)); + } + catch (err) { + if (this.stopped) { + // Service stopped: silent + } + else { + console.error(err); + } + } + }); + } + ngOnStop() { + return __awaiter(this, void 0, void 0, function* () { + this._state.ngOnDestroy(); + if (this._delegate instanceof InMemoryEntitiesService) { + yield this._delegate.stop(); + } + }); + } + set(state) { + this._state.set(state); + } + watchAll(offset, size, sortBy, sortDirection, selectionFilter, options) { + if (!this.started) + this.start(); + return this.pmfms$ + .pipe(filter(isNotNil), switchMap(pmfms => { + let cleanSortBy = sortBy; + // Do not apply sortBy to delegated service, when sort on a pmfm + let sortPmfm; + if (cleanSortBy && PMFM_ID_REGEXP.test(cleanSortBy)) { + sortPmfm = pmfms.find(pmfm => pmfm.id === parseInt(sortBy)); + // A pmfm was found, do not apply the sort here + if (sortPmfm) + cleanSortBy = undefined; + } + return this.delegate.watchAll(offset, size, cleanSortBy, sortDirection, selectionFilter, options) + .pipe(map((res) => { + // Prepare measurement values for reactive form + res.data = (res.data || []).slice(); + res.data.forEach(entity => MeasurementValuesUtils.normalizeEntityToForm(entity, pmfms)); + // Apply sort on pmfm + if (sortPmfm) { + // Compute attributes path + cleanSortBy = 'measurementValues.' + sortBy; + if (sortPmfm.type === 'qualitative_value') { + cleanSortBy += '.label'; + } + // Execute a simple sort + res.data = EntityUtils.sort(res.data, cleanSortBy, sortDirection); + } + return res; + })); + })); + } + saveAll(data, options) { + return __awaiter(this, void 0, void 0, function* () { + if (this._debug) + console.debug('[meas-service] converting measurement values before saving...'); + const pmfms = this.pmfms || []; + const dataToSaved = data.map(json => { + const entity = new this.dataType(); + entity.fromObject(json); + // Adapt measurementValues to entity, but : + // - keep the original JSON object measurementValues, because may be still used (e.g. in table without validator, in row.currentData) + // - keep extra pmfm's values, because table can have filtered pmfms, to display only mandatory PMFM (e.g. physical gear table) + entity.measurementValues = Object.assign({}, json.measurementValues, MeasurementValuesUtils.normalizeValuesToModel(json.measurementValues, pmfms)); + return entity; + }); + return this.delegate.saveAll(dataToSaved, options); + }); + } + deleteAll(data, options) { + return this.delegate.deleteAll(data, options); + } + asFilter(filter) { + return this.delegate.asFilter(filter); + } + waitIdle(opts) { + return __awaiter(this, void 0, void 0, function* () { + yield waitForFalse(this.loading$, opts); + }); + } + /* -- private methods -- */ + canLoadPmfms(state) { + if (isNil(state.programLabel) || isNil(state.acquisitionLevel)) { + return false; + } + if (state.requiredStrategy && isNil(state.strategyLabel) && isNil(state.strategyId)) { + //if (this._debug) + console.debug('[meas-service] Cannot watch Pmfms yet. Missing required strategy.'); + return false; + } + if (state.requiredGear && isNil(state.gearId)) { + if (this._debug) + console.debug('[meas-service] Cannot watch Pmfms yet. Missing required \'gearId\'.'); + return false; + } + return true; + } + watchProgramPmfms(state) { + this.markAsLoading(); + // DEBUG + //if (this._debug) + console.debug(`[meas-service] Loading pmfms... {program: '${state.programLabel}', acquisitionLevel: '${state.acquisitionLevel}', strategyId: ${state.strategyId} (required? ${state.requiredStrategy}), gearId: ${state.gearId}}}̀̀`); + // Watch pmfms + let pmfm$ = this.programRefService.watchProgramPmfms(state.programLabel, { + acquisitionLevel: state.acquisitionLevel, + strategyId: state.strategyId, + strategyLabel: state.strategyLabel, + gearId: state.gearId + }) + .pipe(takeUntil(this.stopSubject)); + // DEBUG log + if (this._debug) { + pmfm$ = pmfm$.pipe(tap(pmfms => { + if (!pmfms.length) { + console.debug(`[meas-service] No pmfm found for {program: '${this.programLabel}', acquisitionLevel: '${state.acquisitionLevel}', strategyLabel: '${state.strategyLabel}'}. Please fill program's strategies !`); + } + else { + console.debug(`[meas-service] Pmfm found for {program: '${this.programLabel}', acquisitionLevel: '${state.acquisitionLevel}', strategyLabel: '${state.strategyLabel}'}`, pmfms); + } + })); + } + return pmfm$; + } + applyPmfms(pmfms) { + return __awaiter(this, void 0, void 0, function* () { + if (!pmfms) + return false; // skip + this.markAsLoading(); + try { + // Wait loaded + if (isObservable(pmfms)) { + if (this._debug) + console.debug(`[meas-service] setPmfms(): waiting pmfms observable...`); + pmfms = yield firstNotNilPromise(pmfms, { stop: this.stopSubject }); + if (this._debug) + console.debug(`[meas-service] setPmfms(): waiting pmfms observable [OK]`); + } + // Map + if (this.options && this.options.mapPmfms) { + pmfms = yield this.options.mapPmfms(pmfms); + } + // Make pmfms is an array + if (!Array.isArray(pmfms)) { + console.error(`[meas-service] Invalid pmfms. Should be an array:`, pmfms); + return false; + } + // Check if changes + if (equals(pmfms, this.pmfms)) + return false; // Skip if same + // DEBUG log + //if (this._debug) console.debug(`[meas-service] Pmfms to applied: `, pmfms); + this.pmfms = pmfms; + return true; + } + catch (err) { + if (!this.stopped) { + console.error(`[meas-service] Error while applying pmfms: ${err && err.message || err}`, err); + } + } + finally { + // Mark as loaded + this.markAsLoaded(); + } + }); + } + markAsLoading() { + if (!this.loading) { + this.loading = true; + } + } + markAsLoaded() { + if (this.loading) { + this.loading = false; + } + } +}; +__decorate([ + RxStateRegister(), + __metadata("design:type", RxState) +], MeasurementsTableEntitiesService.prototype, "_state", void 0); +__decorate([ + RxStateSelect(), + __metadata("design:type", Observable) +], MeasurementsTableEntitiesService.prototype, "pmfms$", void 0); +__decorate([ + RxStateSelect(), + __metadata("design:type", Observable) +], MeasurementsTableEntitiesService.prototype, "loading$", void 0); +__decorate([ + RxStateProperty(), + __metadata("design:type", String) +], MeasurementsTableEntitiesService.prototype, "programLabel", void 0); +__decorate([ + RxStateProperty(), + __metadata("design:type", String) +], MeasurementsTableEntitiesService.prototype, "acquisitionLevel", void 0); +__decorate([ + RxStateProperty(), + __metadata("design:type", Boolean) +], MeasurementsTableEntitiesService.prototype, "requiredStrategy", void 0); +__decorate([ + RxStateProperty(), + __metadata("design:type", Number) +], MeasurementsTableEntitiesService.prototype, "strategyId", void 0); +__decorate([ + RxStateProperty(), + __metadata("design:type", String) +], MeasurementsTableEntitiesService.prototype, "strategyLabel", void 0); +__decorate([ + RxStateProperty(), + __metadata("design:type", Boolean) +], MeasurementsTableEntitiesService.prototype, "requiredGear", void 0); +__decorate([ + RxStateProperty(), + __metadata("design:type", Number) +], MeasurementsTableEntitiesService.prototype, "gearId", void 0); +__decorate([ + RxStateProperty(), + __metadata("design:type", Array) +], MeasurementsTableEntitiesService.prototype, "pmfms", void 0); +__decorate([ + RxStateProperty(), + __metadata("design:type", Boolean) +], MeasurementsTableEntitiesService.prototype, "loading", void 0); +MeasurementsTableEntitiesService = __decorate([ + Directive() + // tslint:disable-next-line:directive-class-suffix + , + __param(3, Optional()), + __metadata("design:paramtypes", [Injector, Function, Object, Object]) +], MeasurementsTableEntitiesService); +export { MeasurementsTableEntitiesService }; +//# sourceMappingURL=measurements-table.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/measurement/measurements-table.service.js.map b/out-tsc/app/app/data/measurement/measurements-table.service.js.map new file mode 100644 index 000000000..5c3276b3e --- /dev/null +++ b/out-tsc/app/app/data/measurement/measurements-table.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"measurements-table.service.js","sourceRoot":"","sources":["../../../../../src/app/data/measurement/measurements-table.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/measurement/measurements-table.validator.js b/out-tsc/app/app/data/measurement/measurements-table.validator.js new file mode 100644 index 000000000..6a5e33c9e --- /dev/null +++ b/out-tsc/app/app/data/measurement/measurements-table.validator.js @@ -0,0 +1,85 @@ +import { FormBuilder } from '@angular/forms'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { BaseValidatorService } from '@app/shared/service/base.validator.service'; +import { BehaviorSubject } from 'rxjs'; +import { TranslateService } from '@ngx-translate/core'; +import { AppFormArray, isNotNil, waitForTrue } from '@sumaris-net/ngx-components'; +export class MeasurementsTableValidatorService extends BaseValidatorService { + constructor(injector, _delegate) { + super(injector.get(FormBuilder), injector.get(TranslateService)); + this._delegate = _delegate; + this.readySubject = new BehaviorSubject(false); + this._delegateOptions = null; + this._measurementsOptions = null; + this._measurementsConfigCache = null; + this.measurementsValidatorService = injector.get(MeasurementsValidatorService); + } + set delegateOptions(value) { + this._delegateOptions = value; + } + get delegateOptions() { + return this._delegateOptions; + } + set measurementsOptions(value) { + this._measurementsOptions = value; + this._measurementsConfigCache = null; // Reset the config cache + } + get delegate() { + return this._delegate; + } + getRowValidator(data, opts) { + var _a; + const form = this._delegate.getRowValidator(data, Object.assign(Object.assign({}, (this._delegateOptions || {})), opts)); + // Add measurement Values + // Can be disable (e.g. in Batch Group table) if pmfms = null + if (isNotNil((_a = this._measurementsOptions) === null || _a === void 0 ? void 0 : _a.pmfms)) { + form.setControl('measurementValues', this.getMeasurementValuesFormGroup(data === null || data === void 0 ? void 0 : data.measurementValues, this._measurementsOptions), { emitEvent: false }); + } + return form; + } + updateFormGroup(form, opts) { + this._delegate.updateFormGroup(form, Object.assign(Object.assign({}, (this._delegateOptions || {})), opts)); + // TODO: update using measurement values ? + } + ready(opts) { + return waitForTrue(this.readySubject, opts); + } + markAsReady() { + if (!this.readySubject.value) { + this.readySubject.next(true); + } + } + /* -- protected -- */ + getMeasurementValuesFormGroup(data, opts) { + // Create a cached config + let controlsConfig = this._measurementsConfigCache; + // If no cache defined + if (!controlsConfig) { + // Compute the form group + controlsConfig = this.measurementsValidatorService.getFormGroupConfig(null, opts); + // Fill the cache + this._measurementsConfigCache = controlsConfig; + return this.formBuilder.group(controlsConfig); + } + // Use cache if exists + else { + const form = this.formBuilder.group(controlsConfig); + // Re-create new instance for each array control + Object.entries(controlsConfig) + .filter(([key, cachedControl]) => cachedControl instanceof AppFormArray) + .forEach(([pmfmId, cachedControl]) => { + const control = new AppFormArray(cachedControl.createControl, cachedControl.equals, cachedControl.isEmpty, cachedControl.options); + const value = data ? data[pmfmId] : null; + if (Array.isArray(value)) { + control.setValue(value, { emitEvent: false }); + } + else { + control.setValue([null], { emitEvent: false }); + } + form.setControl(pmfmId, control, { emitEvent: false }); + }); + return form; + } + } +} +//# sourceMappingURL=measurements-table.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/measurement/measurements-table.validator.js.map b/out-tsc/app/app/data/measurement/measurements-table.validator.js.map new file mode 100644 index 000000000..9b8f1f367 --- /dev/null +++ b/out-tsc/app/app/data/measurement/measurements-table.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"measurements-table.validator.js","sourceRoot":"","sources":["../../../../../src/app/data/measurement/measurements-table.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/measurement/measurements.form.component.js b/out-tsc/app/app/data/measurement/measurements.form.component.js new file mode 100644 index 000000000..87861aa6c --- /dev/null +++ b/out-tsc/app/app/data/measurement/measurements.form.component.js @@ -0,0 +1,540 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Injector, Input, Optional, Output, } from '@angular/core'; +import { isObservable, merge, Observable } from 'rxjs'; +import { distinctUntilChanged, filter, map } from 'rxjs/operators'; +import { UntypedFormBuilder } from '@angular/forms'; +import { MeasurementsValidatorService } from './measurement.validator'; +import { AppForm, AppFormUtils, createPromiseEventEmitter, emitPromiseEvent, equals, firstNotNilPromise, firstTrue, isNil, toNumber, } from '@sumaris-net/ngx-components'; +import { MeasurementUtils, MeasurementValuesUtils } from './measurement.model'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { MeasurementsFormReadySteps } from '@app/data/measurement/measurement-values.form.class'; +import { RxState } from '@rx-angular/state'; +import { RxStateProperty, RxStateSelect } from '@app/shared/state/state.decorator'; +let MeasurementsForm = class MeasurementsForm extends AppForm { + constructor(injector, measurementValidatorService, formBuilder, programRefService, __state) { + super(injector, measurementValidatorService.getFormGroup([])); + this.measurementValidatorService = measurementValidatorService; + this.formBuilder = formBuilder; + this.programRefService = programRefService; + this.__state = __state; + this._state = new RxState(); + this.applyingValue = false; + this.keepRankOrder = false; + this.skipDisabledPmfmControl = true; + this.skipComputedPmfmControl = true; + this.cd = null; + this.showError = false; + this.compact = false; + this.floatLabel = 'auto'; + this.animated = false; + this.mobile = false; + this.i18nPmfmPrefix = null; + this.i18nSuffix = null; + this.mapPmfms = createPromiseEventEmitter(); + this.onUpdateFormGroup = createPromiseEventEmitter(); + this.cd = injector.get(ChangeDetectorRef); + // Load pmfms; when input property set (skip if component is starting = waiting markAsready()) + this._state.hold(merge(this._state.select(['programLabel', 'acquisitionLevel', 'forceOptional'], res => res), this._state.select(['requiredStrategy', 'strategyLabel'], res => res), this._state.select(['requiredStrategy', 'strategyId'], res => res), this._state.select(['requiredGear', 'gearId'], res => res)) + .pipe( + // Only if markAsReady() called + filter(_ => !this.starting)), + // /!\ DO NOT emit event if not loaded. + // (e.g. Required to avoid CatchBatchForm to have 'loading=true', when gearId is set) + (_) => this.loadPmfms({ emitEvent: false })); + // Update form, when pmfms set + this._state.hold(this.pmfms$, (pmfms) => this.updateFormGroup(pmfms)); + this._state.connect('ready', this._state.select('readyStep') + .pipe(distinctUntilChanged(), map(step => step >= MeasurementsFormReadySteps.FORM_GROUP_READY))); + // Initial state + this._state.set({ + readyStep: MeasurementsFormReadySteps.STARTING, + forceOptional: false, + requiredStrategy: false, + requiredGear: false, + }); + // DEBUG + this._logPrefix = '[measurements-form]'; + this._state.hold(this._state.select('acquisitionLevel'), acquisitionLevel => { + this._logPrefix += `[measurements-form] (${acquisitionLevel})`; + }); + //this.debug = !environment.production; + } + //@Input() @RxStateProperty() pmfms: IPmfm[]; + set pmfms(pmfms) { + this.setPmfms(pmfms, { emitEvent: false }); + } + get pmfms() { + return this._state.get('pmfms'); + } + set value(value) { + this.applyValue(value); + } + get value() { + return this.getValue(); + } + get starting() { + return this.readyStep === MeasurementsFormReadySteps.STARTING; + } + get formError() { + return this.getFormError(this.form); + } + ngOnDestroy() { + super.ngOnDestroy(); + this._state.ngOnDestroy(); + } + /** + * Reset all data to original value. Useful sometimes, to re init the component (e.g. operation page). + * Note: Keep @Input() attributes unchanged + */ + unload() { + this.data = null; + this.applyingValue = false; + this.loadingSubject.next(true); + this.readySubject.next(false); + this.errorSubject.next(null); + this.resetPmfms(); + } + setValue(data, opts) { + return this.applyValue(data, opts); + } + reset(data, opts) { + return this.applyValue(data, opts); + } + markAsReady(opts) { + // Start loading pmfms + if (this.starting) { + this.setReadyStep(MeasurementsFormReadySteps.LOADING_PMFMS); + this.loadPmfms(); + } + // Wait form ready, before mark as ready + this.doWhenReady(() => super.markAsReady(opts)); + } + markAsLoaded(opts) { + // Wait form ready, before mark as ready + this.doWhenReady(() => super.markAsLoaded(opts)); + } + trackPmfmFn(index, pmfm) { + // Add properties that can be changed + return `${pmfm.id}-${pmfm.required}-${pmfm.hidden}`; + } + /* -- protected methods -- */ + doWhenReady(runnable) { + // Wait form ready, before executing + this._state.hold(firstTrue(this.ready$), runnable); + } + getFormError(form) { + const errors = AppFormUtils.getFormErrors(form); + return Object.getOwnPropertyNames(errors) + .map(field => { + let fieldName; + const pmfmId = parseInt(field); + const pmfm = (this.pmfms || []).find(p => p.id === pmfmId); + if (pmfm) { + fieldName = PmfmUtils.getPmfmName(pmfm); + } + const fieldErrors = errors[field]; + const errorMsg = Object.keys(fieldErrors).map(errorKey => { + const key = 'ERROR.FIELD_' + errorKey.toUpperCase(); + return this.translate.instant(key, fieldErrors[key]); + }).join(', '); + return fieldName + ': ' + errorMsg; + }).join(', '); + } + /** + * Wait form is ready, before setting the value to form + * + * @param data + * @param opts + */ + applyValue(data, opts) { + return __awaiter(this, void 0, void 0, function* () { + this.applyingValue = true; + try { + // Will avoid data to be set inside function updateFormGroup() + this.data = data; + if (this.debug) + console.debug(`${this._logPrefix} Applying value...`, data); + this.onApplyingEntity(data, opts); + // Wait form is ready, before applying the data + yield this.ready({ stop: this.destroySubject }); + // Data is still the same (not changed : applying) + if (data === this.data) { + // Applying value to form (that should be ready). + yield this.updateView(data, opts); + this.markAsLoaded(); + } + } + catch (err) { + if ((err === null || err === void 0 ? void 0 : err.message) !== 'stop') { + console.error(`${this._logPrefix} Error while applying value: ${err && err.message || err}`, err); + this.setError(err && err.message || err); + } + this.markAsLoaded(); + } + finally { + this.applyingValue = false; + } + }); + } + onApplyingEntity(data, opts) { + // Can be override by subclasses + } + updateView(data, opts) { + return __awaiter(this, void 0, void 0, function* () { + // Warn is form is NOT ready + if (this.debug && this.readyStep < MeasurementsFormReadySteps.FORM_GROUP_READY) { + console.warn(`${this._logPrefix} Trying to set value, but form not ready!`); + } + const pmfms = this.pmfms; + this.data = MeasurementUtils.initAllMeasurements(data, pmfms, this.entityName, this.keepRankOrder); + const json = MeasurementValuesUtils.normalizeValuesToForm(MeasurementUtils.toMeasurementValues(this.data), pmfms); + this.form.patchValue(json, opts); + // Restore form status + this.updateViewState(Object.assign({ onlySelf: true }, opts)); + }); + } + getValue() { + if (this.loading) + return this.data; // Avoid to return not well loaded data + // Find dirty pmfms, to avoid full update + const form = this.form; + const filteredPmfms = (this.pmfms || []).filter(pmfm => { + const control = form.controls[pmfm.id]; + return control && (control.dirty + || (this.skipDisabledPmfmControl === false && control.disabled) + || (this.skipComputedPmfmControl === false && pmfm.isComputed)); + }); + if (filteredPmfms.length) { + // Update measurements value + const json = form.value; + MeasurementUtils.setValuesByFormValues(this.data, json, filteredPmfms); + } + return this.data; + } + setReadyStep(step) { + // /!\ do NOT use STARTING step here (only used to avoid to many refresh, BEFORE ngOnInit()) + step = toNumber(step, MeasurementsFormReadySteps.LOADING_PMFMS); + // Emit, if changed + if (this.readyStep !== step) { + // DEBUG + //if (this.debug) console.debug(`${this._logPrefix} Loading step -> ${step}`); + this.readyStep = step; + } + // Call markAsLoading, if the step is the first step + if (this.loaded && step <= MeasurementsFormReadySteps.LOADING_PMFMS) { + if (this.dirty) + this.data = this.value; + this.markAsLoading(); + } + } + /** + * Check if can load (must have: program, acquisition - and gear if required) + */ + canLoadPmfms() { + // Check if can load (must have: program, acquisition - and gear if required) + if (isNil(this.programLabel) + || isNil(this.acquisitionLevel) + || (this.requiredStrategy && isNil(this.strategyLabel) && isNil(this.strategyId)) + || (this.requiredGear && isNil(this.gearId))) { + // DEBUG + //if (this.debug) console.debug(`${this._logPrefix} cannot load pmfms (missing some inputs)`); + return false; + } + return true; + } + loadPmfms(opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.canLoadPmfms()) + return; + // DEBUG + //if (this.debug) console.debug(`${this.logPrefix} loadPmfms()`); + if (!opts || opts.emitEvent !== false) { + this.setReadyStep(MeasurementsFormReadySteps.LOADING_PMFMS); + } + let pmfms; + try { + // Load pmfms + // DO NOT call loadProgramPmfms(). Next setPmfms() will call a firstNotNilPromise() with options.stop + pmfms = this.programRefService.watchProgramPmfms(this.programLabel, { + strategyId: this.strategyId, + strategyLabel: this.strategyLabel, + acquisitionLevel: this.acquisitionLevel, + gearId: this.gearId + }); + } + catch (err) { + console.error(`${this._logPrefix} Error while loading pmfms: ${err && err.message || err}`, err); + pmfms = undefined; + } + // Apply pmfms + yield this.setPmfms(pmfms, opts); + }); + } + setPmfms(pmfms, opts) { + return __awaiter(this, void 0, void 0, function* () { + // If undefined: reset pmfms + if (!pmfms) { + this.resetPmfms(); + return undefined; // break + } + // DEBUG + //if (this.debug) console.debug(`${this.logPrefix} setPmfms()`); + // Mark as settings pmfms + if (!opts || opts.emitEvent !== false) { + this.setReadyStep(MeasurementsFormReadySteps.SETTING_PMFMS); + } + try { + // Wait loaded, if observable + if (isObservable(pmfms)) { + if (this.debug) + console.debug(`${this._logPrefix} setPmfms(): waiting pmfms observable...`); + pmfms = yield firstNotNilPromise(pmfms, { stop: this.destroySubject }); + if (this.debug) + console.debug(`${this._logPrefix} setPmfms(): waiting pmfms observable [OK]`); + } + // If force to optional, create a copy of each pmfms that should be forced + if (this.forceOptional) { + const excludedPmfmIds = this.forceOptionalExcludedPmfmIds || []; + pmfms = pmfms.map(pmfm => { + if (pmfm.required && !excludedPmfmIds.includes(pmfm.id)) { + // Create a copy of each required pmfms + // To keep unchanged the original entity + pmfm = pmfm.clone(); + pmfm.required = false; + } + // Return original pmfm, as not need to be overwritten + return pmfm; + }); + } + // Call the map function + if (this.mapPmfms.observed) { + const res = yield emitPromiseEvent(this.mapPmfms, 'pmfms', { detail: { pmfms } }); + pmfms = Array.isArray(res) ? res : pmfms; + } + // Apply (if changed) + if (!equals(pmfms, this.pmfms)) { + // DEBUG log + if (this.debug) + console.debug(`${this._logPrefix} Pmfms changed: `, pmfms); + // next step + if (!opts || opts.emitEvent !== false) { + this.setReadyStep(MeasurementsFormReadySteps.UPDATING_FORM_GROUP); + } + // Apply pmfms to state + this._state.set('pmfms', () => pmfms); + } + return pmfms; + } + catch (err) { + if ((err === null || err === void 0 ? void 0 : err.message) !== 'stop') { + console.error(`${this._logPrefix} Error while applying pmfms: ${err && err.message || err}`, err); + } + this.resetPmfms(); + return undefined; + } + }); + } + resetPmfms() { + if (isNil(this.pmfms)) + return; // Already reset + if (this.debug) + console.warn(`${this._logPrefix} Reset pmfms`); + // Reset step + if (!this.starting && this.loaded) + this.setReadyStep(MeasurementsFormReadySteps.STARTING); + // Update state + this.pmfms = undefined; + } + updateFormGroup(pmfms) { + return __awaiter(this, void 0, void 0, function* () { + pmfms = pmfms || this.pmfms; + if (!pmfms) + return; // Skip + const form = this.form; + if (form.enabled) { + form.disable(); + } + // Mark as loading + this.setReadyStep(MeasurementsFormReadySteps.UPDATING_FORM_GROUP); + if (this.debug) + console.debug(`${this._logPrefix} Updating form controls, force_optional: ${this.forceOptional}}, using pmfms:`, pmfms); + // No pmfms (= empty form) + if (!pmfms.length) { + // Reset form + this.measurementValidatorService.updateFormGroup(this.form, { pmfms: [] }); + this.form.reset({}, { onlySelf: true, emitEvent: false }); + } + else { + // Update the existing form + this.measurementValidatorService.updateFormGroup(this.form, { pmfms }); + } + // Call options function + if (this.onUpdateFormGroup.observed) { + yield emitPromiseEvent(this.onUpdateFormGroup, 'onUpdateFormGroup', { detail: { form } }); + } + if (this.debug) + console.debug(`${this._logPrefix} Form controls updated`); + this.setReadyStep(MeasurementsFormReadySteps.FORM_GROUP_READY); + // Data already set: apply value again to fill the form + if (!this.applyingValue) { + // Update data in view + if (this.data) { + yield this.updateView(this.data, { onlySelf: true, emitEvent: false }); + this.markAsLoaded(); + } + // No data defined yet + else { + // Restore enable state (because form.setValue() can change it !) + this.updateViewState({ onlySelf: true, emitEvent: false }); + } + } + return true; + }); + } + updateViewState(opts) { + if (this._enable) { + this.enable(opts); + } + else { + this.disable(opts); + } + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + RxStateProperty(), + __metadata("design:type", Number) +], MeasurementsForm.prototype, "readyStep", void 0); +__decorate([ + RxStateSelect(), + __metadata("design:type", Observable) +], MeasurementsForm.prototype, "pmfms$", void 0); +__decorate([ + RxStateSelect(), + __metadata("design:type", Observable) +], MeasurementsForm.prototype, "ready$", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], MeasurementsForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], MeasurementsForm.prototype, "compact", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], MeasurementsForm.prototype, "floatLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], MeasurementsForm.prototype, "entityName", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], MeasurementsForm.prototype, "animated", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], MeasurementsForm.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], MeasurementsForm.prototype, "maxVisibleButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], MeasurementsForm.prototype, "maxItemCountForButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], MeasurementsForm.prototype, "showButtonIcons", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], MeasurementsForm.prototype, "i18nPmfmPrefix", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], MeasurementsForm.prototype, "i18nSuffix", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], MeasurementsForm.prototype, "forceOptionalExcludedPmfmIds", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", String) +], MeasurementsForm.prototype, "programLabel", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", String) +], MeasurementsForm.prototype, "acquisitionLevel", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", String) +], MeasurementsForm.prototype, "strategyLabel", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", Number) +], MeasurementsForm.prototype, "strategyId", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", Boolean) +], MeasurementsForm.prototype, "requiredStrategy", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", Number) +], MeasurementsForm.prototype, "gearId", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", Boolean) +], MeasurementsForm.prototype, "requiredGear", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", Boolean) +], MeasurementsForm.prototype, "forceOptional", void 0); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], MeasurementsForm.prototype, "pmfms", null); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], MeasurementsForm.prototype, "value", null); +__decorate([ + Output(), + __metadata("design:type", EventEmitter) +], MeasurementsForm.prototype, "mapPmfms", void 0); +__decorate([ + Output('updateFormGroup'), + __metadata("design:type", EventEmitter) +], MeasurementsForm.prototype, "onUpdateFormGroup", void 0); +MeasurementsForm = __decorate([ + Component({ + selector: 'app-form-measurements', + templateUrl: './measurements.form.component.html', + styleUrls: ['./measurements.form.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __param(4, Optional()), + __metadata("design:paramtypes", [Injector, + MeasurementsValidatorService, + UntypedFormBuilder, + ProgramRefService, + RxState]) +], MeasurementsForm); +export { MeasurementsForm }; +//# sourceMappingURL=measurements.form.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/measurement/measurements.form.component.js.map b/out-tsc/app/app/data/measurement/measurements.form.component.js.map new file mode 100644 index 000000000..029194962 --- /dev/null +++ b/out-tsc/app/app/data/measurement/measurements.form.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"measurements.form.component.js","sourceRoot":"","sources":["../../../../../src/app/data/measurement/measurements.form.component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/measurement/measurements.pipe.js b/out-tsc/app/app/data/measurement/measurements.pipe.js new file mode 100644 index 000000000..8c1406b18 --- /dev/null +++ b/out-tsc/app/app/data/measurement/measurements.pipe.js @@ -0,0 +1,40 @@ +import { __decorate } from "tslib"; +import { Pipe } from '@angular/core'; +import { MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { PmfmValuePipe } from '@app/referential/pipes/pmfms.pipe'; +let IsMeasurementFormValuesPipe = class IsMeasurementFormValuesPipe { + constructor() { + this.transform = MeasurementValuesUtils.isMeasurementFormValues; + } +}; +IsMeasurementFormValuesPipe = __decorate([ + Pipe({ + name: 'isMeasurementFormValues', + }) +], IsMeasurementFormValuesPipe); +export { IsMeasurementFormValuesPipe }; +let IsMeasurementModelValuesPipe = class IsMeasurementModelValuesPipe { + constructor() { + this.transform = MeasurementValuesUtils.isMeasurementModelValues; + } +}; +IsMeasurementModelValuesPipe = __decorate([ + Pipe({ + name: 'isMeasurementModelValues' + }) +], IsMeasurementModelValuesPipe); +export { IsMeasurementModelValuesPipe }; +let MeasurementValueGetPipe = class MeasurementValueGetPipe extends PmfmValuePipe { + transform(entity, opts) { + if (!entity.measurementValues || !(opts === null || opts === void 0 ? void 0 : opts.pmfm)) + return undefined; + return this.format(entity.measurementValues[opts.pmfm.id], Object.assign({ applyDisplayConversion: opts.pmfm.displayConversion && MeasurementValuesUtils.isMeasurementModelValues(entity.measurementValues) }, opts)); + } +}; +MeasurementValueGetPipe = __decorate([ + Pipe({ + name: 'measurementValueGet' + }) +], MeasurementValueGetPipe); +export { MeasurementValueGetPipe }; +//# sourceMappingURL=measurements.pipe.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/measurement/measurements.pipe.js.map b/out-tsc/app/app/data/measurement/measurements.pipe.js.map new file mode 100644 index 000000000..78b8da8ff --- /dev/null +++ b/out-tsc/app/app/data/measurement/measurements.pipe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"measurements.pipe.js","sourceRoot":"","sources":["../../../../../src/app/data/measurement/measurements.pipe.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAiB,MAAM,eAAe,CAAC;AACpD,OAAO,EAA0B,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAM3D,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAAjC;QACL,cAAS,GAAG,sBAAsB,CAAC,uBAAuB,CAAC;IAC7D,CAAC;CAAA,CAAA;AAFY,2BAA2B;IAHvC,IAAI,CAAC;QACJ,IAAI,EAAE,yBAAyB;KAChC,CAAC;GACW,2BAA2B,CAEvC;SAFY,2BAA2B;AAOjC,IAAM,4BAA4B,GAAlC,MAAM,4BAA4B;IAAlC;QAEL,cAAS,GAAG,sBAAsB,CAAC,wBAAwB,CAAC;IAC9D,CAAC;CAAA,CAAA;AAHY,4BAA4B;IAHxC,IAAI,CAAC;QACJ,IAAI,EAAE,0BAA0B;KACjC,CAAC;GACW,4BAA4B,CAGxC;SAHY,4BAA4B;AAQlC,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,aAAa;IAExD,SAAS,CAAC,MAAmC,EAAE,IAO9C;QACC,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAA;YAAE,OAAO,SAAS,CAAC;QAC/D,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,kBACvD,sBAAsB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,sBAAsB,CAAC,wBAAwB,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAC7H,IAAI,EACP,CAAC;IACL,CAAC;CACF,CAAA;AAhBY,uBAAuB;IAHnC,IAAI,CAAC;QACJ,IAAI,EAAE,qBAAqB;KAC5B,CAAC;GACW,uBAAuB,CAgBnC;SAhBY,uBAAuB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/pipes/data-entity.pipes.js b/out-tsc/app/app/data/pipes/data-entity.pipes.js new file mode 100644 index 000000000..63dc67158 --- /dev/null +++ b/out-tsc/app/app/data/pipes/data-entity.pipes.js @@ -0,0 +1,32 @@ +import { __decorate, __metadata } from "tslib"; +import { Pipe } from '@angular/core'; +import { DataEntityUtils } from '@app/data/services/model/data-entity.model'; +let DataEntityIsInvalidPipe = class DataEntityIsInvalidPipe { + constructor() { + } + transform(entity) { + return DataEntityUtils.isInvalid(entity); + } +}; +DataEntityIsInvalidPipe = __decorate([ + Pipe({ + name: 'dataEntityIsInvalid' + }), + __metadata("design:paramtypes", []) +], DataEntityIsInvalidPipe); +export { DataEntityIsInvalidPipe }; +let DataEntityErrorPipe = class DataEntityErrorPipe { + constructor() { + } + transform(entity) { + return DataEntityUtils.isInvalid(entity) ? entity.qualificationComments : undefined; + } +}; +DataEntityErrorPipe = __decorate([ + Pipe({ + name: 'dataEntityError' + }), + __metadata("design:paramtypes", []) +], DataEntityErrorPipe); +export { DataEntityErrorPipe }; +//# sourceMappingURL=data-entity.pipes.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/pipes/data-entity.pipes.js.map b/out-tsc/app/app/data/pipes/data-entity.pipes.js.map new file mode 100644 index 000000000..9b35fb194 --- /dev/null +++ b/out-tsc/app/app/data/pipes/data-entity.pipes.js.map @@ -0,0 +1 @@ +{"version":3,"file":"data-entity.pipes.js","sourceRoot":"","sources":["../../../../../src/app/data/pipes/data-entity.pipes.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAiB,MAAM,eAAe,CAAC;AACpD,OAAO,EAAc,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAKlF,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAElC;IAEA,CAAC;IAED,SAAS,CAAC,MAAsC;QAC9C,OAAO,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;CAEF,CAAA;AAVY,uBAAuB;IAHnC,IAAI,CAAC;QACJ,IAAI,EAAE,qBAAqB;KAC5B,CAAC;;GACW,uBAAuB,CAUnC;SAVY,uBAAuB;AAe7B,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAE9B;IAEA,CAAC;IAED,SAAS,CAAC,MAAsC;QAC9C,OAAO,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,CAAC;CAEF,CAAA;AAVY,mBAAmB;IAH/B,IAAI,CAAC;QACJ,IAAI,EAAE,iBAAiB;KACxB,CAAC;;GACW,mBAAmB,CAU/B;SAVY,mBAAmB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/pipes/pipes.module.js b/out-tsc/app/app/data/pipes/pipes.module.js new file mode 100644 index 000000000..e859fd7b3 --- /dev/null +++ b/out-tsc/app/app/data/pipes/pipes.module.js @@ -0,0 +1,23 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { DataEntityErrorPipe, DataEntityIsInvalidPipe } from './data-entity.pipes'; +let AppDataEntityPipesModule = class AppDataEntityPipesModule { +}; +AppDataEntityPipesModule = __decorate([ + NgModule({ + imports: [ + CommonModule + ], + declarations: [ + DataEntityIsInvalidPipe, + DataEntityErrorPipe + ], + exports: [ + DataEntityIsInvalidPipe, + DataEntityErrorPipe + ] + }) +], AppDataEntityPipesModule); +export { AppDataEntityPipesModule }; +//# sourceMappingURL=pipes.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/pipes/pipes.module.js.map b/out-tsc/app/app/data/pipes/pipes.module.js.map new file mode 100644 index 000000000..2cb41d4a5 --- /dev/null +++ b/out-tsc/app/app/data/pipes/pipes.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pipes.module.js","sourceRoot":"","sources":["../../../../../src/app/data/pipes/pipes.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAe5E,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;CAEpC,CAAA;AAFY,wBAAwB;IAbpC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;SACb;QACD,YAAY,EAAE;YACZ,uBAAuB;YACvB,mBAAmB;SACpB;QACD,OAAO,EAAE;YACP,uBAAuB;YACvB,mBAAmB;SACpB;KACF,CAAC;GACW,wBAAwB,CAEpC;SAFY,wBAAwB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/position/device/device-position.config.js b/out-tsc/app/app/data/position/device/device-position.config.js new file mode 100644 index 000000000..c0a7e26d4 --- /dev/null +++ b/out-tsc/app/app/data/position/device/device-position.config.js @@ -0,0 +1,24 @@ +import { InjectionToken } from '@angular/core'; +export const DEVICE_POSITION_ENTITY_SERVICES = new InjectionToken('devicePositionEntityServices'); +export const DEVICE_POSITION_CONFIG_OPTION = Object.freeze({ + TIMER_PERIOD: { + key: 'sumaris.device.position.timerPeriodMs', + label: 'DEVICE_POSITION.OPTIONS.TIMER_PERIOD', + type: 'integer', + defaultValue: 30000, // 30 s + }, + TRACKING_ENABLE: { + key: 'sumaris.device.position.tracking.enable', + label: 'DEVICE_POSITION.OPTIONS.TRACKING_ENABLE', + type: 'boolean', + defaultValue: false + }, + TRACKING_SAVE_PERIOD: { + key: 'sumaris.device.position.tracking.savePeriodMs', + label: 'DEVICE_POSITION.OPTIONS.TRACKING_SAVE_PERIOD', + type: 'integer', + //defaultValue: 600000, + defaultValue: 30000, + }, +}); +//# sourceMappingURL=device-position.config.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/position/device/device-position.config.js.map b/out-tsc/app/app/data/position/device/device-position.config.js.map new file mode 100644 index 000000000..ac354b929 --- /dev/null +++ b/out-tsc/app/app/data/position/device/device-position.config.js.map @@ -0,0 +1 @@ +{"version":3,"file":"device-position.config.js","sourceRoot":"","sources":["../../../../../../src/app/data/position/device/device-position.config.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,cAAc,EAAC,MAAM,eAAe,CAAC;AAG7C,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAI,cAAc,CAAmC,8BAA8B,CAAC,CAAC;AAEpI,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC,MAAM,CAAC;IACzD,YAAY,EAAwB;QAClC,GAAG,EAAE,uCAAuC;QAC5C,KAAK,EAAE,sCAAsC;QAC7C,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,KAAM,EAAE,OAAO;KAC9B;IACD,eAAe,EAAwB;QACrC,GAAG,EAAE,yCAAyC;QAC9C,KAAK,EAAE,yCAAyC;QAChD,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,KAAK;KACpB;IACD,oBAAoB,EAAwB;QAC1C,GAAG,EAAE,+CAA+C;QACpD,KAAK,EAAE,8CAA8C;QACrD,IAAI,EAAE,SAAS;QACf,uBAAuB;QACvB,YAAY,EAAE,KAAK;KACpB;CACF,CAAC,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/data/position/device/device-position.model.js b/out-tsc/app/app/data/position/device/device-position.model.js new file mode 100644 index 000000000..3e4ef9b8c --- /dev/null +++ b/out-tsc/app/app/data/position/device/device-position.model.js @@ -0,0 +1,111 @@ +var DevicePosition_1; +import { __decorate, __metadata } from "tslib"; +import { DateUtils, Department, EntityClass, EntityFilter, fromDateISOString, isNotNil, Person, Referential, ReferentialUtils, toDateISOString } from '@sumaris-net/ngx-components'; +import { DataEntity } from '@app/data/services/model/data-entity.model'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +let DevicePosition = DevicePosition_1 = class DevicePosition extends DataEntity { + constructor() { + super(DevicePosition_1.TYPENAME); + this.recorderDepartment = null; + } + asObject(opts) { + const target = super.asObject(opts); + target.dateTime = toDateISOString(this.dateTime); + target.latitude = this.latitude; + target.longitude = this.longitude; + target.objectId = this.objectId; + target.objectType = this.objectType && this.objectType.asObject(Object.assign(Object.assign({}, opts), { minify: false })); + target.recorderPerson = this.recorderPerson && this.recorderPerson.asObject(opts); + return target; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.dateTime = fromDateISOString(source.dateTime); + this.latitude = source.latitude; + this.longitude = source.longitude; + this.objectId = source.objectId; + this.objectType = Referential.fromObject(source.objectType); + this.recorderPerson = Person.fromObject(source.recorderPerson, opts); + } +}; +DevicePosition.ENTITY_NAME = 'DevicePosition'; +DevicePosition = DevicePosition_1 = __decorate([ + EntityClass({ typename: 'DevicePositionVO' }), + __metadata("design:paramtypes", []) +], DevicePosition); +export { DevicePosition }; +let DevicePositionFilter = class DevicePositionFilter extends EntityFilter { + constructor() { + super(...arguments); + this.objectType = null; + this.objectId = null; + this.startDate = null; + this.endDate = null; + this.recorderPerson = null; + this.recorderDepartment = null; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.objectType = Referential.fromObject(source.objectType); + this.objectId = source.objectId; + this.recorderPerson = Person.fromObject(source.recorderPerson) + || isNotNil(source.recorderPersonId) && Person.fromObject({ id: source.recorderPersonId }) || undefined; + this.recorderDepartment = Department.fromObject(source.recorderDepartment) + || isNotNil(source.recorderDepartmentId) && Department.fromObject({ id: source.recorderDepartmentId }) + || undefined; + this.startDate = fromDateISOString(source.startDate); + this.endDate = fromDateISOString(source.endDate); + } + asObject(opts) { + var _a, _b, _c; + const target = super.asObject(opts); + target.startDate = toDateISOString(this.startDate); + target.endDate = toDateISOString(this.endDate); + target.objectId = this.objectId; + if (opts && opts.minify) { + target.objectTypeLabel = this.objectType && ((_a = this.objectType) === null || _a === void 0 ? void 0 : _a.label); + delete target.objectType; + target.recorderPersonId = this.recorderPerson && ((_b = this.recorderPerson) === null || _b === void 0 ? void 0 : _b.id); + delete target.recorderPerson; + target.recorderDepartmentId = this.recorderDepartment && ((_c = this.recorderDepartment) === null || _c === void 0 ? void 0 : _c.id); + delete target.recorderDepartment; + target.startDate = this.startDate ? DateUtils.resetTime(this.startDate) : undefined; + target.endDate = this.endDate ? DateUtils.resetTime(this.endDate.add(1, 'day')) : undefined; + } + else { + target.objectType = this.objectType && this.objectType.asObject(opts) || undefined; + target.recorderPerson = this.recorderPerson && this.recorderPerson.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS)) || undefined; + target.recorderDepartment = this.recorderDepartment && this.recorderDepartment.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS)); + } + return target; + } + buildFilter() { + var _a; + const filterFns = super.buildFilter(); + if (this.objectId) { + const objectId = this.objectId; + if (isNotNil(objectId)) + filterFns.push(t => (t.objectId === objectId)); + } + if (this.objectType) { + const objectTypeLabel = (_a = this.objectType) === null || _a === void 0 ? void 0 : _a.label; + if (isNotNil(objectTypeLabel)) + filterFns.push(t => (t.objectType.label === objectTypeLabel)); + } + if (ReferentialUtils.isNotEmpty(this.recorderPerson)) { + const recorderPersonId = this.recorderPerson.id; + filterFns.push(t => (t.recorderPerson && t.recorderPerson.id === recorderPersonId)); + } + if (ReferentialUtils.isNotEmpty(this.recorderDepartment)) { + const recorderDepartmentId = this.recorderDepartment.id; + filterFns.push(t => (t.recorderDepartment && t.recorderDepartment.id === recorderDepartmentId)); + } + return filterFns; + } +}; +DevicePositionFilter.TYPENAME = 'DevicePositionVO'; +DevicePositionFilter = __decorate([ + EntityClass({ typename: 'DevicePositionFilterVO' }) +], DevicePositionFilter); +export { DevicePositionFilter }; +//# sourceMappingURL=device-position.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/position/device/device-position.model.js.map b/out-tsc/app/app/data/position/device/device-position.model.js.map new file mode 100644 index 000000000..be4af26a4 --- /dev/null +++ b/out-tsc/app/app/data/position/device/device-position.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"device-position.model.js","sourceRoot":"","sources":["../../../../../../src/app/data/position/device/device-position.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/position/device/device-position.service.js b/out-tsc/app/app/data/position/device/device-position.service.js new file mode 100644 index 000000000..92ec3fa33 --- /dev/null +++ b/out-tsc/app/app/data/position/device/device-position.service.js @@ -0,0 +1,571 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { Inject, Injectable, Injector, Optional } from '@angular/core'; +import { AccountService, APP_LOGGING_SERVICE, BaseEntityService, capitalizeFirstLetter, ConfigService, CsvUtils, DateUtils, EntitiesStorage, EntityUtils, GraphqlService, isNil, isNotEmptyArray, isNotNil, JobUtils, JsonUtils, LocalSettingsService, PersonUtils, PlatformService, Referential, } from '@sumaris-net/ngx-components'; +import { BehaviorSubject, from, merge, Subscription, timer } from 'rxjs'; +import { DEVICE_POSITION_CONFIG_OPTION, DEVICE_POSITION_ENTITY_SERVICES } from '@app/data/position/device/device-position.config'; +import { environment } from '@environments/environment'; +import { DevicePosition, DevicePositionFilter } from '@app/data/position/device/device-position.model'; +import { PositionUtils } from '@app/data/position/position.utils'; +import { DataEntityUtils, MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE } from '@app/data/services/model/data-entity.model'; +import { gql } from '@apollo/client/core'; +import { distinctUntilChanged, throttleTime } from 'rxjs/operators'; +import { ModelEnumUtils, ObjectTypeLabels } from '@app/referential/services/model/model.enum'; +import { AlertController } from '@ionic/angular'; +import { TranslateService } from '@ngx-translate/core'; +import { v4 as uuid } from 'uuid'; +import { TRIP_LOCAL_SETTINGS_OPTIONS } from '@app/trip/trip.config'; +import { MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +import { DataCommonFragments } from '@app/trip/common/data.fragments'; +export const DevicePositionFragment = { + devicePosition: gql `fragment DevicePositionFragment on DevicePositionVO { + id + dateTime + latitude + longitude + objectId + objectType { + ...LightReferentialFragment + } + creationDate + updateDate + recorderPerson { + ...LightPersonFragment + } + }` +}; +const Queries = { + loadAll: gql `query DevicePosition($filter: DevicePositionFilterVOInput, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String) { + data: devicePositions(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection) { + ...DevicePositionFragment + } + } + ${DevicePositionFragment.devicePosition} + ${DataCommonFragments.lightPerson} + ${DataCommonFragments.referential}`, + loadAllWithTotal: gql `query DevicePosition($filter: DevicePositionFilterVOInput, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String) { + data: devicePositions(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection) { + ...DevicePositionFragment + } + total: devicePositionsCount(filter: $filter) + } + ${DevicePositionFragment.devicePosition} + ${DataCommonFragments.lightPerson} + ${DataCommonFragments.referential}`, +}; +const Mutations = { + save: gql `mutation saveDevicePosition($data:DevicePositionVOInput!){ + data: saveDevicePosition(devicePosition: $data){ + ...DevicePositionFragment + } + } + ${DevicePositionFragment.devicePosition} + ${DataCommonFragments.lightPerson} + ${DataCommonFragments.referential} + `, + saveAll: gql `mutation saveDevicePositions($data:[DevicePositionVOInput!]!){ + data: saveDevicePositions(devicePositions: $data){ + ...DevicePositionFragment + } + } + ${DevicePositionFragment.devicePosition} + ${DataCommonFragments.lightPerson} + ${DataCommonFragments.referential} + `, + deleteAll: gql `mutation deleteDevicePositions($ids:[Int!]!){ + deleteDevicePositions(ids: $ids) + }`, +}; +let DevicePositionService = class DevicePositionService extends BaseEntityService { + constructor(graphql, platform, injector, accountService, config, settings, entities, alertController, translate, listenedDataServices, loggingService) { + super(graphql, platform, DevicePosition, DevicePositionFilter, { + queries: Queries, + mutations: Mutations, + }); + this.injector = injector; + this.accountService = accountService; + this.config = config; + this.settings = settings; + this.entities = entities; + this.alertController = alertController; + this.translate = translate; + this.listenedDataServices = listenedDataServices; + this.lastPosition = new BehaviorSubject(null); + this.enableTracking = false; + this.trackingSubscription = new Subscription(); + this.trackingUpdatePositionFailed = new BehaviorSubject(false); + this._logPrefix = '[device-position] '; + this._logger = loggingService.getLogger('device-position'); + this._debug = !environment.production; + } + save(entity, opts) { + const _super = Object.create(null, { + save: { get: () => super.save } + }); + return __awaiter(this, void 0, void 0, function* () { + // Save locally if need + if (this.isLocal(entity)) { + return this.saveLocally(entity, opts); + } + return _super.save.call(this, entity, opts); + }); + } + deleteAll(entities, opts) { + const _super = Object.create(null, { + deleteAll: { get: () => super.deleteAll } + }); + return __awaiter(this, void 0, void 0, function* () { + const localEntities = entities.filter(e => this.isLocal(e)); + const remoteEntities = entities.filter(e => !this.isLocal(e)); + // Delete locally + if (isNotEmptyArray(localEntities)) { + const localIds = localEntities.map(d => d.id); + // Delete all by ids + yield this.entities.deleteMany(localIds, { entityName: DevicePosition.TYPENAME }); + } + if (isNotEmptyArray(remoteEntities)) { + return _super.deleteAll.call(this, remoteEntities, opts); + } + }); + } + downloadAsCsv(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + const now = this._debug && Date.now(); + const maxProgression = opts && opts.maxProgression || 100; + const data = yield this.downloadAll(filter, Object.assign(Object.assign({}, opts), { maxProgression: maxProgression * 0.9 })); + // Convert into CSV + const translations = this.translate.instant([ + 'COMMON.DATE_TIME_PATTERN', + 'DEVICE_POSITION.MAP.EXPORT_CSV_FILENAME', + 'DEVICE_POSITION.MAP.TABLE.DATE_TIME', + 'DEVICE_POSITION.MAP.TABLE.DATE_TIME', + 'DEVICE_POSITION.MAP.TABLE.LATITUDE', + 'DEVICE_POSITION.MAP.TABLE.LONGITUDE', + 'DEVICE_POSITION.MAP.TABLE.RECORDER_PERSON', + 'DEVICE_POSITION.MAP.TABLE.OBJECT_TYPE' + ]); + const dateTimePattern = translations['COMMON.DATE_TIME_PATTERN']; + const filename = translations['DEVICE_POSITION.MAP.EXPORT_CSV_FILENAME']; + const headers = [ + translations['DEVICE_POSITION.MAP.TABLE.DATE_TIME'], + translations['DEVICE_POSITION.MAP.TABLE.LATITUDE'], + translations['DEVICE_POSITION.MAP.TABLE.LONGITUDE'], + translations['DEVICE_POSITION.MAP.TABLE.RECORDER_PERSON'], + translations['DEVICE_POSITION.MAP.TABLE.OBJECT_TYPE'] + ]; + const rows = data.map(position => { + const objectTypeName = this.getObjectTypeName(position); + return [ + DateUtils.moment(position.dateTime).local().format(dateTimePattern), + position.latitude, + position.longitude, + PersonUtils.personToString(position.recorderPerson), + `${objectTypeName} #${position.objectId}` + ]; + }); + // Download as CSV + CsvUtils.exportToFile(rows, { filename, headers }); + opts === null || opts === void 0 ? void 0 : opts.progression.next(maxProgression); + console.info(`[device-position-service] Downloading ${data.length} rows, in ${Date.now() - now}ms`); + }); + } + downloadAsGeoJson(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + const now = this._debug && Date.now(); + const maxProgression = opts && opts.maxProgression || 100; + const data = yield this.downloadAll(filter, Object.assign(Object.assign({}, opts), { maxProgression: maxProgression * 0.9 })); + const geoJson = this.toGeoJson(data); + const filename = this.translate.instant('DEVICE_POSITION.MAP.EXPORT_GEOJSON_FILENAME'); + JsonUtils.exportToFile(geoJson, { + filename, + type: 'application/geo+json' // GeoJSON mime-type + }); + opts === null || opts === void 0 ? void 0 : opts.progression.next(maxProgression); + console.info(`[device-position-service] Downloading ${data.length} rows, in ${Date.now() - now}ms`); + }); + } + toGeoJson(data) { + const dateTimePattern = this.translate.instant('COMMON.DATE_TIME_PATTERN'); + // Convert into Geo Json features + const features = (data || []) + .map(position => this.toGeoJsonFeature(position, { dateTimePattern })) + .filter(isNotNil); + return { + type: 'FeatureCollection', + features: features + }; + } + /** + * Convert into Geo Json feature + * @param position + * @param opts + */ + toGeoJsonFeature(position, opts) { + var _a; + const dateTimePattern = (opts === null || opts === void 0 ? void 0 : opts.dateTimePattern) || this.translate.instant('COMMON.DATE_TIME_PATTERN'); + // Ignore invalid positions + if (position.latitude == null || position.longitude == null || position.dateTime == null) { + return null; + } + const personId = (_a = position.recorderPerson) === null || _a === void 0 ? void 0 : _a.id; + if (isNil(personId)) + return; + return { + id: position.id, + type: 'Feature', + geometry: { + type: 'Point', + coordinates: [position.longitude, position.latitude], + }, + properties: { + dateTime: DateUtils.moment(position.dateTime).local().format(dateTimePattern), + latitude: position.latitude, + longitude: position.longitude, + recorderPerson: PersonUtils.personToString(position.recorderPerson), + objectTypeName: this.getObjectTypeName(position), + objectId: position.objectId + } + }; + } + getObjectTypeName(position) { + var _a; + if (!position) + return ''; + const objectType = (_a = position.objectType) === null || _a === void 0 ? void 0 : _a.label; + if (objectType) { + switch (objectType) { + case ObjectTypeLabels.TRIP: + return this.translate.instant('TRIP.TITLE'); + case ObjectTypeLabels.OBSERVED_LOCATION: + return this.translate.instant('OBSERVED_LOCATION.TITLE'); + } + return objectType.split('_').map(capitalizeFirstLetter).join(' '); + } + } + /* -- protected functions -- */ + saveLocally(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.isLocal(entity)) + throw new Error('Must be a local entity'); + console.info(`${this._logPrefix} Saving current device position locally`, entity); + this.fillDefaultProperties(entity); + yield this.fillOfflineDefaultProperties(entity); + const jsonLocal = this.asObject(entity, Object.assign({}, MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE)); + if (this._debug) + console.debug(`${this._logPrefix} [offline] Saving device position locally...`, jsonLocal); + yield this.entities.save(jsonLocal, { entityName: DevicePosition.TYPENAME }); + return entity; + }); + } + asObject(entity, opts) { + opts = Object.assign(Object.assign({}, MINIFY_OPTIONS), opts); + return super.asObject(entity, opts); + } + asFilter(source) { + return DevicePositionFilter.fromObject(source); + } + ngOnStart() { + return __awaiter(this, void 0, void 0, function* () { + // Wait platform to be ready (e.g. on mobile, need Capacitor plugin) + yield this.platform.ready(); + console.info(`${this._logPrefix}Starting service...`); + this.registerSubscription(merge(from(this.settings.ready()), this.settings.onChange) + .subscribe(_ => this.onSettingsChanged())); + this.registerSubscription(this.config.config.subscribe((config) => this.onConfigChanged(config))); + }); + } + startTracking() { + var _a; + // Stop if already started + (_a = this.trackingSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + const enableOnSaveListeners = this.trackingSavePeriodMs > 0; + console.info(`${this._logPrefix}Starting tracking position...`); + const subscription = new Subscription(); + // Start the timer + subscription.add(timer(650, this.timerPeriodMs).subscribe((_) => this.updateLastPosition())); + if (enableOnSaveListeners) { + // Start to listen data services events + subscription.add(this.listenDataServices()); + // Force user to enable geolocation, if failed + const alertId = uuid(); + subscription.add(this.trackingUpdatePositionFailed + .pipe(distinctUntilChanged()) + .subscribe((failed) => __awaiter(this, void 0, void 0, function* () { + var _b; + yield this.platform.ready(); + if (failed) { + do { + console.warn(this._logPrefix + 'Geolocation not allowed. Opening a blocking modal'); + (_b = this._logger) === null || _b === void 0 ? void 0 : _b.warn('startTracking', 'Geolocation not allowed. Opening a blocking modal'); + const alert = yield this.alertController.create({ + id: alertId, + message: this.translate.instant('DEVICE_POSITION.ERROR.NEED_GEOLOCATION'), + buttons: [ + { role: 'refresh', text: this.translate.instant('COMMON.BTN_REFRESH') } + ] + }); + yield alert.present(); + const { role } = yield alert.onDidDismiss(); + if (role === 'retry') { + failed = !(yield this.updateLastPosition()); + } + else if (role === 'success') { + failed = false; + } + } while (failed); + } + // Success: hide the alert (if any) + else { + const alert = yield this.alertController.getTop(); + if ((alert === null || alert === void 0 ? void 0 : alert.id) === alertId) { + yield alert.dismiss(null, 'success'); + } + } + }))); + } + subscription.add(() => { + this.unregisterSubscription(subscription); + this.trackingSubscription = null; + }); + this.registerSubscription(subscription); + this.trackingSubscription = subscription; + return this.trackingSubscription; + } + stopTracking() { + var _a; + (_a = this.trackingSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + } + listenDataServices() { + const subscription = new Subscription(); + this.listenedDataServices.forEach(bean => { + const service = this.injector.get(bean); + subscription.add(service.onSave + .pipe(throttleTime(this.trackingSavePeriodMs)) + .subscribe((entities) => { + entities.forEach(e => this.onEntitySaved(e)); + })); + subscription.add(service.onDelete.subscribe(entities => { + entities.forEach(e => this.onEntityDeleted(e)); + })); + subscription.add(service.onSynchronize.subscribe(event => { + this.onEntitySynchronized(event); + })); + }); + return subscription; + } + onEntitySaved(entity) { + return __awaiter(this, void 0, void 0, function* () { + const lastPosition = this.lastPosition.value; + // If we're not watching position or if the delay between two device position + // saving is not reach we not save the position. + if (!this.enableTracking || !lastPosition) + return; + if (this._debug) + console.log(`${this._logPrefix} saveNewDevicePositionFromEntity`, entity); + const devicePosition = new DevicePosition(); + devicePosition.objectId = entity.id; + devicePosition.longitude = lastPosition.longitude; + devicePosition.latitude = lastPosition.latitude; + devicePosition.dateTime = lastPosition.dateTime; + const entityName = DataEntityUtils.getEntityName(entity); + devicePosition.objectType = Referential.fromObject({ + label: ModelEnumUtils.getObjectTypeByEntityName(entityName), + }); + yield this.save(devicePosition); + }); + } + onEntityDeleted(source) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const entityName = ModelEnumUtils.getObjectTypeByEntityName(DataEntityUtils.getEntityName(source)); + const filter = DevicePositionFilter.fromObject({ + objectId: source.id, + objectType: { label: entityName }, + }); + let entitiesToRemove; + if (EntityUtils.isLocal(source)) { + // Load positions locally + const { data } = (yield this.entities.loadAll(DevicePosition.TYPENAME, { + filter: filter.asFilterFn() + })); + entitiesToRemove = (data || []).map(DevicePosition.fromObject); + } + else { + // Load positions remotely + entitiesToRemove = (_a = (yield this.loadAll(0, 1000, null, null, filter, { + withTotal: false + }))) === null || _a === void 0 ? void 0 : _a.data; + } + // Nothing to do if the synchronized entity has no liked local device position + if (entitiesToRemove.length === 0) + return; + // Delete + yield this.deleteAll(entitiesToRemove); + }); + } + onEntitySynchronized(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this._debug) + console.debug(`${this._logPrefix} onEntitySynchronized`, event); + const localId = event.localId; + const remoteEntity = event.remoteEntity; + const entityName = ModelEnumUtils.getObjectTypeByEntityName(DataEntityUtils.getEntityName(remoteEntity)); + // Load local data + const { data } = yield this.entities.loadAll(DevicePosition.TYPENAME, { + filter: DevicePositionFilter.fromObject({ + objectId: localId, + objectType: Referential.fromObject({ label: entityName }), + }).asFilterFn() + }); + // Nothing to do if the synchronized entity has no liked local device position + if (data.length === 0) + return; + const localIds = data.map(d => d.id); + const entities = data.map(json => { + const entity = DevicePosition.fromObject(Object.assign(Object.assign({}, json), { objectId: remoteEntity.id })); + delete entity.id; + return entity; + }); + // Save + yield this.saveAll(entities); + // clean local + yield this.entities.deleteMany(localIds, { entityName: DevicePosition.TYPENAME }); + }); + } + fillDefaultProperties(entity) { + const isNew = isNil(entity.id); + if (isNew) { + const person = this.accountService.person; + // Recorder department + if (person && person.department && !entity.recorderDepartment) { + entity.recorderDepartment = person.department; + } + // Recorder person + if (person && person.id && !entity.recorderPerson) { + entity.recorderPerson = person; + } + } + } + fillOfflineDefaultProperties(entity) { + return __awaiter(this, void 0, void 0, function* () { + const isNew = isNil(entity.id); + // If new, generate a local id + if (isNew) { + entity.id = (yield this.entities.nextValue(entity)); + } + }); + } + onSettingsChanged() { + return __awaiter(this, void 0, void 0, function* () { + this.settingsPositionTimeoutMs = this.settings.getPropertyAsInt(TRIP_LOCAL_SETTINGS_OPTIONS.OPERATION_GEOLOCATION_TIMEOUT) * 1000; + }); + } + onConfigChanged(config) { + return __awaiter(this, void 0, void 0, function* () { + this.timerPeriodMs = config.getPropertyAsInt(DEVICE_POSITION_CONFIG_OPTION.TIMER_PERIOD); + // Tracking position + { + const enableTracking = this.settings.mobile && config.getPropertyAsBoolean(DEVICE_POSITION_CONFIG_OPTION.TRACKING_ENABLE); + this.trackingSavePeriodMs = config.getPropertyAsInt(DEVICE_POSITION_CONFIG_OPTION.TRACKING_SAVE_PERIOD); + if (enableTracking !== this.enableTracking) { + this.enableTracking = enableTracking; + if (this.enableTracking) + this.startTracking(); + else + this.stopTracking(); + } + } + }); + } + updateLastPosition(timeout) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + // Skip if already updating + if (this.updatingPosition) { + if (this._debug) + console.debug(`${this._logPrefix}Skip device position update (already running)`); + // DEBUG + //this._logger?.debug('updateLastPosition', 'Skip device position update (already running)'); + return true; + } + if (this._debug) + console.debug(`${this._logPrefix}Updating device position...`); + // DEBUG + //this._logger?.debug('updateLastPosition', 'Updating device location...'); + try { + this.updatingPosition = true; + timeout = timeout || (this.settingsPositionTimeoutMs ? Math.min(this.settingsPositionTimeoutMs, this.timerPeriodMs) : this.timerPeriodMs); + const position = yield PositionUtils.getCurrentPosition(this.platform, { + timeout, + maximumAge: timeout * 2 + }); + this.lastPosition.next({ + latitude: position.latitude, + longitude: position.longitude, + dateTime: DateUtils.moment(), + }); + if (this._debug) + console.debug(`${this._logPrefix}Last position updated`, this.lastPosition); + // Mark as position ok + if (this.enableTracking) { + this.trackingUpdatePositionFailed.next(false); + } + return true; + } + catch (e) { + // If required but failed (e.g. due to leak of geolocation permission) + if (this.enableTracking && isNotNil(e.code)) { + switch (+e.code) { + case GeolocationPositionError.PERMISSION_DENIED: + // DEBUG + //this._logger?.error('updateLastPosition', `Cannot get current position: PERMISSION_DENIED`); + this.trackingUpdatePositionFailed.next(true); + return false; + } + } + // Other errors case + (_a = this._logger) === null || _a === void 0 ? void 0 : _a.error('updateLastPosition', `Cannot get current position: ${(e === null || e === void 0 ? void 0 : e.message) || e}`); + throw e; + } + finally { + this.updatingPosition = false; + } + }); + } + isLocal(entity) { + return isNotNil(entity.id) ? EntityUtils.isLocalId(entity.id) : EntityUtils.isLocalId(entity.objectId); + } + downloadAll(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + const maxProgression = opts && opts.maxProgression || 100; + filter = this.asFilter(filter); + const { data } = yield JobUtils.fetchAllPages((offset, size) => this.loadAll(offset, size, 'dateTime', 'asc', filter, { + query: (offset === 0) ? Queries.loadAllWithTotal : Queries.loadAll, + fetchPolicy: 'no-cache', + toEntity: false + }), { + progression: opts === null || opts === void 0 ? void 0 : opts.progression, + maxProgression, + logPrefix: '[device-position-service]', + fetchSize: 1000 + }); + return data; + }); + } +}; +DevicePositionService = __decorate([ + Injectable(), + __param(9, Inject(DEVICE_POSITION_ENTITY_SERVICES)), + __param(10, Optional()), + __param(10, Inject(APP_LOGGING_SERVICE)), + __metadata("design:paramtypes", [GraphqlService, + PlatformService, + Injector, + AccountService, + ConfigService, + LocalSettingsService, + EntitiesStorage, + AlertController, + TranslateService, Array, Object]) +], DevicePositionService); +export { DevicePositionService }; +//# sourceMappingURL=device-position.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/position/device/device-position.service.js.map b/out-tsc/app/app/data/position/device/device-position.service.js.map new file mode 100644 index 000000000..fe78f1bef --- /dev/null +++ b/out-tsc/app/app/data/position/device/device-position.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"device-position.service.js","sourceRoot":"","sources":["../../../../../../src/app/data/position/device/device-position.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/position/position.model.js b/out-tsc/app/app/data/position/position.model.js new file mode 100644 index 000000000..728db0dff --- /dev/null +++ b/out-tsc/app/app/data/position/position.model.js @@ -0,0 +1,15 @@ +import { Entity, fromDateISOString, toDateISOString } from '@sumaris-net/ngx-components'; +export class PositionEntity extends Entity { + fromObject(source, opts) { + super.fromObject(source, opts); + this.latitude = source.latitude; + this.longitude = source.longitude; + this.dateTime = fromDateISOString(source.dateTime); + } + asObject(opts) { + const target = super.asObject(opts); + target.dateTime = toDateISOString(this.dateTime); + return target; + } +} +//# sourceMappingURL=position.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/position/position.model.js.map b/out-tsc/app/app/data/position/position.model.js.map new file mode 100644 index 000000000..e8846d91f --- /dev/null +++ b/out-tsc/app/app/data/position/position.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"position.model.js","sourceRoot":"","sources":["../../../../../src/app/data/position/position.model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAyB,iBAAiB,EAAsB,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAUpI,MAAM,OAAO,cACX,SAAQ,MAAS;IAMjB,UAAU,CAAC,MAAW,EAAE,IAAU;QAChC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAE/B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,QAAQ,CAAC,IAA4B;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"} \ No newline at end of file diff --git a/out-tsc/app/app/data/position/position.utils.js b/out-tsc/app/app/data/position/position.utils.js new file mode 100644 index 000000000..6e7bbc57d --- /dev/null +++ b/out-tsc/app/app/data/position/position.utils.js @@ -0,0 +1,15 @@ +import { GeolocationUtils } from '@sumaris-net/ngx-components'; +import { Geometries } from '@app/shared/geometries.utils'; +export class PositionUtils { + static createBBoxFilter(boundingBox) { + return (p) => PositionUtils.isInsideBBox(p, boundingBox); + } + static isInsideBBox(p, boundingBox) { + return p && Geometries.isPositionInsideBBox([p.longitude, p.latitude], boundingBox); + } +} +PositionUtils.isNotNilAndValid = GeolocationUtils.isNotNilAndValid; +PositionUtils.isNilOrInvalid = GeolocationUtils.isNilOrInvalid; +PositionUtils.computeDistanceInMiles = GeolocationUtils.computeDistanceInMiles; +PositionUtils.getCurrentPosition = GeolocationUtils.getCurrentPosition; +//# sourceMappingURL=position.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/position/position.utils.js.map b/out-tsc/app/app/data/position/position.utils.js.map new file mode 100644 index 000000000..05c295249 --- /dev/null +++ b/out-tsc/app/app/data/position/position.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"position.utils.js","sourceRoot":"","sources":["../../../../../src/app/data/position/position.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAa,MAAM,6BAA6B,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG1D,MAAM,OAAgB,aAAa;IAOjC,MAAM,CAAC,gBAAgB,CAAC,WAAiB;QACvC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,CAAY,EAAE,WAAiB;QACjD,OAAO,CAAC,IAAI,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC;IACtF,CAAC;;AAXM,8BAAgB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC;AACrD,4BAAc,GAAG,gBAAgB,CAAC,cAAc,CAAC;AACjD,oCAAsB,GAAG,gBAAgB,CAAC,sBAAsB,CAAC;AACjE,gCAAkB,GAAG,gBAAgB,CAAC,kBAAkB,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/data/position/position.validator.js b/out-tsc/app/app/data/position/position.validator.js new file mode 100644 index 000000000..f5d8e1014 --- /dev/null +++ b/out-tsc/app/app/data/position/position.validator.js @@ -0,0 +1,69 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { SharedValidators, toNumber } from '@sumaris-net/ngx-components'; +let PositionValidatorService = class PositionValidatorService { + constructor(formBuilder) { + this.formBuilder = formBuilder; + } + getFormGroup(data, opts) { + return this.formBuilder.group({ + __typename: [(data === null || data === void 0 ? void 0 : data.__typename) || opts.__typename], + id: [toNumber(data === null || data === void 0 ? void 0 : data.id, null)], + updateDate: [(data === null || data === void 0 ? void 0 : data.updateDate) || null], + dateTime: [(data === null || data === void 0 ? void 0 : data.dateTime) || null], + latitude: [toNumber(data === null || data === void 0 ? void 0 : data.latitude, null), this.getLatitudeValidator(opts)], + longitude: [toNumber(data === null || data === void 0 ? void 0 : data.longitude, null), this.getLongitudeValidator(opts)] + }); + } + updateFormGroup(form, opts) { + // Latitude + form.get('latitude').setValidators(this.getLatitudeValidator(opts)); + // Longitude + form.get('longitude').setValidators(this.getLongitudeValidator(opts)); + } + getLatitudeValidator(opts) { + let validators = []; + if (opts === null || opts === void 0 ? void 0 : opts.required) + validators = [Validators.required]; + if (opts === null || opts === void 0 ? void 0 : opts.boundingBox) { + validators = [ + ...validators, + Validators.min(Math.min(opts.boundingBox[1], opts.boundingBox[3])), + Validators.max(Math.max(opts.boundingBox[1], opts.boundingBox[3])) + ]; + } + else { + validators = [ + ...validators, + SharedValidators.latitude + ]; + } + return Validators.compose(validators); + } + getLongitudeValidator(opts) { + let validators = []; + if (opts === null || opts === void 0 ? void 0 : opts.required) + validators = [Validators.required]; + if (opts === null || opts === void 0 ? void 0 : opts.boundingBox) { + validators = [ + ...validators, + Validators.min(Math.min(opts.boundingBox[0], opts.boundingBox[2])), + Validators.max(Math.max(opts.boundingBox[0], opts.boundingBox[2])) + ]; + } + else { + validators = [ + ...validators, + SharedValidators.longitude + ]; + } + return Validators.compose(validators); + } +}; +PositionValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder]) +], PositionValidatorService); +export { PositionValidatorService }; +//# sourceMappingURL=position.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/position/position.validator.js.map b/out-tsc/app/app/data/position/position.validator.js.map new file mode 100644 index 000000000..3d5eb1a41 --- /dev/null +++ b/out-tsc/app/app/data/position/position.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"position.validator.js","sourceRoot":"","sources":["../../../../../src/app/data/position/position.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/position/vessel/vessel-position.model.js b/out-tsc/app/app/data/position/vessel/vessel-position.model.js new file mode 100644 index 000000000..80877dd4d --- /dev/null +++ b/out-tsc/app/app/data/position/vessel/vessel-position.model.js @@ -0,0 +1,45 @@ +var VesselPosition_1; +import { __decorate, __metadata } from "tslib"; +import { EntityClass, fromDateISOString, isNotNil, toDateISOString } from '@sumaris-net/ngx-components'; +import { DataEntity } from '@app/data/services/model/data-entity.model'; +let VesselPosition = VesselPosition_1 = class VesselPosition extends DataEntity { + constructor() { + super(); + this.__typename = VesselPosition_1.TYPENAME; + } + asObject(options) { + const target = super.asObject(options); + target.dateTime = toDateISOString(this.dateTime); + return target; + } + fromObject(source) { + super.fromObject(source); + this.latitude = source.latitude; + this.longitude = source.longitude; + this.operationId = source.operationId; + this.dateTime = fromDateISOString(source.dateTime); + return this; + } + equals(other) { + return (super.equals(other) && isNotNil(this.id)) + || (this.dateTime && this.dateTime.isSame(fromDateISOString(other.dateTime)) + && (!this.operationId && !other.operationId || this.operationId === other.operationId)); + } + isSamePoint(other) { + if (!other) + return false; + return (this.latitude === other.latitude) && (this.longitude === other.longitude); + } + copyPoint(source) { + if (!source) + return; + this.latitude = source.latitude; + this.longitude = source.longitude; + } +}; +VesselPosition = VesselPosition_1 = __decorate([ + EntityClass({ typename: 'VesselPositionVO' }), + __metadata("design:paramtypes", []) +], VesselPosition); +export { VesselPosition }; +//# sourceMappingURL=vessel-position.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/position/vessel/vessel-position.model.js.map b/out-tsc/app/app/data/position/vessel/vessel-position.model.js.map new file mode 100644 index 000000000..82d8bc270 --- /dev/null +++ b/out-tsc/app/app/data/position/vessel/vessel-position.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel-position.model.js","sourceRoot":"","sources":["../../../../../../src/app/data/position/vessel/vessel-position.model.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACxG,OAAO,EAAE,UAAU,EAA6B,MAAM,4CAA4C,CAAC;AAM5F,IAAM,cAAc,sBAApB,MAAM,cAAe,SAAQ,UAA0B;IAU5D;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,gBAAc,CAAC,QAAQ,CAAC;IAC5C,CAAC;IAED,QAAQ,CAAC,OAAmC;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,MAAW;QACpB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAqB;QAC1B,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;eAC5C,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;mBACvE,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,WAAW,CAAC,KAAqB;QAC/B,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;IACpF,CAAC;IAED,SAAS,CAAC,MAAsB;QAC9B,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACpC,CAAC;CACF,CAAA;AA9CY,cAAc;IAD1B,WAAW,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;;GACjC,cAAc,CA8C1B;SA9CY,cAAc"} \ No newline at end of file diff --git a/out-tsc/app/app/data/quality/entity-quality-form.component.js b/out-tsc/app/app/data/quality/entity-quality-form.component.js new file mode 100644 index 000000000..d6e64b882 --- /dev/null +++ b/out-tsc/app/app/data/quality/entity-quality-form.component.js @@ -0,0 +1,422 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, Optional, Output, } from '@angular/core'; +import { DataEntity, DataEntityUtils, MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE } from '../services/model/data-entity.model'; +// import fade in animation +import { AccountService, APP_USER_EVENT_SERVICE, ConfigService, EntityUtils, fadeInAnimation, isNil, isNotNil, LocalSettingsService, NetworkService, Toasts, toNumber, } from '@sumaris-net/ngx-components'; +import { isDataQualityService, isRootDataQualityService, } from '../services/data-quality-service.class'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { merge, Subscription } from 'rxjs'; +import { Router } from '@angular/router'; +import { ToastController } from '@ionic/angular'; +import { TranslateService } from '@ngx-translate/core'; +import { environment } from '@environments/environment'; +import { isDataSynchroService } from '../services/root-data-synchro-service.class'; +import { debounceTime } from 'rxjs/operators'; +import { UserEventService } from '@app/social/user-event/user-event.service'; +import { ProgressionModel } from '@app/shared/progression/progression.model'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { AppDataEntityEditor } from '@app/data/form/data-editor.class'; +import { APP_DATA_ENTITY_EDITOR } from '@app/data/form/data-editor.utils'; +let EntityQualityFormComponent = class EntityQualityFormComponent { + constructor(router, accountService, programRefService, referentialRefService, settings, toastController, translate, network, configService, cd, userEventService, editor) { + this.router = router; + this.accountService = accountService; + this.programRefService = programRefService; + this.referentialRefService = referentialRefService; + this.settings = settings; + this.toastController = toastController; + this.translate = translate; + this.network = network; + this.configService = configService; + this.cd = cd; + this.userEventService = userEventService; + this._subscription = new Subscription(); + this._progression = new ProgressionModel({ total: 100 }); + this.loading = true; + this.busy = false; + this.cancel = new EventEmitter(); + this.editor = editor; + this._mobile = settings.mobile; + // DEBUG + this._debug = !environment.production; + } + get serviceForRootEntity() { + // tslint:disable-next-line:no-unused-expression + return this.service; + } + get synchroService() { + // tslint:disable-next-line:no-unused-expression + return this.service; + } + ngOnInit() { + // Check editor exists + if (!this.editor) + throw new Error("Missing mandatory 'editor' input!"); + // Check data service exists + this.service = this.service || (isDataQualityService(this.editor.service) ? this.editor.service : null); + if (!this.service) + throw new Error("Missing mandatory 'service' input!"); + this._isRootDataQualityService = isRootDataQualityService(this.service); + this._isSynchroService = isDataSynchroService(this.service); + // Subscribe to update events + let updateViewEvents = merge(this.editor.onUpdateView, this.editor.dirtySubject, this.accountService.onLogin, this.network.onNetworkStatusChanges); + // Add a debounce time + if (this._mobile) + updateViewEvents = updateViewEvents.pipe(debounceTime(500)); + this._subscription.add(updateViewEvents.subscribe(() => this.updateView(this.editor.data))); + } + ngOnDestroy() { + this._subscription.unsubscribe(); + this.data = null; + this.qualityFlags = null; + this.editor = null; + this.service = null; + } + control(event, opts) { + return __awaiter(this, void 0, void 0, function* () { + opts = opts || {}; + const progressionSubscription = this.fillProgressionOptions(opts, 'QUALITY.INFO.CONTROL_DOTS'); + this.busy = true; + let valid = false; + try { + // Make sure to get valid and saved data + const data = yield this.editor.saveAndGetDataIfValid(); + // no data or invalid: skip + if (!data) + return false; + // Disable the editor (should be done AFTER save) + this.editor.disable(); + if (this._debug) + console.debug(`[entity-quality] Control ${data.constructor.name}...`); + let errors = yield this.service.control(data, opts); + valid = isNil(errors); + if (!valid) { + yield this.editor.updateView(data); + // Construct error with details + if (isNil(errors.details)) { + errors = { + message: errors.message || data.qualificationComments || 'COMMON.ERROR.HAS_ERROR', + details: { errors: errors }, + }; + } + else { + errors.message = errors.message || data.qualificationComments || 'COMMON.ERROR.HAS_ERROR'; + } + this.editor.setError(errors); + this.editor.markAllAsTouched(); + if (!opts || opts.emitEvent !== false) { + this.markForCheck(); + } + } + else { + // Clean previous error + this.editor.resetError(opts); + // Emit event (refresh component with the new data) + if (!opts || opts.emitEvent !== false) { + this.updateView(data); + } + else { + this.data = data; + } + } + } + finally { + this.editor.enable(opts); + this.busy = false; + this.markForCheck(); + progressionSubscription === null || progressionSubscription === void 0 ? void 0 : progressionSubscription.unsubscribe(); + } + return valid; + }); + } + terminate(event, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (this.busy) + return; + opts = opts || {}; + const progressionSubscription = this.fillProgressionOptions(opts, 'QUALITY.INFO.TERMINATE_DOTS'); + const endProgression = opts.progression.current + opts.maxProgression; + // Control data + const controlled = yield this.control(event, Object.assign(Object.assign({}, opts), { emitEvent: false, maxProgression: (opts === null || opts === void 0 ? void 0 : opts.maxProgression) * 0.9 })); + // Control failed + if (!controlled || (event === null || event === void 0 ? void 0 : event.defaultPrevented) || ((_a = opts.progression) === null || _a === void 0 ? void 0 : _a.cancelled)) { + progressionSubscription === null || progressionSubscription === void 0 ? void 0 : progressionSubscription.unsubscribe(); + // If mode was on field: force desk mode, to show errors + if (this.editor.isOnFieldMode) { + this.editor.usageMode = 'DESK'; + this.editor.markAllAsTouched(); + } + return false; + } + this.busy = true; + // Disable the editor + this.editor.disable(); + try { + console.debug('[entity-quality] Terminate entity input...'); + const data = yield this.serviceForRootEntity.terminate(this.editor.data); + if (opts === null || opts === void 0 ? void 0 : opts.progression) + opts.progression.current = endProgression; + // Emit event (refresh editor -> will refresh component also) + if (!opts || opts.emitEvent !== false) { + this.busy = false; + yield this.updateEditor(data); + } + else { + this.data = data; + } + return true; + } + finally { + this.editor.enable(opts); + this.busy = false; + this.markForCheck(); + progressionSubscription === null || progressionSubscription === void 0 ? void 0 : progressionSubscription.unsubscribe(); + } + }); + } + synchronize(event, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (this.busy) + return; + if (!EntityUtils.isLocal(this.data)) + throw new Error('Need a local trip'); + if (this.network.offline) { + this.network.showOfflineToast({ + showRetryButton: true, + onRetrySuccess: () => this.synchronize(), + }); + return; + } + const path = this.router.url; + opts = opts || {}; + const progressionSubscription = this.fillProgressionOptions(opts, 'QUALITY.INFO.SYNCHRONIZE_DOTS'); + const progressionStep = opts.maxProgression / 3; // 3 steps : control, synchronize, and terminate + // Control data + const controlled = yield this.control(event, Object.assign(Object.assign({}, opts), { emitEvent: false, maxProgression: progressionStep })); + if (!controlled || (event === null || event === void 0 ? void 0 : event.defaultPrevented) || ((_a = opts.progression) === null || _a === void 0 ? void 0 : _a.cancelled)) { + progressionSubscription === null || progressionSubscription === void 0 ? void 0 : progressionSubscription.unsubscribe(); + return false; + } + this.busy = true; + // Disable the editor + this.editor.disable(); + try { + console.debug('[entity-quality] Synchronizing entity...'); + const remoteData = yield this.synchroService.synchronize(this.editor.data); + opts.progression.increment(progressionStep); // Increment progression + // Success message + this.showToast({ message: 'INFO.SYNCHRONIZATION_SUCCEED', type: 'info', showCloseButton: true }); + // Remove the page from the history (because of local id) + yield this.settings.removePageHistory(path); + // Do a ONLINE terminate + console.debug('[entity-quality] Terminate entity...'); + const data = yield this.serviceForRootEntity.terminate(remoteData); + opts.progression.increment(progressionStep); // Increment progression + // Update the editor (Will refresh the component) + this.busy = false; + yield this.updateEditor(data, { updateRoute: true }); + } + catch (error) { + this.editor.setError(error); + const context = (error && error.context) || (() => this.data.asObject(MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE)); + this.userEventService.showToastErrorWithContext({ + error, + context, + }); + } + finally { + this.editor.enable(); + this.busy = false; + this.markForCheck(); + progressionSubscription === null || progressionSubscription === void 0 ? void 0 : progressionSubscription.unsubscribe(); + } + }); + } + validate(event, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (this.busy) + return; + opts = opts || {}; + const progressionSubscription = this.fillProgressionOptions(opts, 'QUALITY.INFO.VALIDATE_DOTS'); + // Control data + const controlled = yield this.control(event, Object.assign(Object.assign({}, opts), { emitEvent: false })); + if (!controlled || (event === null || event === void 0 ? void 0 : event.defaultPrevented) || ((_a = opts.progression) === null || _a === void 0 ? void 0 : _a.cancelled)) { + progressionSubscription === null || progressionSubscription === void 0 ? void 0 : progressionSubscription.unsubscribe(); + // If mode was on field: force desk mode, to show errors + if (this.editor.isOnFieldMode) { + this.editor.usageMode = 'DESK'; + this.editor.markAllAsTouched(); + } + return; + } + try { + this.busy = true; + if (!DataEntityUtils.isControlled(this.data)) { + console.debug('[entity-quality] Terminate entity input...'); + this.data = yield this.serviceForRootEntity.terminate(this.data); + } + console.debug('[entity-quality] Mark entity as validated...'); + const data = yield this.serviceForRootEntity.validate(this.data); + // Update the editor (Will refresh the component) + this.busy = false; + yield this.updateEditor(data); + } + catch (error) { + this.editor.setError(error); + const context = (error && error.context) || (() => this.data.asObject(MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE)); + this.userEventService.showToastErrorWithContext({ + error, + context, + }); + this.editor.enable(); + this.busy = false; + this.markForCheck(); + } + finally { + progressionSubscription === null || progressionSubscription === void 0 ? void 0 : progressionSubscription.unsubscribe(); + } + }); + } + unvalidate(event) { + return __awaiter(this, void 0, void 0, function* () { + const data = yield this.serviceForRootEntity.unvalidate(this.data); + yield this.updateEditor(data); + }); + } + qualify(event, qualityFlagId) { + return __awaiter(this, void 0, void 0, function* () { + const data = yield this.service.qualify(this.data, qualityFlagId); + yield this.updateEditor(data); + }); + } + /* -- protected method -- */ + updateView(data) { + var _a; + if (this.busy) + return; // Skip + data = data || this.data || ((_a = this.editor) === null || _a === void 0 ? void 0 : _a.data); + this.data = data; + this.loading = isNil(data) || isNil(data.id); + if (this.loading) { + this.canSynchronize = false; + this.canControl = false; + this.canTerminate = false; + this.canValidate = false; + this.canUnvalidate = false; + this.canQualify = false; + this.canUnqualify = false; + } + else if (data instanceof DataEntity) { + console.debug('[entity-quality] Updating view...'); + // If local, avoid to check too many properties (for performance in mobile devices) + const isLocalData = EntityUtils.isLocal(data); + const canWrite = isLocalData || this.editor.canUserWrite(data); + // Terminate and control + this.canControl = canWrite && ((isLocalData && data.synchronizationStatus === 'DIRTY') || isNil(data.controlDate) || this.editor.dirty); + this.canTerminate = this.canControl && this._isRootDataQualityService && (!isLocalData || data.synchronizationStatus === 'DIRTY'); + // Validation and qualification + if (this.programRefService.enableQualityProcess && !isLocalData) { + const isAdmin = this.accountService.isAdmin(); + const program = this.editor.program; + const isValidator = isAdmin || this.programRefService.canUserValidate(program); + const isQualifier = isAdmin || this.programRefService.canUserQualify(program); + this.canValidate = canWrite && isValidator && this._isRootDataQualityService && isNotNil(data.controlDate) && isNil(data.validationDate); + this.canUnvalidate = + !canWrite && isValidator && this._isRootDataQualityService && isNotNil(data.controlDate) && isNotNil(data.validationDate); + this.canQualify = !canWrite && isQualifier && isNotNil(data.validationDate) && isNil(data.qualificationDate); + this.canUnqualify = !canWrite && isQualifier && isNotNil(data.validationDate) && isNotNil(data.qualificationDate); + } + else { + this.canValidate = false; + this.canUnvalidate = false; + this.canQualify = false; + this.canUnqualify = false; + } + // Synchro service + this.canSynchronize = this._isSynchroService && canWrite && isLocalData && data.synchronizationStatus === 'READY_TO_SYNC'; + } + // Load available quality flags + if ((this.canQualify || this.canUnqualify) && !this.qualityFlags) { + this.referentialRefService.loadQualityFlags().then((items) => { + this.qualityFlags = items; + this.markForCheck(); + }); + } + else { + this.markForCheck(); + } + } + showToast(opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.toastController) + throw new Error("Missing toastController in component's constructor"); + return yield Toasts.show(this.toastController, this.translate, opts); + }); + } + updateEditor(data, opts) { + return __awaiter(this, void 0, void 0, function* () { + return this.editor.updateView(data, opts); + }); + } + markForCheck() { + this.cd.markForCheck(); + } + fillProgressionOptions(opts, defaultProgressionMessage) { + if (!opts) + throw new Error("Argument 'opts' is required"); + // Init max progression + opts.maxProgression = toNumber(opts.maxProgression, 100); + // Init progression model + if (!opts.progression) { + this._progression.reset(); + this._progression.message = defaultProgressionMessage; + opts.progression = this._progression; + // Reset progression, when finish + return new Subscription(() => { + this._progression.reset(); + }); + } + return undefined; + } +}; +__decorate([ + Input(), + __metadata("design:type", AppDataEntityEditor) +], EntityQualityFormComponent.prototype, "editor", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], EntityQualityFormComponent.prototype, "service", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], EntityQualityFormComponent.prototype, "cancel", void 0); +EntityQualityFormComponent = __decorate([ + Component({ + selector: 'app-entity-quality-form', + templateUrl: './entity-quality-form.component.html', + styleUrls: ['./entity-quality-form.component.scss'], + animations: [fadeInAnimation], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __param(10, Inject(APP_USER_EVENT_SERVICE)), + __param(11, Optional()), + __param(11, Inject(APP_DATA_ENTITY_EDITOR)), + __metadata("design:paramtypes", [Router, + AccountService, + ProgramRefService, + ReferentialRefService, + LocalSettingsService, + ToastController, + TranslateService, + NetworkService, + ConfigService, + ChangeDetectorRef, + UserEventService, + AppDataEntityEditor]) +], EntityQualityFormComponent); +export { EntityQualityFormComponent }; +//# sourceMappingURL=entity-quality-form.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/quality/entity-quality-form.component.js.map b/out-tsc/app/app/data/quality/entity-quality-form.component.js.map new file mode 100644 index 000000000..ba2caa37d --- /dev/null +++ b/out-tsc/app/app/data/quality/entity-quality-form.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"entity-quality-form.component.js","sourceRoot":"","sources":["../../../../../src/app/data/quality/entity-quality-form.component.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,SAAS,EACT,YAAY,EACZ,MAAM,EACN,KAAK,EAGL,QAAQ,EACR,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,oCAAoC,EAAE,MAAM,qCAAqC,CAAC;AACxH,2BAA2B;AAC3B,OAAO,EACL,cAAc,EACd,sBAAsB,EAEtB,aAAa,EACb,WAAW,EACX,eAAe,EAGf,KAAK,EACL,QAAQ,EACR,oBAAoB,EACpB,cAAc,EAGd,MAAM,EACN,QAAQ,GACT,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAIL,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,OAAO,EAAE,oBAAoB,EAA0B,MAAM,6CAA6C,CAAC;AAC3G,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AASnE,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IA2CrC,YACY,MAAc,EACd,cAA8B,EAC9B,iBAAoC,EACpC,qBAA4C,EAC5C,QAA8B,EAC9B,eAAgC,EAChC,SAA2B,EAC9B,OAAuB,EACpB,aAA4B,EAC5B,EAAqB,EACW,gBAAkC,EAChC,MAAqC;QAXvE,WAAM,GAAN,MAAM,CAAQ;QACd,mBAAc,GAAd,cAAc,CAAgB;QAC9B,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,oBAAe,GAAf,eAAe,CAAiB;QAChC,cAAS,GAAT,SAAS,CAAkB;QAC9B,YAAO,GAAP,OAAO,CAAgB;QACpB,kBAAa,GAAb,aAAa,CAAe;QAC5B,OAAE,GAAF,EAAE,CAAmB;QACW,qBAAgB,GAAhB,gBAAgB,CAAkB;QAhDtE,kBAAa,GAAG,IAAI,YAAY,EAAE,CAAC;QAMxB,iBAAY,GAAG,IAAI,gBAAgB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAG7D,YAAO,GAAG,IAAI,CAAC;QAQf,SAAI,GAAG,KAAK,CAAC;QAQb,WAAM,GAAG,IAAI,YAAY,EAAW,CAAC;QA0B7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;QAE/B,QAAQ;QACR,IAAI,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;IACxC,CAAC;IA7BD,IAAc,oBAAoB;QAChC,gDAAgD;QAChD,OAAO,IAAI,CAAC,OAA+C,CAAC;IAC9D,CAAC;IAED,IAAc,cAAc;QAC1B,gDAAgD;QAChD,OAAO,IAAI,CAAC,OAA6C,CAAC;IAC5D,CAAC;IAuBD,QAAQ;QACN,sBAAsB;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAEvE,4BAA4B;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxG,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACzE,IAAI,CAAC,yBAAyB,GAAG,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxE,IAAI,CAAC,iBAAiB,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5D,6BAA6B;QAC7B,IAAI,gBAAgB,GAAG,KAAK,CAC1B,IAAI,CAAC,MAAM,CAAC,YAAY,EACxB,IAAI,CAAC,MAAM,CAAC,YAAY,EACxB,IAAI,CAAC,cAAc,CAAC,OAAO,EAC3B,IAAI,CAAC,OAAO,CAAC,sBAAsB,CACpC,CAAC;QAEF,sBAAsB;QACtB,IAAI,IAAI,CAAC,OAAO;YAAE,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QAE9E,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,WAAW;QACT,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAEK,OAAO,CAAC,KAAa,EAAE,IAAoD;;YAC/E,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAClB,MAAM,uBAAuB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAC;YAE/F,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,KAAK,GAAG,KAAK,CAAC;YAElB,IAAI;gBACF,wCAAwC;gBACxC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;gBAEvD,2BAA2B;gBAC3B,IAAI,CAAC,IAAI;oBAAE,OAAO,KAAK,CAAC;gBAExB,iDAAiD;gBACjD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAEtB,IAAI,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,KAAK,CAAC,4BAA4B,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,CAAC;gBACvF,IAAI,MAAM,GAAqC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACtF,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;gBAEtB,IAAI,CAAC,KAAK,EAAE;oBACV,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAEnC,+BAA+B;oBAC/B,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;wBACzB,MAAM,GAAwB;4BAC5B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,qBAAqB,IAAI,wBAAwB;4BACjF,OAAO,EAAE,EAAE,MAAM,EAAE,MAAoB,EAAE;yBAC1C,CAAC;qBACH;yBAAM;wBACL,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,qBAAqB,IAAI,wBAAwB,CAAC;qBAC3F;oBAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAA6B,CAAC,CAAC;oBACpD,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;oBAC/B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;wBACrC,IAAI,CAAC,YAAY,EAAE,CAAC;qBACrB;iBACF;qBAAM;oBACL,uBAAuB;oBACvB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAE7B,mDAAmD;oBACnD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;wBACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;qBACvB;yBAAM;wBACL,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;qBAClB;iBACF;aACF;oBAAS;gBACR,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACzB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,uBAAuB,aAAvB,uBAAuB,uBAAvB,uBAAuB,CAAE,WAAW,EAAE,CAAC;aACxC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;KAAA;IAEK,SAAS,CAAC,KAAa,EAAE,IAAoD;;;YACjF,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO;YAEtB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAClB,MAAM,uBAAuB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC;YACjG,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC;YAEtE,eAAe;YACf,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,kCAAO,IAAI,KAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,IAAG,GAAG,IAAG,CAAC;YAExH,iBAAiB;YACjB,IAAI,CAAC,UAAU,KAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,gBAAgB,CAAA,KAAI,MAAA,IAAI,CAAC,WAAW,0CAAE,SAAS,CAAA,EAAE;gBACzE,uBAAuB,aAAvB,uBAAuB,uBAAvB,uBAAuB,CAAE,WAAW,EAAE,CAAC;gBAEvC,wDAAwD;gBACxD,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;oBAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;oBAC/B,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;iBAChC;gBACD,OAAO,KAAK,CAAC;aACd;YAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,qBAAqB;YACrB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAEtB,IAAI;gBACF,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;gBAC5D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAEzE,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW;oBAAE,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,cAAc,CAAC;gBAEjE,6DAA6D;gBAC7D,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;oBACrC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;oBAClB,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;iBAC/B;qBAAM;oBACL,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;iBAClB;gBACD,OAAO,IAAI,CAAC;aACb;oBAAS;gBACR,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACzB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,uBAAuB,aAAvB,uBAAuB,uBAAvB,uBAAuB,CAAE,WAAW,EAAE,CAAC;aACxC;;KACF;IAEK,WAAW,CAAC,KAAa,EAAE,IAA0B;;;YACzD,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO;YAEtB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAE1E,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;gBACxB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;oBAC5B,eAAe,EAAE,IAAI;oBACrB,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE;iBACzC,CAAC,CAAC;gBACH,OAAO;aACR;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAE7B,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAClB,MAAM,uBAAuB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;YACnG,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,gDAAgD;YAEjG,eAAe;YACf,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,kCACtC,IAAI,KACP,SAAS,EAAE,KAAK,EAChB,cAAc,EAAE,eAAe,IAC/B,CAAC;YACH,IAAI,CAAC,UAAU,KAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,gBAAgB,CAAA,KAAI,MAAA,IAAI,CAAC,WAAW,0CAAE,SAAS,CAAA,EAAE;gBACzE,uBAAuB,aAAvB,uBAAuB,uBAAvB,uBAAuB,CAAE,WAAW,EAAE,CAAC;gBACvC,OAAO,KAAK,CAAC;aACd;YAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,qBAAqB;YACrB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAEtB,IAAI;gBACF,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBAC1D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAE3E,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,wBAAwB;gBAErE,kBAAkB;gBAClB,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,8BAA8B,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;gBAEjG,yDAAyD;gBACzD,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAE5C,wBAAwB;gBACxB,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;gBACtD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBAEnE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,wBAAwB;gBAErE,iDAAiD;gBACjD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;aACtD;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC5B,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC,CAAC;gBAC7G,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC;oBAC9C,KAAK;oBACL,OAAO;iBACR,CAAC,CAAC;aACJ;oBAAS;gBACR,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACrB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,IAAI,CAAC,YAAY,EAAE,CAAC;gBAEpB,uBAAuB,aAAvB,uBAAuB,uBAAvB,uBAAuB,CAAE,WAAW,EAAE,CAAC;aACxC;;KACF;IAEK,QAAQ,CAAC,KAAY,EAAE,IAA0B;;;YACrD,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO;YAEtB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAClB,MAAM,uBAAuB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC;YAEhG,eAAe;YACf,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,kCACtC,IAAI,KACP,SAAS,EAAE,KAAK,IAChB,CAAC;YAEH,IAAI,CAAC,UAAU,KAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,gBAAgB,CAAA,KAAI,MAAA,IAAI,CAAC,WAAW,0CAAE,SAAS,CAAA,EAAE;gBACzE,uBAAuB,aAAvB,uBAAuB,uBAAvB,uBAAuB,CAAE,WAAW,EAAE,CAAC;gBAEvC,wDAAwD;gBACxD,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;oBAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;oBAC/B,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;iBAChC;gBACD,OAAO;aACR;YAED,IAAI;gBACF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBAEjB,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC5C,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;oBAC5D,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAClE;gBAED,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBAC9D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEjE,iDAAiD;gBACjD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;aAC/B;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC5B,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC,CAAC;gBAC7G,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC;oBAC9C,KAAK;oBACL,OAAO;iBACR,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACrB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;oBAAS;gBACR,uBAAuB,aAAvB,uBAAuB,uBAAvB,uBAAuB,CAAE,WAAW,EAAE,CAAC;aACxC;;KACF;IAEK,UAAU,CAAC,KAAY;;YAC3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnE,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;KAAA;IAEK,OAAO,CAAC,KAAY,EAAE,aAAqB;;YAC/C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAClE,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;KAAA;IAED,4BAA4B;IAElB,UAAU,CAAC,IAAQ;;QAC3B,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,OAAO;QAE9B,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,KAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAA,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE7C,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;SAC3B;aAAM,IAAI,IAAI,YAAY,UAAU,EAAE;YACrC,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACnD,mFAAmF;YACnF,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAE/D,wBAAwB;YACxB,IAAI,CAAC,UAAU,GAAG,QAAQ,IAAI,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,qBAAqB,KAAK,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,yBAAyB,IAAI,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,qBAAqB,KAAK,OAAO,CAAC,CAAC;YAElI,+BAA+B;YAC/B,IAAI,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,IAAI,CAAC,WAAW,EAAE;gBAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;gBAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;gBACpC,MAAM,WAAW,GAAG,OAAO,IAAI,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;gBAC/E,MAAM,WAAW,GAAG,OAAO,IAAI,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;gBAC9E,IAAI,CAAC,WAAW,GAAG,QAAQ,IAAI,WAAW,IAAI,IAAI,CAAC,yBAAyB,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACzI,IAAI,CAAC,aAAa;oBAChB,CAAC,QAAQ,IAAI,WAAW,IAAI,IAAI,CAAC,yBAAyB,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC5H,IAAI,CAAC,UAAU,GAAG,CAAC,QAAQ,IAAI,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC7G,IAAI,CAAC,YAAY,GAAG,CAAC,QAAQ,IAAI,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;aACnH;iBAAM;gBACL,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;gBACzB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;gBAC3B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;aAC3B;YAED,kBAAkB;YAClB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,IAAI,QAAQ,IAAI,WAAW,IAAI,IAAI,CAAC,qBAAqB,KAAK,eAAe,CAAC;SAC3H;QAED,+BAA+B;QAC/B,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAChE,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC3D,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;IACH,CAAC;IAEe,SAAS,CAAU,IAAsB;;YACvD,IAAI,CAAC,IAAI,CAAC,eAAe;gBAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACjG,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACvE,CAAC;KAAA;IAEe,YAAY,CAC1B,IAAO,EACP,IAIC;;YAED,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC;KAAA;IAES,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;IAES,sBAAsB,CAAC,IAAyB,EAAE,yBAAiC;QAC3F,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAE1D,uBAAuB;QACvB,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QAEzD,yBAAyB;QACzB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,yBAAyB,CAAC;YACtD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;YAErC,iCAAiC;YACjC,OAAO,IAAI,YAAY,CAAC,GAAG,EAAE;gBAC3B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;SACJ;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAA;AA3ZC;IAAC,KAAK,EAAE;8BAAS,mBAAmB;0DAAW;AAE/C;IAAC,KAAK,EAAE;;2DAA2C;AAEnD;IAAC,MAAM,EAAE;;0DAAsC;AA/BpC,0BAA0B;IAPtC,SAAS,CAAC;QACT,QAAQ,EAAE,yBAAyB;QACnC,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,CAAC,sCAAsC,CAAC;QACnD,UAAU,EAAE,CAAC,eAAe,CAAC;QAC7B,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;IAuDG,YAAA,MAAM,CAAC,sBAAsB,CAAC,CAAA;IAC9B,YAAA,QAAQ,EAAE,CAAA;IAAE,YAAA,MAAM,CAAC,sBAAsB,CAAC,CAAA;qCAXzB,MAAM;QACE,cAAc;QACX,iBAAiB;QACb,qBAAqB;QAClC,oBAAoB;QACb,eAAe;QACrB,gBAAgB;QACrB,cAAc;QACL,aAAa;QACxB,iBAAiB;QAC6B,gBAAgB;QACxB,mBAAmB;GAvD9D,0BAA0B,CAsbtC;SAtbY,0BAA0B"} \ No newline at end of file diff --git a/out-tsc/app/app/data/quality/entity-quality-icon.component.js b/out-tsc/app/app/data/quality/entity-quality-icon.component.js new file mode 100644 index 000000000..1369a9d67 --- /dev/null +++ b/out-tsc/app/app/data/quality/entity-quality-icon.component.js @@ -0,0 +1,80 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core'; +import { EntityUtils } from '@sumaris-net/ngx-components'; +import { qualityFlagToColor } from '@app/data/services/model/model.utils'; +let EntityQualityIconComponent = class EntityQualityIconComponent { + constructor(cd) { + this.cd = cd; + } + set value(value) { + this.setValue(value); + } + get value() { + return this._value; + } + setValue(value) { + this._value = value; + // DEBUG + //console.debug('icon: TODO Computing icon for', value); + // Local data + if (EntityUtils.isLocal(value)) { + switch (value['synchronizationStatus']) { + case 'READY_TO_SYNC': + this.icon = 'time-outline'; + this.title = 'QUALITY.READY_TO_SYNC'; + this.color = 'danger'; + break; + case 'SYNC': + this.icon = 'checkmark-circle'; + this.title = 'QUALITY.VALIDATED'; + this.color = 'danger'; + break; + case 'DIRTY': + default: + this.icon = 'pencil'; + this.title = 'QUALITY.MODIFIED_OFFLINE'; + this.color = 'danger'; + break; + } + } + // Remote data + else { + if (!value.controlDate) { + this.icon = 'pencil'; + this.title = 'QUALITY.MODIFIED'; + this.color = 'secondary'; + } + else if (!value['validationDate']) { + this.icon = 'checkmark'; + this.title = 'QUALITY.CONTROLLED'; + this.color = 'tertiary'; + } + else if (!value.qualificationDate) { + this.icon = 'checkmark-circle'; + this.title = 'QUALITY.VALIDATED'; + this.color = 'tertiary'; + } + else { + this.icon = 'flag'; + this.title = 'QUALITY.QUALIFIED'; + this.color = qualityFlagToColor(value.qualityFlagId); + } + } + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], EntityQualityIconComponent.prototype, "value", null); +EntityQualityIconComponent = __decorate([ + Component({ + selector: 'app-entity-quality-icon', + template: '
', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [ChangeDetectorRef]) +], EntityQualityIconComponent); +export { EntityQualityIconComponent }; +//# sourceMappingURL=entity-quality-icon.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/quality/entity-quality-icon.component.js.map b/out-tsc/app/app/data/quality/entity-quality-icon.component.js.map new file mode 100644 index 000000000..b723c55e7 --- /dev/null +++ b/out-tsc/app/app/data/quality/entity-quality-icon.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"entity-quality-icon.component.js","sourceRoot":"","sources":["../../../../../src/app/data/quality/entity-quality-icon.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE7F,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAkB,MAAM,sCAAsC,CAAC;AAUnF,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IAgBrC,YAAoB,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;IACzC,CAAC;IAXD,IAAa,KAAK,CAAC,KAAoC;QACrD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAOD,QAAQ,CAAC,KAAoC;QAC3C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,QAAQ;QACR,wDAAwD;QAExD,aAAa;QACb,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC9B,QAAQ,KAAK,CAAC,uBAAuB,CAAC,EAAE;gBACtC,KAAK,eAAe;oBAClB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;oBAC3B,IAAI,CAAC,KAAK,GAAG,uBAAuB,CAAC;oBACrC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;oBACtB,MAAM;gBACR,KAAK,MAAM;oBACT,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;oBAC/B,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC;oBACjC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;oBACtB,MAAM;gBACR,KAAK,OAAO,CAAC;gBACb;oBACE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;oBACrB,IAAI,CAAC,KAAK,GAAG,0BAA0B,CAAC;oBACxC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;oBACtB,MAAM;aACT;SACF;QACD,cAAc;aACT;YACH,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBACtB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;gBACrB,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAC;gBAChC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;aAC1B;iBAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE;gBACnC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;gBACxB,IAAI,CAAC,KAAK,GAAG,oBAAoB,CAAC;gBAClC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;aACzB;iBAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;gBACnC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;gBAC/B,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC;gBACjC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;aACzB;iBAAM;gBACL,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;gBACnB,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC;gBACjC,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;aACtD;SACF;QACD,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;CACF,CAAA;AA9DC;IAAC,KAAK,EAAE;;;uDAEP;AARU,0BAA0B;IALtC,SAAS,CAAC;QACT,QAAQ,EAAE,yBAAyB;QACnC,QAAQ,EAAE,yIAAyI;QACnJ,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAiBwB,iBAAiB;GAhB9B,0BAA0B,CAoEtC;SApEY,0BAA0B"} \ No newline at end of file diff --git a/out-tsc/app/app/data/quality/entity-quality.module.js b/out-tsc/app/app/data/quality/entity-quality.module.js new file mode 100644 index 000000000..d8aeb1f5f --- /dev/null +++ b/out-tsc/app/app/data/quality/entity-quality.module.js @@ -0,0 +1,42 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { EntityQualityFormComponent } from '@app/data/quality/entity-quality-form.component'; +import { EntityQualityIconComponent } from '@app/data/quality/entity-quality-icon.component'; +import { AppSharedModule } from '@app/shared/shared.module'; +import { AppSharedProgressionModule } from '@app/shared/progression/progression.module'; +import { QualityFlagToColorPipe } from '@app/data/quality/quality-flag-to-color.pipe'; +import { QualityFlagToIconPipe } from '@app/data/quality/quality-flag-to-icon.pipe'; +import { QualityFlagInvalidPipe } from '@app/data/quality/quality-flag-invalid.pipe'; +import { QualityFlagValidPipePipe } from '@app/data/quality/quality-flag-not-invalid.pipe'; +import { QualityFlagToI18nPipe } from '@app/data/quality/quality-flag-to-i18n.pipe'; +let AppEntityQualityModule = class AppEntityQualityModule { +}; +AppEntityQualityModule = __decorate([ + NgModule({ + imports: [AppSharedModule, AppSharedProgressionModule], + declarations: [ + // Pipes + QualityFlagToColorPipe, + QualityFlagToIconPipe, + QualityFlagToI18nPipe, + QualityFlagInvalidPipe, + QualityFlagValidPipePipe, + // Components + EntityQualityFormComponent, + EntityQualityIconComponent, + ], + exports: [ + // Pipes + QualityFlagToColorPipe, + QualityFlagToIconPipe, + QualityFlagToI18nPipe, + QualityFlagInvalidPipe, + QualityFlagValidPipePipe, + // Components + EntityQualityFormComponent, + EntityQualityIconComponent, + ], + }) +], AppEntityQualityModule); +export { AppEntityQualityModule }; +//# sourceMappingURL=entity-quality.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/quality/entity-quality.module.js.map b/out-tsc/app/app/data/quality/entity-quality.module.js.map new file mode 100644 index 000000000..a0bfcfcd9 --- /dev/null +++ b/out-tsc/app/app/data/quality/entity-quality.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"entity-quality.module.js","sourceRoot":"","sources":["../../../../../src/app/data/quality/entity-quality.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAC;AAC7F,OAAO,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AACxF,OAAO,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AA6B7E,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;CAAG,CAAA;AAAzB,sBAAsB;IA3BlC,QAAQ,CAAC;QACR,OAAO,EAAE,CAAC,eAAe,EAAE,0BAA0B,CAAC;QACtD,YAAY,EAAE;YACZ,QAAQ;YACR,sBAAsB;YACtB,qBAAqB;YACrB,qBAAqB;YACrB,sBAAsB;YACtB,wBAAwB;YAExB,aAAa;YACb,0BAA0B;YAC1B,0BAA0B;SAC3B;QACD,OAAO,EAAE;YACP,QAAQ;YACR,sBAAsB;YACtB,qBAAqB;YACrB,qBAAqB;YACrB,sBAAsB;YACtB,wBAAwB;YAExB,aAAa;YACb,0BAA0B;YAC1B,0BAA0B;SAC3B;KACF,CAAC;GACW,sBAAsB,CAAG;SAAzB,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/quality/quality-flag-invalid.pipe.js b/out-tsc/app/app/data/quality/quality-flag-invalid.pipe.js new file mode 100644 index 000000000..f2c2f6f87 --- /dev/null +++ b/out-tsc/app/app/data/quality/quality-flag-invalid.pipe.js @@ -0,0 +1,15 @@ +import { __decorate } from "tslib"; +import { Pipe } from '@angular/core'; +import { qualityFlagInvalid } from '../services/model/model.utils'; +let QualityFlagInvalidPipe = class QualityFlagInvalidPipe { + transform(qualityFlagId) { + return qualityFlagInvalid(qualityFlagId); + } +}; +QualityFlagInvalidPipe = __decorate([ + Pipe({ + name: 'qualityFlagInvalid' + }) +], QualityFlagInvalidPipe); +export { QualityFlagInvalidPipe }; +//# sourceMappingURL=quality-flag-invalid.pipe.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/quality/quality-flag-invalid.pipe.js.map b/out-tsc/app/app/data/quality/quality-flag-invalid.pipe.js.map new file mode 100644 index 000000000..df030e27c --- /dev/null +++ b/out-tsc/app/app/data/quality/quality-flag-invalid.pipe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"quality-flag-invalid.pipe.js","sourceRoot":"","sources":["../../../../../src/app/data/quality/quality-flag-invalid.pipe.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAgB,MAAM,eAAe,CAAC;AAClD,OAAO,EAAC,kBAAkB,EAAC,MAAM,+BAA+B,CAAC;AAK1D,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAEjC,SAAS,CAAC,aAAqB;QAC7B,OAAO,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;CACF,CAAA;AALY,sBAAsB;IAHlC,IAAI,CAAC;QACJ,IAAI,EAAE,oBAAoB;KAC3B,CAAC;GACW,sBAAsB,CAKlC;SALY,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/quality/quality-flag-not-invalid.pipe.js b/out-tsc/app/app/data/quality/quality-flag-not-invalid.pipe.js new file mode 100644 index 000000000..c50860435 --- /dev/null +++ b/out-tsc/app/app/data/quality/quality-flag-not-invalid.pipe.js @@ -0,0 +1,15 @@ +import { __decorate } from "tslib"; +import { Pipe } from '@angular/core'; +import { qualityFlagInvalid } from '../services/model/model.utils'; +let QualityFlagValidPipePipe = class QualityFlagValidPipePipe { + transform(qualityFlagId) { + return !qualityFlagInvalid(qualityFlagId); + } +}; +QualityFlagValidPipePipe = __decorate([ + Pipe({ + name: 'qualityFlagValid' + }) +], QualityFlagValidPipePipe); +export { QualityFlagValidPipePipe }; +//# sourceMappingURL=quality-flag-not-invalid.pipe.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/quality/quality-flag-not-invalid.pipe.js.map b/out-tsc/app/app/data/quality/quality-flag-not-invalid.pipe.js.map new file mode 100644 index 000000000..380fd9213 --- /dev/null +++ b/out-tsc/app/app/data/quality/quality-flag-not-invalid.pipe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"quality-flag-not-invalid.pipe.js","sourceRoot":"","sources":["../../../../../src/app/data/quality/quality-flag-not-invalid.pipe.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAgB,MAAM,eAAe,CAAC;AAClD,OAAO,EAAC,kBAAkB,EAAC,MAAM,+BAA+B,CAAC;AAK1D,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAEnC,SAAS,CAAC,aAAqB;QAC7B,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAC5C,CAAC;CACF,CAAA;AALY,wBAAwB;IAHpC,IAAI,CAAC;QACJ,IAAI,EAAE,kBAAkB;KACzB,CAAC;GACW,wBAAwB,CAKpC;SALY,wBAAwB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/quality/quality-flag-to-color.pipe.js b/out-tsc/app/app/data/quality/quality-flag-to-color.pipe.js new file mode 100644 index 000000000..51fecbd8e --- /dev/null +++ b/out-tsc/app/app/data/quality/quality-flag-to-color.pipe.js @@ -0,0 +1,15 @@ +import { __decorate } from "tslib"; +import { Pipe } from '@angular/core'; +import { qualityFlagToColor } from '../services/model/model.utils'; +let QualityFlagToColorPipe = class QualityFlagToColorPipe { + transform(qualityFlagId) { + return qualityFlagToColor(qualityFlagId); + } +}; +QualityFlagToColorPipe = __decorate([ + Pipe({ + name: 'qualityFlagToColor' + }) +], QualityFlagToColorPipe); +export { QualityFlagToColorPipe }; +//# sourceMappingURL=quality-flag-to-color.pipe.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/quality/quality-flag-to-color.pipe.js.map b/out-tsc/app/app/data/quality/quality-flag-to-color.pipe.js.map new file mode 100644 index 000000000..b323539cf --- /dev/null +++ b/out-tsc/app/app/data/quality/quality-flag-to-color.pipe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"quality-flag-to-color.pipe.js","sourceRoot":"","sources":["../../../../../src/app/data/quality/quality-flag-to-color.pipe.ts"],"names":[],"mappings":";AAAA,OAAO,EAAa,IAAI,EAAgB,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAC,kBAAkB,EAAC,MAAM,+BAA+B,CAAC;AAK1D,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAEjC,SAAS,CAAC,aAAqB;QAC7B,OAAO,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;CACF,CAAA;AALY,sBAAsB;IAHlC,IAAI,CAAC;QACJ,IAAI,EAAE,oBAAoB;KAC3B,CAAC;GACW,sBAAsB,CAKlC;SALY,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/quality/quality-flag-to-i18n.pipe.js b/out-tsc/app/app/data/quality/quality-flag-to-i18n.pipe.js new file mode 100644 index 000000000..2a91b5592 --- /dev/null +++ b/out-tsc/app/app/data/quality/quality-flag-to-i18n.pipe.js @@ -0,0 +1,15 @@ +import { __decorate } from "tslib"; +import { Pipe } from '@angular/core'; +import { translateQualityFlag } from '@app/data/services/model/model.utils'; +let QualityFlagToI18nPipe = class QualityFlagToI18nPipe { + constructor() { + this.transform = translateQualityFlag; + } +}; +QualityFlagToI18nPipe = __decorate([ + Pipe({ + name: 'qualityFlagToI18n', + }) +], QualityFlagToI18nPipe); +export { QualityFlagToI18nPipe }; +//# sourceMappingURL=quality-flag-to-i18n.pipe.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/quality/quality-flag-to-i18n.pipe.js.map b/out-tsc/app/app/data/quality/quality-flag-to-i18n.pipe.js.map new file mode 100644 index 000000000..df0b179bc --- /dev/null +++ b/out-tsc/app/app/data/quality/quality-flag-to-i18n.pipe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"quality-flag-to-i18n.pipe.js","sourceRoot":"","sources":["../../../../../src/app/data/quality/quality-flag-to-i18n.pipe.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAiB,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAKrE,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAA3B;QACL,cAAS,GAAG,oBAAoB,CAAC;IACnC,CAAC;CAAA,CAAA;AAFY,qBAAqB;IAHjC,IAAI,CAAC;QACJ,IAAI,EAAE,mBAAmB;KAC1B,CAAC;GACW,qBAAqB,CAEjC;SAFY,qBAAqB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/quality/quality-flag-to-icon.pipe.js b/out-tsc/app/app/data/quality/quality-flag-to-icon.pipe.js new file mode 100644 index 000000000..0c30c290f --- /dev/null +++ b/out-tsc/app/app/data/quality/quality-flag-to-icon.pipe.js @@ -0,0 +1,19 @@ +import { __decorate } from "tslib"; +import { Pipe } from '@angular/core'; +import { QualityFlagIds } from '@app/referential/services/model/model.enum'; +let QualityFlagToIconPipe = class QualityFlagToIconPipe { + transform(qualityFlagId) { + switch (qualityFlagId) { + case QualityFlagIds.BAD: + return 'alert-circle'; + } + return null; + } +}; +QualityFlagToIconPipe = __decorate([ + Pipe({ + name: 'qualityFlagToIcon' + }) +], QualityFlagToIconPipe); +export { QualityFlagToIconPipe }; +//# sourceMappingURL=quality-flag-to-icon.pipe.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/quality/quality-flag-to-icon.pipe.js.map b/out-tsc/app/app/data/quality/quality-flag-to-icon.pipe.js.map new file mode 100644 index 000000000..0dd3c4b3c --- /dev/null +++ b/out-tsc/app/app/data/quality/quality-flag-to-icon.pipe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"quality-flag-to-icon.pipe.js","sourceRoot":"","sources":["../../../../../src/app/data/quality/quality-flag-to-icon.pipe.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAgB,MAAM,eAAe,CAAC;AAClD,OAAO,EAAC,cAAc,EAAC,MAAM,4CAA4C,CAAC;AAKnE,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAEhC,SAAS,CAAC,aAAqB;QAC7B,QAAQ,aAAa,EAAE;YACrB,KAAK,cAAc,CAAC,GAAG;gBACrB,OAAO,cAAc,CAAC;SACzB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AATY,qBAAqB;IAHjC,IAAI,CAAC;QACJ,IAAI,EAAE,mBAAmB;KAC1B,CAAC;GACW,qBAAqB,CASjC;SATY,qBAAqB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/report/base-report.class.js b/out-tsc/app/app/data/report/base-report.class.js new file mode 100644 index 000000000..426701a79 --- /dev/null +++ b/out-tsc/app/app/data/report/base-report.class.js @@ -0,0 +1,565 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectorRef, Directive, EventEmitter, Injector, Input, Optional, ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { RevealComponent } from '@app/shared/report/reveal/reveal.component'; +import { environment } from '@environments/environment'; +import { TranslateService } from '@ngx-translate/core'; +import { AccountService, DateFormatService, DateUtils, firstFalsePromise, isNil, isNilOrBlank, isNotNil, isNotNilOrBlank, isNumber, JsonUtils, LocalSettingsService, MenuService, NetworkService, PlatformService, Toasts, toDateISOString, TranslateContextService, waitForTrue, } from '@sumaris-net/ngx-components'; +import { BehaviorSubject, lastValueFrom, Subject } from 'rxjs'; +import { ModalController, PopoverController, ToastController } from '@ionic/angular'; +import { Share } from '@capacitor/share'; +import { Popovers } from '@app/shared/popover/popover.utils'; +import { v4 as uuidv4 } from 'uuid'; +import { filter, first, map, takeUntil } from 'rxjs/operators'; +import { HttpClient, HttpEventType } from '@angular/common/http'; +import { FileTransferService } from '@app/shared/service/file-transfer.service'; +import { APP_BASE_HREF } from '@angular/common'; +import { ContextService } from '@app/shared/context.service'; +import { instanceOf } from 'graphql/jsutils/instanceOf'; +import { hasFlag } from '@app/shared/flags.utils'; +import { SharedResourceUtils } from '@app/social/share/shared-resource.utils'; +import { Program } from '@app/referential/services/model/program.model'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { Clipboard as CapacitorClipboard } from '@capacitor/clipboard'; +export const ReportDataPasteFlags = Object.freeze({ + NONE: 0, + DATA: 1, + STATS: 2, + I18N_CONTEXT: 4, + // ALL FLAGS + ALL: 1 + 2 + 4, +}); +export class BaseReportStats { + fromObject(source) { + this.program = Program.fromObject(source.program); + } + asObject(opts) { + var _a; + return { + program: (_a = this.program) === null || _a === void 0 ? void 0 : _a.asObject(opts), + }; + } +} +let AppBaseReport = class AppBaseReport { + constructor(injector, dataType, statsType, options) { + var _a; + this.dataType = dataType; + this.statsType = statsType; + this.options = options; + this._printing = false; + this.logPrefix = 'base-report'; + this.destroySubject = new Subject(); + this.readySubject = new BehaviorSubject(false); + this.loadingSubject = new BehaviorSubject(true); + this._autoLoad = true; + this._autoLoadDelay = 0; + this._stats = null; + this.uuid = null; + this.onRefresh = new EventEmitter(); + this.i18nContext = null; + this.$defaultBackHref = new BehaviorSubject(''); + this.$title = new BehaviorSubject(''); + this.showError = true; + this.showToolbar = true; + this.debug = !environment.production; + this.injector = injector; + this.baseHref = injector.get(APP_BASE_HREF); + this.translateContext = injector.get(TranslateContextService); + this.cd = injector.get(ChangeDetectorRef); + this.route = injector.get(ActivatedRoute); + this.router = injector.get(Router); + this.dateFormat = injector.get(DateFormatService); + this.settings = injector.get(LocalSettingsService); + this.modalCtrl = injector.get(ModalController); + this.toastController = injector.get(ToastController); + this.fileTransferService = injector.get(FileTransferService); + this.context = injector.get(ContextService); + this.network = injector.get(NetworkService); + this.platform = injector.get(PlatformService); + this.translate = injector.get(TranslateService); + this.programRefService = injector.get(ProgramRefService); + this.mobile = this.settings.mobile; + this.uuid = this.route.snapshot.queryParamMap.get('uuid'); + this._pathParentIdAttribute = options === null || options === void 0 ? void 0 : options.pathParentIdAttribute; + // NOTE: In route.snapshot data is optional. On which case it may be not set ??? + this._pathIdAttribute = ((_a = this.route.snapshot.data) === null || _a === void 0 ? void 0 : _a.pathIdParam) || (options === null || options === void 0 ? void 0 : options.pathIdAttribute) || 'id'; + this.onRefresh + .pipe(filter(_ => this.loaded)) + .subscribe(() => this.reload({ cache: false })); + this.debug = !environment.production; + } + set stats(value) { + if (isNil(value)) + return; + if (instanceOf(value, this.statsType)) + this._stats = value; + else + this._stats = this.statsFromObject(value); + } + ; + get stats() { + return this._stats; + } + get embedded() { + var _a; + return ((_a = this.reveal) === null || _a === void 0 ? void 0 : _a.embedded) || false; + } + get loaded() { return !this.loadingSubject.value; } + get loading() { return this.loadingSubject.value; } + get modalName() { + return this.constructor.name; + } + get latLongFormat() { + var _a; + return (_a = this.settings) === null || _a === void 0 ? void 0 : _a.latLongFormat; + } + get shareUrlBase() { + var _a; + let peerUrl = (_a = this.settings.settings) === null || _a === void 0 ? void 0 : _a.peerUrl; + if (isNilOrBlank(peerUrl)) { + // Fallback to current website (but NOT if in App) + if (this.isApp()) { + throw new Error('Cannot shared report when not connected to any node. Please check your settings'); + } + // Fallback to the current web site + peerUrl = this.baseHref; + } + return `${peerUrl.replace(/\/$/, '')}/share/`; + } + ngOnInit() { + // TODO : FIXME + // this.modal = isNotNil(this.modal) ? this.modal : !!(await this.modalCtrl.getTop()); + if (this.embedded) { + this.showToolbar = false; + } + } + ngAfterViewInit() { + if (this._autoLoad) { + setTimeout(() => this.start(), this._autoLoadDelay); + } + } + ngOnDestroy() { + this.destroySubject.next(); + } + start(opts) { + return __awaiter(this, void 0, void 0, function* () { + yield this.platform.ready(); + // Disable the menu if user is not authenticated (public shared report) + const accountService = this.injector.get(AccountService); + yield accountService.ready(); + if (!accountService.isAuth()) { + const menu = this.injector.get(MenuService); + menu.enable(false); + } + this.markAsReady(); + try { + // Load or fill this.data, this.stats and this.i18nContext + yield this.ngOnStart(opts); + if (isNilOrBlank(this.uuid)) + this.$defaultBackHref.next(this.computeDefaultBackHref(this.data, this.stats)); + this.$title.next(yield this.computeTitle(this.data, this.stats)); + this.revealOptions = this.computeSlidesOptions(this.data, this.stats); + this.markAsLoaded(); + // Update the view: initialise reveal + yield this.updateView(); + } + catch (err) { + console.error(err); + this.setError(err); + this.markAsLoaded(); + } + }); + } + ; + reload(opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.loaded) + return; // skip + this.markAsLoading(); + this.cd.detectChanges(); + setTimeout(() => { + this.data = undefined; + this.stats = undefined; + this.i18nContext = undefined; + this.start(opts); + }, 500); + }); + } + cancel() { + if (this.modal) { + this.modalCtrl.dismiss(); + } + } + ngOnStart(opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) { + if (isNotNil(this.data)) + console.debug(`[${this.logPrefix}] data present on starting`, this.data); + if (isNotNil(this.stats)) + console.debug(`[${this.logPrefix}] stats present on starting`, this.stats); + if (isNotNil(this.i18nContext)) + console.debug(`[${this.logPrefix}] i18nContext present on starting`, this.i18nContext); + } + // If data is not filled by input, fill it with the clipboard + let clipboard; + if (isNotNil(this.context.clipboard)) { + clipboard = this.context.clipboard; + } + else if (isNotNilOrBlank(this.uuid)) { + if (this.debug) + console.debug(`[${this.logPrefix}] fill clipboard by downloading shared ressource`); + const http = this.injector.get(HttpClient); + const peerUrl = this.settings.settings.peerUrl; + const sharedElement = yield SharedResourceUtils.downloadByUuid(http, peerUrl, this.uuid); + clipboard = sharedElement.content; + } + if (hasFlag(clipboard === null || clipboard === void 0 ? void 0 : clipboard.pasteFlags, ReportDataPasteFlags.DATA) && isNotNil((_a = clipboard === null || clipboard === void 0 ? void 0 : clipboard.data) === null || _a === void 0 ? void 0 : _a.data)) { + const consumed = yield this.loadFromClipboard(clipboard); + if (consumed) + this.context.resetValue('clipboard'); + } + }); + } + loadFromClipboard(clipboard, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.debug(`[${this.logPrefix}] loadFromClipboard`, clipboard); + let consumed = false; + if (isNil(this.data) && hasFlag(clipboard.pasteFlags, ReportDataPasteFlags.DATA) && isNotNil(clipboard.data.data)) { + this.data = this.dataFromObject(clipboard.data.data); + consumed = true; + if (this.debug) + console.debug(`[${this.logPrefix}] data loaded from clipboard`, this.data); + } + if (isNotNil(this.data) && isNil(this.stats) && hasFlag(clipboard.pasteFlags, ReportDataPasteFlags.STATS) && isNotNil(clipboard.data.stats)) { + this.stats = this.statsFromObject(clipboard.data.stats); + consumed = true; + if (this.debug) + console.debug(`[${this.logPrefix}] stats loaded from clipboard`, this.stats); + } + if (hasFlag(clipboard.pasteFlags, ReportDataPasteFlags.I18N_CONTEXT) && isNotNil(clipboard.data.i18nContext)) { + this.i18nContext = Object.assign(Object.assign(Object.assign({}, this.i18nContext), clipboard.data.i18nContext), { pmfmPrefix: (_a = this.options) === null || _a === void 0 ? void 0 : _a.i18nPmfmPrefix }); + consumed = true; + if (this.debug) + console.debug(`[${this.logPrefix}] i18nContext loaded from clipboard`, this.i18nContext); + } + return consumed; + }); + } + computeI18nContext(stats) { + var _a, _b, _c; + if (this.debug) + console.debug(`[${this.logPrefix}] computeI18nContext]`); + const suffix = isNilOrBlank(this.i18nContextSuffix) + ? ((_a = stats.program) === null || _a === void 0 ? void 0 : _a.getProperty(ProgramProperties.I18N_SUFFIX)) || '' + : this.i18nContextSuffix; + return { + prefix: ((_b = this.options) === null || _b === void 0 ? void 0 : _b.i18nPrefix) || '', + suffix: suffix === 'legacy' ? '' : suffix, + pmfmPrefix: ((_c = this.options) === null || _c === void 0 ? void 0 : _c.i18nPmfmPrefix) || '', + }; + } + computePrintHref(data, stats) { + if (this.uuid) + return new URL(`${this.baseHref}/${this.computeShareBasePath()}?uuid=${this.uuid}`); + else + return new URL(window.location.origin + this.computeDefaultBackHref(data, stats).replace(/\?.*$/, '') + '/report'); + } + ; + computeSlidesOptions(data, stats) { + if (this.debug) + console.debug(`[${this.logPrefix}] computeSlidesOptions`); + const mobile = this.settings.mobile; + return { + // Custom reveal options + autoInitialize: false, + autoPrint: false, + // Reveal options + pdfMaxPagesPerSlide: 1, + disableLayout: mobile, + touch: mobile, + printUrl: this.computePrintHref(data, stats) + }; + } + getIdFromPathIdAttribute(pathIdAttribute) { + const route = this.route.snapshot; + const id = route.params[pathIdAttribute]; + if (isNotNil(id)) { + if (typeof id === 'string' && isNumber(id)) { + return (+id); + } + return id; + } + return undefined; + } + updateView() { + return __awaiter(this, void 0, void 0, function* () { + this.cd.detectChanges(); + yield firstFalsePromise(this.loadingSubject, { stop: this.destroySubject }); + if (!this.embedded) + yield this.reveal.initialize(); + }); + } + markAsReady() { + if (!this.readySubject.value) { + this.readySubject.next(true); + } + } + isApp() { + return this.mobile && this.platform.isApp(); + } + markForCheck() { + this.cd.markForCheck(); + } + markAsLoading(opts = { emitEvent: true }) { + if (!this.loadingSubject.value) { + this.loadingSubject.next(true); + if (opts.emitEvent !== false) + this.markForCheck(); + } + } + markAsLoaded(opts = { emitEvent: true }) { + if (this.loadingSubject.value) { + this.loadingSubject.next(false); + if (opts.emitEvent !== false) + this.markForCheck(); + } + } + waitIdle(opts) { + return __awaiter(this, void 0, void 0, function* () { + console.debug(`[${this.constructor.name}]`); + if (this.loaded) + return; + yield firstFalsePromise(this.loadingSubject, Object.assign({ stop: this.destroySubject }, opts)); + }); + } + ready(opts) { + return __awaiter(this, void 0, void 0, function* () { + if (this.readySubject.value) + return; + yield waitForTrue(this.readySubject, opts); + }); + } + setError(err, opts) { + if (!err) { + this.error = undefined; + } + else if (typeof err === 'string') { + this.error = err; + } + else { + // NOTE: Case when `|| err` is possible ? + let userMessage = err.message && this.translate.instant(err.message) || err; + // NOTE: replace || by && ??? + const detailMessage = (!err.details || typeof (err.message) === 'string') + ? err.details + : err.details.message; + // NOTE: !isNotNilOrBlank ??? (invert the test) + if (isNotNilOrBlank(detailMessage)) { + const cssClass = (opts === null || opts === void 0 ? void 0 : opts.detailsCssClass) || 'hidden-xs hidden-sm'; + userMessage += `
`; + userMessage += detailMessage.length < 70 + ? detailMessage + : detailMessage.substring(0, 67) + '...'; + userMessage += ''; + } + this.error = userMessage; + if (!opts || opts.emitEvent !== false) + this.markForCheck(); + } + } + dataFromObject(source) { + if (this.dataType) { + const data = new this.dataType(); + data.fromObject(source); + return data; + } + return source; + } + ; + statsAsObject(source, opts) { + return source.asObject(opts); + } + statsFromObject(source) { + const stats = new this.statsType(); + stats.fromObject(source); + return stats; + } + showSharePopover(event) { + return __awaiter(this, void 0, void 0, function* () { + if (isNilOrBlank(this.uuid)) { + try { + this.uuid = yield this.uploadReportFile(); + } + catch (err) { + console.error(err); + yield Toasts.show(this.toastController, this.translate, { + message: err.message, + type: 'error', + }); + return; + } + } + const shareUrl = this.shareUrlBase + this.uuid; + // Use Capacitor plugin + if (this.isApp()) { + yield Share.share({ + dialogTitle: this.translate.instant('COMMON.SHARE.DIALOG_TITLE'), + title: this.$title.value, + text: this.translate.instant('COMMON.SHARE.LINK'), + url: shareUrl + }); + } + else { + yield Popovers.showText(this.injector.get(PopoverController), event, { + text: shareUrl, + title: '', + editing: false, + autofocus: false, + multiline: true, + autoHeight: true, + placeholder: this.translate.instant('COMMON.REPORT.SHARE_LINK_PLACEHOLDER'), + maxLength: null, + showFooter: false, + headerColor: 'secondary', + headerButtons: [ + { + icon: 'copy', + text: 'COMMON.BTN_COPY', + fill: 'outline', + side: 'end', + handler: (value) => __awaiter(this, void 0, void 0, function* () { + yield CapacitorClipboard.write({ + string: value, + }); + yield Toasts.show(this.toastController, this.translate, { + type: 'info', message: 'INFO.COPY_SUCCEED' + }); + return false; // Avoid dismiss + }) + } + ] + }, { + backdropDismiss: true + }); + } + }); + } + uploadReportFile() { + return __awaiter(this, void 0, void 0, function* () { + // Wait data loaded + yield this.waitIdle({ timeout: 5000 }); + const uploadFileName = this.getExportFileName('json'); + const sharedElement = { + uuid: uuidv4(), + shareLink: '', + path: this.computeShareBasePath(), + queryParams: {}, + creationDate: toDateISOString(DateUtils.moment()), + content: { + // TODO Type data ? + data: { + data: this.dataAsObject(this.data), + stats: this.statsAsObject(this.stats), + i18nContext: this.i18nContext, + }, + // eslint-disable-next-line no-bitwise + pasteFlags: ReportDataPasteFlags.DATA | ReportDataPasteFlags.STATS | ReportDataPasteFlags.I18N_CONTEXT + } + }; + const file = JsonUtils.writeToFile(sharedElement, { filename: uploadFileName }); + const { fileName, message } = yield lastValueFrom(this.fileTransferService.uploadResource(file, { + resourceType: 'report', + resourceId: sharedElement.uuid + '.json', + reportProgress: false + }).pipe(map(event => { + if (event.type === HttpEventType.Response) { + return event.body; + } + }), filter(body => !!body), first(), takeUntil(this.destroySubject))); + if (message !== 'OK' || !fileName) { + throw new Error('Failed to upload report data!'); + } + yield this.fileTransferService.shareAsPublic(fileName); + // return the UUID + return fileName.replace(/\.json$/, ''); + }); + } + getExportEncoding(format = 'json') { + const key = `FILE.${format.toUpperCase()}.ENCODING`; + const encoding = this.translate.instant(key); + if (encoding !== key) + return encoding; + return 'UTF-8'; // Default encoding + } + getExportFileName(format = 'json', params) { + const key = `${this.i18nContext.prefix}EXPORT_${format.toUpperCase()}_FILENAME`; + const filename = this.translateContext.instant(key, this.i18nContext.suffix, params || { title: this.$title.value }); + if (filename !== key) + return filename; + return `export.${format}`; // Default filename + } + isPrintingPDF() { + if (this._printing) + return true; + const query = window.location.search || '?'; + return query.indexOf('print-pdf') !== -1; + } + print() { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (this._printing) + return true; // Skip is already printing + this._printing = true; + yield this.ready(); + (_a = this.reveal) === null || _a === void 0 ? void 0 : _a.print(); + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", Boolean) +], AppBaseReport.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], AppBaseReport.prototype, "modal", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppBaseReport.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppBaseReport.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppBaseReport.prototype, "debug", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppBaseReport.prototype, "data", void 0); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], AppBaseReport.prototype, "stats", null); +__decorate([ + Input(), + __metadata("design:type", String) +], AppBaseReport.prototype, "i18nContextSuffix", void 0); +__decorate([ + ViewChild(RevealComponent, { static: false }), + __metadata("design:type", RevealComponent) +], AppBaseReport.prototype, "reveal", void 0); +AppBaseReport = __decorate([ + Directive(), + __param(3, Optional()), + __metadata("design:paramtypes", [Injector, Function, Function, Object]) +], AppBaseReport); +export { AppBaseReport }; +//# sourceMappingURL=base-report.class.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/report/base-report.class.js.map b/out-tsc/app/app/data/report/base-report.class.js.map new file mode 100644 index 000000000..e7169b439 --- /dev/null +++ b/out-tsc/app/app/data/report/base-report.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"base-report.class.js","sourceRoot":"","sources":["../../../../../src/app/data/report/base-report.class.ts"],"names":[],"mappings":";AAAA,OAAO,EAAiB,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAqB,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACnJ,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAA0B,eAAe,EAAE,MAAM,4CAA4C,CAAC;AACrG,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACL,cAAc,EAEd,iBAAiB,EACjB,SAAS,EAET,iBAAiB,EACjB,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,SAAS,EAET,oBAAoB,EACpB,WAAW,EACX,cAAc,EACd,eAAe,EACf,MAAM,EACN,eAAe,EACf,uBAAuB,EAEvB,WAAW,GACZ,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAE7D,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAa,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,+CAA+C,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACpF,OAAO,EAAE,SAAS,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEvE,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC;IAChD,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,YAAY,EAAE,CAAC;IAEf,YAAY;IACZ,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;CACf,CAAC,CAAC;AAcH,MAAM,OAAO,eAAe;IAG1B,UAAU,CAAC,MAAW;QACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,QAAQ,CAAC,IAA4B;;QACnC,OAAQ;YACN,OAAO,EAAE,MAAA,IAAI,CAAC,OAAO,0CAAE,QAAQ,CAAC,IAAI,CAAC;SACtC,CAAC;IACJ,CAAC;CAEF;AAeM,IAAe,aAAa,GAA5B,MAAe,aAAa;IAmGjC,YACE,QAAkB,EACR,QAAoB,EACpB,SAAqB,EACT,OAAW;;QAFvB,aAAQ,GAAR,QAAQ,CAAY;QACpB,cAAS,GAAT,SAAS,CAAY;QACT,YAAO,GAAP,OAAO,CAAI;QAhG3B,cAAS,GAAG,KAAK,CAAC;QAEhB,cAAS,GAAG,aAAa,CAAC;QAiBjB,mBAAc,GAAG,IAAI,OAAO,EAAQ,CAAC;QACrC,iBAAY,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;QACnD,mBAAc,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,CAAC;QAI7D,cAAS,GAAG,IAAI,CAAC;QACjB,mBAAc,GAAG,CAAC,CAAC;QAGnB,WAAM,GAAM,IAAI,CAAC;QACjB,SAAI,GAAW,IAAI,CAAC;QAEpB,cAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;QAI/C,gBAAW,GAAuB,IAAI,CAAC;QAEvC,qBAAgB,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC,CAAC;QACnD,WAAM,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC,CAAC;QAIhC,cAAS,GAAG,IAAI,CAAC;QACjB,gBAAW,GAAG,IAAI,CAAC;QACnB,UAAK,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;QAqDvC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC5C,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAC9D,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QACnD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC/C,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACrD,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAE5C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAChD,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAEzD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE1D,IAAI,CAAC,sBAAsB,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,qBAAqB,CAAC;QAC7D,gFAAgF;QAChF,IAAI,CAAC,gBAAgB,GAAG,CAAA,MAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,0CAAE,WAAW,MAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe,CAAA,IAAI,IAAI,CAAC;QAElG,IAAI,CAAC,SAAS;aACX,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC9B,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAC,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC,CAAC;QAEhD,IAAI,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;IACvC,CAAC;IAhFD,IAAa,KAAK,CAAC,KAAK;QACtB,IAAI,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO;QACzB,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;YAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;;YACtD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAAA,CAAC;IACF,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,QAAQ;;QACV,OAAO,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,QAAQ,KAAI,KAAK,CAAC;IACxC,CAAC;IAMD,IAAI,MAAM,KAAc,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,IAAI,OAAO,KAAc,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAE5D,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,IAAI,aAAa;;QACf,OAAO,MAAA,IAAI,CAAC,QAAQ,0CAAE,aAAa,CAAC;IACtC,CAAC;IAED,IAAI,YAAY;;QACd,IAAI,OAAO,GAAG,MAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,0CAAE,OAAO,CAAC;QAE9C,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE;YACzB,kDAAkD;YAClD,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;gBAChB,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;aACpG;YAED,mCAAmC;YACnC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;SACzB;QAED,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC;IAChD,CAAC;IAwCD,QAAQ;QACN,eAAe;QACf,sFAAsF;QACtF,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;SAC1B;IACH,CAAC;IAED,eAAe;QACb,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;SACrD;IACH,CAAC;IAED,WAAW;QACT,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAEK,KAAK,CAAC,IAAU;;YACpB,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YAE5B,uEAAuE;YACvE,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACzD,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE;gBAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACpB;YAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI;gBAEF,0DAA0D;gBAC1D,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAE3B,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC5G,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEtE,IAAI,CAAC,YAAY,EAAE,CAAC;gBAEpB,qCAAqC;gBACrC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;aAEzB;YAAC,OAAO,GAAG,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACnB,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;QACH,CAAC;KAAA;IAAA,CAAC;IAEI,MAAM,CAAC,IAAU;;YACrB,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,OAAO;YAEjC,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;YAExB,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;gBACtB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;gBACvB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;gBAE7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;KAAA;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;SAC1B;IACH,CAAC;IAEK,SAAS,CAAC,IAAU;;;YACxB,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,4BAA4B,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;oBAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,6BAA6B,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrG,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;oBAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,mCAAmC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;aACxH;YAED,6DAA6D;YAC7D,IAAI,SAAyB,CAAC;YAC9B,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;gBACpC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;aACpC;iBACI,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACnC,IAAI,IAAI,CAAC,KAAK;oBAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,kDAAkD,CAAC,CAAC;gBACpG,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC/C,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEzF,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC;aACnC;YAED,IAAI,OAAO,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,UAAU,EAAE,oBAAoB,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,0CAAE,IAAI,CAAC,EAAE;gBAChG,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBACzD,IAAI,QAAQ;oBAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;aACpD;;KACF;IAIe,iBAAiB,CAAC,SAAoB,EAAE,IAAU;;;YAChE,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,qBAAqB,EAAE,SAAS,CAAC,CAAC;YAElF,IAAI,QAAQ,GAAG,KAAK,CAAC;YAErB,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,oBAAoB,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACjH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrD,QAAQ,GAAG,IAAI,CAAC;gBAChB,IAAI,IAAI,CAAC,KAAK;oBAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,8BAA8B,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;aAC5F;YAED,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,oBAAoB,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAC3I,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxD,QAAQ,GAAG,IAAI,CAAC;gBAChB,IAAI,IAAI,CAAC,KAAK;oBAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,+BAA+B,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aAC9F;YAED,IAAI,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,oBAAoB,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;gBAC5G,IAAI,CAAC,WAAW,iDACX,IAAI,CAAC,WAAW,GAChB,SAAS,CAAC,IAAI,CAAC,WAAW,KAC7B,UAAU,EAAE,MAAA,IAAI,CAAC,OAAO,0CAAE,cAAc,GACzC,CAAC;gBACF,QAAQ,GAAG,IAAI,CAAC;gBAChB,IAAI,IAAI,CAAC,KAAK;oBAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,qCAAqC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;aAC1G;YAED,OAAO,QAAQ,CAAC;;KACjB;IAWS,kBAAkB,CAAC,KAAsB;;QACjD,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,uBAAuB,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACjD,CAAC,CAAC,CAAA,MAAA,KAAK,CAAC,OAAO,0CAAE,WAAW,CAAC,iBAAiB,CAAC,WAAW,CAAC,KAAI,EAAE;YACjE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAE3B,OAAQ;YACN,MAAM,EAAE,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,UAAU,KAAI,EAAE;YACtC,MAAM,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM;YACzC,UAAU,EAAE,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,cAAc,KAAI,EAAE;SAC/C,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,IAAO,EAAE,KAAQ;QAChC,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,oBAAoB,EAAE,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;;YAC9F,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;IAC1H,CAAC;IAAA,CAAC;IAIQ,oBAAoB,CAAC,IAAO,EAAE,KAAQ;QAC9C,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,wBAAwB,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACpC,OAAO;YACL,wBAAwB;YACxB,cAAc,EAAE,KAAK;YACrB,SAAS,EAAE,KAAK;YAChB,iBAAiB;YACjB,mBAAmB,EAAE,CAAC;YACtB,aAAa,EAAE,MAAM;YACrB,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC;SAC7C,CAAC;IACJ,CAAC;IAES,wBAAwB,CAAI,eAAuB;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAClC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAM,CAAC;QAC9C,IAAI,QAAQ,CAAC,EAAE,CAAC,EAAE;YAChB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,QAAQ,CAAC,EAAE,CAAC,EAAE;gBAC1C,OAAO,CAAC,CAAC,EAAE,CAAa,CAAC;aAC1B;YACD,OAAO,EAAE,CAAC;SACX;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEK,UAAU;;YACd,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,iBAAiB,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAC,CAAC,CAAC;YAC3E,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACrD,CAAC;KAAA;IAED,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;YAC5B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC9B;IACH,CAAC;IAES,KAAK;QACb,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC9C,CAAC;IAES,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;IAES,aAAa,CAAC,IAAI,GAAG,EAAC,SAAS,EAAE,IAAI,EAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;YAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK;gBAAE,IAAI,CAAC,YAAY,EAAE,CAAC;SACnD;IACH,CAAC;IAES,YAAY,CAAC,IAAI,GAAG,EAAC,SAAS,EAAE,IAAI,EAAC;QAC7C,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;YAC7B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK;gBAAE,IAAI,CAAC,YAAY,EAAE,CAAC;SACnD;IACH,CAAC;IAEK,QAAQ,CAAC,IAAoB;;YACjC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO;YACxB,MAAM,iBAAiB,CAAC,IAAI,CAAC,cAAc,kBAAI,IAAI,EAAE,IAAI,CAAC,cAAc,IAAK,IAAI,EAAG,CAAC;QACvF,CAAC;KAAA;IAEK,KAAK,CAAC,IAAqB;;YAC/B,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK;gBAAE,OAAO;YACpC,MAAM,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;KAAA;IAED,QAAQ,CAAC,GAAiC,EAAE,IAG3C;QACC,IAAI,CAAC,GAAG,EAAE;YACR,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;SACxB;aAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAClC,IAAI,CAAC,KAAK,GAAG,GAAa,CAAC;SAC5B;aAAM;YACL,yCAAyC;YACzC,IAAI,WAAW,GAAW,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;YACpF,6BAA6B;YAC7B,MAAM,aAAa,GAAW,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;gBAC/E,CAAC,CAAC,GAAG,CAAC,OAAiB;gBACvB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;YACxB,+CAA+C;YAC/C,IAAI,eAAe,CAAC,aAAa,CAAC,EAAE;gBAClC,MAAM,QAAQ,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,eAAe,KAAI,qBAAqB,CAAC;gBAChE,WAAW,IAAI,sBAAsB,QAAQ,YAAY,aAAa,IAAI,CAAC;gBAC3E,WAAW,IAAI,aAAa,CAAC,MAAM,GAAG,EAAE;oBACtC,CAAC,CAAC,aAAa;oBACf,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;gBAC3C,WAAW,IAAI,UAAU,CAAC;aAC3B;YACD,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;YACzB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK;gBAAE,IAAI,CAAC,YAAY,EAAE,CAAC;SAC5D;IACH,CAAC;IAID,cAAc,CAAC,MAAW;QACzB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC;SACb;QACD,OAAO,MAAW,CAAC;IACpB,CAAC;IAAA,CAAC;IAGF,aAAa,CAAC,MAAS,EAAE,IAA4B;QACnD,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,eAAe,CAAC,MAAW;QACzB,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAEe,gBAAgB,CAAC,KAAe;;YAE9C,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC3B,IAAI;oBACF,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;iBAC3C;gBAAC,OAAO,GAAG,EAAE;oBACZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACnB,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,EAAE;wBACtD,OAAO,EAAE,GAAG,CAAC,OAAO;wBACpB,IAAI,EAAE,OAAO;qBACd,CAAC,CAAC;oBACH,OAAO;iBACR;aACF;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;YAE/C,uBAAuB;YACvB,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;gBAChB,MAAM,KAAK,CAAC,KAAK,CAAC;oBAChB,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,2BAA2B,CAAC;oBAChE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;oBACxB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC;oBACjD,GAAG,EAAE,QAAQ;iBACd,CAAC,CAAC;aACJ;iBACI;gBACH,MAAM,QAAQ,CAAC,QAAQ,CACrB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,EACpC,KAAK,EACL;oBACE,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,EAAE;oBACT,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,KAAK;oBAChB,SAAS,EAAE,IAAI;oBACf,UAAU,EAAE,IAAI;oBAChB,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,sCAAsC,CAAC;oBAC3E,SAAS,EAAE,IAAI;oBACf,UAAU,EAAE,KAAK;oBACjB,WAAW,EAAE,WAAW;oBAExB,aAAa,EAAE;wBACb;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,iBAAiB;4BACvB,IAAI,EAAE,SAAS;4BACf,IAAI,EAAE,KAAK;4BACX,OAAO,EAAE,CAAO,KAAa,EAAE,EAAE;gCAC/B,MAAM,kBAAkB,CAAC,KAAK,CAAC;oCAC7B,MAAM,EAAE,KAAK;iCACd,CAAC,CAAC;gCAEH,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,EAAE;oCACtD,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB;iCAC3C,CAAC,CAAC;gCAEH,OAAO,KAAK,CAAC,CAAC,gBAAgB;4BAChC,CAAC,CAAA;yBACF;qBACF;iBACK,EACR;oBACE,eAAe,EAAE,IAAI;iBACf,CACT,CAAC;aACH;QACH,CAAC;KAAA;IAEe,gBAAgB;;YAC9B,mBAAmB;YACnB,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;YAErC,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAEtD,MAAM,aAAa,GAAkB;gBACnC,IAAI,EAAE,MAAM,EAAE;gBACd,SAAS,EAAE,EAAE;gBACb,IAAI,EAAE,IAAI,CAAC,oBAAoB,EAAE;gBACjC,WAAW,EAAE,EAAE;gBACf,YAAY,EAAE,eAAe,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;gBACjD,OAAO,EAAE;oBACP,mBAAmB;oBACnB,IAAI,EAAE;wBACJ,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;wBAClC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;wBACrC,WAAW,EAAE,IAAI,CAAC,WAAW;qBAC9B;oBACD,sCAAsC;oBACtC,UAAU,EAAE,oBAAoB,CAAC,IAAI,GAAG,oBAAoB,CAAC,KAAK,GAAG,oBAAoB,CAAC,YAAY;iBACvG;aACF,CAAC;YAEF,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,aAAa,EAAE,EAAC,QAAQ,EAAE,cAAc,EAAC,CAAC,CAAC;YAE9E,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,IAAI,EAAE;gBAC9F,YAAY,EAAE,QAAQ;gBACtB,UAAU,EAAE,aAAa,CAAC,IAAI,GAAG,OAAO;gBACxC,cAAc,EAAE,KAAK;aACtB,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,KAAK,CAAC,EAAE;gBACV,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ,EAAE;oBACzC,OAAO,KAAK,CAAC,IAAI,CAAC;iBACnB;YACH,CAAC,CAAC,EACF,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EACtB,KAAK,EAAE,EACP,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAC/B,CAAC,CAAC;YAEH,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;aAClD;YAED,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAEvD,kBAAkB;YAClB,OAAO,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACzC,CAAC;KAAA;IAES,iBAAiB,CAAC,MAAM,GAAG,MAAM;QACzC,MAAM,GAAG,GAAG,QAAQ,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,QAAQ,KAAK,GAAG;YAAE,OAAO,QAAQ,CAAC;QACtC,OAAO,OAAO,CAAC,CAAC,mBAAmB;IACrC,CAAC;IAES,iBAAiB,CAAC,MAAM,GAAG,MAAM,EAAE,MAAY;QACvD,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,UAAU,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC;QAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC5C,GAAG,EACH,IAAI,CAAC,WAAW,CAAC,MAAM,EACvB,MAAM,IAAI,EAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAC,CAAC,CAAC;QACxC,IAAI,QAAQ,KAAK,GAAG;YAAE,OAAO,QAAQ,CAAC;QACtC,OAAO,UAAU,MAAM,EAAE,CAAC,CAAC,mBAAmB;IAChD,CAAC;IAGO,aAAa;QACnB,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC;QAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAEa,KAAK;;;YACjB,IAAI,IAAI,CAAC,SAAS;gBAAE,OAAO,IAAI,CAAC,CAAC,2BAA2B;YAC5D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAK,EAAE,CAAC;;KACtB;CAGF,CAAA;AA5gBC;IAAC,KAAK,EAAE;;6CAAiB;AACzB;IAAC,KAAK,EAAE;;4CAAgB;AACxB;IAAC,KAAK,EAAE;;gDAAkB;AAC1B;IAAC,KAAK,EAAE;;kDAAoB;AAC5B;IAAC,KAAK,EAAE;;4CAAiC;AAEzC;IAAC,KAAK,EAAE;;2CAAS;AACjB;IAAC,KAAK,EAAE;;;0CAIP;AASD;IAAC,KAAK,EAAE;;wDAA2B;AAEnC;IAAC,SAAS,CAAC,eAAe,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC,CAAC;8BAAmB,eAAe;6CAAC;AAtE3D,aAAa;IADlC,SAAS,EAAE;IAwGP,WAAA,QAAQ,EAAE,CAAA;qCAHD,QAAQ;GApGA,aAAa,CA4jBlC;SA5jBqB,aAAa"} \ No newline at end of file diff --git a/out-tsc/app/app/data/report/data-entity-report.class.js b/out-tsc/app/app/data/report/data-entity-report.class.js new file mode 100644 index 000000000..e3b86c5cc --- /dev/null +++ b/out-tsc/app/app/data/report/data-entity-report.class.js @@ -0,0 +1,81 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { Directive, Injector, Input, Optional } from '@angular/core'; +import { AccountService, DateFormatService, isNil, isNotNil } from '@sumaris-net/ngx-components'; +import { AppBaseReport, BaseReportStats, } from '@app/data/report/base-report.class'; +export class DataReportStats extends BaseReportStats { +} +let AppDataEntityReport = class AppDataEntityReport extends AppBaseReport { + constructor(injector, dataType, statsType, options) { + super(injector, dataType, statsType, options); + this.injector = injector; + this.dataType = dataType; + this.statsType = statsType; + this.logPrefix = '[data-entity-report] '; + this.accountService = injector.get(AccountService); + this.dateFormat = injector.get(DateFormatService); + this.revealOptions = { + autoInitialize: false, + disableLayout: this.mobile, + touch: this.mobile + }; + } + ngOnStart(opts) { + const _super = Object.create(null, { + ngOnStart: { get: () => super.ngOnStart } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.ngOnStart.call(this, opts); + // If data is not filled by the input or by the clipboad , fill it by loading and computing + if (isNil(this.data)) + if (isNil(this.uuid)) + if (isNotNil(this.id)) + this.data = yield this.load(this.id, opts); + else + this.data = yield this.loadFromRoute(opts); + if (isNil(this.stats)) + this.stats = yield this.computeStats(this.data, opts); + const computedContext = this.computeI18nContext(this.stats); + this.i18nContext = Object.assign(Object.assign(Object.assign({}, computedContext), this.i18nContext), { pmfmPrefix: computedContext === null || computedContext === void 0 ? void 0 : computedContext.pmfmPrefix }); + }); + } + ; + dataAsObject(source, opts) { + if (typeof (source === null || source === void 0 ? void 0 : source.asObject) === 'function') + return source.asObject(opts); + const data = new this.dataType(); + data.fromObject(source); + return data.asObject(opts); + } + loadFromRoute(opts) { + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.debug(`[${this.logPrefix}] load data from route`); + this.id = this.getIdFromPathIdAttribute(this._pathIdAttribute); + if (isNil(this.id)) + throw new Error(`Cannot load the entity: No id found in the route!`); + return this.load(this.id, opts); + }); + } + load(id, opts) { + return __awaiter(this, arguments, void 0, function* () { + if (this.debug) + console.debug(`[${this.logPrefix}.load]`, arguments); + return this.loadData(id, opts); + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", String) +], AppDataEntityReport.prototype, "i18nContextSuffix", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppDataEntityReport.prototype, "id", void 0); +AppDataEntityReport = __decorate([ + Directive(), + __param(3, Optional()), + __metadata("design:paramtypes", [Injector, Function, Function, Object]) +], AppDataEntityReport); +export { AppDataEntityReport }; +//# sourceMappingURL=data-entity-report.class.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/report/data-entity-report.class.js.map b/out-tsc/app/app/data/report/data-entity-report.class.js.map new file mode 100644 index 000000000..2057df3c6 --- /dev/null +++ b/out-tsc/app/app/data/report/data-entity-report.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"data-entity-report.class.js","sourceRoot":"","sources":["../../../../../src/app/data/report/data-entity-report.class.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/report/extraction-report.class.js b/out-tsc/app/app/data/report/extraction-report.class.js new file mode 100644 index 000000000..a4d2f1b84 --- /dev/null +++ b/out-tsc/app/app/data/report/extraction-report.class.js @@ -0,0 +1,48 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Directive, Injector, Input } from '@angular/core'; +import { ExtractionFilter, ExtractionType } from '@app/extraction/type/extraction-type.model'; +import { AppBaseReport, BaseReportStats } from '@app/data/report/base-report.class'; +import { isNil, isNotNil } from '@sumaris-net/ngx-components'; +export class ExtractionReportStats extends BaseReportStats { +} +let AppExtractionReport = class AppExtractionReport extends AppBaseReport { + constructor(injector, dataType, statsType) { + super(injector, dataType, statsType); + this.dataType = dataType; + this.statsType = statsType; + this.logPrefix = 'extraction-report'; + } + ngOnStart(opts) { + const _super = Object.create(null, { + ngOnStart: { get: () => super.ngOnStart } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.ngOnStart.call(this, opts); + // If data is not filled by the input or by the clipboad , fill it by loading and computing + if (isNil(this.data)) + if (isNil(this.uuid)) + if (isNotNil(this.filter)) + this.data = yield this.load(this.filter, opts); + else + this.data = yield this.loadFromRoute(opts); + if (isNil(this.stats)) + this.stats = yield this.computeStats(this.data, opts); + const computedContext = this.computeI18nContext(this.stats); + this.i18nContext = Object.assign(Object.assign(Object.assign({}, computedContext), this.i18nContext), { pmfmPrefix: computedContext === null || computedContext === void 0 ? void 0 : computedContext.pmfmPrefix }); + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", ExtractionFilter) +], AppExtractionReport.prototype, "filter", void 0); +__decorate([ + Input(), + __metadata("design:type", ExtractionType) +], AppExtractionReport.prototype, "type", void 0); +AppExtractionReport = __decorate([ + Directive(), + __metadata("design:paramtypes", [Injector, Function, Function]) +], AppExtractionReport); +export { AppExtractionReport }; +//# sourceMappingURL=extraction-report.class.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/report/extraction-report.class.js.map b/out-tsc/app/app/data/report/extraction-report.class.js.map new file mode 100644 index 000000000..81444c554 --- /dev/null +++ b/out-tsc/app/app/data/report/extraction-report.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extraction-report.class.js","sourceRoot":"","sources":["../../../../../src/app/data/report/extraction-report.class.ts"],"names":[],"mappings":";AAAA,OAAO,EAAiB,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAqB,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC9F,OAAO,EAAC,aAAa,EAAE,eAAe,EAAc,MAAM,oCAAoC,CAAC;AAC/F,OAAO,EAAC,KAAK,EAAE,QAAQ,EAAC,MAAM,6BAA6B,CAAC;AAE5D,MAAM,OAAO,qBAAsB,SAAQ,eAAe;CACzD;AAGM,IAAe,mBAAmB,GAAlC,MAAe,mBAGpB,SAAQ,aAA2B;IAQnC,YACE,QAAkB,EACR,QAAoB,EACpB,SAAqB;QAE/B,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAH3B,aAAQ,GAAR,QAAQ,CAAY;QACpB,cAAS,GAAT,SAAS,CAAY;QARvB,cAAS,GAAG,mBAAmB,CAAC;IAW1C,CAAC;IAEK,SAAS,CAAC,IAAU;;;;;YACxB,MAAM,OAAM,SAAS,YAAC,IAAI,CAAC,CAAC;YAE5B,2FAA2F;YAE3F,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBAClB,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;oBAClB,IAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;wBAAE,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;;wBACpE,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAEpD,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;gBACnB,IAAI,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAExD,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5D,IAAI,CAAC,WAAW,iDACX,eAAe,GACf,IAAI,CAAC,WAAW,KACnB,UAAU,EAAE,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,UAAU,GACxC,CAAC;QACJ,CAAC;KAAA;CAIF,CAAA;AAlCC;IAAC,KAAK,EAAE;8BAAS,gBAAgB;mDAAC;AAClC;IAAC,KAAK,EAAE;8BAAO,cAAc;iDAAC;AATV,mBAAmB;IADxC,SAAS,EAAE;qCAaE,QAAQ;GAZA,mBAAmB,CA0CxC;SA1CqB,mBAAmB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/services/data-quality-service.class.js b/out-tsc/app/app/data/services/data-quality-service.class.js new file mode 100644 index 000000000..d456bcd3f --- /dev/null +++ b/out-tsc/app/app/data/services/data-quality-service.class.js @@ -0,0 +1,11 @@ +const DataQualityServiceFnName = ['canUserWrite', 'control', 'qualify']; +export function isDataQualityService(object) { + return object && DataQualityServiceFnName.filter(fnName => (typeof object[fnName] === 'function')) + .length === DataQualityServiceFnName.length || false; +} +const RootDataQualityServiceFnName = [...DataQualityServiceFnName, 'terminate', 'validate', 'unvalidate']; +export function isRootDataQualityService(object) { + return object && RootDataQualityServiceFnName.filter(fnName => (typeof object[fnName] === 'function')) + .length === RootDataQualityServiceFnName.length || false; +} +//# sourceMappingURL=data-quality-service.class.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/services/data-quality-service.class.js.map b/out-tsc/app/app/data/services/data-quality-service.class.js.map new file mode 100644 index 000000000..9b58fa81f --- /dev/null +++ b/out-tsc/app/app/data/services/data-quality-service.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"data-quality-service.class.js","sourceRoot":"","sources":["../../../../../src/app/data/services/data-quality-service.class.ts"],"names":[],"mappings":"AAsBA,MAAM,wBAAwB,GAA6C,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAClH,MAAM,UAAU,oBAAoB,CAAC,MAAW;IAC9C,OAAO,MAAM,IAAI,wBAAwB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC,CAAC;SAC/F,MAAM,KAAK,wBAAwB,CAAC,MAAM,IAAI,KAAK,CAAC;AACzD,CAAC;AAyBD,MAAM,4BAA4B,GAAiD,CAAC,GAAG,wBAAwB,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;AACxJ,MAAM,UAAU,wBAAwB,CAAC,MAAW;IAClD,OAAO,MAAM,IAAI,4BAA4B,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC,CAAC;SACnG,MAAM,KAAK,4BAA4B,CAAC,MAAM,IAAI,KAAK,CAAC;AAC7D,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/data/services/errors.js b/out-tsc/app/app/data/services/errors.js new file mode 100644 index 000000000..c29217068 --- /dev/null +++ b/out-tsc/app/app/data/services/errors.js @@ -0,0 +1,15 @@ +export const DataErrorCodes = { + LOAD_ENTITY_ERROR: 200, + LOAD_ENTITIES_ERROR: 201, + SAVE_ENTITY_ERROR: 202, + SAVE_ENTITIES_ERROR: 203, + SUBSCRIBE_ENTITY_ERROR: 204, + DELETE_ENTITY_ERROR: 205, + CONTROL_ENTITY_ERROR: 205, + TERMINATE_ENTITY_ERROR: 206, + VALIDATE_ENTITY_ERROR: 207, + UNVALIDATE_ENTITY_ERROR: 208, + QUALIFY_ENTITY_ERROR: 209, + SYNCHRONIZE_ENTITY_ERROR: 210 +}; +//# sourceMappingURL=errors.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/services/errors.js.map b/out-tsc/app/app/data/services/errors.js.map new file mode 100644 index 000000000..4867f31d5 --- /dev/null +++ b/out-tsc/app/app/data/services/errors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../../src/app/data/services/errors.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,iBAAiB,EAAE,GAAG;IACtB,mBAAmB,EAAE,GAAG;IACxB,iBAAiB,EAAE,GAAG;IACtB,mBAAmB,EAAE,GAAG;IACxB,sBAAsB,EAAE,GAAG;IAC3B,mBAAmB,EAAE,GAAG;IAExB,oBAAoB,EAAE,GAAG;IACzB,sBAAsB,EAAE,GAAG;IAC3B,qBAAqB,EAAE,GAAG;IAC1B,uBAAuB,EAAE,GAAG;IAC5B,oBAAoB,EAAE,GAAG;IACzB,wBAAwB,EAAE,GAAG;CAC9B,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/data/services/model/data-context.model.js b/out-tsc/app/app/data/services/model/data-context.model.js new file mode 100644 index 000000000..4b820a411 --- /dev/null +++ b/out-tsc/app/app/data/services/model/data-context.model.js @@ -0,0 +1,16 @@ +import { __decorate, __metadata, __param } from "tslib"; +import { CONTEXT_DEFAULT_STATE, ContextService } from '@app/shared/context.service'; +import { Inject, Injectable, Optional } from '@angular/core'; +let DataContextService = class DataContextService extends ContextService { + constructor(defaultState) { + super(defaultState || {}); + } +}; +DataContextService = __decorate([ + Injectable(), + __param(0, Optional()), + __param(0, Inject(CONTEXT_DEFAULT_STATE)), + __metadata("design:paramtypes", [Object]) +], DataContextService); +export { DataContextService }; +//# sourceMappingURL=data-context.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/services/model/data-context.model.js.map b/out-tsc/app/app/data/services/model/data-context.model.js.map new file mode 100644 index 000000000..54050bee5 --- /dev/null +++ b/out-tsc/app/app/data/services/model/data-context.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"data-context.model.js","sourceRoot":"","sources":["../../../../../../src/app/data/services/model/data-context.model.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAqBtD,IAAe,kBAAkB,GAAjC,MAAe,kBAAwD,SAAQ,cAAiB;IAErG,YAAiE,YAAe;QAC9E,KAAK,CAAC,YAAY,IAAO,EAAE,CAAC,CAAC;IAC/B,CAAC;CAEF,CAAA;AANqB,kBAAkB;IADvC,UAAU,EAAE;IAGY,WAAA,QAAQ,EAAE,CAAA;IAAE,WAAA,MAAM,CAAC,qBAAqB,CAAC,CAAA;;GAF5C,kBAAkB,CAMvC;SANqB,kBAAkB"} \ No newline at end of file diff --git a/out-tsc/app/app/data/services/model/data-entity.model.js b/out-tsc/app/app/data/services/model/data-entity.model.js new file mode 100644 index 000000000..e16559ca7 --- /dev/null +++ b/out-tsc/app/app/data/services/model/data-entity.model.js @@ -0,0 +1,159 @@ +import { DateUtils, Department, Entity, fromDateISOString, isNil, isNotNil, removeEnd, toDateISOString, } from '@sumaris-net/ngx-components'; +import { QualityFlagIds } from '@app/referential/services/model/model.enum'; +export const SERIALIZE_FOR_OPTIMISTIC_RESPONSE = Object.freeze({ + minify: false, + keepTypename: true, + keepEntityName: true, + keepLocalId: true, + keepSynchronizationStatus: true +}); +export const MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE = Object.freeze({ + minify: true, + keepTypename: true, + keepEntityName: true, + keepLocalId: true, + keepSynchronizationStatus: true +}); +export const SAVE_AS_OBJECT_OPTIONS = Object.freeze({ + minify: true, + keepTypename: false, + keepEntityName: false, + keepLocalId: false, + keepSynchronizationStatus: false +}); +export const COPY_LOCALLY_AS_OBJECT_OPTIONS = Object.freeze(Object.assign(Object.assign({}, MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE), { keepLocalId: false, keepRemoteId: false, keepUpdateDate: false })); +export const CLONE_AS_OBJECT_OPTIONS = Object.freeze(Object.assign(Object.assign({}, MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE), { minify: false })); +export class DataEntity extends Entity { + constructor(__typename) { + super(__typename); + this.recorderDepartment = null; + } + asObject(opts) { + const target = super.asObject(opts); + if (opts && opts.keepRemoteId === false && target.id >= 0) + delete target.id; + if (opts && opts.keepUpdateDate === false && target.id >= 0) + delete target.updateDate; + target.recorderDepartment = this.recorderDepartment && this.recorderDepartment.asObject(opts) || undefined; + target.controlDate = toDateISOString(this.controlDate); + target.qualificationDate = toDateISOString(this.qualificationDate); + target.qualificationComments = this.qualificationComments || undefined; + target.qualityFlagId = isNotNil(this.qualityFlagId) ? this.qualityFlagId : undefined; + return target; + } + fromObject(source, opts) { + super.fromObject(source); + this.recorderDepartment = source.recorderDepartment && Department.fromObject(source.recorderDepartment); + this.controlDate = fromDateISOString(source.controlDate); + this.qualificationDate = fromDateISOString(source.qualificationDate); + this.qualificationComments = source.qualificationComments; + this.qualityFlagId = source.qualityFlagId; + } + getStrategyDateTime() { + return undefined; + } +} +export class DataEntityUtils { + static copyControlDate(source, target) { + if (!source) + return; + target.controlDate = fromDateISOString(source.controlDate); + } + static copyQualificationDateAndFlag(source, target) { + if (!source) + return; + target.qualificationDate = fromDateISOString(source.qualificationDate); + target.qualificationComments = source.qualificationComments; + target.qualityFlagId = source.qualityFlagId; + } + /** + * Reset controlDate, and reset quality fLag and comment + * + * @param entity + * @param opts + */ + static markAsNotControlled(entity, opts) { + // Mark as controlled + entity.controlDate = null; + // Clean quality flag + if (!opts || opts.keepQualityFlag !== true) { + entity.qualityFlagId = QualityFlagIds.NOT_QUALIFIED; + } + // Clean qualification data + entity.qualificationComments = null; + entity.qualificationDate = null; + } + /** + * Check if an entity has been controlled + * + * @param entity + */ + static isControlled(entity) { + return !!(entity === null || entity === void 0 ? void 0 : entity.controlDate); + } + /** + * Set controlDate, and reset quality fLag and comment + * + * @param entity + * @param opts + */ + static markAsControlled(entity, opts) { + if (!entity) + return; // skip + // Mark as controlled + entity.controlDate = (opts === null || opts === void 0 ? void 0 : opts.controlDate) || DateUtils.moment(); + // Clean quality flag + entity.qualityFlagId = QualityFlagIds.NOT_QUALIFIED; + // Clean qualification data + entity.qualificationComments = null; + entity.qualificationDate = null; + } + /** + * Mark as invalid, using qualityFlag + * + * @param entity + * @param errorMessage + */ + static markAsInvalid(entity, errorMessage) { + if (!entity) + return; // skip + // Clean date + entity.controlDate = null; + entity.qualificationDate = null; + // Register error message, into qualificationComments + entity.qualificationComments = errorMessage; + // Clean quality flag + entity.qualityFlagId = QualityFlagIds.BAD; + } + /** + * Check if an entity has been mark as invalid + * + * @param entity + */ + static isInvalid(entity) { + if (!entity) + return false; // skip + return isNil(entity.controlDate) && isNil(entity.qualificationDate) && entity.qualityFlagId === QualityFlagIds.BAD; + } + /** + * Reset controlDate, and reset quality fLag and comment + * + * @param entity + * @param opts + */ + static hasNoQualityFlag(entity) { + return isNil(entity.qualityFlagId) || entity.qualityFlagId === QualityFlagIds.NOT_QUALIFIED; + } + /** + * Get entity name from the __typename of an entity + * + * @param entity + */ + static getEntityName(entity) { + return entity && removeEnd(entity.__typename || 'UnknownVO', 'VO'); + } + static isWithObservers(entity) { + return isNotNil(entity === null || entity === void 0 ? void 0 : entity['observers']); + } +} +//# sourceMappingURL=data-entity.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/services/model/data-entity.model.js.map b/out-tsc/app/app/data/services/model/data-entity.model.js.map new file mode 100644 index 000000000..9c403d9cb --- /dev/null +++ b/out-tsc/app/app/data/services/model/data-entity.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"data-entity.model.js","sourceRoot":"","sources":["../../../../../../src/app/data/services/model/data-entity.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/services/model/data-filter.model.js b/out-tsc/app/app/data/services/model/data-filter.model.js new file mode 100644 index 000000000..d6926692f --- /dev/null +++ b/out-tsc/app/app/data/services/model/data-filter.model.js @@ -0,0 +1,69 @@ +import { Department, EntityFilter, isNil, isNotNil } from '@sumaris-net/ngx-components'; +import { QualityFlagIds } from '@app/referential/services/model/model.enum'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +export class DataEntityFilter extends EntityFilter { + fromObject(source, opts) { + super.fromObject(source, opts); + this.recorderDepartment = Department.fromObject(source.recorderDepartment) + || isNotNil(source.recorderDepartmentId) && Department.fromObject({ id: source.recorderDepartmentId }) + || undefined; + this.dataQualityStatus = source.dataQualityStatus; + this.qualityFlagId = source.qualityFlagId; + } + asObject(opts) { + const target = super.asObject(opts); + if (opts && opts.minify) { + target.recorderDepartmentId = this.recorderDepartment && isNotNil(this.recorderDepartment.id) ? this.recorderDepartment.id : undefined; + delete target.recorderDepartment; + target.qualityFlagIds = isNotNil(this.qualityFlagId) ? [this.qualityFlagId] : undefined; + delete target.qualityFlagId; + target.dataQualityStatus = this.dataQualityStatus && [this.dataQualityStatus] || undefined; + // If filter on NOT qualified data, remove quality flag + if (Array.isArray(target.dataQualityStatus) && target.dataQualityStatus.length && !target.dataQualityStatus.includes('QUALIFIED')) { + delete target.qualityFlagIds; + } + } + else { + target.recorderDepartment = this.recorderDepartment && this.recorderDepartment.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS)); + target.dataQualityStatus = this.dataQualityStatus; + } + return target; + } + buildFilter() { + const filterFns = super.buildFilter(); + // Department + if (this.recorderDepartment) { + const recorderDepartmentId = this.recorderDepartment.id; + if (isNotNil(recorderDepartmentId)) { + filterFns.push(t => (t.recorderDepartment && t.recorderDepartment.id === recorderDepartmentId)); + } + } + // Quality flag + if (isNotNil(this.qualityFlagId)) { + const qualityFlagId = this.qualityFlagId; + filterFns.push((t => isNotNil(t.qualityFlagId) && t.qualityFlagId === qualityFlagId)); + } + // Quality status + if (isNotNil(this.dataQualityStatus)) { + switch (this.dataQualityStatus) { + case 'MODIFIED': + filterFns.push(t => isNil(t.controlDate)); + break; + case 'CONTROLLED': + filterFns.push(t => isNotNil(t.controlDate)); + break; + case 'VALIDATED': + // Must be done in sub-classes (see RootDataEntity) + break; + case 'QUALIFIED': + filterFns.push(t => isNotNil(t.qualityFlagId) + && t.qualityFlagId !== QualityFlagIds.NOT_QUALIFIED + // Exclude incomplete OPE (e.g. filage) + && t.qualityFlagId !== QualityFlagIds.NOT_COMPLETED); + break; + } + } + return filterFns; + } +} +//# sourceMappingURL=data-filter.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/services/model/data-filter.model.js.map b/out-tsc/app/app/data/services/model/data-filter.model.js.map new file mode 100644 index 000000000..81a8c60f6 --- /dev/null +++ b/out-tsc/app/app/data/services/model/data-filter.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"data-filter.model.js","sourceRoot":"","sources":["../../../../../../src/app/data/services/model/data-filter.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/services/model/model.utils.js b/out-tsc/app/app/data/services/model/model.utils.js new file mode 100644 index 000000000..182098efb --- /dev/null +++ b/out-tsc/app/app/data/services/model/model.utils.js @@ -0,0 +1,149 @@ +import { StatusIds } from '@sumaris-net/ngx-components'; +import { QualityFlagIds, QualityFlags } from '@app/referential/services/model/model.enum'; +export const SynchronizationStatusEnum = Object.freeze({ + DIRTY: 'DIRTY', + READY_TO_SYNC: 'READY_TO_SYNC', + SYNC: 'SYNC', + DELETED: 'DELETED', + TEMPORARY: 'TEMPORARY' +}); +export const DataQualityStatusIds = Object.freeze({ + MODIFIED: 'MODIFIED', + CONTROLLED: 'CONTROLLED', + VALIDATED: 'VALIDATED', + QUALIFIED: 'QUALIFIED', +}); +export const DataQualityStatusEnum = Object.freeze({ + MODIFIED: { + id: DataQualityStatusIds.MODIFIED, + icon: 'pencil', + label: 'QUALITY.MODIFIED' + }, + CONTROLLED: { + id: DataQualityStatusIds.CONTROLLED, + icon: 'checkmark', + label: 'QUALITY.CONTROLLED' + }, + VALIDATED: { + id: DataQualityStatusIds.VALIDATED, + icon: 'checkmark-circle', + label: 'QUALITY.VALIDATED' + }, + QUALIFIED: { + id: DataQualityStatusIds.QUALIFIED, + icon: 'flag', + label: 'QUALITY.QUALIFIED' + } +}); +export const DataQualityStatusList = Object.freeze([ + DataQualityStatusEnum.MODIFIED, + DataQualityStatusEnum.CONTROLLED, + DataQualityStatusEnum.VALIDATED, + DataQualityStatusEnum.QUALIFIED +]); +/* -- Helper function -- */ +export function getMaxRankOrder(values) { + let maxRankOrder = 0; + (values || []).forEach(m => { + if (m.rankOrder && m.rankOrder > maxRankOrder) + maxRankOrder = m.rankOrder; + }); + return maxRankOrder; +} +export function fillRankOrder(values) { + if (!values) + return; // Skip + // Compute rankOrder + let maxRankOrder = getMaxRankOrder(values); + (values || []).forEach(m => { + m.rankOrder = m.rankOrder || ++maxRankOrder; + }); +} +export function fillTreeRankOrder(values) { + // Compute rankOrder + let maxRankOrder = getMaxRankOrder(values); + (values || []).forEach(m => { + m.rankOrder = m.rankOrder || ++maxRankOrder; + if (m.children) + fillTreeRankOrder(m.children); + }); +} +/** + * Compare unique rankOrder from values with values count + * + * @param values + * @return true if all rankOrder are unique + */ +export function isRankOrderValid(values) { + return (values || []).length === + (values || []).filter((v1, i, array) => array.findIndex(v2 => v2.rankOrder === v1.rankOrder) === i).length; +} +export function qualityFlagToColor(qualityFlagId) { + switch (qualityFlagId) { + case QualityFlagIds.NOT_QUALIFIED: + return 'secondary'; + case QualityFlagIds.GOOD: + case QualityFlagIds.FIXED: + return 'success'; + case QualityFlagIds.OUT_STATS: + case QualityFlagIds.DOUBTFUL: + return 'warning'; + case QualityFlagIds.BAD: + case QualityFlagIds.MISSING: + case QualityFlagIds.NOT_COMPLETED: + return 'danger'; + default: + return 'secondary'; + } +} +export function qualityFlagInvalid(qualityFlagId) { + switch (qualityFlagId) { + case QualityFlagIds.BAD: + case QualityFlagIds.MISSING: + case QualityFlagIds.NOT_COMPLETED: + return true; + default: + return false; + } +} +export function qualityFlagToIcon(qualityFlagId) { + switch (qualityFlagId) { + case QualityFlagIds.NOT_QUALIFIED: + return undefined; + case QualityFlagIds.GOOD: + case QualityFlagIds.FIXED: + return 'flag'; + case QualityFlagIds.OUT_STATS: + case QualityFlagIds.DOUBTFUL: + return 'warning'; + case QualityFlagIds.BAD: + case QualityFlagIds.MISSING: + return 'alert-circle'; + case QualityFlagIds.NOT_COMPLETED: + return 'time-outline'; + default: + return 'flag'; + } +} +export function statusToColor(statusId) { + switch (statusId) { + case StatusIds.ENABLE: + return 'tertiary'; + case StatusIds.TEMPORARY: + return 'secondary'; + case StatusIds.DISABLE: + return 'danger'; + default: + return 'secondary'; + } +} +export function translateQualityFlag(qualityFlagId, qualityFlags) { + // Get label from the input list, if any + let qualityFlag = qualityFlags && qualityFlags.find(qf => qf.id === qualityFlagId); + if (qualityFlag && qualityFlag.label) + return qualityFlag.label; + // Or try to compute a label from the model enumeration + qualityFlag = qualityFlag || QualityFlags.find(qf => qf.id === qualityFlagId); + return qualityFlag ? ('QUALITY.QUALITY_FLAGS.' + qualityFlag.label) : undefined; +} +//# sourceMappingURL=model.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/services/model/model.utils.js.map b/out-tsc/app/app/data/services/model/model.utils.js.map new file mode 100644 index 000000000..69c6e669b --- /dev/null +++ b/out-tsc/app/app/data/services/model/model.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"model.utils.js","sourceRoot":"","sources":["../../../../../../src/app/data/services/model/model.utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/services/model/root-data-entity.model.js b/out-tsc/app/app/data/services/model/root-data-entity.model.js new file mode 100644 index 000000000..062a52683 --- /dev/null +++ b/out-tsc/app/app/data/services/model/root-data-entity.model.js @@ -0,0 +1,79 @@ +import { fromDateISOString, isNil, Person, ReferentialRef, toDateISOString } from '@sumaris-net/ngx-components'; +import { DataEntity, DataEntityUtils } from './data-entity.model'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +export class RootDataEntity extends DataEntity { + constructor(__typename) { + super(__typename); + this.creationDate = null; + this.validationDate = null; + this.comments = null; + this.recorderPerson = null; + this.program = null; + this.synchronizationStatus = null; + } + static fromObject(source) { + const target = new RootDataEntity(); + target.fromObject(source); + return target; + } + asObject(options) { + const target = super.asObject(options); + target.creationDate = toDateISOString(this.creationDate); + target.validationDate = toDateISOString(this.validationDate); + target.recorderPerson = this.recorderPerson && this.recorderPerson.asObject(options) || undefined; + target.program = this.program && this.program.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS /*always keep for table*/)) || undefined; + if (options && options.minify) { + if (target.program) + delete target.program.entityName; + if (options.keepSynchronizationStatus !== true) { + delete target.synchronizationStatus; // Remove by default, when minify, because not exists on pod's model + } + } + return target; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.comments = source.comments; + this.creationDate = fromDateISOString(source.creationDate); + this.validationDate = fromDateISOString(source.validationDate); + this.recorderPerson = source.recorderPerson && Person.fromObject(source.recorderPerson); + // Keep existing program, if not in source (because some forms can disable the program field - e.g. ObservedLocationForm) + this.program = source.program && ReferentialRef.fromObject(source.program) || this.program; + this.synchronizationStatus = source.synchronizationStatus; + } +} +export class RootDataEntityUtils { + static copyControlAndValidationDate(source, target) { + if (!source) + return; + DataEntityUtils.copyControlDate(source, target); + target.validationDate = fromDateISOString(source.validationDate); + } + static isNew(entity) { + return isNil(entity.id); + } + static isLocal(entity) { + return entity && (isNil(entity.id) ? (entity.synchronizationStatus && entity.synchronizationStatus !== 'SYNC') : entity.id < 0); + } + static isRemote(entity) { + return entity && !RootDataEntityUtils.isLocal(entity); + } + static isLocalAndDirty(entity) { + return entity && entity.id < 0 && entity.synchronizationStatus === 'DIRTY' || false; + } + static isReadyToSync(entity) { + return entity && entity.id < 0 && entity.synchronizationStatus === 'READY_TO_SYNC' || false; + } + static markAsDirty(entity) { + if (!entity) + return; // skip + // Remove control flags + DataEntityUtils.markAsNotControlled(entity); + // On local entity: change the synchronization statuc + if (entity.id < 0) { + entity.synchronizationStatus = 'DIRTY'; + } + } +} +RootDataEntityUtils.copyQualificationDateAndFlag = DataEntityUtils.copyQualificationDateAndFlag; +//# sourceMappingURL=root-data-entity.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/services/model/root-data-entity.model.js.map b/out-tsc/app/app/data/services/model/root-data-entity.model.js.map new file mode 100644 index 000000000..adad4e2c7 --- /dev/null +++ b/out-tsc/app/app/data/services/model/root-data-entity.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"root-data-entity.model.js","sourceRoot":"","sources":["../../../../../../src/app/data/services/model/root-data-entity.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/services/model/root-data-filter.model.js b/out-tsc/app/app/data/services/model/root-data-filter.model.js new file mode 100644 index 000000000..942881135 --- /dev/null +++ b/out-tsc/app/app/data/services/model/root-data-filter.model.js @@ -0,0 +1,77 @@ +import { EntityUtils, fromDateISOString, isNil, isNotNil, isNotNilOrBlank, Person, ReferentialRef, ReferentialUtils, toDateISOString } from '@sumaris-net/ngx-components'; +import { DataEntityFilter } from './data-filter.model'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +export class RootDataEntityFilter extends DataEntityFilter { + fromObject(source, opts) { + var _a, _b; + super.fromObject(source, opts); + this.synchronizationStatus = source.synchronizationStatus || undefined; + this.program = ReferentialRef.fromObject(source.program) || + isNotNilOrBlank(source.programLabel) && ReferentialRef.fromObject({ label: source.programLabel }) || undefined; + this.strategy = ReferentialRef.fromObject(source.strategy); + this.recorderPerson = Person.fromObject(source.recorderPerson) + || isNotNil(source.recorderPersonId) && Person.fromObject({ id: source.recorderPersonId }) || undefined; + this.startDate = (_a = fromDateISOString(source.startDate)) === null || _a === void 0 ? void 0 : _a.startOf('day'); + this.endDate = (_b = fromDateISOString(source.endDate)) === null || _b === void 0 ? void 0 : _b.endOf('day'); + } + asObject(opts) { + var _a, _b, _c, _d, _e, _f, _g; + const target = super.asObject(opts); + if (opts && opts.minify) { + target.startDate = toDateISOString((_a = this.startDate) === null || _a === void 0 ? void 0 : _a.clone().startOf('day')); + target.endDate = toDateISOString((_b = this.endDate) === null || _b === void 0 ? void 0 : _b.clone().endOf('day')); + target.programLabel = ((_c = this.program) === null || _c === void 0 ? void 0 : _c.label) || undefined; + delete target.program; + target.strategyLabels = ((_d = this.strategy) === null || _d === void 0 ? void 0 : _d.label) ? [this.strategy.label] : undefined; + delete target.strategy; + target.recorderPersonId = this.recorderPerson && this.recorderPerson.id || undefined; + delete target.recorderPerson; + // Not exits in pod + delete target.synchronizationStatus; + } + else { + target.startDate = toDateISOString(this.startDate); + target.endDate = toDateISOString(this.endDate); + target.program = ((_e = this.program) === null || _e === void 0 ? void 0 : _e.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))) || undefined; + target.strategy = ((_f = this.strategy) === null || _f === void 0 ? void 0 : _f.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))) || undefined; + target.recorderPerson = ((_g = this.recorderPerson) === null || _g === void 0 ? void 0 : _g.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))) || undefined; + target.synchronizationStatus = this.synchronizationStatus; + } + return target; + } + buildFilter(opts = { skipProgram: false }) { + const filterFns = super.buildFilter(); + // Program + if (this.program && !opts.skipProgram) { + const programId = this.program.id; + const programLabel = this.program.label; + if (isNotNil(programId)) { + filterFns.push(t => (t.program && t.program.id === programId)); + } + else if (isNotNilOrBlank(programLabel)) { + filterFns.push(t => (t.program && t.program.label === programLabel)); + } + } + // Recorder person + if (ReferentialUtils.isNotEmpty(this.recorderPerson)) { + const recorderPersonId = this.recorderPerson.id; + filterFns.push(t => (t.recorderPerson && t.recorderPerson.id === recorderPersonId)); + } + // Synchronization status + if (this.synchronizationStatus) { + if (this.synchronizationStatus === 'SYNC') { + filterFns.push(EntityUtils.isRemote); + } + else { + const synchronizationStatus = this.dataQualityStatus === 'CONTROLLED' ? 'READY_TO_SYNC' : undefined; + filterFns.push(t => EntityUtils.isLocal(t) && (!synchronizationStatus || t.synchronizationStatus === synchronizationStatus)); + } + } + // Quality status (only validated status : other case has been processed in the super class) + if (this.dataQualityStatus === 'VALIDATED') { + filterFns.push(t => isNil(t.validationDate)); + } + return filterFns; + } +} +//# sourceMappingURL=root-data-filter.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/services/model/root-data-filter.model.js.map b/out-tsc/app/app/data/services/model/root-data-filter.model.js.map new file mode 100644 index 000000000..96c01e956 --- /dev/null +++ b/out-tsc/app/app/data/services/model/root-data-filter.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"root-data-filter.model.js","sourceRoot":"","sources":["../../../../../../src/app/data/services/model/root-data-filter.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/services/model/root-vessel-entity.model.js b/out-tsc/app/app/data/services/model/root-vessel-entity.model.js new file mode 100644 index 000000000..3922a6a86 --- /dev/null +++ b/out-tsc/app/app/data/services/model/root-vessel-entity.model.js @@ -0,0 +1,19 @@ +import { RootDataEntity } from './root-data-entity.model'; +import { VesselSnapshot } from '@app/referential/services/model/vessel-snapshot.model'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +export class DataRootVesselEntity extends RootDataEntity { + constructor(__typename) { + super(__typename); + this.vesselSnapshot = null; + } + asObject(options) { + const target = super.asObject(options); + target.vesselSnapshot = this.vesselSnapshot && this.vesselSnapshot.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS)) || undefined; + return target; + } + fromObject(source, opts) { + super.fromObject(source); + this.vesselSnapshot = source.vesselSnapshot && VesselSnapshot.fromObject(source.vesselSnapshot); + } +} +//# sourceMappingURL=root-vessel-entity.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/services/model/root-vessel-entity.model.js.map b/out-tsc/app/app/data/services/model/root-vessel-entity.model.js.map new file mode 100644 index 000000000..21e0d1c60 --- /dev/null +++ b/out-tsc/app/app/data/services/model/root-vessel-entity.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"root-vessel-entity.model.js","sourceRoot":"","sources":["../../../../../../src/app/data/services/model/root-vessel-entity.model.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,cAAc,EAAC,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAA4B,cAAc,EAAC,MAAM,uDAAuD,CAAC;AAChH,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAGhF,MAAM,OAAgB,oBAIpB,SAAQ,cAA2B;IAKnC,YAAsB,UAAmB;QACvC,KAAK,CAAC,UAAU,CAAC,CAAC;QAClB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,QAAQ,CAAC,OAAW;QAClB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,iCAAM,OAAO,GAAK,kBAAkB,EAAG,IAAI,SAAS,CAAC;QAChI,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,MAAW,EAAE,IAAQ;QAC9B,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAClG,CAAC;CACF"} \ No newline at end of file diff --git a/out-tsc/app/app/data/services/root-data-service.class.js b/out-tsc/app/app/data/services/root-data-service.class.js new file mode 100644 index 000000000..813b1b947 --- /dev/null +++ b/out-tsc/app/app/data/services/root-data-service.class.js @@ -0,0 +1,268 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Directive, Injector } from '@angular/core'; +import { AccountService, BaseEntityService, EntityUtils, GraphqlService, isNil, isNotNil, PlatformService, } from '@sumaris-net/ngx-components'; +import { RootDataEntityUtils } from './model/root-data-entity.model'; +import { DataErrorCodes } from './errors'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +import { of } from 'rxjs'; +let BaseRootDataService = class BaseRootDataService extends BaseEntityService { + constructor(injector, dataType, filterType, options) { + super(injector.get(GraphqlService), injector.get(PlatformService), dataType, filterType, options); + this.accountService = this.accountService || (injector && injector.get(AccountService)) || undefined; + this.programRefService = this.programRefService || (injector && injector.get(ProgramRefService)) || undefined; + } + canUserWrite(entity, opts) { + return (EntityUtils.isLocal(entity) || // For performance, always give write access to local data + this.accountService.isAdmin() || + (this.programRefService.canUserWriteEntity(entity, opts) && (isNil(entity.validationDate) || this.accountService.isSupervisor()))); + } + listenChanges(id, opts) { + if (EntityUtils.isLocalId(+id)) + return of(); + return super.listenChanges(id, opts); + } + terminate(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.mutations.terminate) + throw Error('Not implemented'); + if (isNil(entity.id) || +entity.id < 0) { + throw new Error('Entity must be saved before terminate!'); + } + // Fill options + opts = yield this.fillTerminateOption(entity, opts); + // Prepare to save + this.fillDefaultProperties(entity); + // Transform into json + const json = this.asObject(entity); + const now = this._debug && Date.now(); + if (this._debug) + console.debug(this._logPrefix + `Terminate entity {${entity.id}}...`, json); + yield this.graphql.mutate({ + mutation: this.mutations.terminate, + variables: { + data: json, + options: (opts === null || opts === void 0 ? void 0 : opts.withChildren) ? { withChildren: true } : undefined, + }, + error: { code: DataErrorCodes.TERMINATE_ENTITY_ERROR, message: 'ERROR.TERMINATE_ENTITY_ERROR' }, + update: (proxy, { data }) => { + this.copyIdAndUpdateDate(data && data.data, entity); + if (this._debug) + console.debug(this._logPrefix + `Entity terminated in ${Date.now() - now}ms`, entity); + }, + }); + return entity; + }); + } + /** + * Validate an root entity + * + * @param entity + */ + validate(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.mutations.validate) + throw Error('Not implemented'); + if (isNil(entity.id) || EntityUtils.isLocal(entity)) { + throw new Error('Entity must be saved once before validate !'); + } + if (isNil(entity.controlDate)) { + throw new Error('Entity must be controlled before validate !'); + } + if (isNotNil(entity.validationDate)) { + throw new Error('Entity is already validated !'); + } + // Fill options + opts = yield this.fillValidateOption(entity, opts); + // Prepare to save + this.fillDefaultProperties(entity); + // Transform into json + const json = this.asObject(entity); + const now = Date.now(); + if (this._debug) + console.debug(this._logPrefix + `Validate entity {${entity.id}}...`, json); + yield this.graphql.mutate({ + mutation: this.mutations.validate, + variables: { + data: json, + options: (opts === null || opts === void 0 ? void 0 : opts.withChildren) ? { withChildren: true } : undefined, + }, + error: { code: DataErrorCodes.VALIDATE_ENTITY_ERROR, message: 'ERROR.VALIDATE_ENTITY_ERROR' }, + update: (cache, { data }) => { + this.copyIdAndUpdateDate(data && data.data, entity); + if (this._debug) + console.debug(this._logPrefix + `Entity validated in ${Date.now() - now}ms`, entity); + this.refetchMutableWatchQueries({ queries: this.getLoadQueries() }); + }, + }); + return entity; + }); + } + unvalidate(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.mutations.unvalidate) + throw Error('Not implemented'); + if (isNil(entity.validationDate)) { + throw new Error('Entity is not validated yet !'); + } + // Fill options + opts = yield this.fillValidateOption(entity, opts); + // Prepare to save + this.fillDefaultProperties(entity); + // Transform into json + const json = this.asObject(entity); + const now = Date.now(); + if (this._debug) + console.debug(this._logPrefix + 'Unvalidate entity...', json); + yield this.graphql.mutate({ + mutation: this.mutations.unvalidate, + variables: { + data: json, + options: (opts === null || opts === void 0 ? void 0 : opts.withChildren) ? { withChildren: true } : undefined, + }, + context: { + // TODO serializationKey: + tracked: true, + }, + error: { code: DataErrorCodes.UNVALIDATE_ENTITY_ERROR, message: 'ERROR.UNVALIDATE_ENTITY_ERROR' }, + update: (proxy, { data }) => { + const savedEntity = data && data.data; + if (savedEntity) { + if (savedEntity !== entity) { + this.copyIdAndUpdateDate(savedEntity, entity); + } + if (this._debug) + console.debug(this._logPrefix + `Entity unvalidated in ${Date.now() - now}ms`, entity); + } + this.refetchMutableWatchQueries({ queries: this.getLoadQueries() }); + }, + }); + return entity; + }); + } + qualify(entity, qualityFlagId) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.mutations.qualify) + throw Error('Not implemented'); + if (isNil(entity.validationDate)) { + throw new Error('Entity is not validated yet !'); + } + // Prepare to save + this.fillDefaultProperties(entity); + // Transform into json + const json = this.asObject(entity); + json.qualityFlagId = qualityFlagId; + const now = Date.now(); + if (this._debug) + console.debug(this._logPrefix + 'Qualifying entity...', json); + yield this.graphql.mutate({ + mutation: this.mutations.qualify, + variables: { + data: json, + }, + error: { code: DataErrorCodes.QUALIFY_ENTITY_ERROR, message: 'ERROR.QUALIFY_ENTITY_ERROR' }, + update: (cache, { data }) => { + const savedEntity = data && data.data; + this.copyIdAndUpdateDate(savedEntity, entity); + RootDataEntityUtils.copyQualificationDateAndFlag(savedEntity, entity); + if (this._debug) + console.debug(this._logPrefix + `Entity qualified in ${Date.now() - now}ms`, entity); + }, + }); + return entity; + }); + } + copyIdAndUpdateDate(source, target) { + if (!source) + return; + EntityUtils.copyIdAndUpdateDate(source, target); + // Copy control and validation date + RootDataEntityUtils.copyControlAndValidationDate(source, target); + } + /* -- protected methods -- */ + asObject(entity, opts) { + opts = Object.assign(Object.assign({}, MINIFY_OPTIONS), opts); + const copy = entity.asObject(opts); + if (opts && opts.minify) { + // Comment because need to keep recorder person + copy.recorderPerson = + entity.recorderPerson && + { + id: entity.recorderPerson.id, + firstName: entity.recorderPerson.firstName, + lastName: entity.recorderPerson.lastName, + }; + // Keep id only, on department + copy.recorderDepartment = (entity.recorderDepartment && { id: entity.recorderDepartment && entity.recorderDepartment.id }) || undefined; + } + return copy; + } + fillDefaultProperties(entity) { + // If new entity + const isNew = isNil(entity.id); + if (isNew) { + const person = this.accountService.person; + // Recorder department + if (person && person.department && !entity.recorderDepartment) { + entity.recorderDepartment = person.department; + } + // Recorder person + if (person && person.id && !entity.recorderPerson) { + entity.recorderPerson = person; + } + } + } + fillRecorderDepartment(entities, department) { + if (isNil(entities)) + return; + if (!Array.isArray(entities)) { + entities = [entities]; + } + department = department || this.accountService.department; + entities.forEach((entity) => { + if (!entity.recorderDepartment || !entity.recorderDepartment.id) { + // Recorder department + if (department) { + entity.recorderDepartment = department; + } + } + }); + } + fillTerminateOption(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + return this.fillProgramOptions(entity, opts); + }); + } + fillValidateOption(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + return this.fillProgramOptions(entity, opts); + }); + } + fillProgramOptions(entity, opts) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + opts = opts || {}; + // Load program (need only properties) + const programLabel = (_a = entity === null || entity === void 0 ? void 0 : entity.program) === null || _a === void 0 ? void 0 : _a.label; + if (((_b = opts.program) === null || _b === void 0 ? void 0 : _b.label) !== programLabel) { + opts.program = yield this.programRefService.loadByLabel(programLabel); + } + return opts; + }); + } + resetQualityProperties(entity) { + entity.controlDate = undefined; + entity.validationDate = undefined; + entity.qualificationDate = undefined; + entity.qualityFlagId = undefined; + // Do not reset qualification comments, because used to hold control errors + } +}; +BaseRootDataService = __decorate([ + Directive() + // tslint:disable-next-line:directive-class-suffix + , + __metadata("design:paramtypes", [Injector, Function, Function, Object]) +], BaseRootDataService); +export { BaseRootDataService }; +//# sourceMappingURL=root-data-service.class.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/services/root-data-service.class.js.map b/out-tsc/app/app/data/services/root-data-service.class.js.map new file mode 100644 index 000000000..072087669 --- /dev/null +++ b/out-tsc/app/app/data/services/root-data-service.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"root-data-service.class.js","sourceRoot":"","sources":["../../../../../src/app/data/services/root-data-service.class.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/services/root-data-synchro-service.class.js b/out-tsc/app/app/data/services/root-data-synchro-service.class.js new file mode 100644 index 000000000..a1404ae90 --- /dev/null +++ b/out-tsc/app/app/data/services/root-data-synchro-service.class.js @@ -0,0 +1,285 @@ +import { __awaiter } from "tslib"; +import { concat, defer, of, Subject } from 'rxjs'; +import { catchError, map, tap } from 'rxjs/operators'; +import { RootDataEntityUtils } from './model/root-data-entity.model'; +import { chainPromises, EntitiesStorage, EntityUtils, fromDateISOString, isEmptyArray, isNil, isNilOrNaN, isNotEmptyArray, JobUtils, LocalSettingsService, NetworkService, PersonService, toDateISOString } from '@sumaris-net/ngx-components'; +import { BaseRootDataService } from './root-data-service.class'; +import { VesselSnapshotService } from '@app/referential/services/vessel-snapshot.service'; +import { MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE } from './model/data-entity.model'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { DataErrorCodes } from './errors'; +import { ObservedLocation } from '@app/trip/observedlocation/observed-location.model'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { SynchronizationStatusEnum } from '@app/data/services/model/model.utils'; +import moment from 'moment'; +export class DataSynchroImportFilter { + static fromObject(source) { + const target = new DataSynchroImportFilter(); + target.fromObject(source); + return target; + } + fromObject(source, opts) { + this.programLabel = source.programLabel; + this.strategyIds = source.strategyIds; + this.vesselId = source.vesselId; + this.startDate = fromDateISOString(source.startDate); + this.endDate = fromDateISOString(source.endDate); + this.periodDuration = source.periodDuration; + this.periodDurationUnit = source.periodDurationUnit; + } + asObject(opts) { + const target = Object.assign({}, this); + target.startDate = toDateISOString(this.startDate); + target.endDate = toDateISOString(this.endDate); + if (opts === null || opts === void 0 ? void 0 : opts.minify) { + delete target.periodDurationUnit; + } + return target; + } +} +const DataSynchroServiceFnName = ['load', 'runImport', 'synchronizeById', 'synchronize', 'lastUpdateDate']; +export function isDataSynchroService(object) { + return object && DataSynchroServiceFnName.filter(fnName => (typeof object[fnName] === 'function')) + .length === DataSynchroServiceFnName.length || false; +} +export const DEFAULT_FEATURE_NAME = 'synchro'; +export class RootDataSynchroService extends BaseRootDataService { + constructor(injector, dataType, filterType, options) { + super(injector, dataType, filterType, options); + this.loading = false; + this.onSave = new Subject(); + this.onDelete = new Subject(); + this.onSynchronize = new Subject(); + this.referentialRefService = injector.get(ReferentialRefService); + this.personService = injector.get(PersonService); + this.vesselSnapshotService = injector.get(VesselSnapshotService); + this.programRefService = injector.get(ProgramRefService); + this.entities = injector.get(EntitiesStorage); + this.network = injector.get(NetworkService); + this.settings = injector.get(LocalSettingsService); + } + get featureName() { + return this._featureName || DEFAULT_FEATURE_NAME; + } + runImport(filter, opts) { + if (this.importationProgress$) + return this.importationProgress$; // Avoid many call + const totalProgression = opts && opts.maxProgression || 100; + const jobOpts = { maxProgression: undefined /* set later, when jobs length is known */ }; + const jobs = [ + // Clear caches + defer(() => this.network.clearCache() + .then(() => jobOpts.maxProgression)), + // Execute import Jobs + ...this.getImportJobs(filter, jobOpts), + // Save data to local storage, then set progression to the max + defer(() => this.entities.persist() + .then(() => jobOpts.maxProgression)) + ]; + const jobCount = jobs.length; + const progressionStep = Math.trunc(totalProgression / jobCount); + jobOpts.maxProgression = progressionStep; + const now = Date.now(); + console.info(`[root-data-service] Starting ${this.featureName} importation (${jobs.length} jobs)...`); + // Execute all jobs, one by one + let currentJobIndex = 0; + this.importationProgress$ = concat(...jobs.map((job, index) => job + .pipe(map(jobProgression => { + currentJobIndex = index; + if (isNilOrNaN(jobProgression) || jobProgression < 0) { + if (this._debug) + console.warn(`[root-data-service] WARN job #${currentJobIndex} sent invalid progression ${jobProgression}`); + jobProgression = 0; + } + else if (jobProgression > progressionStep) { + if (this._debug) + console.warn(`[root-data-service] WARN job #${currentJobIndex} sent invalid progression ${jobProgression} > ${progressionStep}`); + jobProgression = progressionStep; + } + // Compute total progression (= job offset + job progression) + return (index * progressionStep) + jobProgression; + }))), + // Finish (force totalProgression) + of(totalProgression) + .pipe(tap(() => { + this.importationProgress$ = null; + this.finishImport(); + console.info(`[root-data-service] Importation finished in ${Date.now() - now}ms`); + }))) // end of concat + .pipe(catchError((err) => { + this.importationProgress$ = null; + console.error(`[root-data-service] Error during importation (job #${currentJobIndex + 1}): ${err && err.message || err}`, err); + throw err; + }), map((progression) => Math.min(progression, totalProgression))); + return this.importationProgress$; + } + terminateById(id) { + return __awaiter(this, void 0, void 0, function* () { + const entity = yield this.load(id); + return this.terminate(entity); + }); + } + terminate(entity) { + const _super = Object.create(null, { + terminate: { get: () => super.terminate } + }); + return __awaiter(this, void 0, void 0, function* () { + // If local entity + if (EntityUtils.isLocal(entity)) { + // Make sure to fill id, with local ids + yield this.fillOfflineDefaultProperties(entity); + // Update sync status + entity.synchronizationStatus = 'READY_TO_SYNC'; + const json = this.asObject(entity, MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE); + if (this._debug) + console.debug(`${this._logPrefix}Terminate {${entity.id}} locally...`, json); + // Save entity locally + yield this.entities.save(json); + return entity; + } + // Terminate a remote entity + return _super.terminate.call(this, entity); + }); + } + synchronizeById(id) { + return __awaiter(this, void 0, void 0, function* () { + const entity = yield this.load(id); + if (!EntityUtils.isLocal(entity)) + return; // skip if not a local entity + return yield this.synchronize(entity); + }); + } + /** + * Check if there is offline data. + * Can be override by subclasses (e.g. to check in the entities storage) + */ + hasOfflineData() { + return __awaiter(this, void 0, void 0, function* () { + const featuresName = this._featureName || DEFAULT_FEATURE_NAME; + return this.settings.hasOfflineFeature(featuresName); + }); + } + /** + * Get remote last update date. By default, check on referential tables. + * Can be override by subclasses (e.g. to check in the entities storage) + */ + lastUpdateDate() { + return this.referentialRefService.lastUpdateDate(); + } + load(id, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.queries.load) + throw new Error('Not implemented'); + if (isNil(id)) + throw new Error('Missing argument \'id\''); + const now = Date.now(); + if (this._debug) + console.debug(`${this._logPrefix}Loading ${this._logTypeName} #${id}...`); + this.loading = true; + try { + let data; + // If local entity + if (EntityUtils.isLocalId(+id)) { + data = yield this.entities.load(+id, this._typename); + if (!data) + throw { code: DataErrorCodes.LOAD_ENTITY_ERROR, message: 'ERROR.LOAD_ENTITY_ERROR' }; + } + else { + const res = yield this.graphql.query({ + query: this.queries.load, + variables: { id }, + error: { code: DataErrorCodes.LOAD_ENTITY_ERROR, message: 'ERROR.LOAD_ENTITY_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || undefined + }); + data = res && res.data; + } + // Convert to entity + const entity = (!opts || opts.toEntity !== false) + ? this.fromObject(data) + : data; + if (entity && this._debug) + console.debug(`${this._logPrefix}${this._logTypeName} #${id} loaded in ${Date.now() - now}ms`, entity); + return entity; + } + finally { + this.loading = false; + } + }); + } + deleteAll(entities, opts) { + const _super = Object.create(null, { + deleteAll: { get: () => super.deleteAll } + }); + return __awaiter(this, void 0, void 0, function* () { + // Delete local entities + const localEntities = entities && entities.filter(RootDataEntityUtils.isLocal); + if (isNotEmptyArray(localEntities)) { + return this.deleteAllLocally(localEntities, opts); + } + const ids = entities && entities.map(t => t.id) + .filter(id => +id >= 0); + if (isEmptyArray(ids)) + return; // stop if empty + return _super.deleteAll.call(this, entities, opts); + }); + } + /* -- protected methods -- */ + fillOfflineDefaultProperties(entity) { + return __awaiter(this, void 0, void 0, function* () { + const isNew = isNil(entity.id); + // If new, generate a local id + if (isNew) { + entity.id = (yield this.entities.nextValue(entity)); + } + // Fill default synchronization status + entity.synchronizationStatus = entity.synchronizationStatus || SynchronizationStatusEnum.DIRTY; + }); + } + /** + * List of importation jobs. Can be override by subclasses, to add or remove some jobs + * + * @param opts + * @protected + */ + getImportJobs(filter, opts) { + return JobUtils.defers([ + (o) => this.referentialRefService.executeImport(filter, o), + (o) => this.personService.executeImport(filter, o), + (o) => this.vesselSnapshotService.executeImport(filter, o), + (o) => this.programRefService.executeImport(filter, o) + ], opts); + } + finishImport() { + this.settings.markOfflineFeatureAsSync(this.featureName); + } + /** + * Delete many local entities + * + * @param entities + * @param opts + */ + deleteAllLocally(entities, opts) { + return __awaiter(this, void 0, void 0, function* () { + // Get local entity ids, then delete id + const localEntities = entities && entities + .filter(RootDataEntityUtils.isLocal); + if (isEmptyArray(localEntities)) + return; // Skip if empty + const trash = !opts || opts.trash !== false; + const trashUpdateDate = trash && moment(); + if (this._debug) + console.debug(`${this._logPrefix}Deleting ${this._logTypeName} locally... {trash: ${trash}`); + yield chainPromises(localEntities.map(entity => () => __awaiter(this, void 0, void 0, function* () { + yield this.entities.delete(entity, { entityName: this._typename }); + if (trash) { + // Fill observedLocation's operation, before moving it to trash + entity.updateDate = trashUpdateDate; + const json = entity.asObject(Object.assign(Object.assign({}, MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE), { keepLocalId: false })); + // Add to trash + yield this.entities.saveToTrash(json, { entityName: ObservedLocation.TYPENAME }); + } + }))); + }); + } +} +//# sourceMappingURL=root-data-synchro-service.class.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/services/root-data-synchro-service.class.js.map b/out-tsc/app/app/data/services/root-data-synchro-service.class.js.map new file mode 100644 index 000000000..18052ffad --- /dev/null +++ b/out-tsc/app/app/data/services/root-data-synchro-service.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"root-data-synchro-service.class.js","sourceRoot":"","sources":["../../../../../src/app/data/services/root-data-synchro-service.class.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/services/validator/data-entity.validator.js b/out-tsc/app/app/data/services/validator/data-entity.validator.js new file mode 100644 index 000000000..49cf4457a --- /dev/null +++ b/out-tsc/app/app/data/services/validator/data-entity.validator.js @@ -0,0 +1,42 @@ +import { isNotNil, SharedValidators, toNumber } from '@sumaris-net/ngx-components'; +import { QualityFlagIds } from '@app/referential/services/model/model.enum'; +import { BaseValidatorService } from '@app/shared/service/base.validator.service'; +export class DataEntityValidatorService extends BaseValidatorService { + constructor(formBuilder, translate, settings) { + super(formBuilder, translate); + this.formBuilder = formBuilder; + this.translate = translate; + this.settings = settings; + } + getFormGroup(data, opts) { + opts = this.fillDefaultOptions(opts); + return this.formBuilder.group(this.getFormGroupConfig(data, opts), this.getFormGroupOptions(data, opts)); + } + getFormGroupConfig(data, opts) { + return { + id: [toNumber(data && data.id, null)], + updateDate: [data && data.updateDate || null], + recorderDepartment: [data && data.recorderDepartment || null, SharedValidators.entity], + // Quality properties + controlDate: [data && data.controlDate || null], + qualificationDate: [data && data.qualificationDate || null], + qualificationComments: [data && data.qualificationComments || null], + qualityFlagId: [toNumber(data && data.qualityFlagId, QualityFlagIds.NOT_QUALIFIED)] + }; + } + getFormGroupOptions(data, opts) { + return { updateOn: opts === null || opts === void 0 ? void 0 : opts.updateOn }; + } + updateFormGroup(form, opts) { + // Must be override by subclasses + console.warn(`${this.constructor.name}.updateFormGroup() not implemented yet!`); + } + /* -- protected methods -- */ + fillDefaultOptions(opts) { + var _a; + opts = opts || {}; + opts.isOnFieldMode = isNotNil(opts.isOnFieldMode) ? opts.isOnFieldMode : (((_a = this.settings) === null || _a === void 0 ? void 0 : _a.isOnFieldMode()) || false); + return opts; + } +} +//# sourceMappingURL=data-entity.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/services/validator/data-entity.validator.js.map b/out-tsc/app/app/data/services/validator/data-entity.validator.js.map new file mode 100644 index 000000000..2676b078c --- /dev/null +++ b/out-tsc/app/app/data/services/validator/data-entity.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"data-entity.validator.js","sourceRoot":"","sources":["../../../../../../src/app/data/services/validator/data-entity.validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAwB,gBAAgB,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEzG,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAUlF,MAAM,OAAgB,0BAIpB,SAAQ,oBAAkC;IAG1C,YACY,WAA+B,EAC/B,SAA2B,EAC3B,QAA8B;QAExC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAJpB,gBAAW,GAAX,WAAW,CAAoB;QAC/B,cAAS,GAAT,SAAS,CAAkB;QAC3B,aAAQ,GAAR,QAAQ,CAAsB;IAG1C,CAAC;IAED,YAAY,CAAC,IAAQ,EAAE,IAAQ;QAE7B,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAErC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAC3B,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,EACnC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CACrC,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,IAAQ,EAAE,IAAQ;QAInC,OAAO;YACL,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACrC,UAAU,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;YAC7C,kBAAkB,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC;YACtF,qBAAqB;YACrB,WAAW,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;YAC/C,iBAAiB,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC;YAC3D,qBAAqB,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC;YACnE,aAAa,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;SACpF,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,IAAQ,EAAE,IAAQ;QACpC,OAAO,EAAE,QAAQ,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,EAAE,CAAC;IACtC,CAAC;IAED,eAAe,CAAC,IAAsB,EAAE,IAAQ;QAC9C,iCAAiC;QACjC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,yCAAyC,CAAC,CAAC;IAClF,CAAC;IAED,6BAA6B;IAEnB,kBAAkB,CAAC,IAAQ;;QACnC,IAAI,GAAG,IAAI,IAAI,EAAO,CAAC;QAEvB,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,aAAa,EAAE,KAAI,KAAK,CAAC,CAAC;QAEnH,OAAO,IAAI,CAAC;IACd,CAAC;CACF"} \ No newline at end of file diff --git a/out-tsc/app/app/data/services/validator/data.validators.js b/out-tsc/app/app/data/services/validator/data.validators.js new file mode 100644 index 000000000..30c1fd49b --- /dev/null +++ b/out-tsc/app/app/data/services/validator/data.validators.js @@ -0,0 +1,53 @@ +import { AppFormUtils, isNotNil } from '@sumaris-net/ngx-components'; +export class DataValidators { + static excludeQualityFlag(qualityFlagIds, msg) { + const excludedIds = Array.isArray(qualityFlagIds) ? qualityFlagIds : [qualityFlagIds]; + return (control) => { + var _a; + const qualityFlagId = (_a = control.value) === null || _a === void 0 ? void 0 : _a.qualityFlagId; + if (isNotNil(qualityFlagId) && excludedIds.includes(qualityFlagId)) { + if (msg) + return { msg }; + return { excludeQualityFlag: true }; + } + return null; + }; + } + static resetCalculatedFlag(fieldName, fieldNamesToReset) { + return (group) => { + const control = group.get(fieldName); + const calculatedFieldName = fieldName + AppFormUtils.calculatedSuffix; + const calculatedControl = group.get(calculatedFieldName); + if (!control || !calculatedControl) + throw new Error(`Unable to find field '${fieldName}' or '${calculatedFieldName}' to check!`); + if (control.dirty) { + // Reset calculated flag=false on control + calculatedControl.setValue(false, { onlySelf: true }); + control.markAsPristine(); + // Get other controls + const controls = fieldNamesToReset.map((name) => group.get(name)); + const calculatedFieldNamesToReset = fieldNamesToReset.map((name) => name + AppFormUtils.calculatedSuffix); + const calculatedControls = calculatedFieldNamesToReset.map((fieldName) => group.get(fieldName)); + if (controls.some((c) => c === undefined) || calculatedControls.some((control) => control === undefined)) { + throw new Error(`Unable to find some fields '${fieldNamesToReset}' or '${calculatedFieldNamesToReset}' to reset!`); + } + // Reset calculated flag=true on controls + calculatedControls.forEach((c) => c.setValue(true, { onlySelf: true })); + controls.forEach((controlToReset) => controlToReset.markAsPristine()); + } + return null; + }; + } + static remoteEntity(msg) { + return (control) => { + const value = control.value; + if (value && (typeof value !== 'object' || value.id === undefined || value.id === null || value.id < 0)) { + if (msg) + return { msg }; + return { remoteEntity: true }; + } + return null; + }; + } +} +//# sourceMappingURL=data.validators.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/services/validator/data.validators.js.map b/out-tsc/app/app/data/services/validator/data.validators.js.map new file mode 100644 index 000000000..49e684ede --- /dev/null +++ b/out-tsc/app/app/data/services/validator/data.validators.js.map @@ -0,0 +1 @@ +{"version":3,"file":"data.validators.js","sourceRoot":"","sources":["../../../../../../src/app/data/services/validator/data.validators.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/services/validator/root-data-entity.validator.js b/out-tsc/app/app/data/services/validator/root-data-entity.validator.js new file mode 100644 index 000000000..fff553cfc --- /dev/null +++ b/out-tsc/app/app/data/services/validator/root-data-entity.validator.js @@ -0,0 +1,33 @@ +import { AppFormArray, ReferentialUtils, SharedFormArrayValidators, SharedValidators, } from '@sumaris-net/ngx-components'; +import { Validators } from '@angular/forms'; +import { DataEntityValidatorService } from './data-entity.validator'; +export class DataRootEntityValidatorService extends DataEntityValidatorService { + constructor(formBuilder, translate, settings) { + super(formBuilder, translate, settings); + } + getFormGroupConfig(data, opts) { + return Object.assign(super.getFormGroupConfig(data), { + program: [data && data.program || null, Validators.compose([Validators.required, SharedValidators.entity])], + creationDate: [data && data.creationDate || null], + validationDate: [data && data.validationDate || null], + recorderPerson: [data && data.recorderPerson || null, SharedValidators.entity], + comments: [data && data.comments || null, Validators.maxLength(2000)], + synchronizationStatus: [data && data.synchronizationStatus || null] + }); + } + getObserversFormArray(data, opts) { + const required = !opts || opts.required !== false; + const formArray = new AppFormArray((value) => this.getObserverControl(value, { required }), ReferentialUtils.equals, ReferentialUtils.isEmpty, { + allowEmptyArray: false, + validators: required ? SharedFormArrayValidators.requiredArrayMinLength(1) : null + }); + if (data || required) { + formArray.patchValue(data || [null]); + } + return formArray; + } + getObserverControl(observer, opts) { + return this.formBuilder.control(observer || null, (opts === null || opts === void 0 ? void 0 : opts.required) ? [Validators.required, SharedValidators.entity] : SharedValidators.entity); + } +} +//# sourceMappingURL=root-data-entity.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/services/validator/root-data-entity.validator.js.map b/out-tsc/app/app/data/services/validator/root-data-entity.validator.js.map new file mode 100644 index 000000000..165fd3ac9 --- /dev/null +++ b/out-tsc/app/app/data/services/validator/root-data-entity.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"root-data-entity.validator.js","sourceRoot":"","sources":["../../../../../../src/app/data/services/validator/root-data-entity.validator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAGZ,gBAAgB,EAChB,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAA0C,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGpF,OAAO,EAA8B,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAQjG,MAAM,OAAgB,8BACpB,SAAQ,0BAAgC;IAExC,YACE,WAA+B,EAC/B,SAA2B,EAC3B,QAA8B;QAE9B,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,kBAAkB,CAAC,IAAQ,EAAE,IAAQ;QAInC,OAAO,MAAM,CAAC,MAAM,CAClB,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAC9B;YACE,OAAO,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3G,YAAY,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;YACjD,cAAc,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC;YACrD,cAAc,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC;YAC9E,QAAQ,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACrE,qBAAqB,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC;SACpE,CAAC,CAAC;IACP,CAAC;IAED,qBAAqB,CAAC,IAAe,EAAE,IAA2B;QAChE,MAAM,QAAQ,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,YAAY,CAChC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,EAAC,QAAQ,EAAC,CAAC,EACrD,gBAAgB,CAAC,MAAM,EACvB,gBAAgB,CAAC,OAAO,EACxB;YACE,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,yBAAyB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;SAClF,CACF,CAAC;QACF,IAAI,IAAI,IAAI,QAAQ,EAAE;YACpB,SAAS,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SACtC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,kBAAkB,CAAC,QAAiB,EAAE,IAA2B;QAC/D,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,EAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/I,CAAC;CACF"} \ No newline at end of file diff --git a/out-tsc/app/app/data/services/validator/root-vessel-entity.validator.js b/out-tsc/app/app/data/services/validator/root-vessel-entity.validator.js new file mode 100644 index 000000000..8144f24f5 --- /dev/null +++ b/out-tsc/app/app/data/services/validator/root-vessel-entity.validator.js @@ -0,0 +1,14 @@ +import { Validators } from '@angular/forms'; +import { SharedValidators } from '@sumaris-net/ngx-components'; +import { DataRootEntityValidatorService } from './root-data-entity.validator'; +export class DataRootVesselEntityValidatorService extends DataRootEntityValidatorService { + constructor(formBuilder, translate, settings) { + super(formBuilder, translate, settings); + } + getFormGroupConfig(data, opts) { + return Object.assign(super.getFormGroupConfig(data), { + vesselSnapshot: [data && data.vesselSnapshot || null, Validators.compose([Validators.required, SharedValidators.entity])] + }); + } +} +//# sourceMappingURL=root-vessel-entity.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/services/validator/root-vessel-entity.validator.js.map b/out-tsc/app/app/data/services/validator/root-vessel-entity.validator.js.map new file mode 100644 index 000000000..6733856db --- /dev/null +++ b/out-tsc/app/app/data/services/validator/root-vessel-entity.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"root-vessel-entity.validator.js","sourceRoot":"","sources":["../../../../../../src/app/data/services/validator/root-vessel-entity.validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAuB,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AAEnF,OAAO,EAAiC,8BAA8B,EAAC,MAAM,8BAA8B,CAAC;AAK5G,MAAM,OAAgB,oCACpB,SAAQ,8BAAoC;IAE5C,YACE,WAA+B,EAC/B,SAA2B,EAC3B,QAA8B;QAC9B,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,kBAAkB,CAAC,IAAQ,EAAE,IAAQ;QAInC,OAAO,MAAM,CAAC,MAAM,CAClB,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAC9B;YACE,cAAc,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;SAC1H,CAAC,CAAC;IACP,CAAC;CACF"} \ No newline at end of file diff --git a/out-tsc/app/app/data/strategy/strategy-summary-card.component.js b/out-tsc/app/app/data/strategy/strategy-summary-card.component.js new file mode 100644 index 000000000..bfa2a5f88 --- /dev/null +++ b/out-tsc/app/app/data/strategy/strategy-summary-card.component.js @@ -0,0 +1,166 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, Optional } from '@angular/core'; +// import fade in animation +import { mergeMap, Subscription } from 'rxjs'; +import { Router } from '@angular/router'; +import { AppRootDataEntityEditor } from '../form/root-data-editor.class'; +import { fadeInAnimation, isNil, isNotNil, LocalSettingsService } from '@sumaris-net/ngx-components'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { debounceTime } from 'rxjs/operators'; +import { APP_DATA_ENTITY_EDITOR } from '@app/data/form/data-editor.utils'; +export const STRATEGY_SUMMARY_DEFAULT_I18N_PREFIX = 'PROGRAM.STRATEGY.SUMMARY.'; +let StrategySummaryCardComponent = class StrategySummaryCardComponent { + constructor(router, localSettings, programRefService, cd, editor) { + this.router = router; + this.localSettings = localSettings; + this.programRefService = programRefService; + this.cd = cd; + this._subscription = new Subscription(); + this.data = null; + this.loading = true; + this.displayAttributes = { + strategy: undefined, + location: undefined, + taxonName: undefined, + taxonGroup: undefined + }; + this.canOpenLink = false; + this.i18nPrefix = STRATEGY_SUMMARY_DEFAULT_I18N_PREFIX; + this.showOpenLink = true; + this.compact = true; + this.showName = true; + this.showLocations = false; + this.showTaxonGroups = false; + this.showTaxonNames = false; + this.editor = editor; + Object.keys(this.displayAttributes).forEach(fieldName => { + this.displayAttributes[fieldName] = localSettings.getFieldDisplayAttributes(fieldName, ['label', 'name']); + }); + // Some fixed display attributes + this.displayAttributes.strategy = ['name']; + this.displayAttributes.taxonName = ['name']; + } + set value(value) { + this.updateView(value); + } + get value() { + return this.data; + } + ngOnInit() { + // Check editor exists + if (!this.editor) + throw new Error('Missing mandatory \'editor\' input!'); + this.title = this.title || (this.i18nPrefix + 'TITLE'); + // Subscribe to refresh events + this._subscription.add(this.editor.onUpdateView + .pipe(mergeMap(_ => this.editor.strategy$)) + .pipe(debounceTime(450)) + .subscribe((data) => this.updateView(data))); + } + ngOnDestroy() { + this._subscription.unsubscribe(); + } + /* -- protected method -- */ + updateView(data) { + data = data || this.data || (this.editor && this.editor.strategy); + // DEBUG + //console.debug('[strategy-summary-card] updating strategy #' + data?.id); + if (isNil(data) || isNil(data.id)) { + this.loading = true; + this.data = null; + this.canOpenLink = false; + this.markForCheck(); + } + else if (this.data !== data || this.loading) { + // DEBUG + //console.debug('[strategy-summary-card] Updating view using strategy:', data); + this.data = data; + this.canOpenLink = this.showOpenLink && isNotNil(data.programId); + this.loading = false; + this.markForCheck(); + } + } + open(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.canOpenLink) + return; + console.debug('[strategy-summary-card] Opening strategy...'); + if (event) { + event.preventDefault(); + event.stopPropagation(); + event.stopImmediatePropagation(); + } + const programId = this.data && this.data.programId; + if (isNil(programId) || isNil(this.data.id)) + return; // Skip if missing ids + // Get the strategy editor to use + const program = yield this.programRefService.load(programId, { fetchPolicy: 'cache-first' }); + const strategyEditor = program.getProperty(ProgramProperties.STRATEGY_EDITOR); + // Open the expected editor page + return this.router.navigateByUrl(`/referential/programs/${programId}/strategies/${strategyEditor}/${this.data.id}`); + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], StrategySummaryCardComponent.prototype, "i18nPrefix", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], StrategySummaryCardComponent.prototype, "title", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], StrategySummaryCardComponent.prototype, "showOpenLink", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], StrategySummaryCardComponent.prototype, "compact", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], StrategySummaryCardComponent.prototype, "showName", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], StrategySummaryCardComponent.prototype, "showLocations", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], StrategySummaryCardComponent.prototype, "showTaxonGroups", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], StrategySummaryCardComponent.prototype, "showTaxonNames", void 0); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], StrategySummaryCardComponent.prototype, "value", null); +__decorate([ + Input(), + __metadata("design:type", AppRootDataEntityEditor) +], StrategySummaryCardComponent.prototype, "editor", void 0); +StrategySummaryCardComponent = __decorate([ + Component({ + selector: 'app-strategy-summary-card', + templateUrl: './strategy-summary-card.component.html', + styleUrls: ['./strategy-summary-card.component.scss'], + animations: [fadeInAnimation], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __param(4, Optional()), + __param(4, Inject(APP_DATA_ENTITY_EDITOR)), + __metadata("design:paramtypes", [Router, + LocalSettingsService, + ProgramRefService, + ChangeDetectorRef, + AppRootDataEntityEditor]) +], StrategySummaryCardComponent); +export { StrategySummaryCardComponent }; +//# sourceMappingURL=strategy-summary-card.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/strategy/strategy-summary-card.component.js.map b/out-tsc/app/app/data/strategy/strategy-summary-card.component.js.map new file mode 100644 index 000000000..385f6b125 --- /dev/null +++ b/out-tsc/app/app/data/strategy/strategy-summary-card.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"strategy-summary-card.component.js","sourceRoot":"","sources":["../../../../../src/app/data/strategy/strategy-summary-card.component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/data/table/data-modal.class.js b/out-tsc/app/app/data/table/data-modal.class.js new file mode 100644 index 000000000..cebcf3a9a --- /dev/null +++ b/out-tsc/app/app/data/table/data-modal.class.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=data-modal.class.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/table/data-modal.class.js.map b/out-tsc/app/app/data/table/data-modal.class.js.map new file mode 100644 index 000000000..90292fc4c --- /dev/null +++ b/out-tsc/app/app/data/table/data-modal.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"data-modal.class.js","sourceRoot":"","sources":["../../../../../src/app/data/table/data-modal.class.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/out-tsc/app/app/data/table/root-table.class.js b/out-tsc/app/app/data/table/root-table.class.js new file mode 100644 index 000000000..986f67315 --- /dev/null +++ b/out-tsc/app/app/data/table/root-table.class.js @@ -0,0 +1,654 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Directive, Injector, Input, ViewChild } from '@angular/core'; +import { debounceTime, distinctUntilChanged, filter, map, startWith, tap, throttleTime } from 'rxjs/operators'; +import { AccountService, AppFormUtils, arrayDistinct, chainPromises, FileResponse, FilesUtils, isEmptyArray, isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrBlank, NetworkService, referentialToString, toBoolean, toDateISOString, } from '@sumaris-net/ngx-components'; +import { BehaviorSubject } from 'rxjs'; +import { RootDataEntityUtils } from '../services/model/root-data-entity.model'; +import { MatExpansionPanel } from '@angular/material/expansion'; +import { HttpEventType } from '@angular/common/http'; +import { PopoverController } from '@ionic/angular'; +import { AppBaseTable } from '@app/shared/table/base.table'; +import { UserEventService } from '@app/social/user-event/user-event.service'; +import moment from 'moment'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +export const AppRootTableSettingsEnum = { + FILTER_KEY: 'filter', +}; +let AppRootDataTable = class AppRootDataTable extends AppBaseTable { + constructor(injector, dataType, filterType, columnNames, dataService, validatorService, options) { + super(injector, dataType, filterType, columnNames, dataService, validatorService, options); + this.dataType = dataType; + this.filterType = filterType; + this.$selectedProgramLabels = new BehaviorSubject([]); + this.needUpdateOfflineFeature = false; + this.offline = false; + this.logPrefix = '[root-data-table] '; + this.importing = false; + this.progressionMessage = null; + this.$progression = new BehaviorSubject(0); + this.hasOfflineMode = false; + this.restoreFilterSources = ['settings', 'queryParams']; + this.showOfflineMode = true; + this.showQuality = true; + this.showUpdateOfflineFeature = true; + this.showInstallUpgradeCard = true; + this.referentialToString = referentialToString; + this.network = injector.get(NetworkService); + this.accountService = injector.get(AccountService); + this.userEventService = injector.get(UserEventService); + this.programRefService = injector.get(ProgramRefService); + this.popoverController = injector.get(PopoverController); + this.readOnly = false; + this.inlineEdition = false; + this.confirmBeforeDelete = true; + this.saveBeforeSort = false; + this.saveBeforeFilter = false; + this.saveBeforeDelete = false; + this.registerSubscription(this.selection.changed + .pipe(debounceTime(650)) + .pipe(map(_ => this.selection.selected), map(rows => (rows || []).map(row => { var _a, _b; return (_b = (_a = row.currentData) === null || _a === void 0 ? void 0 : _a.program) === null || _b === void 0 ? void 0 : _b.label; }).filter(isNotNilOrBlank)), filter(isNotEmptyArray), map(programLabels => arrayDistinct(programLabels)), + // DEBUG + tap(programLabels => console.debug(this.logPrefix + `Selected data programs: [${programLabels.join(', ')}]`))) + .subscribe(programLabels => this.$selectedProgramLabels.next(programLabels))); + } + get synchronizationStatus() { + return this.filterForm.controls.synchronizationStatus.value || 'SYNC' /*= the default status*/; + } + set synchronizationStatus(value) { + this.setSynchronizationStatus(value); + } + get isLogin() { + return this.accountService.isLogin(); + } + get canDeleteSelection() { + // Cannot delete if not connected + if (!this.isLogin || this.selection.isEmpty()) { + return false; + } + // Find a row that user CANNOT delete + const invalidRow = this.selection.selected + .find(row => !this._dataService.canUserWrite(row.currentData)); + return !invalidRow; + } + ngOnInit() { + super.ngOnInit(); + this.isAdmin = this.accountService.isAdmin(); + this.canEdit = toBoolean(this.canEdit, this.isAdmin || this.accountService.isUser()); + this.canDelete = toBoolean(this.canDelete, this.isAdmin); + if (this.debug) + console.debug('[root-table] Can user edit table ? ' + this.canEdit); + if (!this.filterForm) + throw new Error(`Missing 'filterForm' in ${this.constructor.name}`); + if (!this.featureName) + throw new Error(`Missing 'dataService.featureName' in ${this.constructor.name}`); + // Listen synchronizationStatus + this.synchronizationStatus$ = this.onRefresh + .pipe(startWith(this.synchronizationStatus), map(() => this.synchronizationStatus)); + // Listen network + this.offline = this.network.offline; + this.registerSubscription(this.network.onNetworkStatusChanges + .pipe(filter(isNotNil), distinctUntilChanged()) + .subscribe((type) => this.onNetworkStatusChanged(type))); + this.registerSubscription(this.onRefresh.subscribe(() => { + this.filterForm.markAsUntouched(); + this.filterForm.markAsPristine(); + // Check if update offline mode is need + if (this.showUpdateOfflineFeature) { + this.checkUpdateOfflineNeed(); + } + })); + // Update filter when changes + this.registerSubscription(this.filterForm.valueChanges + .pipe(debounceTime(250), filter((_) => { + const valid = this.filterForm.valid; + if (!valid && this.debug) + AppFormUtils.logFormErrors(this.filterForm); + return valid; + }), + // Update the filter, without reloading the content + tap(json => this.setFilter(json, { emitEvent: false })), + // Save filter in settings (after a debounce time) + debounceTime(500), filter(() => isNotNilOrBlank(this.settingsId) && this.restoreFilterSources !== false && this.restoreFilterSources.includes('settings')), tap(json => this.settings.savePageSetting(this.settingsId, Object.assign({}, json), AppRootTableSettingsEnum.FILTER_KEY))) + .subscribe()); + } + ngOnDestroy() { + super.ngOnDestroy(); + this.$progression.unsubscribe(); + } + onNetworkStatusChanged(type) { + const offline = type === 'none'; + if (this.offline !== offline) { + // Update the property used in template + this.offline = offline; + this.markForCheck(); + // When offline, change synchronization status to DIRTY + if (this.offline && this.synchronizationStatus === 'SYNC') { + this.setSynchronizationStatus('DIRTY'); + } + } + } + toggleOfflineMode(event) { + if (this.network.offline) { + this.network.setForceOffline(false); + } + else { + this.network.setForceOffline(true, { showToast: true }); + this.hasOfflineMode = true; + this.filterForm.patchValue({ synchronizationStatus: 'DIRTY' }, { emitEvent: false /*avoid refresh*/ }); + } + // Refresh table + this.onRefresh.emit(); + } + prepareOfflineMode(event, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (this.importing) + return; // skip + // If offline, warn user and ask to reconnect + if (this.network.offline) { + if ((opts === null || opts === void 0 ? void 0 : opts.showToast) !== false) { + return this.network.showOfflineToast({ + // Allow to retry to connect + showRetryButton: true, + onRetrySuccess: () => this.prepareOfflineMode(null, opts) + }); + } + return false; + } + this.progressionMessage = 'NETWORK.INFO.IMPORTATION_PCT_DOTS'; + const maxProgression = 100; + this.$progression.next(0); + this.resetError(); + let success = false; + try { + yield new Promise((resolve, reject) => { + // Run the import + this._dataService.runImport(null, { maxProgression }) + .pipe(filter(value => value > 0), map((progress) => { + if (!this.importing) { + this.importing = true; + this.markForCheck(); + } + return Math.min(Math.trunc(progress), maxProgression); + }), throttleTime(100), tap(progression => this.$progression.next(progression))) + .subscribe({ + error: (err) => reject(err), + complete: () => resolve() + }); + }); + // Toggle to offline mode + if (!opts || opts.toggleToOfflineMode !== false) { + this.setSynchronizationStatus('DIRTY'); + } + // Display toast + if (!opts || opts.showToast !== false) { + this.showToast({ message: 'NETWORK.INFO.IMPORTATION_SUCCEED', showCloseButton: true, type: 'info' }); + } + success = true; + // Hide the warning message + this.needUpdateOfflineFeature = false; + return success; + } + catch (err) { + success = false; + this.setError(err); + return success; + } + finally { + this.hasOfflineMode = this.hasOfflineMode || success; + this.$progression.next(0); + this.importing = false; + this.markForCheck(); + } + }); + } + setSynchronizationStatus(value, opts = { showToast: true }) { + return __awaiter(this, void 0, void 0, function* () { + if (!value) + return false; // Skip if empty + // Make sure network is UP + if (this.offline && value === 'SYNC' && !this.hasOfflineMode) { + if (opts.showToast) { + this.network.showOfflineToast({ + // Allow to retry to connect + showRetryButton: true, + onRetrySuccess: () => this.setSynchronizationStatus(value) // Loop + }); + } + return false; + } + console.debug('[trips] Applying filter to synchronization status: ' + value); + this.resetError(); + this.filterForm.patchValue({ synchronizationStatus: value }, { emitEvent: false }); + const json = Object.assign(Object.assign({}, this.filter), { synchronizationStatus: value }); + this.setFilter(json, { emitEvent: true }); + // Save filter to settings (need to be done here, because entity creation can need it - e.g. to apply Filter as default values) + if (isNotNilOrBlank(this.settingsId)) { + yield this.settings.savePageSetting(this.settingsId, json, AppRootTableSettingsEnum.FILTER_KEY); + } + return true; + }); + } + toggleSynchronizationStatus() { + if (this.offline || this.synchronizationStatus === 'SYNC') { + this.setSynchronizationStatus('DIRTY'); + } + else { + this.setSynchronizationStatus('SYNC'); + } + } + toggleFilterPanelFloating() { + this.filterPanelFloating = !this.filterPanelFloating; + this.markForCheck(); + } + addRowToSyncStatus(event, value) { + return __awaiter(this, void 0, void 0, function* () { + if (!value || !this.mobile || this.importing) + return; // Skip + // If 'DIRTY' but offline not init : init this mode + if (value !== 'SYNC' && !this.hasOfflineMode) { + // If offline, warn user and ask to reconnect + if (this.network.offline) { + return this.network.showOfflineToast({ + // Allow to retry to connect + showRetryButton: true, + onRetrySuccess: () => this.addRowToSyncStatus(null, value) + }); + } + const done = yield this.prepareOfflineMode(null, { toggleToOfflineMode: false, showToast: false }); + if (!done || !this.hasOfflineMode) + return; // Skip if failed + } + // Set the synchronization status, if changed + if (this.synchronizationStatus !== value) { + const ok = yield this.setSynchronizationStatus(value, { showToast: false }); + if (!ok) + return; + // Make sure status changed + if (this.synchronizationStatus !== value) { + console.warn('[root-table] Cannot switch to synchronization status: ' + value + '. Cannot add new row !'); + return; + } + } + // Force settings the expected usageMode + const forceUsageMode = this.synchronizationStatus === 'SYNC' ? 'DESK' : 'FIELD'; + if (this.settings.usageMode !== forceUsageMode) { + console.info('[root-table] Changing usage mode to: ' + forceUsageMode); + yield this.settings.applyProperty('usageMode', forceUsageMode); + } + // Add new row + this.addRow(event); + }); + } + clickRow(event, row) { + if (this.importing) + return; // Skip + return super.clickRow(event, row); + } + openRow(id, row) { + const _super = Object.create(null, { + openRow: { get: () => super.openRow } + }); + return __awaiter(this, void 0, void 0, function* () { + // Force settings the expected usageMode + if (this.mobile && this.hasOfflineMode) { + const forceUsageMode = this.synchronizationStatus === 'SYNC' ? 'DESK' : 'FIELD'; + if (this.settings.usageMode !== forceUsageMode) { + console.info('[root-table] Changing usage mode to: ' + forceUsageMode); + yield this.settings.applyProperty('usageMode', forceUsageMode); + } + } + return _super.openRow.call(this, id, row); + }); + } + closeFilterPanel() { + if (this.filterExpansionPanel) + this.filterExpansionPanel.close(); + if (!this.filterPanelFloating) { + this.filterPanelFloating = true; + this.markForCheck(); + } + } + get hasReadyToSyncSelection() { + if (!this._enabled || this.loading || this.selection.isEmpty()) + return false; + return this.selection.selected + .map(row => row.currentData) + .findIndex(RootDataEntityUtils.isReadyToSync) !== -1; + } + get hasDirtySelection() { + if (!this._enabled || this.loading || this.selection.isEmpty()) + return false; + return this.selection.selected + .map(row => row.currentData) + .findIndex(RootDataEntityUtils.isLocalAndDirty) !== -1; + } + terminateAndSynchronizeSelection() { + return __awaiter(this, void 0, void 0, function* () { + try { + this.markAsLoading(); + const rows = this.selection.selected.slice(); + // Terminate + yield this.terminateSelection({ + showSuccessToast: false, + emitEvent: false, + rows + }); + yield this.synchronizeSelection({ + showSuccessToast: true, + emitEvent: false, + rows + }); + // Clean selection + this.selection.clear(); + } + catch (err) { + console.error(err); + } + finally { + this.onRefresh.emit(); + } + }); + } + terminateSelection(opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!this._enabled) + return; // Skip + const rows = opts && opts.rows || (!this.loading && this.selection.selected.slice()); + if (isEmptyArray(rows)) + return; // Skip + if (this.offline) { + yield new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { + const res = yield this.network.showOfflineToast({ + showRetryButton: true, + onRetrySuccess: () => resolve() + }); + if (!res) + reject('ERROR.NETWORK_REQUIRED'); + })); + } + if (this.debug) + console.debug('[root-table] Starting to terminate data...'); + const ids = rows + .map(row => row.currentData) + .filter(RootDataEntityUtils.isLocalAndDirty) + .map(entity => entity.id); + if (isEmptyArray(ids)) + return; // Nothing to terminate + this.markAsLoading(); + this.error = null; + try { + yield chainPromises(ids.map(id => () => this._dataService.terminateById(id))); + // Update rows, when no refresh will be emitted + if ((opts === null || opts === void 0 ? void 0 : opts.emitEvent) === false) { + rows.map(row => { + if (RootDataEntityUtils.isLocalAndDirty(row.currentData)) { + row.currentData.synchronizationStatus = 'READY_TO_SYNC'; + } + }); + } + // Success message + if (!opts || opts.showSuccessToast !== false) { + this.showToast({ + message: 'INFO.SYNCHRONIZATION_SUCCEED' + }); + } + } + catch (error) { + this.userEventService.showToastErrorWithContext({ + error, + context: () => chainPromises(ids.map(id => () => this._dataService.load(id, { withOperation: true, toEntity: false }))) + }); + throw error; + } + finally { + if (!opts || opts.emitEvent !== false) { + // Reset selection + this.selection.clear(); + // Refresh table + this.onRefresh.emit(); + } + } + }); + } + synchronizeSelection(opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!this._enabled) + return; // Skip + const rows = opts && opts.rows || (!this.loading && this.selection.selected.slice()); + if (isEmptyArray(rows)) + return; // Skip + if (this.offline) { + yield new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { + const res = yield this.network.showOfflineToast({ + showRetryButton: true, + onRetrySuccess: () => resolve() + }); + if (!res) + reject('ERROR.NETWORK_REQUIRED'); + })); + } + if (this.debug) + console.debug('[root-table] Starting to synchronize data...'); + const ids = rows + .map(row => row.currentData) + .filter(RootDataEntityUtils.isReadyToSync) + .map(entity => entity.id); + if (isEmptyArray(ids)) + return; // Nothing to sync + this.markAsLoading(); + this.error = null; + try { + yield chainPromises(ids.map(id => () => this._dataService.synchronizeById(id))); + this.selection.clear(); + // Success message + if (!opts || opts.showSuccessToast !== false) { + this.showToast({ + message: 'INFO.SYNCHRONIZATION_SUCCEED' + }); + } + } + catch (error) { + this.userEventService.showToastErrorWithContext({ + error, + context: () => chainPromises(ids.map(id => () => this._dataService.load(id, { withOperation: true, toEntity: false }))) + }); + throw error; + } + finally { + if (!opts || opts.emitEvent !== false) { + // Clear selection + this.selection.clear(); + // Refresh table + this.onRefresh.emit(); + } + } + }); + } + importFromFile(event) { + return __awaiter(this, void 0, void 0, function* () { + const { data } = yield FilesUtils.showUploadPopover(this.popoverController, event, { + uniqueFile: true, + fileExtension: '.json', + instantUpload: true, + uploadFn: (file) => this.uploadFile(file) + }); + const entities = (data || []).flatMap(file => { var _a; return ((_a = file.response) === null || _a === void 0 ? void 0 : _a.body) || []; }); + if (isEmptyArray(entities)) + return; // No entities: skip + console.info(this.logPrefix + `Loaded ${entities.length} entities from file`); + return entities; + }); + } + /* -- protected methods -- */ + asFilter(source) { + source = source || this.filterForm.value; + if (this._dataSource && this._dataSource.dataService) { + return this._dataSource.dataService.asFilter(source); + } + return source; + } + restoreFilterOrLoad(opts) { + return __awaiter(this, void 0, void 0, function* () { + this.markAsLoading(); + console.log(`${this.logPrefix}restoreFilterOrLoad()`, opts); + const json = this.restoreFilterSources !== false && ((opts === null || opts === void 0 ? void 0 : opts.sources) || this.restoreFilterSources || []).map(source => { + switch (source) { + case 'settings': + if (isNilOrBlank(this.settingsId)) + return; + console.debug(this.logPrefix + 'Restoring filter from settings...'); + return this.settings.getPageSettings(this.settingsId, AppRootTableSettingsEnum.FILTER_KEY) || {}; + case 'queryParams': + const { q } = this.route.snapshot.queryParams; + if (q) { + console.debug(this.logPrefix + 'Restoring filter from route query param: ', q); + try { + return JSON.parse(q); + } + catch (err) { + console.error(this.logPrefix + 'Failed to parse route query param: ' + q, err); + } + } + } + return null; + }).find(isNotNil); + if (json) { + // Force offline, if no network AND has offline feature + this.hasOfflineMode = (json.synchronizationStatus && json.synchronizationStatus !== 'SYNC') || (yield this._dataService.hasOfflineData()); + if (this.network.offline && this.hasOfflineMode) { + json.synchronizationStatus = 'DIRTY'; + } + this.setFilter(json, Object.assign({ emitEvent: true }, opts)); + } + else { + // has offline feature + this.hasOfflineMode = yield this._dataService.hasOfflineData(); + if (!opts || opts.emitEvent !== false) { + this.onRefresh.emit(); + } + } + }); + } + setFilter(filter, opts) { + super.setFilter(filter, opts); + } + patchFilter(filter, opts) { + super.setFilter(Object.assign(Object.assign({}, this.filter), filter), opts); + } + checkUpdateOfflineNeed() { + return __awaiter(this, void 0, void 0, function* () { + let needUpdate = false; + // If online + if (this.network.online) { + // Get last synchro date + const lastSynchronizationDate = this.settings.getOfflineFeatureLastSyncDate(this.featureName); + // Check only if last synchro older than 10 min + if (lastSynchronizationDate && lastSynchronizationDate.isBefore(moment().add(-10, 'minute'))) { + // Get peer last update date, then compare + const remoteUpdateDate = yield this._dataService.lastUpdateDate(); + if (isNotNil(remoteUpdateDate)) { + // Compare dates, to known if an update if need + needUpdate = lastSynchronizationDate.isBefore(remoteUpdateDate); + } + console.info(`[root-table] Checking referential last update dates: {local: '${toDateISOString(lastSynchronizationDate)}', remote: '${toDateISOString(remoteUpdateDate)}'} - Need upgrade: ${needUpdate}`); + } + } + // Update the view + if (this.needUpdateOfflineFeature !== needUpdate) { + this.needUpdateOfflineFeature = needUpdate; + this.markForCheck(); + } + }); + } + getJsonEncoding() { + const key = 'FILE.JSON.ENCODING'; + const encoding = this.translate.instant(key); + if (encoding !== key) + return encoding; + return 'UTF-8'; // Default encoding + } + uploadFile(file) { + console.info(this.logPrefix + `Importing JSON file ${file.name}...`); + const encoding = this.getJsonEncoding(); + return FilesUtils.readAsText(file, encoding) + .pipe(map(event => { + if (event.type === HttpEventType.UploadProgress) { + const loaded = Math.round(event.loaded * 0.8); + return Object.assign(Object.assign({}, event), { loaded }); + } + else if (event instanceof FileResponse) { + console.debug(this.logPrefix + 'File content: \n' + event.body); + try { + const data = JSON.parse(event.body); + if (Array.isArray(data)) { + return new FileResponse({ body: data }); + } + return new FileResponse({ body: [data] }); + } + catch (err) { + console.error(this.logPrefix + 'Error while parsing JSON file', err); + throw new Error('Invalid JSON file'); // TODO translate + } + } + // Unknown event: skip + else { + return null; + } + }), filter(isNotNil)); + } + openNewRowDetail(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail) + return false; + if (this.onNewRow.observed) { + this.onNewRow.emit(event); + return true; + } + return this.navController.navigateForward(`${this.router.url}/new`, { + // Pass the tableId, to be able to use search field as defaults + queryParams: this.settingsId && { tableId: this.settingsId } + }); + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], AppRootDataTable.prototype, "hasOfflineMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppRootDataTable.prototype, "restoreFilterSources", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppRootDataTable.prototype, "showOfflineMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppRootDataTable.prototype, "showQuality", void 0); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], AppRootDataTable.prototype, "synchronizationStatus", null); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppRootDataTable.prototype, "showUpdateOfflineFeature", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppRootDataTable.prototype, "showInstallUpgradeCard", void 0); +__decorate([ + ViewChild(MatExpansionPanel, { static: true }), + __metadata("design:type", MatExpansionPanel) +], AppRootDataTable.prototype, "filterExpansionPanel", void 0); +AppRootDataTable = __decorate([ + Directive() + // tslint:disable-next-line:directive-class-suffix + , + __metadata("design:paramtypes", [Injector, Function, Function, Array, Object, Object, Object]) +], AppRootDataTable); +export { AppRootDataTable }; +//# sourceMappingURL=root-table.class.js.map \ No newline at end of file diff --git a/out-tsc/app/app/data/table/root-table.class.js.map b/out-tsc/app/app/data/table/root-table.class.js.map new file mode 100644 index 000000000..5f9a7049a --- /dev/null +++ b/out-tsc/app/app/data/table/root-table.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"root-table.class.js","sourceRoot":"","sources":["../../../../../src/app/data/table/root-table.class.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/button/extraction-button.component.js b/out-tsc/app/app/extraction/button/extraction-button.component.js new file mode 100644 index 000000000..2aea56378 --- /dev/null +++ b/out-tsc/app/app/extraction/button/extraction-button.component.js @@ -0,0 +1,133 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, TemplateRef, ViewChild } from '@angular/core'; +import { isNotEmptyArray, StatusIds } from '@sumaris-net/ngx-components'; +import { filter, switchMap, tap } from 'rxjs/operators'; +import { ExtractionTypeService } from '../../extraction/type/extraction-type.service'; +import { RxState } from '@rx-angular/state'; +import { MatMenuTrigger } from '@angular/material/menu'; +let AppExtractionButton = class AppExtractionButton extends RxState { + constructor(extractionTypeService) { + super(); + this.extractionTypeService = extractionTypeService; + this.disabled = false; + this.title = 'COMMON.BTN_DOWNLOAD'; + this.typesTitle = 'EXTRACTION.TYPES_MENU.LIVE_DIVIDER'; + this.icon = null; + this.matIcon = 'download'; + this.style = 'mat-icon-button'; + this.downloadAsJson = new EventEmitter(); + this.downloadAsType = new EventEmitter(); + this.set({ + isSpatial: false, + category: 'LIVE' + }); + // Extraction types + this.types$ = this.select(['programLabels', 'isSpatial', 'category'], res => res) + .pipe( + // DEBUG + tap(({ programLabels }) => console.debug(`[entity-extraction-button] Watching extraction types {programLabels: [${programLabels === null || programLabels === void 0 ? void 0 : programLabels.join(', ')}]}...`)), filter(({ programLabels }) => isNotEmptyArray(programLabels)), + // DEBUG + tap(({ programLabels }) => console.debug(`[entity-extraction-button] Watching extraction types {programLabels: [${programLabels.join(', ')}]}...`)), + // Load extraction types, from program's formats + switchMap(({ programLabels, isSpatial, category }) => this.extractionTypeService.watchAllByProgramLabels(programLabels, { + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], + isSpatial, + category + }, { fetchPolicy: 'cache-first' }))); + } + set programLabels(values) { + this.set('programLabels', _ => values); + } + get programLabels() { + return this.get('programLabels'); + } + set programLabel(value) { + this.set('programLabels', _ => value ? [value] : null); + } + get programLabel() { + var _a; + return (_a = this.get('programLabels')) === null || _a === void 0 ? void 0 : _a[0]; + } + set isSpatial(isSpatial) { + this.set('isSpatial', _ => isSpatial); + } + get isSpatial() { + return this.get('isSpatial'); + } + set category(category) { + this.set('category', _ => category); + } + get category() { + return this.get('category'); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], AppExtractionButton.prototype, "disabled", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppExtractionButton.prototype, "title", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppExtractionButton.prototype, "typesTitle", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppExtractionButton.prototype, "icon", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppExtractionButton.prototype, "matIcon", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], AppExtractionButton.prototype, "style", void 0); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], AppExtractionButton.prototype, "programLabels", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], AppExtractionButton.prototype, "programLabel", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], AppExtractionButton.prototype, "isSpatial", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], AppExtractionButton.prototype, "category", null); +__decorate([ + Output(), + __metadata("design:type", Object) +], AppExtractionButton.prototype, "downloadAsJson", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], AppExtractionButton.prototype, "downloadAsType", void 0); +__decorate([ + ViewChild(MatMenuTrigger), + __metadata("design:type", MatMenuTrigger) +], AppExtractionButton.prototype, "menuTrigger", void 0); +__decorate([ + ViewChild('typesTemplate'), + __metadata("design:type", TemplateRef) +], AppExtractionButton.prototype, "typesTemplate", void 0); +AppExtractionButton = __decorate([ + Component({ + selector: 'app-extraction-button', + templateUrl: 'extraction-button.component.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [ExtractionTypeService]) +], AppExtractionButton); +export { AppExtractionButton }; +//# sourceMappingURL=extraction-button.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/button/extraction-button.component.js.map b/out-tsc/app/app/extraction/button/extraction-button.component.js.map new file mode 100644 index 000000000..334e9cca7 --- /dev/null +++ b/out-tsc/app/app/extraction/button/extraction-button.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extraction-button.component.js","sourceRoot":"","sources":["../../../../../src/app/extraction/button/extraction-button.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACxH,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAGzE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAejD,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,OAAkC;IAoDzE,YAAsB,qBAA4C;QAChE,KAAK,EAAE,CAAC;QADY,0BAAqB,GAArB,qBAAqB,CAAuB;QAhDzD,aAAQ,GAAG,KAAK,CAAC;QACjB,UAAK,GAAG,qBAAqB,CAAC;QAC9B,eAAU,GAAG,oCAAoC,CAAC;QAClD,SAAI,GAAG,IAAI,CAAC;QACZ,YAAO,GAAG,UAAU,CAAC;QAErB,UAAK,GAAmC,iBAAiB,CAAC;QAmCzD,mBAAc,GAAG,IAAI,YAAY,EAAW,CAAC;QAC7C,mBAAc,GAAG,IAAI,YAAY,EAAkB,CAAC;QAQ5D,IAAI,CAAC,GAAG,CAAC;YACP,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QAEH,mBAAmB;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;aAC9E,IAAI;QAEH,QAAQ;QACR,GAAG,CAAC,CAAC,EAAC,aAAa,EAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,yEAAyE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAElJ,MAAM,CAAC,CAAC,EAAC,aAAa,EAAC,EAAE,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QAE3D,QAAQ;QACR,GAAG,CAAC,CAAC,EAAC,aAAa,EAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,yEAAyE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEjJ,gDAAgD;QAChD,SAAS,CAAC,CAAC,EAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAC,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,aAAa,EAAwB;YACxI,SAAS,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC;YAClD,SAAS;YACT,QAAQ;SACT,EAAE,EAAC,WAAW,EAAE,aAAa,EAAC,CAAC,CACjC,CACF,CAAC;IACN,CAAC;IAnED,IAAa,aAAa,CAAC,MAAgB;QACzC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IAED,IAAa,YAAY,CAAC,KAAa;QACrC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,YAAY;;QACd,OAAO,MAAA,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,0CAAG,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,IAAa,SAAS,CAAC,SAAkB;QACvC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,IAAa,QAAQ,CAAC,QAAgC;QACpD,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;CAsCF,CAAA;AA5EC;IAAC,KAAK,EAAE;;qDAAkB;AAC1B;IAAC,KAAK,EAAE;;kDAA+B;AACvC;IAAC,KAAK,EAAE;;uDAAmD;AAC3D;IAAC,KAAK,EAAE;;iDAAa;AACrB;IAAC,KAAK,EAAE;;oDAAsB;AAE9B;IAAC,KAAK,EAAE;;kDAA2D;AAEnE;IAAC,KAAK,EAAE;;;wDAEP;AAMD;IAAC,KAAK,EAAE;;;uDAEP;AAMD;IAAC,KAAK,EAAE;;;oDAEP;AAMD;IAAC,KAAK,EAAE;;;mDAEP;AAOD;IAAC,MAAM,EAAE;;2DAA8C;AACvD;IAAC,MAAM,EAAE;;2DAAqD;AAE9D;IAAC,SAAS,CAAC,cAAc,CAAC;8BAAc,cAAc;wDAAC;AAEvD;IAAC,SAAS,CAAC,eAAe,CAAC;8BAAgB,WAAW;0DAAM;AAlDjD,mBAAmB;IAL/B,SAAS,CAAC;QACT,QAAQ,EAAE,uBAAuB;QACjC,WAAW,EAAE,kCAAkC;QAC/C,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAqD6C,qBAAqB;GApDvD,mBAAmB,CAgF/B;SAhFY,mBAAmB"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/button/extraction-button.module.js b/out-tsc/app/app/extraction/button/extraction-button.module.js new file mode 100644 index 000000000..c7858d43e --- /dev/null +++ b/out-tsc/app/app/extraction/button/extraction-button.module.js @@ -0,0 +1,23 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { AppSharedModule } from '@app/shared/shared.module'; +import { AppExtractionButton } from './extraction-button.component'; +let AppExtractionButtonModule = class AppExtractionButtonModule { +}; +AppExtractionButtonModule = __decorate([ + NgModule({ + imports: [ + AppSharedModule + ], + declarations: [ + // Components + AppExtractionButton + ], + exports: [ + // Components + AppExtractionButton + ] + }) +], AppExtractionButtonModule); +export { AppExtractionButtonModule }; +//# sourceMappingURL=extraction-button.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/button/extraction-button.module.js.map b/out-tsc/app/app/extraction/button/extraction-button.module.js.map new file mode 100644 index 000000000..9b6b151fb --- /dev/null +++ b/out-tsc/app/app/extraction/button/extraction-button.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extraction-button.module.js","sourceRoot":"","sources":["../../../../../src/app/extraction/button/extraction-button.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAc,QAAQ,EAAa,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAgB7D,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;CAGrC,CAAA;AAHY,yBAAyB;IAbrC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,eAAe;SAChB;QACD,YAAY,EAAE;YACZ,aAAa;YACb,mBAAmB;SACpB;QACD,OAAO,EAAE;YACP,aAAa;YACb,mBAAmB;SACpB;KACF,CAAC;GACW,yBAAyB,CAGrC;SAHY,yBAAyB"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/common/extraction-abstract.page.js b/out-tsc/app/app/extraction/common/extraction-abstract.page.js new file mode 100644 index 000000000..c9a6d1063 --- /dev/null +++ b/out-tsc/app/app/extraction/common/extraction-abstract.page.js @@ -0,0 +1,565 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Directive, EventEmitter, Injector, Input, ViewChild } from '@angular/core'; +import { AccountService, AppTabEditor, capitalizeFirstLetter, changeCaseToUnderscore, DateUtils, firstNotNilPromise, fromDateISOString, isEmptyArray, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, LocalSettingsService, PlatformService, propertyComparator, toBoolean, toDateISOString, TranslateContextService, } from '@sumaris-net/ngx-components'; +import { ExtractionCategories, ExtractionFilter, ExtractionFilterCriterion, ExtractionTypeUtils, } from '../type/extraction-type.model'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { map } from 'rxjs/operators'; +import { ExtractionCriteriaForm } from '../criteria/extraction-criteria.form'; +import { TranslateService } from '@ngx-translate/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ExtractionService } from './extraction.service'; +import { AlertController, ModalController, NavController, ToastController } from '@ionic/angular'; +import { ExtractionUtils } from './extraction.utils'; +import { ExtractionHelpModal } from '../help/help.modal'; +import { ExtractionTypeFilter } from '@app/extraction/type/extraction-type.filter'; +import { RxState } from '@rx-angular/state'; +import { Location } from '@angular/common'; +export const DEFAULT_CRITERION_OPERATOR = '='; +export const EXTRACTION_SETTINGS_ENUM = { + filterKey: 'filter', + compactRowsKey: 'compactRows' +}; +let ExtractionAbstractPage = class ExtractionAbstractPage extends AppTabEditor { + constructor(injector, _state) { + super(injector.get(ActivatedRoute), injector.get(Router), injector.get(NavController), injector.get(AlertController), injector.get(TranslateService)); + this.injector = injector; + this._state = _state; + this.type$ = this._state.select('type'); + this.types$ = this._state.select('types'); + this.onRefresh = new EventEmitter(); + this.canEdit = false; + this.location = injector.get(Location); + this.toastController = injector.get(ToastController); + this.translateContext = injector.get(TranslateContextService); + this.accountService = injector.get(AccountService); + this.service = injector.get(ExtractionService); + this.settings = injector.get(LocalSettingsService); + this.formBuilder = injector.get(UntypedFormBuilder); + this.platform = injector.get(PlatformService); + this.modalCtrl = injector.get(ModalController); + this.mobile = this.settings.mobile; + // Create the filter form + this.form = this.formBuilder.group({ + sheetName: [null, Validators.required], + meta: [null] + }); + this.settingsId = this.generateTableId(); + } + get started() { + return this._state.get('started'); + } + get types() { + return this._state.get('types'); + } + set types(value) { + this._state.set('types', _ => value); + } + get type() { + return this._state.get('type'); + } + set type(value) { + this._state.set('type', (_) => value); + } + get sheetName() { + return this.form.controls.sheetName.value; + } + set sheetName(value) { + this.form.get('sheetName').setValue(value); + } + markAsDirty(opts) { + this.criteriaForm.markAsDirty(opts); + } + get isNewData() { + return false; + } + get excludeInvalidData() { + var _a; + return toBoolean((_a = this.form.get('meta').value) === null || _a === void 0 ? void 0 : _a.excludeInvalidData, false); + } + ngOnInit() { + super.ngOnInit(); + this.addChildForm(this.criteriaForm); + // Load types (if not set by types + if (!this.types) { + this._state.connect('types', this.watchAllTypes() + .pipe(map(({ data, total }) => + // Compute i18n name + data.map(t => ExtractionTypeUtils.computeI18nName(this.translate, t)) + // Then sort by name + .sort(propertyComparator('name'))))); + } + this._state.hold(this.types$, (_) => this.markAsReady()); + } + loadFromRouteOrSettings() { + return __awaiter(this, void 0, void 0, function* () { + let found = false; + try { + // Read the route queryParams + { + const { category, label, sheet, q, meta } = this.route.snapshot.queryParams; + if (this.debug) + console.debug('[extraction-abstract-page] Reading route queryParams...', this.route.snapshot.queryParams); + found = yield this.loadQueryParams({ category, label, sheet, q, meta }, { emitEvent: false }); + if (found) + return true; // found! stop here + } + // Read the settings + { + const json = this.settings.getPageSettings(this.settingsId, EXTRACTION_SETTINGS_ENUM.filterKey); + if (json) { + const updateDate = fromDateISOString(json.updateDate); + const settingsAgeInHours = (updateDate === null || updateDate === void 0 ? void 0 : updateDate.diff(DateUtils.moment(), 'hour')) || 0; + if (settingsAgeInHours <= 12 /* Apply filter, if age <= 12h */) { + if (this.debug) + console.debug('[extraction-abstract-page] Restoring from settings...', json); + const { category, label, sheet, q, meta } = json; + found = yield this.loadQueryParams({ category, label, sheet, q, meta }, { emitEvent: false }); + if (found) + return true; // found! stop here + } + } + } + return false; // not loaded + } + finally { + if (found) { + // Mark as started, with a delay, to avoid reload twice, because of listen on page/sort + setTimeout(() => this.markAsStarted(), 450); + } + } + }); + } + /** + * Load type from a query params `{category, label, sheet, q}` + */ + loadQueryParams(queryParams, opts) { + return __awaiter(this, void 0, void 0, function* () { + // Convert query params into a valid type + const { category, label, sheet, q, meta } = queryParams; + const paramType = this.fromObject({ category, label }); + const types = yield firstNotNilPromise(this.types$, { stop: this.destroySubject }); + //DEBUG + //console.debug('[extraction-abstract-page] Extraction types found:', types); + // Read type + let selectedType; + // If not type found in params, redirect to first one + if (isNil(paramType.category) || isNil(paramType.label)) { + console.debug('[extraction-abstract-page] No extraction type found, in route.'); + this.markAsLoaded(); + return false; // Stop here + } + // Select the exact type object in the filter form + else { + selectedType = types.find(t => this.isEquals(t, paramType)) || paramType; + } + const selectedSheetName = sheet || (selectedType && selectedType.sheetNames && selectedType.sheetNames.length && selectedType.sheetNames[0]); + if (selectedSheetName && selectedType && !selectedType.sheetNames) { + selectedType.sheetNames = [selectedSheetName]; + } + // Set the type + const changed = yield this.setType(selectedType, { + sheetName: selectedSheetName, + emitEvent: false, + skipLocationChange: true // Here, we not need an update of the location + }); + // No type found + if (!changed && !this.type) + return false; + // Update filter form + if (isNotNilOrBlank(q)) { + const criteria = this.parseCriteriaFromString(q, sheet); + yield this.criteriaForm.setValue(criteria, { emitEvent: false }); + } + // Update meta + if (meta) { + const metaValue = this.parseMetaFromString(meta); + this.form.get('meta').patchValue(metaValue, { emitEvent: false }); + } + // Execute the first load + if (changed) { + yield this.loadData(); + } + return true; + }); + } + setType(type, opts) { + return __awaiter(this, void 0, void 0, function* () { + opts = opts || {}; + opts.emitEvent = isNotNil(opts.emitEvent) ? opts.emitEvent : true; + opts.skipLocationChange = isNotNil(opts.skipLocationChange) ? opts.skipLocationChange : false; + // If empty: skip + if (!type) + return false; + // If same: skip + const changed = !this.type || !this.isEquals(type, this.type); + if (changed) { + // Replace by the full entity + type = yield this.findTypeByFilter(ExtractionTypeFilter.fromType(type)); + if (!type) { + console.warn('[extraction-form] Type not found:', type); + return false; + } + console.debug(`[extraction-form] Set type to {${type.label}}`, type); + this.form.patchValue({}); + this.type = type; + this.criteriaForm.type = type; + // Check if user can edit (admin or supervisor in the rec department) + this.canEdit = this.canUserWrite(type); + // Select the given sheet (if exists), or select the first one + const sheetName = opts.sheetName && (type.sheetNames || []).find(s => s === opts.sheetName) + || (type.sheetNames && type.sheetNames[0]); + this.setSheetName(sheetName || null, { + emitEvent: false, + skipLocationChange: true + }); + } + // Update the window location + if ((opts === null || opts === void 0 ? void 0 : opts.skipLocationChange) !== true) { + setTimeout(() => this.updateQueryParams(), 500); + } + // Refresh data + if (!opts || opts.emitEvent !== false) { + this.onRefresh.emit(); + } + return changed; + }); + } + setSheetName(sheetName, opts) { + if (sheetName === this.sheetName) + return; //skip + this.form.patchValue({ sheetName }, opts); + this.criteriaForm.sheetName = sheetName; + if ((opts === null || opts === void 0 ? void 0 : opts.skipLocationChange) !== true) { + setTimeout(() => this.updateQueryParams(), 500); + } + if (!opts || opts.emitEvent !== false) { + this.onRefresh.emit(); + } + } + /** + * Update the URL + */ + updateQueryParams(type, opts = { skipLocationChange: false, skipSettingsChange: false }) { + return __awaiter(this, void 0, void 0, function* () { + type = type || this.type; + if (this.type !== type) + return; // Skip + const queryParams = ExtractionUtils.asQueryParams(type, this.getFilterValue()); + console.debug('[extraction-form] Updating query params', queryParams); + // Update route query params + yield this.router.navigate(['.'], { + relativeTo: this.route, + skipLocationChange: opts.skipLocationChange, + queryParams + }); + // Save router and filter in settings, to be able to restore it + if (!opts || opts.skipSettingsChange !== false) { + const json = Object.assign(Object.assign({}, queryParams), { updateDate: toDateISOString(DateUtils.moment()) }); + yield this.settings.savePageSetting(this.settingsId, json, EXTRACTION_SETTINGS_ENUM.filterKey); + } + }); + } + downloadAsFile(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.loading || isNil(this.type)) + return; + if (event) { + event.stopPropagation(); + event.preventDefault(); + } + console.debug(`[extraction-form] Downloading ${this.type.category} ${this.type.label}...`); + this.markAsLoading(); + this.resetError(); + // Get filter + const filter = this.getFilterValue(); + delete filter.sheetName; // Force to download all sheets + this.disable(); + try { + // Download file + const uri = yield this.service.downloadFile(this.type, filter); + if (isNotNil((uri))) { + yield this.platform.download({ uri }); + } + } + catch (err) { + console.error(err); + this.error = err && err.message || err; + } + finally { + this.markAsLoaded(); + this.enable(); + } + }); + } + load(id, opts) { + return __awaiter(this, void 0, void 0, function* () { + const types = this.types; + if (isNil(types)) + yield this.ready(); + let type = (types || []).find(t => t.id === id); + // Not found in type (try without cache) + if (!type) { + type = yield this.loadType(id, { fetchPolicy: 'no-cache' }); + } + // Set type (need by the criteria form) + let changed = type && (yield this.setType(type, { emitEvent: false })); + if (opts === null || opts === void 0 ? void 0 : opts.filter) { + yield this.setFilterValue(ExtractionFilter.fromObject(opts === null || opts === void 0 ? void 0 : opts.filter), { emitEvent: false }); + changed = true; + } + // Load data + if (changed && (!opts || opts.emitEvent !== false)) { + yield this.loadData(); + } + // Mark as started (with a delay, because 'started' can be read in setType() + if (!this.started) { + setTimeout(() => this.markAsStarted(), 500); + } + return undefined; + }); + } + save(event) { + return __awaiter(this, void 0, void 0, function* () { + console.warn('Not allow to save extraction filter yet!'); + return undefined; + }); + } + reload() { + var _a; + return __awaiter(this, void 0, void 0, function* () { + return this.load((_a = this.type) === null || _a === void 0 ? void 0 : _a.id); + }); + } + openHelpModal(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.type) + return; + if (event) { + event.preventDefault(); + } + const modal = yield this.modalCtrl.create({ + component: ExtractionHelpModal, + componentProps: { + type: this.type + }, + keyboardClose: true, + cssClass: 'modal-large' + }); + // Open the modal + yield modal.present(); + // Wait until closed + yield modal.onDidDismiss(); + }); + } + setFilterValue(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + filter = this.service.asFilter(filter); + // Patch the main form + this.form.patchValue(filter === null || filter === void 0 ? void 0 : filter.asObject(), { emitEvent: false }); + // Patch criteria form + yield this.criteriaForm.setValue([ + // Input criteria + ...(filter.criteria || []).map(ExtractionFilterCriterion.fromObject), + // Add an empty criteria + ExtractionFilterCriterion.fromObject({ operator: '=' }) + ], opts); + // Emit changes + if (!opts || (opts === null || opts === void 0 ? void 0 : opts.emitEvent) !== false) { + this.onRefresh.emit(); + } + }); + } + getFilterValue() { + const res = { + sheetName: this.sheetName, + criteria: this.criteriaForm.getValue(), + meta: this.form.get('meta').value + }; + return this.service.asFilter(res); + } + /* -- protected methods -- */ + getFirstInvalidTabIndex() { + return 0; + } + parseCriteriaFromString(queryString, sheet) { + return ExtractionUtils.parseCriteriaFromString(queryString, sheet); + } + parseMetaFromString(metaString) { + return ExtractionUtils.parseMetaString(metaString); + } + generateTableId() { + var _a; + const id = this.location.path(true) + .replace(/[?].*$/g, '') + .replace(/\/[\d]+/g, '_id') + + '_' + // Get a component unique name - See https://stackoverflow.com/questions/60114682/how-to-access-components-unique-encapsulation-id-in-angular-9 + + (((_a = this.constructor['ɵcmp']) === null || _a === void 0 ? void 0 : _a.id) || this.constructor.name); + //if (this.debug) console.debug("[table] id = " + id); + return id; + } + resetError(opts = { emitEvent: true }) { + this.error = null; + if (opts.emitEvent !== false) { + this.markForCheck(); + } + } + findTypeByFilter(filter) { + return __awaiter(this, void 0, void 0, function* () { + if (!filter) + throw new Error('Missing \'filter\''); + filter = filter instanceof ExtractionTypeFilter ? filter : ExtractionTypeFilter.fromObject(filter); + const types = yield firstNotNilPromise(this.types$); + return (types || []).find(filter.asFilterFn()); + }); + } + getFilterAsQueryParams() { + const filter = this.getFilterValue(); + const params = { sheet: undefined, q: undefined }; + if (filter.sheetName) { + params.sheet = filter.sheetName; + } + if (isNotEmptyArray(filter.criteria)) { + params.q = filter.criteria.reduce((res, criterion) => { + if (criterion.endValue) { + return res.concat(`${criterion.name}${criterion.operator}${criterion.value}:${criterion.endValue}`); + } + else { + return res.concat(`${criterion.name}${criterion.operator}${criterion.value}`); + } + }, []).join(';'); + } + return params; + } + canUserWrite(type) { + var _a; + return type.category === ExtractionCategories.PRODUCT && (this.accountService.isAdmin() + || (this.accountService.isUser() && ((_a = type.recorderPerson) === null || _a === void 0 ? void 0 : _a.id) === this.accountService.person.id) + || (this.accountService.isSupervisor() && this.accountService.canUserWriteDataForDepartment(type.recorderDepartment))); + } + getI18nSheetName(sheetName, type, self) { + self = self || this; + type = type || self.type; + sheetName = sheetName || this.sheetName; + if (isNil(sheetName) || isNil(type)) + return undefined; + // Try from specific translation + let key; + let message; + if (type.category === 'LIVE') { + key = `EXTRACTION.FORMAT.${type.label.toUpperCase()}.SHEET.${sheetName}`; + message = self.translate.instant(key); + if (message !== key) + return message; + } + else { + key = `EXTRACTION.${type.category.toUpperCase()}.${type.label.toUpperCase()}.SHEET.${sheetName}`; + message = self.translate.instant(key); + if (message !== key) + return message; + } + // Try from generic translation + key = `EXTRACTION.SHEET.${sheetName}`; + message = self.translate.instant(key); + if (message !== key) { + // Append sheet name + return (sheetName.length === 2) ? `${message} (${sheetName})` : message; + } + // No translation found: replace underscore with space + return sheetName.replace(/[_-]+/g, ' ').toUpperCase(); + } + translateColumns(columns, context) { + if (isEmptyArray(columns)) + return; // Skip, to avoid error when calling this.translate.instant([]) + const i19nPrefix = `EXTRACTION.FORMAT.${changeCaseToUnderscore(this.type.format)}.`.toUpperCase(); + const names = columns.map(column => (column.name || column.columnName).toUpperCase()); + const i18nKeys = names.map(name => i19nPrefix + name) + .concat(names.map(name => `EXTRACTION.COLUMNS.${name}`)); + const i18nMap = this.translateContext.instant(i18nKeys, context); + columns.forEach((column, i) => { + let key = i18nKeys[i]; + column.name = i18nMap[key]; + // No I18n translation + if (column.name === key) { + // Fallback to the common translation + key = i18nKeys[names.length + i]; + column.name = i18nMap[key]; + // Or split column name + if (column.name === key) { + // Replace underscore with space + column.name = column.columnName.replace(/[_-]+/g, ' ').toLowerCase(); + // First letter as upper case + if (column.name.length > 1) + column.name = capitalizeFirstLetter(column.name); + } + } + }); + } + getI18nColumnName(columnName) { + if (!columnName) + return ''; + let key = `EXTRACTION.TABLE.${this.type.format.toUpperCase()}.${columnName.toUpperCase()}`; + let message = this.translate.instant(key); + // No I18n translation + if (message === key) { + // Try to get common translation + key = `EXTRACTION.TABLE.COLUMNS.${columnName.toUpperCase()}`; + message = this.translate.instant(key); + // Or split column name + if (message === key) { + // Replace underscore with space + message = columnName.replace(/[_-]+/g, ' ').toUpperCase(); + if (message.length > 1) { + // First letter as upper case + message = message.substring(0, 1) + message.substring(1).toLowerCase(); + } + } + } + return message; + } + hasFilterCriteria(sheetName) { + return this.criteriaForm.hasFilterCriteria(sheetName); + } + markAsStarted(opts = { emitEvent: true }) { + this._state.set('started', (_) => true); + if (!opts || opts.emitEvent !== false) + this.markForCheck(); + } + toggleExcludeInvalidData(event, opts) { + const excludeInvalidData = this.excludeInvalidData; + this.form.get('meta').setValue({ + excludeInvalidData: !excludeInvalidData + }, opts); + if (!opts || opts.emitEvent !== false) { + this.markForCheck(); + this.onRefresh.emit(); + } + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], ExtractionAbstractPage.prototype, "canEdit", void 0); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], ExtractionAbstractPage.prototype, "types", null); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], ExtractionAbstractPage.prototype, "type", null); +__decorate([ + ViewChild('criteriaForm', { static: true }), + __metadata("design:type", ExtractionCriteriaForm) +], ExtractionAbstractPage.prototype, "criteriaForm", void 0); +ExtractionAbstractPage = __decorate([ + Directive() + // tslint:disable-next-line:directive-class-suffix + , + __metadata("design:paramtypes", [Injector, + RxState]) +], ExtractionAbstractPage); +export { ExtractionAbstractPage }; +//# sourceMappingURL=extraction-abstract.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/common/extraction-abstract.page.js.map b/out-tsc/app/app/extraction/common/extraction-abstract.page.js.map new file mode 100644 index 000000000..e16187e0c --- /dev/null +++ b/out-tsc/app/app/extraction/common/extraction-abstract.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extraction-abstract.page.js","sourceRoot":"","sources":["../../../../../src/app/extraction/common/extraction-abstract.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/common/extraction.config.js b/out-tsc/app/app/extraction/common/extraction.config.js new file mode 100644 index 000000000..6456a0c6d --- /dev/null +++ b/out-tsc/app/app/extraction/common/extraction.config.js @@ -0,0 +1,85 @@ +import { joinProperties, PRIORITIZED_AUTHORITIES, StatusIds } from '@sumaris-net/ngx-components'; +export const EXTRACTION_GRAPHQL_TYPE_POLICIES = { +/*'ExtractionTypeVO': { + keyFields: ['label'], + merge: (existing, incoming, options) => { + console.warn('[extraction_config] TODO: check merging function for ExtractionTypeVO', existing, incoming, options); + return { + ...existing, + ...incoming + }; + } +}*/ +}; +/** + * Define configuration options + */ +export const EXTRACTION_CONFIG_OPTIONS = Object.freeze({ + EXTRACTION_ENABLE: { + key: 'sumaris.extraction.enabled', + label: 'EXTRACTION.OPTIONS.ENABLE', + type: 'boolean', + defaultValue: 'false' + }, + EXTRACTION_MAP_ENABLE: { + key: 'sumaris.extraction.map.enable', + label: 'EXTRACTION.OPTIONS.MAP_ENABLE', + type: 'boolean', + defaultValue: 'false' + }, + EXTRACTION_PRODUCT_ENABLE: { + key: 'sumaris.extraction.product.enable', + label: 'EXTRACTION.OPTIONS.PRODUCT_ENABLE', + type: 'boolean', + defaultValue: 'false' + }, + EXTRACTION_MAP_CENTER_LAT_LNG: { + key: 'sumaris.extraction.map.center.latLng', + label: 'EXTRACTION.OPTIONS.MAP_CENTER_LAT_LNG', + type: 'string', + defaultValue: '46.879966, -10' // Atlantique France + }, + EXTRACTION_MAP_CENTER_ZOOM: { + key: 'sumaris.extraction.map.center.zoom', + label: 'EXTRACTION.OPTIONS.MAP_CENTER_ZOOM', + type: 'integer', + defaultValue: 5 + }, + EXTRACTION_ACCESS_NOT_SELF_ROLE: { + key: 'sumaris.extraction.accessNotSelfExtraction.role', + label: 'EXTRACTION.OPTIONS.ACCESS_NOT_SELF_ROLE', + type: 'enum', + values: PRIORITIZED_AUTHORITIES.map(label => ({ + key: 'ROLE_' + label, + value: 'USER.PROFILE_ENUM.' + label + })) + }, + EXTRACTION_BATCH_DENORMALIZATION_ENABLE: { + key: 'sumaris.extraction.batch.denormalization.enable', + label: 'EXTRACTION.OPTIONS.BATCH_DENORMALIZATION_ENABLE', + type: 'boolean', + defaultValue: 'false' + }, + EXTRACTION_SPECIES_LENGTH_PMFM_IDS: { + key: 'sumaris.extraction.rdb.speciesLength.pmfm.ids', + label: 'EXTRACTION.OPTIONS.SPECIES_LENGTH_PMFM_IDS', + type: 'entities', + defaultValue: null, + autocomplete: { + attributes: ['id', 'label', 'name'], + filter: { + entityName: 'Pmfm', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + }, + columnSizes: [2, 4, 6], + displayWith: (p) => (p === null || p === void 0 ? void 0 : p.label) || (p && joinProperties(p, ['id', 'name'])) || null + } + }, + EXTRACTION_STRAT_MONITORING_SCIENTIFIC_CRUISE_ENABLE: { + key: 'sumaris.extraction.strat.monitoring.scientificCruise.enable', + label: 'EXTRACTION.OPTIONS.STRAT_MONITORING_SCIENTIFIC_CRUISE_ENABLE', + type: 'boolean', + defaultValue: 'false' + }, +}); +//# sourceMappingURL=extraction.config.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/common/extraction.config.js.map b/out-tsc/app/app/extraction/common/extraction.config.js.map new file mode 100644 index 000000000..73ff6454c --- /dev/null +++ b/out-tsc/app/app/extraction/common/extraction.config.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extraction.config.js","sourceRoot":"","sources":["../../../../../src/app/extraction/common/extraction.config.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,cAAc,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAEtH,MAAM,CAAC,MAAM,gCAAgC,GAAiB;AAC5D;;;;;;;;;GASG;CACJ,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,MAAM,CAAC;IACrD,iBAAiB,EAAuB;QACtC,GAAG,EAAE,4BAA4B;QACjC,KAAK,EAAE,2BAA2B;QAClC,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,OAAO;KACtB;IACD,qBAAqB,EAAuB;QAC1C,GAAG,EAAE,+BAA+B;QACpC,KAAK,EAAE,+BAA+B;QACtC,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,OAAO;KACtB;IACD,yBAAyB,EAAuB;QAC9C,GAAG,EAAE,mCAAmC;QACxC,KAAK,EAAE,mCAAmC;QAC1C,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,OAAO;KACtB;IACD,6BAA6B,EAAuB;QAClD,GAAG,EAAE,sCAAsC;QAC3C,KAAK,EAAE,uCAAuC;QAC9C,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,gBAAgB,CAAC,oBAAoB;KACpD;IACD,0BAA0B,EAAuB;QAC/C,GAAG,EAAE,oCAAoC;QACzC,KAAK,EAAE,oCAAoC;QAC3C,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,CAAC;KAChB;IACD,+BAA+B,EAAuB;QACpD,GAAG,EAAE,iDAAiD;QACtD,KAAK,EAAE,yCAAyC;QAChD,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5C,GAAG,EAAE,OAAO,GAAG,KAAK;YACpB,KAAK,EAAE,oBAAoB,GAAG,KAAK;SACpC,CAAC,CAAC;KACJ;IACD,uCAAuC,EAAuB;QAC5D,GAAG,EAAE,iDAAiD;QACtD,KAAK,EAAE,iDAAiD;QACxD,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,OAAO;KACtB;IAED,kCAAkC,EAAuB;QACvD,GAAG,EAAE,+CAA+C;QACpD,KAAK,EAAE,4CAA4C;QACnD,IAAI,EAAE,UAAU;QAChB,YAAY,EAAE,IAAI;QAClB,YAAY,EAAE;YACZ,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC;YACnC,MAAM,EAAE;gBACN,UAAU,EAAE,MAAM;gBAClB,SAAS,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC;aACjD;YACD,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACtB,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,KAAK,KAAI,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI;SACjF;KACF;IAED,oDAAoD,EAAuB;QACzE,GAAG,EAAE,6DAA6D;QAClE,KAAK,EAAE,8DAA8D;QACrE,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,OAAO;KACtB;CACF,CAAC,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/common/extraction.errors.js b/out-tsc/app/app/extraction/common/extraction.errors.js new file mode 100644 index 000000000..ad3a6b121 --- /dev/null +++ b/out-tsc/app/app/extraction/common/extraction.errors.js @@ -0,0 +1,11 @@ +export const ExtractionErrorCodes = { + LOAD_EXTRACTION_TYPES_ERROR: 300, + LOAD_EXTRACTION_ROWS_ERROR: 301, + DOWNLOAD_EXTRACTION_FILE_ERROR: 302, + LOAD_EXTRACTION_GEO_TYPES_ERROR: 304, + LOAD_EXTRACTION_GEO_JSON_ERROR: 305, + LOAD_EXTRACTION_TECH_ERROR: 306, + LOAD_EXTRACTION_MIN_MAX_TECH_ERROR: 306, + UPDATE_PRODUCT_ERROR: 307 +}; +//# sourceMappingURL=extraction.errors.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/common/extraction.errors.js.map b/out-tsc/app/app/extraction/common/extraction.errors.js.map new file mode 100644 index 000000000..a36af20d5 --- /dev/null +++ b/out-tsc/app/app/extraction/common/extraction.errors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extraction.errors.js","sourceRoot":"","sources":["../../../../../src/app/extraction/common/extraction.errors.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAElC,2BAA2B,EAAE,GAAG;IAChC,0BAA0B,EAAE,GAAG;IAC/B,8BAA8B,EAAE,GAAG;IACnC,+BAA+B,EAAE,GAAG;IACpC,8BAA8B,EAAE,GAAG;IACnC,0BAA0B,EAAE,GAAG;IAC/B,kCAAkC,EAAE,GAAG;IAEvC,oBAAoB,EAAE,GAAG;CAC1B,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/common/extraction.service.js b/out-tsc/app/app/extraction/common/extraction.service.js new file mode 100644 index 000000000..9d5dd6d49 --- /dev/null +++ b/out-tsc/app/app/extraction/common/extraction.service.js @@ -0,0 +1,266 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { AccountService, BaseGraphqlService, EntityUtils, GraphqlService, isNil, isNotNil } from '@sumaris-net/ngx-components'; +import { ExtractionFilter, ExtractionFilterCriterion, ExtractionResult, ExtractionTypeUtils } from '../type/extraction-type.model'; +import { ExtractionErrorCodes } from '@app/extraction/common/extraction.errors'; +import { MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +export const ExtractionFragments = { + column: gql ` + fragment ExtractionColumnFragment on ExtractionTableColumnVO { + label + name + columnName + type + description + rankOrder + } + `, +}; +const Queries = { + loadRows: gql `query ExtractionRows($type: ExtractionTypeVOInput!, $filter: ExtractionFilterVOInput, + $offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $cacheDuration: String + ){ + data: extractionRows(type: $type, filter: $filter, + offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, cacheDuration: $cacheDuration){ + rows + total + columns { + ...ExtractionColumnFragment + } + } + } + ${ExtractionFragments.column}`, + getFile: gql `query ExtractionFile($type: ExtractionTypeVOInput!, $filter: ExtractionFilterVOInput){ + data: extractionFile(type: $type, filter: $filter) + }`, + loadGeoJson: gql `query AggregationGeoJson( + $type: ExtractionTypeVOInput!, + $filter: ExtractionFilterVOInput, + $strata: AggregationStrataVOInput, + $offset: Int, $size: Int, $sortBy: String, $sortDirection: String) { + data: aggregationGeoJson( + type: $type, filter: $filter, strata: $strata, + offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection + ) + }`, + loadTech: gql `query AggregationTech( + $type: ExtractionTypeVOInput!, + $filter: ExtractionFilterVOInput, + $strata: AggregationStrataVOInput, + $sortBy: String, $sortDirection: String + ) { + data: aggregationTech(type: $type, filter: $filter, strata: $strata, sortBy: $sortBy, sortDirection: $sortDirection) { + data + } + }`, + techMinMax: gql `query AggregationTechMinMax( + $type: ExtractionTypeVOInput!, + $filter: ExtractionFilterVOInput, + $strata: AggregationStrataVOInput + ) { + data: aggregationTechMinMax(type: $type, filter: $filter, strata: $strata) { + aggMin + aggMax + techMin + techMax + } + }` +}; +let ExtractionService = class ExtractionService extends BaseGraphqlService { + constructor(graphql, accountService) { + super(graphql); + this.graphql = graphql; + this.accountService = accountService; + } + /** + * Load extraction rows + * + * @param type + * @param offset + * @param size + * @param sortBy + * @param sortDirection + * @param filter + * @param opts + */ + loadRows(type, offset, size, sortBy, sortDirection, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + filter = ExtractionFilter.fromObject(filter); + const variables = { + type: ExtractionTypeUtils.minify(type), + offset: offset || 0, + size: size || 100, + sortBy: sortBy || undefined, + sortDirection: sortDirection || 'asc', + filter: filter && filter.asPodObject() + }; + // Disable Pod Cache, if disabled + if (opts === null || opts === void 0 ? void 0 : opts.cacheDuration) { + variables.cacheDuration = opts.cacheDuration; + } + const now = Date.now(); + if (this._debug) + console.debug('[extraction-service] Loading rows... using options:', variables); + const res = yield this.graphql.query({ + query: Queries.loadRows, + variables, + error: { code: ExtractionErrorCodes.LOAD_EXTRACTION_ROWS_ERROR, message: 'EXTRACTION.ERROR.LOAD_ROWS_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || 'no-cache' + }); + if (!res || !res.data) + return null; + const data = ExtractionResult.fromObject(res.data); + // Compute column index + (data.columns || []).forEach((c, index) => c.index = index); + if (this._debug) + console.debug(`[extraction-service] Rows ${type.category} ${type.label} loaded in ${Date.now() - now}ms`, data); + return data; + }); + } + /** + * Download extraction to file + * + * @param type + * @param filter + * @param options + */ + downloadFile(type, filter, options) { + return __awaiter(this, void 0, void 0, function* () { + filter = this.asFilter(filter); + const variables = { + type: ExtractionTypeUtils.minify(type), + filter: filter && filter.asPodObject() + }; + const now = Date.now(); + if (this._debug) + console.debug('[extraction-service] Download extraction file... using options:', variables); + const res = yield this.graphql.query({ + query: Queries.getFile, + variables, + error: { code: ExtractionErrorCodes.DOWNLOAD_EXTRACTION_FILE_ERROR, message: 'EXTRACTION.ERROR.DOWNLOAD_FILE_ERROR' }, + fetchPolicy: options && options.fetchPolicy || 'no-cache' + }); + const fileUrl = res && res.data; + if (!fileUrl) + return undefined; + if (this._debug) + console.debug(`[extraction-service] Extraction ${type.category} ${type.label} done in ${Date.now() - now}ms: ${fileUrl}`, res); + return fileUrl; + }); + } + asFilter(source) { + if (isNil(source)) + return undefined; + const target = ExtractionFilter.fromObject(source); + // Remove empty criterion + target.criteria = (target.criteria || []) + .filter(criterion => isNotNil(criterion.name)) + .filter(ExtractionFilterCriterion.isNotEmpty); + return target; + } + /** + * Load aggregation as GeoJson + */ + loadGeoJson(type, strata, offset, size, sortBy, sortDirection, filter, options) { + return __awaiter(this, void 0, void 0, function* () { + options = options || {}; + filter = this.asFilter(filter); + const variables = { + type: ExtractionTypeUtils.minify(type), + strata, + offset: offset || 0, + size: size >= 0 ? size : 1000, + filter: filter && filter.asPodObject() + }; + const res = yield this.graphql.query({ + query: Queries.loadGeoJson, + variables, + error: { code: ExtractionErrorCodes.LOAD_EXTRACTION_GEO_JSON_ERROR, message: 'EXTRACTION.ERROR.LOAD_GEO_JSON_ERROR' }, + fetchPolicy: options && options.fetchPolicy || 'network-only' + }); + if (!res || !res.data) + return null; + return Object.assign({}, res.data); + }); + } + loadAggByTech(type, strata, filter, options) { + return __awaiter(this, void 0, void 0, function* () { + filter = this.asFilter(filter); + const variables = { + type: ExtractionTypeUtils.minify(type), + strata, + filter: filter && filter.asPodObject() + }; + const { data } = yield this.graphql.query({ + query: Queries.loadTech, + variables, + error: { code: ExtractionErrorCodes.LOAD_EXTRACTION_TECH_ERROR, message: 'EXTRACTION.ERROR.LOAD_TECH_ERROR' }, + fetchPolicy: options && options.fetchPolicy || 'network-only' + }); + return (data && data.data) || null; + }); + } + loadAggMinMaxByTech(type, strata, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + filter = this.asFilter(filter); + const variables = { + type: ExtractionTypeUtils.minify(type), + filter: filter && filter.asPodObject(), + strata + }; + const res = yield this.graphql.query({ + query: Queries.techMinMax, + variables, + error: { code: ExtractionErrorCodes.LOAD_EXTRACTION_MIN_MAX_TECH_ERROR, message: 'EXTRACTION.ERROR.LOAD_MIN_MAX_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || 'network-only' + }); + return res && Object.assign({ aggMin: 0, aggMax: 0, techMin: 0, techMax: 0 }, res.data) || null; + }); + } + /* -- protected functions -- */ + fillDefaultProperties(entity) { + // If new entity + const isNew = isNil(entity.id) || entity.id < 0; + if (isNew) { + const person = this.accountService.person; + // Recorder department + if (person && person.department && !entity.recorderDepartment) { + entity.recorderDepartment = person.department; + } + // Recorder person + if (person && person.id && !entity.recorderPerson) { + entity.recorderPerson = person; + } + } + } + asObject(entity, opts) { + opts = Object.assign(Object.assign({}, MINIFY_OPTIONS), opts); + const copy = entity.asObject(opts); + if (opts && opts.minify) { + // Comment because need to keep recorder person + copy.recorderPerson = entity.recorderPerson && { + id: entity.recorderPerson.id, + firstName: entity.recorderPerson.firstName, + lastName: entity.recorderPerson.lastName + }; + // Keep id only, on department + copy.recorderDepartment = entity.recorderDepartment && { id: entity.recorderDepartment && entity.recorderDepartment.id } || undefined; + } + return copy; + } + copyIdAndUpdateDate(source, target) { + if (!source) + return; + EntityUtils.copyIdAndUpdateDate(source, target); + // Copy label + target.label = source.label; + } +}; +ExtractionService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [GraphqlService, + AccountService]) +], ExtractionService); +export { ExtractionService }; +//# sourceMappingURL=extraction.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/common/extraction.service.js.map b/out-tsc/app/app/extraction/common/extraction.service.js.map new file mode 100644 index 000000000..6d33f86b8 --- /dev/null +++ b/out-tsc/app/app/extraction/common/extraction.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extraction.service.js","sourceRoot":"","sources":["../../../../../src/app/extraction/common/extraction.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/common/extraction.utils.js b/out-tsc/app/app/extraction/common/extraction.utils.js new file mode 100644 index 000000000..9031ecc52 --- /dev/null +++ b/out-tsc/app/app/extraction/common/extraction.utils.js @@ -0,0 +1,173 @@ +/* -- Extraction -- */ +import { arraySize, isEmptyArray, isNil, isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrBlank } from '@sumaris-net/ngx-components'; +import { CRITERION_OPERATOR_LIST, ExtractionColumn, ExtractionFilter, ExtractionFilterCriterion } from '../type/extraction-type.model'; +export const SPATIAL_COLUMNS = [ + //'area', FIXME no area geometries in Pod + 'statistical_rectangle', + //'sub_polygon', FIXME no sub_polygon in Pod + 'square' +]; +export const TIME_COLUMNS = ['year', 'quarter', 'month']; +export const IGNORED_COLUMNS = ['record_type']; +export const DEFAULT_CRITERION_OPERATOR = '='; +export class ExtractionUtils { + static dispatchColumns(columns) { + const timeColumns = columns.filter(c => TIME_COLUMNS.includes(c.columnName)); + const spatialColumns = columns.filter(c => SPATIAL_COLUMNS.includes(c.columnName)); + // Aggregation columns (numeric columns) + const aggColumns = columns.filter(c => (!c.type || c.type === 'integer' || c.type === 'double') + && (c.columnName.endsWith('_count') + || c.columnName.indexOf('_count_by_') !== -1 + || c.columnName.endsWith('_time') + || c.columnName.endsWith('weight') + || c.columnName.endsWith('_length') + || c.columnName.endsWith('_value'))); + const excludedFilterColumns = spatialColumns + .concat(timeColumns); + const techColumns = columns.filter(c => !excludedFilterColumns.includes(c) + && !IGNORED_COLUMNS.includes(c.columnName) + && (c.type === 'string' || (c.columnName.endsWith('_class')))); + const criteriaColumns = columns.filter(c => !excludedFilterColumns.includes(c) + && !IGNORED_COLUMNS.includes(c.columnName)); + return { + timeColumns, + spatialColumns, + aggColumns, + techColumns, + criteriaColumns + }; + } + static asQueryParams(type, filter) { + const queryParams = { + category: type && type.category, + label: type && type.label + }; + if (filter.sheetName) { + queryParams.sheet = filter.sheetName; + } + if (isNotEmptyArray(filter.criteria)) { + queryParams.q = this.asCriteriaQueryString(filter.criteria); + } + const metaProperties = (filter === null || filter === void 0 ? void 0 : filter.meta) && Object.entries(filter.meta); + if (isNotEmptyArray(metaProperties)) { + queryParams.meta = metaProperties + .filter(([key, value]) => isNotNil(value)) + .map(([key, value]) => `${key}:${value}`).join(';'); + } + return queryParams; + } + static asCriteriaQueryString(criteria) { + if (isEmptyArray(criteria)) + return undefined; + return criteria.reduce((res, criterion) => { + if (isNilOrBlank(criterion.name)) + return res; // Skip if no value or no name + let value = criterion.value || ''; + const operator = criterion.operator || '='; + const sheetNamePrefix = criterion.sheetName ? `${criterion.sheetName}:` : ''; + if (isNotNilOrBlank(criterion.endValue)) { + value += `:${criterion.endValue}`; + } + else if (isNotEmptyArray(criterion.values)) { + value = criterion.values.join(','); + } + return res.concat(`${sheetNamePrefix}${criterion.name}${operator}${value}`); + }, []).join(';'); + } + static parseCriteriaFromString(q, defaultSheetName) { + const criteria = (q || '').split(';'); + const operationRegexp = new RegExp('(' + CRITERION_OPERATOR_LIST.map(co => co.symbol) + .map(symbol => symbol.replace(/\\!/, '\\\\!')) + .join('|') + ')'); + return criteria + .filter(isNotNilOrBlank) + .map(criterion => { + const matches = operationRegexp.exec(criterion); + const operator = matches && matches[0]; + if (!operator) + return; + const fieldNameParts = criterion.substring(0, matches.index).split(':', 2); + const sheetName = fieldNameParts.length > 1 ? fieldNameParts[0] : defaultSheetName; + const name = fieldNameParts.length > 1 ? fieldNameParts[1] : fieldNameParts[0]; + const value = criterion.substring(matches.index + operator.length); + let values = value.split(':', 2); + if (values.length === 2) { + return { sheetName, name, operator, value: values[0], endValue: values[1] }; + } + else { + values = value.split(','); + if (values.length > 1) { + return { sheetName, name, operator, values }; + } + return { sheetName, name, operator, value }; + } + }) + .filter(isNotNilOrBlank) + .map(ExtractionFilterCriterion.fromObject); + } + static parseMetaString(meta) { + if (isNilOrBlank(meta)) + return undefined; + return meta.split(';') + .reduce((res, prop) => { + const parts = prop.split(':'); + const key = parts[0]; + let value = parts[1]; + if (value === 'true') + value = true; + else if (value === 'false') + value = false; + return Object.assign(Object.assign({}, res), { [key]: value }); + }, {}); + } + static filterWithValues(columns, opts) { + return this.filterMinValuesCount(columns, 1, opts); + } + static filterMinValuesCount(columns, minSize, opts) { + const allowNullValuesOnNumeric = (opts === null || opts === void 0 ? void 0 : opts.allowNullValuesOnNumeric) === true; + return (columns || []).filter(c => + // No values computed = numeric columns + (allowNullValuesOnNumeric === true && ExtractionColumn.isNumeric(c) && isNil(c.values)) + // If values, check count + || arraySize(c.values) >= minSize); + } + static createTripFilter(programLabel, tripIds, operationIds) { + const filter = new ExtractionFilter(); + filter.sheetName = 'TR'; + const criteria = [ + { + sheetName: 'TR', + name: 'project', + operator: '=', + value: programLabel + } + ]; + const tripIdsStr = (tripIds || []) + .filter(isNotNil) + .map(id => id.toString()); + if (isNotEmptyArray(tripIdsStr)) { + criteria.push({ + sheetName: 'TR', + name: 'trip_code', + operator: '=', + value: tripIdsStr.length === 1 ? tripIdsStr[0] : undefined, + values: tripIdsStr.length > 1 ? tripIdsStr : undefined + }); + } + const operationIdsStr = (operationIds || []) + .filter(isNotNil) + .map(id => id.toString()); + if (isNotEmptyArray(operationIdsStr)) { + criteria.push({ + sheetName: 'HH', + name: 'station_id', + operator: '=', + value: operationIdsStr.length === 1 ? operationIdsStr[0] : undefined, + values: operationIdsStr.length > 1 ? operationIdsStr : undefined + }); + } + filter.criteria = criteria.map(ExtractionFilterCriterion.fromObject); + return filter; + } +} +//# sourceMappingURL=extraction.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/common/extraction.utils.js.map b/out-tsc/app/app/extraction/common/extraction.utils.js.map new file mode 100644 index 000000000..23cdef7c1 --- /dev/null +++ b/out-tsc/app/app/extraction/common/extraction.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extraction.utils.js","sourceRoot":"","sources":["../../../../../src/app/extraction/common/extraction.utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/criteria/extraction-criteria.form.js b/out-tsc/app/app/extraction/criteria/extraction-criteria.form.js new file mode 100644 index 000000000..25059353a --- /dev/null +++ b/out-tsc/app/app/extraction/criteria/extraction-criteria.form.js @@ -0,0 +1,423 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { TranslateService } from '@ngx-translate/core'; +import { BehaviorSubject } from 'rxjs'; +import { AccountService, AppForm, arrayDistinct, firstNotNilPromise, isNil, isNotEmptyArray, isNotNil, LocalSettingsService, toBoolean, waitFor, } from '@sumaris-net/ngx-components'; +import { CRITERION_OPERATOR_LIST, ExtractionColumn, ExtractionFilterCriterion } from '../type/extraction-type.model'; +import { ExtractionService } from '../common/extraction.service'; +import { UntypedFormBuilder } from '@angular/forms'; +import { filter, map, switchMap } from 'rxjs/operators'; +import { ExtractionCriteriaValidatorService } from './extraction-criterion.validator'; +import { DEFAULT_CRITERION_OPERATOR } from '@app/extraction/common/extraction.utils'; +export const DEFAULT_EXTRACTION_COLUMNS = [ + { columnName: 'project', name: 'EXTRACTION.COLUMNS.PROJECT', label: 'project', type: 'string' }, + { columnName: 'year', name: 'EXTRACTION.COLUMNS.YEAR', label: 'year', type: 'integer' }, +]; +let ExtractionCriteriaForm = class ExtractionCriteriaForm extends AppForm { + constructor(injector, formBuilder, route, router, translate, service, accountService, settings, validatorService, cd) { + super(injector, + // Empty form, that will be filled by setType() and setSheetName() + formBuilder.group({})); + this.formBuilder = formBuilder; + this.route = route; + this.router = router; + this.translate = translate; + this.service = service; + this.accountService = accountService; + this.settings = settings; + this.validatorService = validatorService; + this.cd = cd; + this.operators = CRITERION_OPERATOR_LIST; + this.$columns = new BehaviorSubject(undefined); + this.$columnValueDefinitions = new BehaviorSubject(undefined); + this.$columnValueDefinitionsByIndex = {}; + this.showSheetsTab = true; + } + set type(value) { + this.setType(value); + } + get type() { + return this._type; + } + set sheetName(value) { + this.setSheetName(value); + } + get sheetName() { + return this._sheetName; + } + set columns(value) { + if (isNotEmptyArray(value)) { + this.$columns.next(value); + } + else { + const columns = DEFAULT_EXTRACTION_COLUMNS.map(col => { + col.name = this.translate.instant(col.name); + return ExtractionColumn.fromObject(col); + }); + this.$columns.next(columns); + } + } + get sheetCriteriaForm() { + return this._sheetName && this.form.get(this._sheetName) || undefined; + } + get criteriaCount() { + return Object.values(this.form.controls) + .map(sheetForm => sheetForm) + .map(sheetForm => sheetForm.controls + .map(criterionForm => criterionForm.value) + .filter(criterion => ExtractionFilterCriterion.isNotEmpty(criterion) && criterion.hidden !== true) + .length) + .reduce((count, length) => count + length, 0); + } + ngOnInit() { + super.ngOnInit(); + this.registerSubscription(this.$columns + .pipe(filter(isNotNil), map(columns => columns.map(c => this.toFieldDefinition(c)))) + .subscribe(definitions => this.$columnValueDefinitions.next(definitions))); + } + ngOnDestroy() { + super.ngOnDestroy(); + this.resetColumnDefinitions(); + this.$columnValueDefinitions.unsubscribe(); + this.$columns.unsubscribe(); + } + setType(type) { + if (!type || type === this.type) + return; // skip + this._type = type; + // Create a form + this.reset(); + this.markForCheck(); + } + setSheetName(sheetName, opts) { + // Skip if same, or loading + if (isNil(sheetName) || this._sheetName === sheetName) + return; + let sheetCriteriaForm = this.form.get(sheetName); + // No criterion array found, for this sheet: create a new + if (!sheetCriteriaForm) { + sheetCriteriaForm = this.validatorService.getCriterionFormArray([], sheetName); + this.form.addControl(sheetName, sheetCriteriaForm); + } + this._sheetName = sheetName; + // Reset all definitions + this.resetColumnDefinitions(); + this.markForCheck(); + } + addFilterCriterion(criterion, opts) { + opts = opts || {}; + opts.appendValue = toBoolean(opts.appendValue, false); + console.debug('[extraction-form] Adding filter criterion'); + let hasChanged = false; + let index = -1; + const sheetName = criterion && criterion.sheetName || this.sheetName; + let arrayControl = this.form.get(sheetName); + if (!arrayControl) { + arrayControl = this.validatorService.getCriterionFormArray([], sheetName); + this.form.addControl(sheetName, arrayControl); + } + else { + // Search by name on existing criteria + if (criterion && isNotNil(criterion.name)) { + index = (arrayControl.value || []).findIndex(c => (c.name === criterion.name)); + } + // If last criterion has no value: use it + if (index === -1 && arrayControl.length) { + // Find last criterion (so reverse array order) + const lastCriterion = arrayControl.at(arrayControl.length - 1).value; + index = isNil(lastCriterion.name) && isNil(lastCriterion.value) ? arrayControl.length - 1 : -1; + } + } + // Replace the existing criterion value + if (index >= 0) { + if (criterion && criterion.name) { + const criterionForm = arrayControl.at(index); + const existingCriterion = criterionForm.value; + opts.appendValue = opts.appendValue && isNotNil(criterion.value) && isNotNil(existingCriterion.value) + && (existingCriterion.operator === '=' || existingCriterion.operator === '!='); + // Append value to existing value + if (opts.appendValue) { + existingCriterion.value += ', ' + criterion.value; + this.validatorService.setCriterionValue(criterionForm, existingCriterion); + } + // Replace existing criterion value + else { + this.validatorService.setCriterionValue(criterionForm, criterion); + } + hasChanged = true; + } + } + // Add a new criterion (formGroup + value) + else { + const criterionForm = this.validatorService.getCriterionFormGroup(criterion, this.sheetName); + arrayControl.push(criterionForm); + hasChanged = true; + index = arrayControl.length - 1; + } + // Mark filter form as dirty (if need) + if (hasChanged && criterion && criterion.value) { + this.form.markAsDirty({ onlySelf: true }); + } + if (hasChanged && (criterion === null || criterion === void 0 ? void 0 : criterion.name) && this._sheetName === (criterion === null || criterion === void 0 ? void 0 : criterion.sheetName) && index >= 0) { + this.updateDefinitionAt(index, criterion.name, false); + } + if (hasChanged && (!opts || opts.emitEvent !== false)) { + this.markForCheck(); + } + return hasChanged; + } + hasFilterCriteria(sheetName) { + sheetName = sheetName || this.sheetName; + const sheetCriteriaForm = sheetName && this.form.get(sheetName); + return sheetCriteriaForm && sheetCriteriaForm.controls + .map(c => c.value) + .some(c => ExtractionFilterCriterion.isNotEmpty(c) && c.hidden !== true); + } + removeFilterCriterion($event, index) { + const arrayControl = this.sheetCriteriaForm; + if (!arrayControl) + return; // skip + // Count visible criteria + const visibleCriteriaCount = arrayControl.value + .filter(criterion => criterion.hidden !== true) + .length; + // Do not remove if last criterion + if (visibleCriteriaCount === 1) { + this.clearFilterCriterion($event, index); + return; + } + arrayControl.removeAt(index); + if (!$event.ctrlKey) { + this.onSubmit.emit(); + } + else { + this.form.markAsDirty(); + } + } + clearFilterCriterion($event, index) { + const arrayControl = this.sheetCriteriaForm; + if (!arrayControl) + return; + const oldValue = arrayControl.at(index).value; + const needClear = (isNotNil(oldValue.name) || isNotNil(oldValue.value)); + if (!needClear) + return false; + this.validatorService.setCriterionValue(arrayControl.at(index), null); + if (!$event.ctrlKey) { + this.onSubmit.emit(); + } + else { + this.form.markAsDirty(); + } + return false; + } + reset(data, opts) { + // Remove all criterion + Object.getOwnPropertyNames(this.form.controls).forEach(sheetName => this.form.removeControl(sheetName)); + // Add the default (empty), for each sheet + (this._type && this._type.sheetNames || []).forEach(sheetName => this.addFilterCriterion({ + name: null, + operator: DEFAULT_CRITERION_OPERATOR, + sheetName + })); + if (!opts || opts.emitEvent !== false) { + this.markForCheck(); + } + } + getCriterionValueDefinition(index) { + let definition$ = this.$columnValueDefinitionsByIndex[index]; + if (!definition$) { + definition$ = this.updateDefinitionAt(index); + } + return definition$; + } + updateDefinitionAt(index, columnName, resetValue) { + var _a, _b, _c; + const arrayControl = this.sheetCriteriaForm; + if (!arrayControl) + return; + // Make sure to wait $columnValueDefinitions has been loaded + if (!this.$columnValueDefinitions.value) { + return this.$columnValueDefinitions + .pipe(filter(isNotNil), switchMap(_ => this.updateDefinitionAt(index, columnName, resetValue))); + } + const criterionForm = arrayControl.at(index); + columnName = columnName || (criterionForm && criterionForm.controls.name.value); + const operator = criterionForm && criterionForm.controls.operator.value || '='; + let definition = (operator === 'NULL' || operator === 'NOT NULL') + ? undefined + : columnName && (this.$columnValueDefinitions.value || []).find(d => d.key === columnName) || null; + // Workaround: use a default string definition, when column cannot be found + if (definition == null) { + console.warn('[extraction-form] Cannot find column definition for ' + columnName); + definition = { key: columnName, type: 'string' }; + } + // Reset the criterion value, is ask by caller + if (resetValue) { + setTimeout(() => { + criterionForm.get('value').reset(null); + }, 250); + } + let subject = this.$columnValueDefinitionsByIndex[index]; + const items = (_a = definition.autocomplete) === null || _a === void 0 ? void 0 : _a.items; + let $items = (_c = (_b = subject === null || subject === void 0 ? void 0 : subject.value) === null || _b === void 0 ? void 0 : _b.autocomplete) === null || _c === void 0 ? void 0 : _c.items; + if (items) { + if ($items instanceof BehaviorSubject) { + $items.next(items); + } + else { + $items = new BehaviorSubject(items); + } + definition = Object.assign(Object.assign({}, definition), { autocomplete: Object.assign(Object.assign({}, definition.autocomplete), { items: $items }) }); + } + if (!subject) { + subject = new BehaviorSubject(definition); + this.$columnValueDefinitionsByIndex[index] = subject; + } + else { + subject.next(definition); + this.markForCheck(); + } + return subject; + } + waitIdle(opts) { + return __awaiter(this, void 0, void 0, function* () { + yield Promise.all([ + waitFor(() => !!this.type, Object.assign({ stop: this.destroySubject }, opts)), + firstNotNilPromise(this.$columnValueDefinitions, Object.assign({ stop: this.destroySubject }, opts)) + ]); + }); + } + toFieldDefinition(column) { + if (isNotEmptyArray(column.values)) { + return { + key: column.columnName, + label: column.name, + // type: 'enum', + // values: column.values.map(v => ({value: v, key: v})), + type: 'entity', + autocomplete: { + items: column.values, + attributes: [undefined], + columnNames: [column.name /*'EXTRACTION.FILTER.CRITERION_VALUE'*/], + mobile: false, + displayWith: (value) => + // DEBUG + //console.debug('TODO display with', value); + isNil(value) ? '' : value + } + }; + } + else { + let type = column.type; + // Always use 'string' for number, to be able to set list + if (type === 'integer' || type === 'double') { + type = 'string'; + } + return { + key: column.columnName, + label: column.name, + type + }; + } + } + setValue(data, opts) { + return __awaiter(this, void 0, void 0, function* () { + yield this.ready(); + yield this.waitIdle(); + // Create a map (using sheetname as key) + const json = (data || []) + .reduce((res, criterion) => { + var _a; + criterion.sheetName = criterion.sheetName || this.sheetName; + criterion.operator = criterion.operator || DEFAULT_CRITERION_OPERATOR; + criterion.value = criterion.value || ((_a = criterion.values) === null || _a === void 0 ? void 0 : _a.join(',')); + res[criterion.sheetName] = res[criterion.sheetName] || []; + res[criterion.sheetName].push(criterion); + return res; + }, {}); + const sheetNames = arrayDistinct(Object.keys(json)); + // Create a sub form for each sheet + sheetNames.forEach(sheet => { + const formArray = this.form.get(sheet); + if (!formArray) { + this.form.addControl(sheet, this.validatorService.getCriterionFormArray(undefined, sheet)); + } + }); + this.form.patchValue(json); + if (!opts || opts.emitEvent !== true) { + this.markForCheck(); + } + }); + } + getValue() { + const disabled = this.form.disabled; + if (disabled) + this.form.enable({ emitEvent: false }); + try { + const json = this.form.value; + if (!json) + return undefined; + // Flat the map by sheet + return Object.getOwnPropertyNames(json) + .reduce((res, sheetName) => res.concat(json[sheetName]), []) + .map(ExtractionFilterCriterion.fromObject); + } + finally { + // Restore disable state + if (disabled) + this.form.disable({ emitEvent: false }); + } + } + /* -- protected method -- */ + resetColumnDefinitions() { + Object.values(this.$columnValueDefinitionsByIndex).forEach(subject => { + subject.next(null); + subject.unsubscribe(); + }); + this.$columnValueDefinitionsByIndex = {}; + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], ExtractionCriteriaForm.prototype, "type", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [Object]) +], ExtractionCriteriaForm.prototype, "sheetName", null); +__decorate([ + Input(), + __metadata("design:type", Object) +], ExtractionCriteriaForm.prototype, "showSheetsTab", void 0); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], ExtractionCriteriaForm.prototype, "columns", null); +ExtractionCriteriaForm = __decorate([ + Component({ + selector: 'app-extraction-criteria-form', + templateUrl: './extraction-criteria.form.html', + styleUrls: ['./extraction-criteria.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + UntypedFormBuilder, + ActivatedRoute, + Router, + TranslateService, + ExtractionService, + AccountService, + LocalSettingsService, + ExtractionCriteriaValidatorService, + ChangeDetectorRef]) +], ExtractionCriteriaForm); +export { ExtractionCriteriaForm }; +//# sourceMappingURL=extraction-criteria.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/criteria/extraction-criteria.form.js.map b/out-tsc/app/app/extraction/criteria/extraction-criteria.form.js.map new file mode 100644 index 000000000..7893d717d --- /dev/null +++ b/out-tsc/app/app/extraction/criteria/extraction-criteria.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extraction-criteria.form.js","sourceRoot":"","sources":["../../../../../src/app/extraction/criteria/extraction-criteria.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/criteria/extraction-criterion.validator.js b/out-tsc/app/app/extraction/criteria/extraction-criterion.validator.js new file mode 100644 index 000000000..7a02fbb99 --- /dev/null +++ b/out-tsc/app/app/extraction/criteria/extraction-criterion.validator.js @@ -0,0 +1,70 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { ExtractionFilterCriterion } from '../type/extraction-type.model'; +import { AppFormArray, arrayDistinct, isNilOrBlank, isNotEmptyArray, isNotNil, toBoolean } from '@sumaris-net/ngx-components'; +import { DEFAULT_CRITERION_OPERATOR } from '@app/extraction/common/extraction.utils'; +let ExtractionCriteriaValidatorService = class ExtractionCriteriaValidatorService { + constructor(formBuilder) { + this.formBuilder = formBuilder; + } + getRowValidator() { + return this.getFormGroup(); + } + getFormGroup(data) { + const config = {}; + const sheetNames = data && arrayDistinct(data + .map(criterion => criterion.sheetName) + .filter(isNotNil)); + if (isNotEmptyArray(sheetNames)) { + sheetNames.forEach(sheetName => { + const criteria = data.filter(criterion => criterion.sheetName === sheetName); + config[sheetName] = this.getCriterionFormArray(criteria, sheetName); + }); + } + return this.formBuilder.group(config); + } + getCriterionFormArray(data, sheetName) { + const formArray = new AppFormArray(criterion => this.getCriterionFormGroup(criterion, sheetName), ExtractionFilterCriterion.equals, ExtractionFilterCriterion.isEmpty); + if (isNotEmptyArray(data)) { + formArray.patchValue(data); + } + return formArray; + } + getCriterionFormGroup(data, sheetName) { + let value = (data === null || data === void 0 ? void 0 : data.value) || null; + // Is many values, concat values to fill the value control + if (isNilOrBlank(value) && isNotEmptyArray(data === null || data === void 0 ? void 0 : data.values)) { + value = data.values.join(','); + } + return this.formBuilder.group({ + name: [data && data.name || null], + operator: [data && data.operator || DEFAULT_CRITERION_OPERATOR, Validators.required], + value: [value], + endValue: [data && data.endValue || null], + sheetName: [data && data.sheetName || sheetName], + hidden: [toBoolean(data === null || data === void 0 ? void 0 : data.hidden, false)] + }); + } + setCriterionValue(control, data, sheetName) { + let value = (data === null || data === void 0 ? void 0 : data.value) || null; + // Is many values, concat values to fill the value control + if (isNilOrBlank(value) && isNotEmptyArray(data === null || data === void 0 ? void 0 : data.values)) { + value = data.values.join(','); + } + control.setValue({ + name: data && data.name || null, + operator: data && data.operator || DEFAULT_CRITERION_OPERATOR, + value, + endValue: data && data.endValue || null, + sheetName: data && data.sheetName || sheetName || null, + hidden: toBoolean(data === null || data === void 0 ? void 0 : data.hidden, false) + }); + } +}; +ExtractionCriteriaValidatorService = __decorate([ + Injectable(), + __metadata("design:paramtypes", [UntypedFormBuilder]) +], ExtractionCriteriaValidatorService); +export { ExtractionCriteriaValidatorService }; +//# sourceMappingURL=extraction-criterion.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/criteria/extraction-criterion.validator.js.map b/out-tsc/app/app/extraction/criteria/extraction-criterion.validator.js.map new file mode 100644 index 000000000..6a1653a8f --- /dev/null +++ b/out-tsc/app/app/extraction/criteria/extraction-criterion.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extraction-criterion.validator.js","sourceRoot":"","sources":["../../../../../src/app/extraction/criteria/extraction-criterion.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/extraction-routing.module.js b/out-tsc/app/app/extraction/extraction-routing.module.js new file mode 100644 index 000000000..3ea6251a7 --- /dev/null +++ b/out-tsc/app/app/extraction/extraction-routing.module.js @@ -0,0 +1,76 @@ +import { __decorate } from "tslib"; +import { RouterModule } from '@angular/router'; +import { AuthGuardService, ComponentDirtyGuard } from '@sumaris-net/ngx-components'; +import { NgModule } from '@angular/core'; +import { ExtractionTablePage } from './table/extraction-table.page'; +import { ProductPage } from './product/product.page'; +import { ExtractionMapPage } from './map/extraction-map.page'; +import { SharedModule } from '@sumaris-net/ngx-components'; +import { AppExtractionModule } from '@app/extraction/extraction.module'; +const routes = [ + { + path: 'data', + pathMatch: 'full', + component: ExtractionTablePage, + runGuardsAndResolvers: 'pathParamsChange', + data: { + profile: 'GUEST' + } + }, + { + path: 'product/:productId', + component: ProductPage, + data: { + profile: 'SUPERVISOR', + pathIdParam: 'productId' + }, + runGuardsAndResolvers: 'pathParamsChange', + canDeactivate: [ComponentDirtyGuard] + }, + { + path: 'map', + canActivate: [AuthGuardService], + children: [ + { + path: '', + component: ExtractionMapPage, + runGuardsAndResolvers: 'pathParamsChange', + data: { + profile: 'USER' + } + } + ] + }, + { + path: 'report', + canActivate: [AuthGuardService], + children: [ + { + path: 'trips', + loadChildren: () => import('../trip/trip/report/trip-report-routing.module').then(m => m.TripReportRoutingModule) + } + ] + }, + { + path: 'device-position', + canActivate: [AuthGuardService], + data: { + profile: 'ADMIN' + }, + loadChildren: () => import('./position/device-position-routing.module').then(m => m.DevicePositionRoutingModule) + }, +]; +let AppExtractionRoutingModule = class AppExtractionRoutingModule { +}; +AppExtractionRoutingModule = __decorate([ + NgModule({ + imports: [ + SharedModule, + AppExtractionModule, + RouterModule.forChild(routes) + ], + exports: [RouterModule] + }) +], AppExtractionRoutingModule); +export { AppExtractionRoutingModule }; +//# sourceMappingURL=extraction-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/extraction-routing.module.js.map b/out-tsc/app/app/extraction/extraction-routing.module.js.map new file mode 100644 index 000000000..7719a3c03 --- /dev/null +++ b/out-tsc/app/app/extraction/extraction-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extraction-routing.module.js","sourceRoot":"","sources":["../../../../src/app/extraction/extraction-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,YAAY,EAAS,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AACvC,OAAO,EAAC,mBAAmB,EAAC,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAC,YAAY,EAAC,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAC,mBAAmB,EAAC,MAAM,mCAAmC,CAAC;AAEtE,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,mBAAmB;QAC9B,qBAAqB,EAAE,kBAAkB;QACzC,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO;SACjB;KACF;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE;YACJ,OAAO,EAAE,YAAY;YACrB,WAAW,EAAE,WAAW;SACzB;QACD,qBAAqB,EAAE,kBAAkB;QACzC,aAAa,EAAE,CAAC,mBAAmB,CAAC;KACrC;IACD;QACE,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,CAAC,gBAAgB,CAAC;QAC/B,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,EAAE;gBACR,SAAS,EAAE,iBAAiB;gBAC5B,qBAAqB,EAAE,kBAAkB;gBACzC,IAAI,EAAE;oBACJ,OAAO,EAAE,MAAM;iBAChB;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,CAAC,gBAAgB,CAAC;QAC/B,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,OAAO;gBACb,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC;aAClH;SACF;KACF;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,CAAC,gBAAgB,CAAC;QAC/B,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO;SACjB;QACD,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,2BAA2B,CAAC;KACjH;CACF,CAAC;AAUK,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;CACtC,CAAA;AADY,0BAA0B;IARtC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,mBAAmB;YACnB,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC9B;QACD,OAAO,EAAE,CAAC,YAAY,CAAC;KACxB,CAAC;GACW,0BAA0B,CACtC;SADY,0BAA0B"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/extraction.module.js b/out-tsc/app/app/extraction/extraction.module.js new file mode 100644 index 000000000..988215673 --- /dev/null +++ b/out-tsc/app/app/extraction/extraction.module.js @@ -0,0 +1,57 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { ExtractionTablePage } from './table/extraction-table.page'; +import { ProductPage } from './product/product.page'; +import { ExtractionMapPage } from './map/extraction-map.page'; +import { ExtractionCriteriaValidatorService } from './criteria/extraction-criterion.validator'; +import { SelectExtractionTypeModal } from './type/select-extraction-type.modal'; +import { ExtractionCriteriaForm } from './criteria/extraction-criteria.form'; +import { ProductForm } from './product/product.form'; +import { AppReferentialModule } from '../referential/referential.module'; +import { LeafletModule } from '@asymmetrik/ngx-leaflet'; +import { MarkdownModule } from 'ngx-markdown'; +import { ExtractionHelpModal } from './help/help.modal'; +import { TranslateModule } from '@ngx-translate/core'; +import { NgChartsModule } from 'ng2-charts'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppSharedModule } from '@app/shared/shared.module'; +import { ColorPickerModule } from 'ngx-color-picker'; +let AppExtractionModule = class AppExtractionModule { + constructor() { + console.debug('[extraction] Creating module'); + } +}; +AppExtractionModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + LeafletModule, + TranslateModule.forChild(), + MarkdownModule.forChild(), + ColorPickerModule, + NgChartsModule, + AppCoreModule, + AppSharedModule, + AppReferentialModule + ], + declarations: [ + ProductPage, + ProductForm, + SelectExtractionTypeModal, + ExtractionTablePage, + ExtractionMapPage, + ExtractionCriteriaForm, + ExtractionHelpModal + ], + providers: [ + ExtractionCriteriaValidatorService + ], + exports: [ + ProductPage + ] + }), + __metadata("design:paramtypes", []) +], AppExtractionModule); +export { AppExtractionModule }; +//# sourceMappingURL=extraction.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/extraction.module.js.map b/out-tsc/app/app/extraction/extraction.module.js.map new file mode 100644 index 000000000..c4d46f750 --- /dev/null +++ b/out-tsc/app/app/extraction/extraction.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extraction.module.js","sourceRoot":"","sources":["../../../../src/app/extraction/extraction.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,kCAAkC,EAAE,MAAM,2CAA2C,CAAC;AAC/F,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AA+B9C,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAE9B;QACE,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAChD,CAAC;CACF,CAAA;AALY,mBAAmB;IA7B/B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAC1B,cAAc,CAAC,QAAQ,EAAE;YACzB,iBAAiB;YACjB,cAAc;YAEd,aAAa;YACb,eAAe;YACf,oBAAoB;SACrB;QACD,YAAY,EAAE;YACZ,WAAW;YACX,WAAW;YACX,yBAAyB;YACzB,mBAAmB;YACnB,iBAAiB;YACjB,sBAAsB;YACtB,mBAAmB;SACpB;QACD,SAAS,EAAE;YACT,kCAAkC;SACnC;QACD,OAAO,EAAE;YACP,WAAW;SACZ;KACF,CAAC;;GACW,mBAAmB,CAK/B;SALY,mBAAmB"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/help/help.modal.js b/out-tsc/app/app/extraction/help/help.modal.js new file mode 100644 index 000000000..49dcddaf5 --- /dev/null +++ b/out-tsc/app/app/extraction/help/help.modal.js @@ -0,0 +1,59 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { ModalController } from '@ionic/angular'; +import { PlatformService } from '@sumaris-net/ngx-components'; +import { LocalSettingsService } from '@sumaris-net/ngx-components'; +import { TranslateService } from '@ngx-translate/core'; +import { ExtractionType } from '../type/extraction-type.model'; +import { isNotNilOrBlank } from '@sumaris-net/ngx-components'; +import { AppHelpModal } from '@sumaris-net/ngx-components'; +let ExtractionHelpModal = class ExtractionHelpModal extends AppHelpModal { + constructor(injector, viewCtrl, platform, settings, translate, cd) { + super(injector, viewCtrl, platform, settings, translate, cd); + this.injector = injector; + this.viewCtrl = viewCtrl; + this.platform = platform; + this.settings = settings; + this.translate = translate; + this.cd = cd; + } + ngOnInit() { + if (!this.type) + throw new Error('Missing \'type\' input'); + this.title = this.type.name; + console.debug('[extraction-help-modal] Show help modal for type:', this.type); + if (isNotNilOrBlank(this.type.description)) { + const subtitle = this.translate.instant('EXTRACTION.HELP.MODAL.DESCRIPTION'); + this.markdownContent = `# ${subtitle}\n\n${this.type.description}\n\n`; + } + if (this.type.docUrl) { + this.loading = true; + let url = this.type.docUrl; + if (url && !url.endsWith('.md')) { + url += '.md'; + } + this.markdownUrl = url; + } + else { + this.markAsLoaded(); // Nothing to load + } + } +}; +__decorate([ + Input(), + __metadata("design:type", ExtractionType) +], ExtractionHelpModal.prototype, "type", void 0); +ExtractionHelpModal = __decorate([ + Component({ + selector: 'app-extraction-help-modal', + templateUrl: 'help.modal.html' + }), + __metadata("design:paramtypes", [Injector, + ModalController, + PlatformService, + LocalSettingsService, + TranslateService, + ChangeDetectorRef]) +], ExtractionHelpModal); +export { ExtractionHelpModal }; +//# sourceMappingURL=help.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/help/help.modal.js.map b/out-tsc/app/app/extraction/help/help.modal.js.map new file mode 100644 index 000000000..44e66145a --- /dev/null +++ b/out-tsc/app/app/extraction/help/help.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"help.modal.js","sourceRoot":"","sources":["../../../../../src/app/extraction/help/help.modal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAS,MAAM,eAAe,CAAC;AACpF,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAC,eAAe,EAAC,MAAO,6BAA6B,CAAC;AAC7D,OAAO,EAAC,oBAAoB,EAAC,MAAO,6BAA6B,CAAC;AAClE,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAC,cAAc,EAAC,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAC,YAAY,EAAC,MAAM,6BAA6B,CAAC;AAUlD,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,YAAY;IAInD,YACc,QAAkB,EAClB,QAAyB,EACzB,QAAyB,EACzB,QAA8B,EAC9B,SAA2B,EAC3B,EAAqB;QAEjC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAPjD,aAAQ,GAAR,QAAQ,CAAU;QAClB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,cAAS,GAAT,SAAS,CAAkB;QAC3B,OAAE,GAAF,EAAE,CAAmB;IAGnC,CAAC;IAGD,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAE5B,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9E,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;YAC7E,IAAI,CAAC,eAAe,GAAG,KAAK,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC;SACxE;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAC/B,GAAG,IAAI,KAAK,CAAC;aACd;YACD,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;SACxB;aACI;YACH,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,kBAAkB;SACxC;IACH,CAAC;CACF,CAAA;AAnCC;IAAC,KAAK,EAAE;8BAAO,cAAc;iDAAC;AAFnB,mBAAmB;IAJ/B,SAAS,CAAC;QACP,QAAQ,EAAE,2BAA2B;QACrC,WAAW,EAAE,iBAAiB;KACjC,CAAC;qCAMwB,QAAQ;QACR,eAAe;QACf,eAAe;QACf,oBAAoB;QACnB,gBAAgB;QACvB,iBAAiB;GAVxB,mBAAmB,CAqC/B;SArCY,mBAAmB"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/map/extraction-map.page.js b/out-tsc/app/app/extraction/map/extraction-map.page.js new file mode 100644 index 000000000..87633059f --- /dev/null +++ b/out-tsc/app/app/extraction/map/extraction-map.page.js @@ -0,0 +1,1336 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Injector, ViewChild, ViewEncapsulation, } from '@angular/core'; +import moment from 'moment'; +import { L } from '@app/shared/map/leaflet'; +import { AppFormUtils, arraySize, Color, ColorScale, ConfigService, DurationPipe, fadeInAnimation, fadeInOutAnimation, firstNotNilPromise, isEmptyArray, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, isNumber, isNumberRange, StatusIds, waitFor, } from '@sumaris-net/ngx-components'; +import { BehaviorSubject, Subject, timer } from 'rxjs'; +import { Validators } from '@angular/forms'; +import { ExtractionFilter, ExtractionType } from '../type/extraction-type.model'; +import { CRS } from 'leaflet'; +import { debounceTime, filter, first, mergeMap, skip, switchMap, takeUntil } from 'rxjs/operators'; +import { SelectExtractionTypeModal } from '../type/select-extraction-type.modal'; +import { DEFAULT_CRITERION_OPERATOR, ExtractionAbstractPage } from '../common/extraction-abstract.page'; +import { MatExpansionPanel } from '@angular/material/expansion'; +import { ExtractionUtils } from '../common/extraction.utils'; +import { UnitLabel, UnitLabelPatterns } from '@app/referential/services/model/model.enum'; +import { MapGraticule } from '@app/shared/map/map.graticule'; +import { EXTRACTION_CONFIG_OPTIONS } from '@app/extraction/common/extraction.config'; +import { ExtractionProduct } from '@app/extraction/product/product.model'; +import { ProductService } from '@app/extraction/product/product.service'; +import { AggregationStrataValidatorService } from '@app/extraction/strata/strata.validator'; +import { AggregationStrata } from '@app/extraction/strata/strata.model'; +import { RxState } from '@rx-angular/state'; +import { ChartJsUtils } from '@app/shared/chartsjs.utils'; +const maxZoom = 18; +const REGEXP_NAME_WITH_UNIT = /^([^(]+)(?: \(([^)]+)\))?$/; +const BASE_LAYER_SLD_BODY = '' + + ' ' + + ' ESPACES_TERRESTRES_P' + + ' ' + + ' polygonSymbolizer' + + ' polygonSymbolizer' + + ' ' + + ' ' + + ' ' + + ' ' + + ' #8C8C8C' + + ' 1' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ''; +let ExtractionMapPage = class ExtractionMapPage extends ExtractionAbstractPage { + constructor(injector, state, productService, durationPipe, strataValidatorService, configService, cd) { + super(injector, state); + this.productService = productService; + this.durationPipe = durationPipe; + this.strataValidatorService = strataValidatorService; + this.configService = configService; + this.cd = cd; + // -- Map Layers -- + this.osmBaseLayer = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + maxZoom, + attribution: 'Open Street Map' + }); + this.sextantBaseLayer = L.tileLayer('https://sextant.ifremer.fr/geowebcache/service/wmts' + + '?Service=WMTS&Layer=sextant&Style=&TileMatrixSet=EPSG:3857&Request=GetTile&Version=1.0.0&Format=image/png&TileMatrix=EPSG:3857:{z}&TileCol={x}&TileRow={y}', { + maxZoom, + attribution: 'Sextant' + }); + this.countriesLayer = L.tileLayer.wms('http://www.ifremer.fr/services/wms/dcsmm', { + maxZoom, + version: '1.3.0', + crs: CRS.EPSG3857, + format: 'image/png', + transparent: true, + zIndex: 500, + attribution: 'Sextant', + pane: 'countries' + }).setParams({ + layers: 'ESPACES_TERRESTRES_P', + service: 'WMS', + sld_body: BASE_LAYER_SLD_BODY + }); + this.mapOptions = { + preferCanvas: true, + attributionControl: false, + layers: [this.sextantBaseLayer], + zoomControl: false, + minZoom: 1, + maxZoom, + // FIXME: cards not shown + fullscreenControl: true, + fullscreenControlOptions: { + position: 'topleft', + title: this.translate.instant('MAP.ENTER_FULLSCREEN'), + titleCancel: this.translate.instant('MAP.EXIT_FULLSCREEN'), + } + }; + this.layersControl = { + baseLayers: { + // eslint-disable-next-line @typescript-eslint/naming-convention + 'Sextant (Ifremer)': this.sextantBaseLayer, + // eslint-disable-next-line @typescript-eslint/naming-convention + 'Open Street Map': this.osmBaseLayer + }, + overlays: {} + }; + this.showGraticule = false; + this.showCountriesLayer = true; + // -- Legend card -- + this.showLegend = false; + this.showLegendForm = false; + this.legendStyle = {}; + this.legendItems$ = this._state.select('legendItems'); + // -- Details card -- + this.overFeature$ = this._state.select('overFeature'); + this.details$ = this._state.select('details'); + this.techChart$ = this._state.select('techChart'); + // -- Tech chart card + this.techChartDefaults = { + type: 'bar', + data: { + datasets: [], + labels: [] + }, + options: { + responsive: true, + animation: true, + maintainAspectRatio: false, + plugins: { + title: { + display: false + }, + legend: { + display: false + } + }, + scales: { + x: { + display: true, + type: 'linear', + }, + y: { + display: true, + type: 'linear', + suggestedMin: 0 + } + }, + // Custom properties + sortByLabel: true, + fixAxis: false, + aggMin: 0, + aggMax: undefined + } + }; + this.chartTypes = ['pie', 'bar', 'doughnut']; + this.showTechChart = true; + // -- Data -- + this.data = { + total: 0, + min: 0, + max: 0 + }; + this.columnNames = {}; // cache for i18n column name + this.$fitToBounds = new Subject(); + this.$center = new BehaviorSubject(undefined); + this.$title = new BehaviorSubject(undefined); + this.$sheetNames = new BehaviorSubject(undefined); + this.$timeColumns = new BehaviorSubject(undefined); + this.$spatialColumns = new BehaviorSubject(undefined); + this.$aggColumns = new BehaviorSubject(undefined); + this.$techColumns = new BehaviorSubject(undefined); + this.$criteriaColumns = new BehaviorSubject(undefined); + this.$years = new BehaviorSubject(undefined); + this.animationOverrides = {}; + // Add controls to form + this.form.addControl('strata', this.strataValidatorService.getFormGroup()); + this.form.addControl('year', this.formBuilder.control(null, Validators.required)); + this.form.addControl('month', this.formBuilder.control(null)); + this.form.addControl('quarter', this.formBuilder.control(null)); + this._enabled = true; // enable the form + // If supervisor, allow to see all aggregations types + this.productFilter = { + statusIds: this.accountService.hasMinProfile('SUPERVISOR') ? [StatusIds.DISABLE, StatusIds.ENABLE, StatusIds.TEMPORARY] : [StatusIds.ENABLE], + isSpatial: true + }; + const legendStartColor = new Color([255, 255, 190], 1); + const legendEndColor = new Color([150, 30, 30], 1); + this.legendForm = this.formBuilder.group({ + count: [10, Validators.required], + min: [0, Validators.required], + max: [1000, Validators.required], + startColor: [legendStartColor.rgba(), Validators.required], + endColor: [legendEndColor.rgba(), Validators.required], + conversionCoefficient: [1], + unit: [null] + }); + const account = this.accountService.account; + this.formatNumberLocale = account && account.settings.locale || 'en-US'; + this.formatNumberLocale = this.formatNumberLocale.replace(/_/g, '-'); + this.registerSubscription(this.onRefresh.pipe( + // avoid multiple load) + filter(() => isNotNil(this.type) && (!this.loading || this.isAnimated)), switchMap(() => this.loadGeoData())).subscribe(() => this.markAsPristine())); + this.registerSubscription(this.configService.config.subscribe(config => { + let centerCoords = config.getPropertyAsNumbers(EXTRACTION_CONFIG_OPTIONS.EXTRACTION_MAP_CENTER_LAT_LNG); + centerCoords = ((centerCoords === null || centerCoords === void 0 ? void 0 : centerCoords.length) === 2) ? centerCoords : [0, 0]; + const zoom = config.getPropertyAsInt(EXTRACTION_CONFIG_OPTIONS.EXTRACTION_MAP_CENTER_ZOOM); + this.$center.next({ + center: L.latLng(centerCoords), + zoom: zoom || 5 + }); + })); + } + set customLegendOptions(value) { + this._state.set('customLegendOptions', _ => value); + } + get customLegendOptions() { + return this._state.get('customLegendOptions'); + } + set overFeature(value) { + this._state.set('overFeature', _ => value); + } + get overFeature() { + return this._state.get('overFeature'); + } + set details(value) { + this._state.set('details', _ => value); + } + get details() { + return this._state.get('details'); + } + set techChart(value) { + this._state.set('techChart', _ => value); + } + get techChart() { + return this._state.get('techChart'); + } + get year() { + return this.form.controls.year.value; + } + get aggColumnName() { + return this.strataForm.controls.aggColumnName.value; + } + get techColumnName() { + return this.strataForm.controls.techColumnName.value; + } + get hasData() { + return this.ready && this.data && this.data.total > 0; + } + get legendStartColor() { + return this.legendForm.controls.startColor.value; + } + set legendStartColor(value) { + this.legendForm.controls.startColor + .patchValue(value, { emitEvent: false }); + } + get legendEndColor() { + return this.legendForm.controls.endColor.value; + } + set legendEndColor(value) { + this.legendForm.controls.endColor + .patchValue(value, { emitEvent: false }); + } + get dirty() { + return this.form.dirty || this.criteriaForm.dirty; + } + get strataForm() { + return this.form.controls.strata; + } + get techChartAxisType() { + return this.techChartDefaults.options.scales.y.type; + } + set techChartAxisType(type) { + this.updateTechChart({ options: { scales: { y: { type: type } } } }); + } + get isAnimated() { + return !!this.animation; + } + markAsPristine(opts) { + super.markAsPristine(opts); + this.form.markAsPristine(opts); + } + markAsTouched(opts) { + super.markAsTouched(opts); + AppFormUtils.markAsTouched(this.form); + } + markAllAsTouched(opts) { + super.markAllAsTouched(opts); + AppFormUtils.markAllAsTouched(this.form, opts); + } + get sheetNames() { + if (!this.$sheetNames.value) + this.updateSheetNames(); + return this.$sheetNames.value; + } + ngOnInit() { + super.ngOnInit(); + this.addChildForm(this.criteriaForm); + this._state.connect('details', this.overFeature$, (oldState, value) => this.computeFeatureDetails(value)); + this.registerSubscription(this.criteriaForm.form.valueChanges + .pipe(filter(() => this.ready && !this.loading), debounceTime(250)).subscribe(() => this.markForCheck())); + this.addCustomControls(); + this.loadFromRouteOrSettings(); + } + loadFromRouteOrSettings() { + const _super = Object.create(null, { + loadFromRouteOrSettings: { get: () => super.loadFromRouteOrSettings } + }); + return __awaiter(this, void 0, void 0, function* () { + console.debug('[extraction-map] Looking for type, from route or settings...'); + const found = yield _super.loadFromRouteOrSettings.call(this); + if (found) + return found; + console.debug('[extraction-map] No type found: opening type modal...'); + // No map loaded, open the modal + setTimeout(() => this.openSelectTypeModal(), 450); + }); + } + ngAfterViewInit() { + super.ngAfterViewInit(); + this.fitToBounds(); + } + ngOnDestroy() { + super.ngOnDestroy(); + this.$title.unsubscribe(); + this.$sheetNames.unsubscribe(); + this.$timeColumns.unsubscribe(); + this.$spatialColumns.unsubscribe(); + this.$aggColumns.unsubscribe(); + this.$techColumns.unsubscribe(); + this.$criteriaColumns.unsubscribe(); + this.$years.unsubscribe(); + } + onMapReady(leafletMap) { + return __awaiter(this, void 0, void 0, function* () { + const map = leafletMap; + // Wait settings to be loaded + const settings = yield this.settings.ready(); + // Add scale control + L.control.scale({ + position: 'topright' + }).addTo(map); + // Add customized zoom control + L.control + .zoom({ + zoomInTitle: this.translate.instant('MAP.ZOOM_IN'), + zoomOutTitle: this.translate.instant('MAP.ZOOM_OUT'), + }) + .addTo(map); + // Create graticule + this.graticule = new MapGraticule({ latLngPattern: settings.latLongFormat }); + // Add custom button to show/hide graticule + const graticuleControl = L.easyButton({ + states: [ + { + stateName: 'show', + icon: 'grid_on', + title: this.translate.instant('MAP.SHOW_GRATICULE'), + onClick: (btn, map) => { + this.showGraticule = true; + this.graticule.addTo(map); + btn.state('hide'); + }, + }, + { + stateName: 'hide', + icon: 'grid_off', + title: this.translate.instant('MAP.HIDE_GRATICULE'), + onClick: (btn, map) => { + this.showGraticule = false; + this.graticule.removeFrom(map); + btn.state('show'); + }, + }, + ], + }); + graticuleControl.addTo(map); + // DEBUG zoom + //map.on('zoom', () => console.debug(`[extraction-map] zoom=${map.getZoom()}`)); + // Center map + const { center, zoom } = yield firstNotNilPromise(this.$center, { stop: this.destroySubject }); + // Call ready in a timeout to let leaflet map to initialize + setTimeout(() => { + if (center && (center.lat !== 0 || center.lng !== 0)) { + console.debug(`[extraction-map] Center: `, center); + map.setView(center, zoom); + } + else { + map.fitWorld(); + } + this.map = map; + this.markAsReady(); + }); + }); + } + markAsReady(opts) { + const _super = Object.create(null, { + markAsReady: { get: () => super.markAsReady } + }); + return __awaiter(this, void 0, void 0, function* () { + if (!this.map || !this.types) + return; // Skip if missing types or map + // DEBUG + //console.debug(`[extraction-map] Mark as ready !`); + _super.markAsReady.call(this, opts); + }); + } + watchAllTypes() { + return this.productService.watchAll(this.productFilter); + } + loadType(id, opts) { + return this.productService.load(id, opts); + } + fromObject(json) { + return ExtractionProduct.fromObject(json); + } + setType(type, opts) { + const _super = Object.create(null, { + setType: { get: () => super.setType } + }); + return __awaiter(this, void 0, void 0, function* () { + const changed = yield _super.setType.call(this, type, opts); + if (changed) { + // Reset year + this.form.get('year').setValue(null); + // Update the title + this.updateTitle(); + // Stop animation + if (!opts || opts.stopAnimation !== false) { + this.stopAnimation(); + } + // Update sheet names + this.updateSheetNames(); + } + else { + // Force refresh + yield this.updateColumns(opts); + this.applyDefaultStrata(opts); + } + return changed; + }); + } + setSheetName(sheetName, opts) { + // Make sure sheetName exists in strata. If not, select the default strata sheetname + const sheetNames = this.sheetNames || [sheetName]; + sheetName = sheetNames.find(s => s === sheetName) || sheetNames[0]; + const changed = this.sheetName !== sheetName; + // Reset min/max of the custom legend (if exists) + if (changed || (opts === null || opts === void 0 ? void 0 : opts.emitEvent)) { + const customLegendOptions = this.customLegendOptions; + if (customLegendOptions) { + this.customLegendOptions = Object.assign(Object.assign({}, customLegendOptions), { min: 0, max: undefined }); + } + // Stop animation + if (!opts || opts.stopAnimation !== false) { + this.stopAnimation(); + } + this.$timeColumns.next(null); + this.$spatialColumns.next(null); + this.$aggColumns.next(null); + this.$techColumns.next(null); + this.markAsLoading(); + } + super.setSheetName(sheetName, Object.assign({ emitEvent: false }, opts)); + if (changed) { + this.applyDefaultStrata(opts); + this.updateColumns(opts) + .then(() => { + if (!opts || opts.emitEvent !== false) { + return this.loadGeoData(); + } + }); + } + else { + this.applyDefaultStrata(opts); + this.updateColumns(opts); + } + } + setAggColumn(aggColumnName, opts) { + const changed = this.aggColumnName !== aggColumnName; + if (!changed) + return; // Skip + this.form.get('strata').patchValue({ + aggColumnName + }, opts); + if (!opts || opts.emitEVent !== false) { + this.onRefresh.emit(); + } + } + setTechColumn(techColumnName, opts) { + return __awaiter(this, void 0, void 0, function* () { + this.form.get('strata').patchValue({ + techColumnName + }, opts); + this.showTechChart = true; + // Reset animation data + this.resetAnimationOverrides(); + if (!this.isAnimated && (!opts || opts.emitEvent !== false)) { + const loaded = yield this.loadTechData(); + if (!loaded) + this.showTechChart = false; + } + }); + } + hideTechChart() { + this.techChart = null; + this.showTechChart = false; + delete this.animationOverrides.techChartOptions; + this.markForCheck(); + } + getI18nSheetName(sheetName, type, self) { + const str = super.getI18nSheetName(sheetName, type, self); + return str.replace(/\([A-Z]+\)$/, ''); + } + updateTitle() { + return __awaiter(this, void 0, void 0, function* () { + const title = this.translate.instant(this.type.name); + this.$title.next(title); + }); + } + /* -- protected method -- */ + parseCriteriaFromString(queryString, sheet) { + const criteria = super.parseCriteriaFromString(queryString, sheet); + // Read year, and remove it from criteria + const yearIndex = (criteria || []).findIndex(c => (!sheet || sheet === c.sheetName) + && c.name === 'year' && c.operator === '=' && isNotNil(c.value)); + if (yearIndex !== -1) { + const year = criteria.splice(yearIndex, 1)[0].value; + this.setYear(+year, { emitEvent: false, skipLocationChange: true /*already set*/ }); + } + return criteria; + } + resetGeoData() { + this.cleanMapLayers(); + // Reset geo data + this.data = { total: 0, min: 0, max: 0 }; + // Hide details + this.details = null; + // Hide chart + this.techChart = null; + // Hide legend + this.showLegend = false; + this.markForCheck(); + } + cleanMapLayers() { + (this.layers || []).forEach((layer) => this.map.removeLayer(layer)); + this.layers = []; + } + ready() { + const _super = Object.create(null, { + ready: { get: () => super.ready } + }); + return __awaiter(this, void 0, void 0, function* () { + yield this.platform.ready(); + yield waitFor(() => !!this.getStrataValue(), { stop: this.destroySubject }); + yield _super.ready.call(this); + }); + } + updateColumns(opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.type) + return; + // Update filter columns + const sheetName = this.sheetName; + const columns = sheetName && (yield this.productService.loadColumns(this.type, sheetName)) || []; + // Translate names + this.translateColumns(columns); + // Convert to a map, by column name + this.columnNames = columns.reduce((res, c) => { + res[c.columnName] = c.name; + return res; + }, {}); + const columnsMap = ExtractionUtils.dispatchColumns(columns); + console.debug('[extraction-map] dispatched columns: ', columnsMap); + this.$aggColumns.next(columnsMap.aggColumns); + this.$techColumns.next(ExtractionUtils.filterWithValues(columnsMap.techColumns, { allowNullValuesOnNumeric: true })); + this.$spatialColumns.next(columnsMap.spatialColumns); + this.$timeColumns.next(ExtractionUtils.filterWithValues(columnsMap.timeColumns, { allowNullValuesOnNumeric: false })); + this.$criteriaColumns.next(ExtractionUtils.filterWithValues(columnsMap.criteriaColumns, { allowNullValuesOnNumeric: true })); + const yearColumn = (columns || []).find(c => c.columnName === 'year'); + const years = (yearColumn && yearColumn.values || []).map(s => parseInt(s)); + this.$years.next(years); + }); + } + updateSheetNames() { + // Filter sheet name on existing stratum + let sheetNames = this.type && this.type.sheetNames || null; + if (sheetNames && this.type.stratum) { + sheetNames = this.type.stratum + .slice() // Copy before sorting + .sort(strata => strata.isDefault ? -1 : 1) + .map(s => s.sheetName) + .filter(sheetName => isNotNil(sheetName) && sheetNames.includes(sheetName)); + } + this.$sheetNames.next(sheetNames); + } + getDefaultStrata(sheetName) { + if (!this.type || !sheetName) + return; + // Find first strate, compatible with this sheet + let defaultStrata = sheetName && (this.type.stratum || []).find(s => (s === null || s === void 0 ? void 0 : s.sheetName) === sheetName); + // Strata not found: create a new one, from the main default strata when possible + if (!defaultStrata) { + defaultStrata = (this.type.stratum || []).find(s => s === null || s === void 0 ? void 0 : s.isDefault); + defaultStrata = (defaultStrata === null || defaultStrata === void 0 ? void 0 : defaultStrata.clone()) || new AggregationStrata(); // Create a copy, to leave original strata unchanged + defaultStrata.sheetName = sheetName; + // Reset tech and agg columns, has it make no sense to keep it + // (because it came from another sheet, and may not existed in the expected sheet) + defaultStrata.techColumnName = null; + defaultStrata.aggColumnName = null; + } + return defaultStrata; + } + applyDefaultStrata(opts) { + const defaultStrata = this.getDefaultStrata(this.sheetName); + if (defaultStrata) { + console.debug(`[extraction-map] Applying default strata:`, defaultStrata); + this.form.patchValue({ + strata: defaultStrata.asObject() + }, opts); + } + } + loadData() { + return __awaiter(this, void 0, void 0, function* () { + const type = this.type; + if (!type) + return; // Skip, if no type + const now = Date.now(); + let hasData = false; + try { + if (isEmptyArray(type.sheetNames)) + return; // No data + const filterYear = this.form.get('year').value; + const startYear = filterYear || moment().year(); + const endYear = filterYear || (startYear - 20); + const sheetName = this.sheetName || (type && type.sheetNames && type.sheetNames[0]) || null; + const strata = this.getDefaultStrata(sheetName); + if (!strata) + return; // Skip, if no spatial strata + let year = startYear; + do { + // Set default filter + this.form.patchValue({ year, strata }, { emitEvent: false }); + // Load data (from filter) + yield this.loadGeoData(); + // Check if some data found + hasData = this.hasData; + if (!hasData) + year--; + } while (!hasData && year >= endYear); + //if (hasData) this.setYear(year, {emitEvent: true, skipLocationChange: true, stopAnimation: true}) + } + finally { + // OK: data found + if (hasData) { + console.info(`[extraction-map] Data layer loaded successfully, in ${Date.now() - now}`); + } + // No data: warn user + else { + yield this.showToast({ + type: 'warning', + message: 'EXTRACTION.MAP.WARNING.NO_DATA' + }); + } + } + }); + } + loadGeoData() { + return __awaiter(this, void 0, void 0, function* () { + yield this.ready(); + if (!this.type || !this.type.category || !this.type.label) { + console.warn('[extraction-map] Cannot load GeoJSON data: missing type, or invalid type'); + this.markAsLoaded(); + return; + } + this.markAsLoading(); + const isAnimated = !!this.animation; + const strata = this.getStrataValue(); + const filter = this.getFilterValue(strata); + try { + const now = Date.now(); + console.debug(`[extraction-map] Loading layer ${this.type.category} ${this.type.label}`, filter, strata); + // Disabled forms (after getting strata and filter) + this.disable(); + if (!isAnimated) + this.cleanMapLayers(); + this.error = null; + let offset = 0; + const size = 3000; + const layer = L.geoJSON(null, { + onEachFeature: this.onEachFeature.bind(this), + style: { + className: 'geojson-shape' + } + }); + let total = 0; + const aggColumnName = strata.aggColumnName; + const fetchPolicy = this.isAnimated ? 'cache-first' : undefined /*default*/; + let maxValue = 0; + let hasMore = true; + while (hasMore) { + // Get geo json using slice + const geoJson = yield this.service.loadGeoJson(this.type, strata, offset, size, null, null, filter, { fetchPolicy }); + const hasData = isNotNil(geoJson) && geoJson.features && geoJson.features.length || false; + if (hasData) { + // Remove previous layer (once if animated, otherwise it has been done before data load) + if (isAnimated && offset === 0) + this.cleanMapLayers(); + // Add data to layer + layer.addData(geoJson); + // Compute max value (need for legend) + maxValue = geoJson.features + .map(feature => feature.properties[aggColumnName]) + .reduce((max, value) => Math.max(max, value), maxValue); + offset += size; + total += geoJson.features.length; + } + hasMore = hasData && geoJson.features.length >= size; + } + this.data.total = total; + this.data.max = maxValue; + if (total === 0) { + console.debug(`[extraction-map] No data found, in ${Date.now() - now}ms`); + // Clean geo data + this.resetGeoData(); + } + else { + // Prepare legend options + const legendOptions = Object.assign(Object.assign({}, this.legendForm.value), this.customLegendOptions); + if (!this.customLegendOptions || isNil(legendOptions.max)) { + legendOptions.max = Math.max(10, Math.round(maxValue + 0.5)); + } + this.legendForm.patchValue(legendOptions, { emitEvent: false }); + // Create scale legend + const scale = this.createLegendScale(legendOptions); + layer.setStyle(this.getFeatureStyleFn(scale, aggColumnName)); + this.updateLegendStyle(scale); + // Add countries layers + if (this.showCountriesLayer) { + // Init countries pane, if need + if (!this.map.getPane(this.countriesLayer.options.pane)) { + const pane = this.map.createPane(this.countriesLayer.options.pane); + pane.style.zIndex = '650'; + pane.style.pointerEvents = 'none'; + } + this.countriesLayer.addTo(this.map); + this.layers.push(this.countriesLayer); + } + // Add to layers + layer.addTo(this.map); + this.layers.push(layer); + console.debug(`[extraction-map] ${total} geometries loaded in ${Date.now() - now}ms (${Math.floor(offset / size)} slices)`); + // Load tech data (wait end if animation is running) + if (this.showTechChart) { + const loaded = yield this.loadTechData(this.type, strata, filter); + // Disabled chart, if unable to load + if (!loaded) + this.showTechChart = false; + } + this.showLegend = isNotNilOrBlank(strata.aggColumnName); + } + } + catch (err) { + console.error(err); + this.setError(err && err.message || err); + this.showLegend = false; + this.markForCheck(); + } + finally { + if (!this.isAnimated) { + this.markAsLoaded(); + this.enable(); + if (this.data.total) + yield this.fitToBounds(); + } + } + }); + } + loadTechData(type, strata, filter) { + return __awaiter(this, void 0, void 0, function* () { + type = type || this.type; + strata = type && (strata || this.getStrataValue()); + filter = strata && (filter || this.getFilterValue(strata)); + let techChart = this.techChartDefaults; + if (!type || !strata || !strata.techColumnName || !strata.aggColumnName) + return false; // skip; + const [aggColumns, techColumns] = yield Promise.all([ + firstNotNilPromise(this.$aggColumns), + firstNotNilPromise(this.$techColumns) + ]); + const isAnimated = !!this.animation; + const aggColumnName = strata.aggColumnName; + const techColumnName = strata.techColumnName; + const techColumn = (techColumns || []).find(c => c.columnName === techColumnName); + const aggColumn = (aggColumns || []).find(c => c.columnName === aggColumnName); + try { + let map = yield this.service.loadAggByTech(type, strata, filter, { + fetchPolicy: isAnimated ? 'cache-first' : undefined /*default*/ + }); + if (isAnimated) { + // Prepare overrides (if need) + const overrides = yield this.loadAnimationOverrides(type, strata, filter); + techChart = Object.assign(Object.assign({}, techChart), { options: Object.assign(Object.assign({}, techChart === null || techChart === void 0 ? void 0 : techChart.options), overrides.techChartOptions) }); + } + // Set title + techChart.options.plugins.title = Object.assign(Object.assign({}, techChart.options.plugins.title), { text: this.translate.instant('EXTRACTION.MAP.TECH_CHART_TITLE', { + aggColumnName: aggColumn.name, + techColumnName: techColumn.name + }) }); + // Show/Hide scales + const showScales = techChart.type !== 'pie' && techChart.type !== 'doughnut'; + techChart.options.scales.x.display = showScales; + techChart.options.scales.y.display = showScales; + // Keep data without values for this year + if (techChart.options.fixAxis) { + // Copy, because object if immutable + map = Object.assign({}, map); + // Make sure all column values is on the chart + (techColumn.values || []) + .filter(key => isNil(map[key])) + .forEach(key => map[key] = 0); + } + let entries = Object.entries(map); + const firstEntry = entries.length ? entries[0] : undefined; + // If label are number: always sort by value (ASC) + if (firstEntry && isNumber(firstEntry[0].trim())) { + entries = entries.map(entry => [parseFloat(entry[0]), entry[1]]); + entries.sort((a, b) => a[0] - b[0]); + } + // If range of number (.e.g '0-10', '>=40') : always sort by value (ASC) + else if (firstEntry && entries.findIndex(entry => !isNumberRange(entry[0].trim())) === -1) { + entries = entries.map(([range, value]) => { + const rankOrder = parseInt(range + .split('-')[0] + .replace(/[><= ]+/g, '')); + return [range, value, rankOrder]; + }) + .sort(([, , a], [, , b]) => a - b) + .map(([range, value]) => [range, value]); + } + // Sort by label (ASC) + else if (techChart.options.sortByLabel) { + entries = entries.sort((a, b) => a[0] < b[0] ? -1 : 1); + } + // Sort by value (DESC) + else { + entries = entries.sort((a, b) => a[1] > b[1] ? -1 : (a[1] === b[1] ? 0 : 1)); + } + // Round values + const data = entries.map(item => item[1]) + .map(value => isNil(value) ? 0 : Math.round(value * 100) / 100); + ChartJsUtils.setSingleDataSet(techChart, { data }); + const labels = entries.map(item => item[0]); + ChartJsUtils.setLabels(techChart, labels); + this.techChart = techChart; + return true; + } + catch (error) { + console.error('Cannot load tech values:', error); + // Reset tech, then continue + this.techChart = null; + return false; + } + finally { + this.markForCheck(); + } + }); + } + goTo(bounds) { + if (bounds === null || bounds === void 0 ? void 0 : bounds.isValid()) { + this.map.flyToBounds(bounds, { maxZoom, duration: 1 }); + } + else { + console.warn('[extraction-map] Cannot go to bound. GeoJSON layer not found.'); + } + } + fitToBounds(opts = { skipDebounce: false }) { + return __awaiter(this, void 0, void 0, function* () { + if (!opts.skipDebounce) { + if (!this.$fitToBounds.observers.length) { + this.registerSubscription(this.$fitToBounds + .pipe(debounceTime(450), mergeMap(() => this.ready())) + .subscribe(b => this.fitToBounds({ skipDebounce: true }))); + } + this.$fitToBounds.next(); + return; + } + if (isEmptyArray(this.layers)) { + console.debug('[extraction-map] Skip fit to bounds (no layers)'); + return; + } + // Create bounds, from layers + let bounds; + this.layers + .filter((layer) => layer instanceof L.GeoJSON) + .forEach((layer) => { + if (!bounds) { + bounds = layer.getBounds(); + } + else { + bounds.extend(layer.getBounds()); + } + }); + console.debug('[extraction-map] fit to bounds:', bounds); + this.goTo(bounds); + }); + } + loadAnimationOverrides(type, strata, filter) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + if (!type || !strata || !filter) + return; // skip + this.animationOverrides = this.animationOverrides || {}; + // Tech chart overrides + if (!this.animationOverrides.techChartOptions) { + const techChart = this.techChartDefaults; + // Create new filter, without criterion on time (.e.g on year) + const filterNoTimes = ExtractionFilter.fromObject(Object.assign(Object.assign({}, filter), { criteria: (filter.criteria || []).filter(criterion => criterion.name !== strata.timeColumnName) })); + const { aggMin, aggMax, techMin, techMax } = yield this.service.loadAggMinMaxByTech(type, strata, filterNoTimes, { fetchPolicy: 'cache-first' }); + console.debug(`[extraction-map] Changing tech chart options: {aggMin: ${aggMin}, aggMax: ${aggMax}}`); + this.animationOverrides.techChartOptions = Object.assign(Object.assign({}, techChart === null || techChart === void 0 ? void 0 : techChart.options), { animation: false, fixAxis: true, scales: Object.assign(Object.assign({}, techChart.options.scales), { y: Object.assign(Object.assign({}, (_a = techChart.options) === null || _a === void 0 ? void 0 : _a.scales.y), { min: aggMin, max: aggMax }), x: Object.assign(Object.assign({}, (_b = techChart.options) === null || _b === void 0 ? void 0 : _b.scales.y), { min: techMin, max: techMax }) }) }); + } + return this.animationOverrides; + }); + } + setYear(year, opts) { + const changed = this.year !== year; + // If changed or force with opts.emitEvent=true + if (changed || (opts && opts.emitEvent === true)) { + this.form.patchValue({ + year + }, opts); + // Stop animation + if (!opts || opts.stopAnimation !== false) { + this.stopAnimation(); + } + // Refresh + if (!opts || opts.emitEvent !== false) { + this.onRefresh.emit(); + } + if (!opts || opts.skipLocationChange !== true) { + setTimeout(() => this.updateQueryParams(), 500); + } + } + return changed; + } + onRefreshClick(event) { + this.stopAnimation(); + this.onRefresh.emit(event); + } + onEachFeature(feature, layer) { + layer.on('mouseover', (_) => this.overFeature = feature); + layer.on('mouseout', (_) => this.closeFeatureDetails(feature)); + } + computeFeatureDetails(feature) { + var _a; + const strata = this.getStrataValue(); + const properties = Object.getOwnPropertyNames(feature.properties) + .filter(key => !strata.aggColumnName || key !== strata.aggColumnName) + .map(key => ({ + name: this.columnNames[key], + value: feature.properties[key] + })); + let aggValue = feature.properties[strata.aggColumnName]; + let value = this.floatToLocaleString(aggValue); + let title = isNotNilOrBlank(strata.aggColumnName) ? this.columnNames[strata.aggColumnName] : undefined; + const matches = REGEXP_NAME_WITH_UNIT.exec(title); + let otherValue; + if (matches) { + title = matches[1]; + let unit = matches[2]; + unit = unit || (((_a = strata.aggColumnName) === null || _a === void 0 ? void 0 : _a.endsWith('_weight')) ? UnitLabel.GRAM : undefined); + if (unit) { + let conversionCoefficient = 1; + // - Convert G to KG + if (unit === UnitLabel.GRAM) { + conversionCoefficient = 1 / 1000; + unit = UnitLabel.KG; + } + // Append unit to value + aggValue = parseFloat(aggValue) * conversionCoefficient; + value = this.floatToLocaleString(aggValue); + if (value) + value += ` ${unit}`; + // Try to compute other value, using unit + // - Convert KG to ton + if (unit === UnitLabel.KG) { + const weightInTons = parseFloat(aggValue) / 1000; + if (weightInTons >= 1) { + otherValue = this.floatToLocaleString(weightInTons) + ' ' + UnitLabel.TON; + } + } + // - Convert minutes into human duration + else if (unit === UnitLabel.MINUTES) { + otherValue = this.durationPipe.transform(parseFloat(aggValue), 'minutes'); + } + // - Convert hours into human duration + else if (UnitLabelPatterns.DECIMAL_HOURS.test(unit)) { + otherValue = this.durationPipe.transform(parseFloat(aggValue), 'hours'); + } + } + } + // Emit events + return { title, value, otherValue, properties }; + } + closeFeatureDetails(feature, force) { + if (this.overFeature !== feature) + return; // skip is not the selected feature + // Close now, of forced (already wait 5s) + if (force) { + this.details = null; // Hide details + return; + } + // Wait 4s before closing + return timer(4000) + .pipe( + // Ignore a new selected feature arrived + takeUntil(this.overFeature$.pipe(skip(1))), first()) + // Loop + .subscribe(() => this.closeFeatureDetails(feature, true)); + } + openLegendForm(event) { + this.showLegendForm = true; + } + cancelLegendForm(event) { + this.showLegendForm = false; + // Reset legend color + //const color = this.legendForm.get('color').value; + //this.legendStartColor = this.scale.endColor; + } + applyLegendForm(event) { + this.showLegendForm = false; + this.customLegendOptions = this.legendForm.value; + this.onRefresh.emit(); + } + openSelectTypeModal(event) { + return __awaiter(this, void 0, void 0, function* () { + if (event) { + event.preventDefault(); + } + // If supervisor, allow to see all aggregations types + const filter = { + statusIds: this.accountService.hasMinProfile('SUPERVISOR') + ? [StatusIds.DISABLE, StatusIds.ENABLE, StatusIds.TEMPORARY] + : [StatusIds.ENABLE], + isSpatial: true + }; + const modal = yield this.modalCtrl.create({ + component: SelectExtractionTypeModal, + componentProps: { + filter, + title: 'EXTRACTION.MAP.SELECT_MODAL.TITLE', + helpText: 'EXTRACTION.MAP.SELECT_MODAL.HELP' + }, + keyboardClose: true + }); + // Open the modal + modal.present(); + // Wait until closed + const { data } = yield modal.onDidDismiss(); + let type = (data instanceof ExtractionProduct) ? data : null; + if (data instanceof ExtractionType) { + type = ExtractionProduct.fromObject(data.asObject()); + } + // If selected a product, use it + if (type) { + yield this.setType(type, { emitEvent: false }); + return this.loadData(); + } + }); + } + toggleAnimation(event) { + if (event && event.defaultPrevented) + return; + // Avoid to expand the filter section + if (event) { + event.stopPropagation(); + event.preventDefault(); + } + // Stop existing animation + if (this.animation) { + this.stopAnimation(); + } + else { + this.startAnimation(); + } + } + toggleShowCountriesLayer() { + this.showCountriesLayer = !this.showCountriesLayer; + // Reload data + if (!this.isAnimated) { + const countriesLayerIndex = this.layers.indexOf(this.countriesLayer); + if (countriesLayerIndex !== -1) { + this.layers.splice(countriesLayerIndex, 1); + this.countriesLayer.remove(); + } + else { + this.countriesLayer.addTo(this.map); + this.layers.push(this.countriesLayer); + } + //this.loadGeoData(); + } + } + updateTechChart(value, opts) { + var _a, _b, _c, _d; + this.techChartDefaults = Object.assign(Object.assign(Object.assign({}, this.techChartDefaults), value), { options: Object.assign(Object.assign(Object.assign({}, (_a = this.techChartDefaults) === null || _a === void 0 ? void 0 : _a.options), value === null || value === void 0 ? void 0 : value.options), { scales: Object.assign(Object.assign({}, (_c = (_b = this.techChartDefaults) === null || _b === void 0 ? void 0 : _b.options) === null || _c === void 0 ? void 0 : _c.scales), (_d = value === null || value === void 0 ? void 0 : value.options) === null || _d === void 0 ? void 0 : _d.scales) }) }); + // Reset animation data + this.resetAnimationOverrides(); + // Refresh (but skip if animation running) + if (!this.animation && (!opts || opts.emitEvent !== false)) { + this.loadTechData(); + } + } + onTechChartClick({ event, active }) { + var _a; + // Retrieve clicked values + const elements = active === null || active === void 0 ? void 0 : active.filter(element => isNotNil(element.index)); + if (isEmptyArray(elements)) + return; // Skip if empty + // Take first + const { datasetIndex, index } = elements[0]; + const value = (_a = this.techChart) === null || _a === void 0 ? void 0 : _a.data.labels[index]; + const hasChanged = this.criteriaForm.addFilterCriterion({ + name: this.techColumnName, + operator: DEFAULT_CRITERION_OPERATOR, + value, + sheetName: this.sheetName + }, { + appendValue: event.ctrlKey + }); + if (!hasChanged) + return; // Skip if already added + if (this.filterExpansionPanel && !this.filterExpansionPanel.expanded) { + this.filterExpansionPanel.open(); + } + if (!event.ctrlKey) { + this.onRefresh.emit(); + } + } + getFilterValue(strata) { + const filter = super.getFilterValue(); + strata = strata || this.getStrataValue(); + if (!strata) + return filter; + const json = this.form.value; + const sheetName = this.sheetName; + // Time strata = year + if (strata.timeColumnName === 'year' && json.year > 0) { + filter.criteria.push({ name: 'year', operator: '=', value: json.year, sheetName }); + } + // Time strata = quarter + else if (strata.timeColumnName === 'quarter' && json.year > 0 && json.quarter > 0) { + filter.criteria.push({ name: 'year', operator: '=', value: json.year, sheetName }); + filter.criteria.push({ name: 'quarter', operator: '=', value: json.quarter, sheetName }); + } + // Time strata = month + else if (strata.timeColumnName === 'month' && json.year > 0 && json.month > 0) { + filter.criteria.push({ name: 'year', operator: '=', value: json.year, sheetName }); + filter.criteria.push({ name: 'month', operator: '=', value: json.month, sheetName }); + } + return filter; + } + /* -- protected methods -- */ + startAnimation() { + const years = this.$years.getValue(); + // Disable chart animation + const techChart = this.techChart; + if (techChart) { + techChart.options = Object.assign(Object.assign({}, techChart.options), { animation: false }); + this.techChart = techChart; + } + console.info('[extraction-map] Starting animation...'); + this.animation = isNotEmptyArray(years) && timer(0, 1000) + .subscribe(index => { + const year = years[index % arraySize(years)]; + console.info(`[extraction-map] Rendering animation on year ${year}...`); + this.setYear(year, { + emitEvent: true, + stopAnimation: false + }); + }); + this.animation.add(() => { + console.info('[extraction-map] Animation stopped'); + }); + this.registerSubscription(this.animation); + } + stopAnimation() { + if (this.animation) { + this.unregisterSubscription(this.animation); + this.animation.unsubscribe(); + this.animation = null; + this.resetAnimationOverrides(); + if (this.disabled) { + this.enable(); + this.markAsLoaded(); + } + } + } + resetAnimationOverrides() { + delete this.animationOverrides.techChartOptions; + } + getFeatureStyleFn(scale, propertyName) { + if (isNil(propertyName)) + return; + return (feature) => { + const value = feature.properties[propertyName]; + const color = scale.getValueColor(value).rgba(1); + // DEBUG + //console.debug(`${options.propertyName}=${value} | color=${color} | ${feature.properties['square']}`); + return { + fillColor: color, + weight: 0, + opacity: 0, + color, + fillOpacity: 1 + }; + }; + } + createLegendScale(opts) { + opts = opts || this.legendForm.value; + const min = (opts.min || 0); + const max = (opts.max || 1000); + const startColor = Color.parseRgba(opts.startColor); + const mainColor = Color.parseRgba(opts.endColor); + const endColor = Color.parseRgba('rgb(0,0,0)'); + // Create scale color (max 10 grades) + const scaleCount = Math.max(2, Math.min(max, 10)); + const scale = ColorScale.custom(scaleCount, { + min, + max, + opacity: mainColor.opacity, + startColor: startColor.rgb, + mainColor: mainColor.rgb, + mainColorIndex: Math.trunc(scaleCount * 0.9), + endColor: endColor.rgb + }); + this._state.set('legendItems', _ => scale.legend.items); + this.showLegendForm = false; + return scale; + } + updateLegendStyle(scale) { + const items = scale.legend.items; + const longerItemLabel = items.length > 2 && items[items.length - 2].label || '9999'; // Use N-2, because last item is shorter + const minWidth = Math.max(105, 36 /* start offset */ + longerItemLabel.length * 4.7 /* average width of a letter */); + this.legendStyle = { + minWidth: `${minWidth || 150}px`, + maxWidth: '250px' + }; + } + isEquals(t1, t2) { + return ExtractionProduct.equals(t1, t2); + } + markForCheck() { + this.cd.markForCheck(); + } + getStrataValue() { + const json = this.form.get('strata').value; + delete json.__typename; + return json; + } + resetYear(value, opts) { + var _a; + (_a = this.form.get('year')) === null || _a === void 0 ? void 0 : _a.reset(value, opts); + } + resetStrata(value, opts) { + var _a; + (_a = this.form.get('strata')) === null || _a === void 0 ? void 0 : _a.reset(value, opts); + } + floatToLocaleString(value) { + if (isNil(value)) + return undefined; + if (typeof value === 'string') { + value = parseFloat(value); + } + return value.toLocaleString(this.formatNumberLocale, { + useGrouping: true, + maximumFractionDigits: 2 + }); + } + addCustomControls() { + return __awaiter(this, void 0, void 0, function* () { + yield this.ready(); + this.createCustomControl(this.filterPanel, { position: 'bottomleft' }) + .addTo(this.map); + this.createCustomControl(this.bottomRightPanel, { position: 'bottomright' }) + .addTo(this.map); + this.createCustomControl(this.detailPanel, { position: 'bottomright' }) + .addTo(this.map); + }); + } + createCustomControl(element, opts) { + if (!element || !element.nativeElement) { + throw new Error('Missing or invalid argument \'element\''); + } + const CustomControl = L.Control.extend({ + onAdd(map) { + return element.nativeElement; + }, + onRemove(map) { } + }); + return new CustomControl(Object.assign({ position: 'topleft' }, opts)); + } +}; +__decorate([ + ViewChild('filterPanel', { static: true }), + __metadata("design:type", ElementRef) +], ExtractionMapPage.prototype, "filterPanel", void 0); +__decorate([ + ViewChild('detailPanel', { static: true }), + __metadata("design:type", ElementRef) +], ExtractionMapPage.prototype, "detailPanel", void 0); +__decorate([ + ViewChild('bottomRightPanel', { static: true }), + __metadata("design:type", ElementRef) +], ExtractionMapPage.prototype, "bottomRightPanel", void 0); +__decorate([ + ViewChild('filterExpansionPanel', { static: true }), + __metadata("design:type", MatExpansionPanel) +], ExtractionMapPage.prototype, "filterExpansionPanel", void 0); +__decorate([ + ViewChild('aggExpansionPanel', { static: true }), + __metadata("design:type", MatExpansionPanel) +], ExtractionMapPage.prototype, "aggExpansionPanel", void 0); +ExtractionMapPage = __decorate([ + Component({ + selector: 'app-extraction-map-page', + templateUrl: './extraction-map.page.html', + styleUrls: ['./extraction-map.page.scss'], + animations: [fadeInAnimation, fadeInOutAnimation], + providers: [RxState], + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None + }), + __metadata("design:paramtypes", [Injector, + RxState, + ProductService, + DurationPipe, + AggregationStrataValidatorService, + ConfigService, + ChangeDetectorRef]) +], ExtractionMapPage); +export { ExtractionMapPage }; +//# sourceMappingURL=extraction-map.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/map/extraction-map.page.js.map b/out-tsc/app/app/extraction/map/extraction-map.page.js.map new file mode 100644 index 000000000..c955c02fb --- /dev/null +++ b/out-tsc/app/app/extraction/map/extraction-map.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extraction-map.page.js","sourceRoot":"","sources":["../../../../../src/app/extraction/map/extraction-map.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/position/device-position-map-page.component.js b/out-tsc/app/app/extraction/position/device-position-map-page.component.js new file mode 100644 index 000000000..82aaeb776 --- /dev/null +++ b/out-tsc/app/app/extraction/position/device-position-map-page.component.js @@ -0,0 +1,471 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Injector, Input, QueryList, Renderer2, ViewChild, ViewChildren, } from '@angular/core'; +import { UntypedFormBuilder } from '@angular/forms'; +import { MatExpansionPanel } from '@angular/material/expansion'; +import { BehaviorSubject, merge, of } from 'rxjs'; +import { IGNORED_ENTITY_COLUMNS } from '@app/referential/table/referential.table'; +import { DevicePositionFilter } from '@app/data/position/device/device-position.model'; +import { DevicePositionService } from '@app/data/position/device/device-position.service'; +import { AccountService, arrayDistinct, isNil, isNilOrNaN, isNotNil, MatAutocompleteConfigHolder, PersonService, PersonUtils, StatusIds, toNumber, } from '@sumaris-net/ngx-components'; +import { catchError, debounceTime, filter, switchMap, tap } from 'rxjs/operators'; +import { RxState } from '@rx-angular/state'; +import { L } from '@app/shared/map/leaflet'; +import { BaseMap } from '@app/shared/map/base-map.class'; +import { ObjectTypeLabels } from '@app/referential/services/model/model.enum'; +import { NavController } from '@ionic/angular'; +import { MatPaginator } from '@angular/material/paginator'; +import { ProgressionModel } from '@app/shared/progression/progression.model'; +export const DEVICE_POSITION_MAP_SETTINGS = { + FILTER_KEY: 'filter', + PAGE_SIZE: 'pageSize', +}; +export const DEFAULT_PAGE_SIZE = 100; +let DevicePositionMapPage = class DevicePositionMapPage extends BaseMap { + constructor(injector, formBuilder, _state, dataService, personService, accountService, renderer, navController) { + super(injector, _state, { + maxZoom: 14 // Need by SFA + }, { + loading: true + }); + this.formBuilder = formBuilder; + this._state = _state; + this.dataService = dataService; + this.personService = personService; + this.accountService = accountService; + this.renderer = renderer; + this.navController = navController; + this.features$ = this._state.select('features'); + this.downloadProgression$ = this._state.select('downloadProgression'); + this.filter = new DevicePositionFilter(); + this.i18nPrefix = 'DEVICE_POSITION.MAP.'; + this.title = 'TITLE'; + this.filterCriteriaCount = 0; + this.filterPanelFloating = true; + this.defaultPageSize = DEFAULT_PAGE_SIZE; + this.defaultPageSizeOptions = [100, 500, 1000, 2000]; + this.defaultSortBy = 'dateTime'; + this.defaultSortDirection = 'desc'; + this.onRefresh = new EventEmitter(); + this.persistFilterInSettings = true; + this.showTooltip = true; + this.settingsId = 'device-position-map'; + const filterConfig = this.getFilterFormConfig(); + this.filterForm = this.formBuilder.group(filterConfig || {}); + this._autocompleteConfigHolder = new MatAutocompleteConfigHolder({ + getUserAttributes: (a, b) => this.settings.getFieldDisplayAttributes(a, b) + }); + this.autocompleteFields = this._autocompleteConfigHolder.fields; + } + get total() { + return this._state.get('total'); + } + get visibleTotal() { + return this._state.get('visibleTotal'); + } + get pageSize() { + return this.paginator && this.paginator.pageSize || this.defaultPageSize || DEFAULT_PAGE_SIZE; + } + get pageOffset() { + return this.paginator && this.paginator.pageIndex * this.paginator.pageSize || 0; + } + get sortBy() { + return this.defaultSortBy; + } + get sortDirection() { + return this.defaultSortDirection; + } + ngOnInit() { + super.ngOnInit(); + // Combo: recorder person + const personAttributes = this.settings.getFieldDisplayAttributes('person', ['lastName', 'firstName', 'department.name']); + this.registerAutocompleteField('person', { + service: this.personService, + filter: { + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE] + }, + attributes: personAttributes, + displayWith: PersonUtils.personToString, + mobile: this.mobile + }); + this.registerSubscription(this.filterForm.valueChanges + .pipe(debounceTime(250), filter(() => this.filterForm.valid), tap(value => { + const filter = DevicePositionFilter.fromObject(value); + // Done in setFilter + // this.filterCriteriaCount = filter.countNotEmptyCriteria(); + this.markForCheck(); + this.setFilter(filter, { emitEvent: false }); + }), debounceTime(500), tap(json => this.persistFilterInSettings && this.settings.savePageSetting(this.settingsId, json, DEVICE_POSITION_MAP_SETTINGS.FILTER_KEY))) + .subscribe()); + this.registerSubscription(merge(this.onRefresh, this.paginator.page.pipe( + // Save page size in settings + tap(() => this.savePageSettings(this.paginator.pageSize, DEVICE_POSITION_MAP_SETTINGS.PAGE_SIZE)))) + .pipe(tap(() => this.markAsLoading()), debounceTime(100), switchMap(() => this.dataService.watchAll(this.pageOffset, this.pageSize, this.sortBy, this.sortDirection, this.filter)), catchError(err => { + if (this._debug) + console.error(err); + this.setError(err && err.message || err); + return of(undefined); // Continue + })) + .subscribe((res) => this.updateView(res))); + } + load() { + this.onRefresh.emit(); + } + onFeatureClick(feature) { + var _a; + console.info(this._logPrefix + 'Click on feature', feature); + // Highlight the row + this.selection.setSelection(feature); + // Highlight marker + this.highlightMarker(feature); + // Scroll to row + const index = (_a = this._state.get('features')) === null || _a === void 0 ? void 0 : _a.findIndex(f => f === feature); + if (index !== -1) { + this.scrollToRow(index); + } + this.markForCheck(); + } + scrollToRow(index) { + const rowElement = this.tableRows.get(index); + if (!rowElement) { + console.warn(this._logPrefix + 'Cannot found row by index=' + index); + return; + } + const rowRect = rowElement.nativeElement.getBoundingClientRect(); + const gridRect = this.tableElement.nativeElement.getBoundingClientRect(); + if (rowRect.top < gridRect.top || rowRect.bottom > gridRect.bottom) { + this.tableElement.nativeElement.scrollTo({ + top: rowElement.nativeElement.offsetTop - (gridRect.height - rowRect.height) / 2, + behavior: 'smooth' + }); + } + } + resetFilter() { + this.filterForm.reset({}, { emitEvent: true }); + const filter = this.asFilter({}); + this.setFilter(filter, { emitEvent: true }); + this.filterCriteriaCount = 0; + if (this.filterExpansionPanel && this.filterPanelFloating) + this.filterExpansionPanel.close(); + } + applyFilterAndClosePanel(event) { + this.onRefresh.emit(event); + if (this.filterExpansionPanel && this.filterPanelFloating) + this.filterExpansionPanel.close(); + } + clearControlValue(event, formControl) { + if (event) + event.stopPropagation(); // Avoid to enter input the field + formControl.setValue(null); + return false; + } + toggleFilterPanelFloating() { + this.filterPanelFloating = !this.filterPanelFloating; + this.markForCheck(); + } + closeFilterPanel() { + if (this.filterExpansionPanel) + this.filterExpansionPanel.close(); + } + getPageSettings(propertyName) { + return this.settings.getPageSettings(this.settingsId, propertyName); + } + savePageSettings(value, propertyName) { + return __awaiter(this, void 0, void 0, function* () { + yield this.settings.savePageSetting(this.settingsId, value, propertyName); + }); + } + // setFilter(filter: Partial, opts?: { emitEvent: boolean }) { + // + // filter = this.asFilter(filter); + // + // // Update criteria count + // const criteriaCount = filter.countNotEmptyCriteria(); + // if (criteriaCount !== this.filterCriteriaCount) { + // this.filterCriteriaCount = criteriaCount; + // this.markForCheck(); + // } + // + // // Update the form content + // if (!opts || opts.emitEvent !== false) { + // this.filterForm.patchValue(filter.asObject(), {emitEvent: false}); + // } + // + // super.setFilter(filter as F, opts); + // } + getFilterFormConfig() { + console.debug(`${this._logPrefix} : Creating filter form group...`); + // // Base form config + const config = {}; + // Add other properties + return Object.keys(new DevicePositionFilter()) + .filter(key => !IGNORED_ENTITY_COLUMNS.includes(key) && !config[key]) + .reduce((config, key) => { + console.debug(`${this._logPrefix} : Adding filter control: ${key}`); + config[key] = [null]; + return config; + }, config); + } + setFilter(filter, opts) { + const filterInstance = this.asFilter(filter); + // Update criteria count + const criteriaCount = filterInstance.countNotEmptyCriteria(); + if (criteriaCount !== this.filterCriteriaCount) { + this.filterCriteriaCount = criteriaCount; + this.markForCheck(); + } + // Update the form content + if (this.filterForm && (!opts || opts.emitEvent !== false)) { + this.filterForm.patchValue(filterInstance.asObject(), { emitEvent: false }); + } + this.applyFilter(filterInstance, opts); + } + updateView(res, opts) { + return __awaiter(this, void 0, void 0, function* () { + let { data, total } = res; + data = data || []; + total = toNumber(total, (data === null || data === void 0 ? void 0 : data.length) || 0); + // Add fake data + /*if (!environment.production && data && data.length < 10) { + const fakeData = new Array(100).fill({}); + data = fakeData.map((item, index) => { + const newPosition = DevicePosition.fromObject({...data[index % data.length].asObject()}); + newPosition.latitude += Math.random() * 0.01; + newPosition.longitude += Math.random() * 0.01; + return newPosition; + }); + total = data.length; + }*/ + if (this._debug) + console.debug(`${this._logPrefix} : ${total} items loaded`); + const features = yield this.loadLayers(data); + // Update state + this._state.set(state => (Object.assign(Object.assign({}, state), { features, total, visibleTotal: Math.min(this.pageSize, features.length) }))); + if (!opts || opts.emitEvent !== false) { + // Open table, if has data + if (total) + this.tableExpansionPanel.open(); + else + this.tableExpansionPanel.close(); + this.markAsLoaded({ emitEvent: false }); + } + this.markForCheck(); + }); + } + asFilter(source) { + const target = new DevicePositionFilter(); + if (source) + target.fromObject(source); + return target; + } + applyFilter(filter, opts) { + if (this._debug) + console.debug(`${this._logPrefix} Applying filter`, filter); + this.filter = filter; + if (opts && opts.emitEvent) { + this.onRefresh.emit(); + } + } + registerAutocompleteField(fieldName, options) { + return this._autocompleteConfigHolder.add(fieldName, options); + } + loadLayers(data) { + return __awaiter(this, void 0, void 0, function* () { + // Should never call load() without leaflet map + if (!this.map) + return; // Skip + if (this._debug) + console.debug(this._logPrefix + 'Creating layers...'); + try { + // Clean existing layers, if any + this.cleanMapLayers(); + const dateTimePattern = this.translate.instant('COMMON.DATE_TIME_PATTERN'); + const persons = arrayDistinct((data || []).map(position => position.recorderPerson).filter(p => isNotNil(p === null || p === void 0 ? void 0 : p.id)), 'id'); + const layerByPersonId = persons.reduce((res, p, index) => { + const layer = L.geoJSON(null, { + onEachFeature: this.showTooltip ? this.onEachFeature.bind(this) : undefined + }); + res[p.id] = layer; + this.layers.push(layer); + return res; + }, {}); + // Add each position to layer + const features = (data || []) + .map((position, index) => { + var _a; + const personId = (_a = position.recorderPerson) === null || _a === void 0 ? void 0 : _a.id; + if (isNil(personId)) + return; + const feature = this.dataService.toGeoJsonFeature(position, { dateTimePattern }); + if (!feature) + return; // Skip if empty + // Add feature to layer + const layer = layerByPersonId[personId]; + layer.addData(feature); + return feature; + }).filter(isNotNil); + persons.forEach(p => { + const layer = layerByPersonId[p.id]; + const layerName = PersonUtils.personToString(p); + this.layersControl.overlays[layerName] = layer; + }); + this.layers.forEach(layer => layer.addTo(this.map)); + yield this.flyToBounds(); + return features; + } + catch (err) { + console.error('[operations-map] Error while load layers:', err); + this.error = err && err.message || err; + } + finally { + this.markForCheck(); + } + }); + } + onRowClick(event, feature) { + return __awaiter(this, void 0, void 0, function* () { + if (event === null || event === void 0 ? void 0 : event.defaultPrevented) + return; + event === null || event === void 0 ? void 0 : event.preventDefault(); + // Highlight the row + this.selection.setSelection(feature); + // Highlight the marker + this.highlightMarker(feature); + this.markForCheck(); + }); + } + highlightMarker(feature, sizeFactor = 1.1) { + // Select the marker + this.layers.forEach(layer => { + const geoJsonLayer = layer; + geoJsonLayer.eachLayer(m => { + const marker = m; + if (marker.feature.id === feature.id) { + marker['_selected'] = true; + marker.setIcon(L.icon({ + iconUrl: 'assets/icons/marker-selected.svg', + shadowUrl: 'marker-shadow.png', + iconSize: [25 * sizeFactor, 41 * sizeFactor], + iconAnchor: [12 * sizeFactor, 41 * sizeFactor], + popupAnchor: [1, -34], + shadowSize: [41 * sizeFactor, 41 * sizeFactor], + })); + } + else if (marker['_selected']) { + marker.setIcon(L.icon({ + iconUrl: 'marker-icon.png', + shadowUrl: 'marker-shadow.png', + iconSize: [25, 41], + iconAnchor: [12, 41], + popupAnchor: [1, -34], + shadowSize: [41, 41], + })); + delete marker['_selected']; + } + }); + }); + } + onOpenDataClick(event, position) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (event === null || event === void 0 ? void 0 : event.defaultPrevented) + return; + event === null || event === void 0 ? void 0 : event.preventDefault(); + const objectId = +position.objectId; + const objectType = (_a = position.objectType) === null || _a === void 0 ? void 0 : _a.label; + if (isNilOrNaN(objectId) && objectType) { + console.error('Missing objectId or objectType.label: ', position); + return; // Skip + } + let path; + switch (objectType) { + case ObjectTypeLabels.TRIP: + path = `/trips/${objectId}`; + break; + case ObjectTypeLabels.OBSERVED_LOCATION: + path = `/observations/${objectId}`; + break; + } + if (!path) { + console.error('Cannot load router path for objectType: ' + objectType); + return; + } + yield this.navController.navigateForward(path); + }); + } + download(event, format, popover) { + return __awaiter(this, void 0, void 0, function* () { + const progression = new BehaviorSubject(0); + const maxProgression = 100; + const progressionModel = new ProgressionModel({ + message: 'INFO.DOWNLOADING_DOTS', + current: 0, + total: maxProgression, + cancelled: false + }); + const subscription = progression.subscribe(current => progressionModel.current = current); + subscription.add(() => this.unregisterSubscription(subscription)); + this.registerSubscription(subscription); + this._state.set('downloadProgression', () => progressionModel); + popover.present(event); + this.markForCheck(); + switch (format) { + case 'geojson': + yield this.dataService.downloadAsGeoJson(this.filter, { progression, maxProgression }); + break; + default: + yield this.dataService.downloadAsCsv(this.filter, { progression, maxProgression }); + break; + } + yield popover.dismiss(); + this._state.set('downloadProgression', () => null); + subscription.unsubscribe(); + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], DevicePositionMapPage.prototype, "persistFilterInSettings", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], DevicePositionMapPage.prototype, "showTooltip", void 0); +__decorate([ + ViewChild('filterExpansionPanel', { static: true }), + __metadata("design:type", MatExpansionPanel) +], DevicePositionMapPage.prototype, "filterExpansionPanel", void 0); +__decorate([ + ViewChild('tableExpansionPanel', { static: true }), + __metadata("design:type", MatExpansionPanel) +], DevicePositionMapPage.prototype, "tableExpansionPanel", void 0); +__decorate([ + ViewChild('table', { static: true, read: ElementRef }), + __metadata("design:type", ElementRef) +], DevicePositionMapPage.prototype, "tableElement", void 0); +__decorate([ + ViewChild('paginator', { static: true }), + __metadata("design:type", MatPaginator) +], DevicePositionMapPage.prototype, "paginator", void 0); +__decorate([ + ViewChildren('tableRows', { read: ElementRef }), + __metadata("design:type", QueryList) +], DevicePositionMapPage.prototype, "tableRows", void 0); +DevicePositionMapPage = __decorate([ + Component({ + selector: 'app-device-position-map', + templateUrl: './device-position-map-page.component.html', + styleUrls: ['./device-position-map-page.component.scss'], + providers: [RxState], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + UntypedFormBuilder, + RxState, + DevicePositionService, + PersonService, + AccountService, + Renderer2, + NavController]) +], DevicePositionMapPage); +export { DevicePositionMapPage }; +//# sourceMappingURL=device-position-map-page.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/position/device-position-map-page.component.js.map b/out-tsc/app/app/extraction/position/device-position-map-page.component.js.map new file mode 100644 index 000000000..47ada87f4 --- /dev/null +++ b/out-tsc/app/app/extraction/position/device-position-map-page.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"device-position-map-page.component.js","sourceRoot":"","sources":["../../../../../src/app/extraction/position/device-position-map-page.component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/position/device-position-routing.module.js b/out-tsc/app/app/extraction/position/device-position-routing.module.js new file mode 100644 index 000000000..52b567932 --- /dev/null +++ b/out-tsc/app/app/extraction/position/device-position-routing.module.js @@ -0,0 +1,30 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { DevicePositionMapPage } from '@app/extraction/position/device-position-map-page.component'; +import { AuthGuardService } from '@sumaris-net/ngx-components'; +import { DevicePositionModule } from '@app/extraction/position/device-position.module'; +const routes = [ + { + path: '', + pathMatch: 'full', + component: DevicePositionMapPage, + canActivate: [AuthGuardService], + data: { + profile: 'ADMIN', + }, + }, +]; +let DevicePositionRoutingModule = class DevicePositionRoutingModule { +}; +DevicePositionRoutingModule = __decorate([ + NgModule({ + imports: [ + DevicePositionModule, + RouterModule.forChild(routes) + ], + exports: [RouterModule] + }) +], DevicePositionRoutingModule); +export { DevicePositionRoutingModule }; +//# sourceMappingURL=device-position-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/position/device-position-routing.module.js.map b/out-tsc/app/app/extraction/position/device-position-routing.module.js.map new file mode 100644 index 000000000..d812df630 --- /dev/null +++ b/out-tsc/app/app/extraction/position/device-position-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"device-position-routing.module.js","sourceRoot":"","sources":["../../../../../src/app/extraction/position/device-position-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,6DAA6D,CAAC;AACpG,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAEvF,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,qBAAqB;QAChC,WAAW,EAAE,CAAC,gBAAgB,CAAC;QAC/B,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO;SACjB;KACF;CACF,CAAC;AASK,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;CAAI,CAAA;AAA/B,2BAA2B;IAPvC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,oBAAoB;YACpB,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC9B;QACD,OAAO,EAAE,CAAC,YAAY,CAAC;KACxB,CAAC;GACW,2BAA2B,CAAI;SAA/B,2BAA2B"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/position/device-position.module.js b/out-tsc/app/app/extraction/position/device-position.module.js new file mode 100644 index 000000000..381c78ad3 --- /dev/null +++ b/out-tsc/app/app/extraction/position/device-position.module.js @@ -0,0 +1,20 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppSharedModule } from '@app/shared/shared.module'; +import { DevicePositionMapPage } from '@app/extraction/position/device-position-map-page.component'; +import { TranslateModule } from '@ngx-translate/core'; +import { LeafletModule } from '@asymmetrik/ngx-leaflet'; +import { AppSharedProgressionModule } from '@app/shared/progression/progression.module'; +let DevicePositionModule = class DevicePositionModule { +}; +DevicePositionModule = __decorate([ + NgModule({ + imports: [CommonModule, TranslateModule.forChild(), LeafletModule, AppCoreModule, AppSharedModule, AppSharedProgressionModule], + declarations: [DevicePositionMapPage], + exports: [TranslateModule, DevicePositionMapPage], + }) +], DevicePositionModule); +export { DevicePositionModule }; +//# sourceMappingURL=device-position.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/position/device-position.module.js.map b/out-tsc/app/app/extraction/position/device-position.module.js.map new file mode 100644 index 000000000..7a5d98f65 --- /dev/null +++ b/out-tsc/app/app/extraction/position/device-position.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"device-position.module.js","sourceRoot":"","sources":["../../../../../src/app/extraction/position/device-position.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6DAA6D,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAOjF,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAAG,CAAA;AAAvB,oBAAoB;IALhC,QAAQ,CAAC;QACR,OAAO,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,0BAA0B,CAAC;QAC9H,YAAY,EAAE,CAAC,qBAAqB,CAAC;QACrC,OAAO,EAAE,CAAC,eAAe,EAAE,qBAAqB,CAAC;KAClD,CAAC;GACW,oBAAoB,CAAG;SAAvB,oBAAoB"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/product/product.form.js b/out-tsc/app/app/extraction/product/product.form.js new file mode 100644 index 000000000..871e1228a --- /dev/null +++ b/out-tsc/app/app/extraction/product/product.form.js @@ -0,0 +1,255 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input, ViewChild } from '@angular/core'; +import { ExtractionFilterCriterion } from '../type/extraction-type.model'; +import { UntypedFormBuilder } from '@angular/forms'; +import { ReferentialForm } from '@app/referential/form/referential.form'; +import { BehaviorSubject } from 'rxjs'; +import { AppForm, arraySize, isNotNilOrBlank, LocalSettingsService, splitById, StatusIds } from '@sumaris-net/ngx-components'; +import { debounceTime } from 'rxjs/operators'; +import { ExtractionUtils } from '../common/extraction.utils'; +import { ExtractionCriteriaForm } from '@app/extraction/criteria/extraction-criteria.form'; +import { ExtractionProductValidatorService } from '@app/extraction/product/product.validator'; +import { ProductService } from '@app/extraction/product/product.service'; +import { ExtractionProduct, ProcessingFrequencyIds, ProcessingFrequencyItems } from '@app/extraction/product/product.model'; +let ProductForm = class ProductForm extends AppForm { + constructor(injector, formBuilder, settings, validatorService, service, cd) { + super(injector, validatorService.getFormGroup()); + this.formBuilder = formBuilder; + this.settings = settings; + this.validatorService = validatorService; + this.service = service; + this.cd = cd; + this.frequencyItems = ProcessingFrequencyItems; + this.frequenciesById = splitById(ProcessingFrequencyItems); + this.$sheetNames = new BehaviorSubject(undefined); + this.$timeColumns = new BehaviorSubject(undefined); + this.$spatialColumns = new BehaviorSubject(undefined); + this.$aggColumns = new BehaviorSubject(undefined); + this.$techColumns = new BehaviorSubject(undefined); + this.aggFunctions = [ + { + value: 'SUM', + name: 'EXTRACTION.AGGREGATION.EDIT.AGG_FUNCTION.SUM' + }, + { + value: 'AVG', + name: 'EXTRACTION.AGGREGATION.EDIT.AGG_FUNCTION.AVG' + } + ]; + this.showMarkdownPreview = true; + this.$markdownContent = new BehaviorSubject(undefined); + this.showError = true; + this.showFilter = false; + // Stratum + this.stratumFormArray = this.form.controls.stratum; + this.registerSubscription(this.form.get('documentation').valueChanges + .pipe(debounceTime(350)) + .subscribe(md => this.$markdownContent.next(md))); + } + get value() { + const json = this.form.value; + // Re add label, because missing when field disable + json.label = this.form.get('label').value; + return json; + } + set value(value) { + this.setValue(value); + } + get strataForms() { + return this.stratumFormArray.controls; + } + get isSpatial() { + return this.form.controls.isSpatial.value; + } + get processingFrequencyId() { + return this.form.controls.processingFrequencyId.value; + } + get isManualProcessing() { + return this.processingFrequencyId === ProcessingFrequencyIds.MANUALLY; + } + enable(opts) { + super.enable(opts); + if (!this.isSpatial) { + this.stratumFormArray.disable(); + } + // Keep enable, otherwise the form.getValue() will not return the isSpatial value, the product page - fix issue #382 + // this.form.get('isSpatial').disable(); + } + updateLists(type) { + return __awaiter(this, void 0, void 0, function* () { + if (type) { + this.data = type; + } + else if (this.data) { + type = this.data; + } + else { + return; // Skip + } + console.debug('[aggregation-form] Loading columns of type', type); + // If spatial, load columns + if (type.isSpatial || this.isSpatial) { + const sheetNames = type.sheetNames || []; + this.$sheetNames.next(sheetNames); + const map = {}; + yield Promise.all(sheetNames.map(sheetName => this.service.loadColumns(type, sheetName) + .then(columns => { + columns = columns || []; + const columnMap = ExtractionUtils.dispatchColumns(columns); + Object.keys(columnMap).forEach(key => { + const m = map[key] || {}; + m[sheetName] = columnMap[key]; + map[key] = m; + }); + }))); + console.debug('[aggregation-type] Columns map:', map); + this.$timeColumns.next(map.timeColumns); + this.$spatialColumns.next(map.spatialColumns); + this.$aggColumns.next(map.aggColumns); + this.$techColumns.next(map.techColumns); + } + }); + } + ngOnInit() { + super.ngOnInit(); + // Set entity name (required for referential form validator) + this.referentialForm.entityName = 'AggregationType'; + // Override status list i18n + this.referentialForm.statusList = [ + { + id: StatusIds.ENABLE, + icon: 'eye', + label: 'EXTRACTION.AGGREGATION.EDIT.STATUS_ENUM.PUBLIC' + }, + { + id: StatusIds.TEMPORARY, + icon: 'eye-off', + label: 'EXTRACTION.AGGREGATION.EDIT.STATUS_ENUM.PRIVATE' + }, + { + id: StatusIds.DISABLE, + icon: 'close', + label: 'EXTRACTION.AGGREGATION.EDIT.STATUS_ENUM.DISABLE' + } + ]; + this.registerSubscription(this.form.get('isSpatial').valueChanges + .subscribe(isSpatial => { + // Not need stratum + if (!isSpatial) { + this.stratumFormArray.resize(0); + this.stratumFormArray.allowEmptyArray = true; + this.stratumFormArray.disable(); + } + else { + if (this.stratumFormArray.length === 0) { + this.stratumFormArray.resize(1); + } + this.stratumFormArray.allowEmptyArray = false; + this.stratumFormArray.enable(); + this.updateLists(); + } + })); + } + ngOnDestroy() { + super.ngOnDestroy(); + this.$sheetNames.complete(); + this.$timeColumns.complete(); + this.$spatialColumns.complete(); + this.$aggColumns.complete(); + this.$techColumns.complete(); + } + toggleDocPreview() { + this.showMarkdownPreview = !this.showMarkdownPreview; + if (this.showMarkdownPreview) { + this.markForCheck(); + } + } + reset(data, opts) { + super.setValue(data || new ExtractionProduct(), opts); + } + setValue(data, opts) { + const _super = Object.create(null, { + setValue: { get: () => super.setValue } + }); + var _a; + return __awaiter(this, void 0, void 0, function* () { + yield this.ready(); + console.debug('[product-form] Setting value: ', data); + // Set filter to criteria form + this.criteriaForm.type = data; + if ( /*!this.criteriaForm.sheetName && */(_a = data.sheetNames) === null || _a === void 0 ? void 0 : _a.length) { + this.criteriaForm.sheetName = data.sheetNames[0]; + } + if (data.filter) { + const filter = (typeof data.filter === 'string') ? JSON.parse(data.filter) : data.filter; + const criteria = ((filter === null || filter === void 0 ? void 0 : filter.criteria) || []).map(ExtractionFilterCriterion.fromObject); + // TODO find a way to get columns, from source extraction type + /*this.criteriaForm.columns = [{ + columnName: "trip_code", type: 'integer', label: 'trip_code', name: 'trip_code' + }]; + this.criteriaForm.waitIdle().then(() => { + console.debug('[product-form] Update criteria form:', criteria); + criteria.forEach(c => this.criteriaForm.addFilterCriterion(c)); + this.showFilter = true; + })*/ + } + else { + this.showFilter = false; + } + // If spatial, load columns + if (data && data.isSpatial) { + this.stratumFormArray.enable(); + this.stratumFormArray.allowEmptyArray = false; + // If spatial product, make sure there is one stratum + this.stratumFormArray.resize(Math.max(1, arraySize(data.stratum))); + } + else { + this.stratumFormArray.disable(); + this.stratumFormArray.allowEmptyArray = true; + this.stratumFormArray.resize(0); + } + // Show doc preview, if doc exists + this.showMarkdownPreview = this.showMarkdownPreview && isNotNilOrBlank(data.documentation); + _super.setValue.call(this, data, opts); + }); + } + removeStrata(index) { + this.stratumFormArray.removeAt(index); + } + /* -- protected -- */ + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], ProductForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ProductForm.prototype, "showFilter", void 0); +__decorate([ + ViewChild('referentialForm', { static: true }), + __metadata("design:type", ReferentialForm) +], ProductForm.prototype, "referentialForm", void 0); +__decorate([ + ViewChild('criteriaForm', { static: true }), + __metadata("design:type", ExtractionCriteriaForm) +], ProductForm.prototype, "criteriaForm", void 0); +ProductForm = __decorate([ + Component({ + selector: 'app-product-form', + styleUrls: ['product.form.scss'], + templateUrl: 'product.form.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + UntypedFormBuilder, + LocalSettingsService, + ExtractionProductValidatorService, + ProductService, + ChangeDetectorRef]) +], ProductForm); +export { ProductForm }; +//# sourceMappingURL=product.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/product/product.form.js.map b/out-tsc/app/app/extraction/product/product.form.js.map new file mode 100644 index 000000000..e07ebd979 --- /dev/null +++ b/out-tsc/app/app/extraction/product/product.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"product.form.js","sourceRoot":"","sources":["../../../../../src/app/extraction/product/product.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/product/product.model.js b/out-tsc/app/app/extraction/product/product.model.js new file mode 100644 index 000000000..f9efb9a5e --- /dev/null +++ b/out-tsc/app/app/extraction/product/product.model.js @@ -0,0 +1,88 @@ +/* -- Extraction -- */ +var ExtractionProduct_1; +import { __decorate, __metadata } from "tslib"; +import { EntityClass, fromDateISOString, isNotEmptyArray, MINIFY_ENTITY_FOR_POD, toDateISOString, toNumber } from '@sumaris-net/ngx-components'; +import { ExtractionFilter, ExtractionType } from '../type/extraction-type.model'; +import { AggregationStrata } from '@app/extraction/strata/strata.model'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +export const ProcessingFrequencyIds = { + NEVER: 0, + MANUALLY: 1, + HOURLY: 5, + DAILY: 2, + WEEKLY: 3, + MONTHLY: 4 +}; +export const ProcessingFrequencyItems = Object.freeze([ + { + id: ProcessingFrequencyIds.NEVER, + label: 'EXTRACTION.AGGREGATION.EDIT.PROCESSING_FREQUENCY_ENUM.NEVER' + }, + { + id: ProcessingFrequencyIds.MANUALLY, + label: 'EXTRACTION.AGGREGATION.EDIT.PROCESSING_FREQUENCY_ENUM.MANUALLY' + }, + { + id: ProcessingFrequencyIds.HOURLY, + label: 'EXTRACTION.AGGREGATION.EDIT.PROCESSING_FREQUENCY_ENUM.HOURLY' + }, + { + id: ProcessingFrequencyIds.DAILY, + label: 'EXTRACTION.AGGREGATION.EDIT.PROCESSING_FREQUENCY_ENUM.DAILY' + }, + { + id: ProcessingFrequencyIds.WEEKLY, + label: 'EXTRACTION.AGGREGATION.EDIT.PROCESSING_FREQUENCY_ENUM.WEEKLY' + }, + { + id: ProcessingFrequencyIds.MONTHLY, + label: 'EXTRACTION.AGGREGATION.EDIT.PROCESSING_FREQUENCY_ENUM.MONTHLY' + } +]); +let ExtractionProduct = ExtractionProduct_1 = class ExtractionProduct extends ExtractionType { + constructor() { + super(ExtractionProduct_1.TYPENAME); + this.filterContent = null; + this.filter = null; + this.documentation = null; + this.creationDate = null; + this.stratum = null; + this.columns = null; + } + fromObject(source, opts) { + var _a; + super.fromObject(source, opts); + this.documentation = source.documentation; + this.creationDate = fromDateISOString(source.creationDate); + this.stratum = isNotEmptyArray(source.stratum) && source.stratum.map(AggregationStrata.fromObject) || []; + this.filter = source.filter || (typeof source.filterContent === 'string' && ExtractionFilter.fromObject(JSON.parse(source.filterContent))); + this.parentId = toNumber(source.parentId, (_a = source.parent) === null || _a === void 0 ? void 0 : _a.id); + this.parent = source.parent && ExtractionType.fromObject(source.parent); + } + asObject(opts) { + var _a; + const target = super.asObject(opts); + target.creationDate = toDateISOString(this.creationDate); + target.stratum = this.stratum && this.stratum.map(s => s.asObject(opts)) || undefined; + target.columns = this.columns && this.columns.map((c) => { + const json = Object.assign({}, c); + delete json.index; + delete json.__typename; + return json; + }) || undefined; + target.parent = this.parent && this.parent.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS)) || undefined; + if (opts === null || opts === void 0 ? void 0 : opts.minify) { + target.filterContent = this.filter && JSON.stringify(this.filter.asObject(MINIFY_ENTITY_FOR_POD)) || this.filterContent; + delete target.filter; + target.parentId = toNumber((_a = this.parent) === null || _a === void 0 ? void 0 : _a.id, this.parentId); + delete target.parent; + } + return target; + } +}; +ExtractionProduct = ExtractionProduct_1 = __decorate([ + EntityClass({ typename: 'ExtractionProductVO' }), + __metadata("design:paramtypes", []) +], ExtractionProduct); +export { ExtractionProduct }; +//# sourceMappingURL=product.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/product/product.model.js.map b/out-tsc/app/app/extraction/product/product.model.js.map new file mode 100644 index 000000000..9611b8806 --- /dev/null +++ b/out-tsc/app/app/extraction/product/product.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"product.model.js","sourceRoot":"","sources":["../../../../../src/app/extraction/product/product.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/product/product.page.js b/out-tsc/app/app/extraction/product/product.page.js new file mode 100644 index 000000000..9f2fc633e --- /dev/null +++ b/out-tsc/app/app/extraction/product/product.page.js @@ -0,0 +1,317 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, ViewChild } from '@angular/core'; +import { ExtractionCategories, ExtractionFilter } from '../type/extraction-type.model'; +import { UntypedFormBuilder } from '@angular/forms'; +import { Router } from '@angular/router'; +import { ValidatorService } from '@e-is/ngx-material-table'; +import { AccountService, Alerts, AppEntityEditor, equals, isEmptyArray, isNil, isNotNil, LocalSettingsService, Toasts, } from '@sumaris-net/ngx-components'; +import { ProductForm } from './product.form'; +import { ExtractionProduct } from '@app/extraction/product/product.model'; +import { ExtractionProductValidatorService } from '@app/extraction/product/product.validator'; +import { ProductService } from '@app/extraction/product/product.service'; +import { ExtractionTablePage } from '@app/extraction/table/extraction-table.page'; +import { debounceTime, filter } from 'rxjs/operators'; +import { environment } from '@environments/environment'; +export const ProductPageTabs = { + GENERAL: 0, + DATASOURCE: 1, + RESULT: 2, +}; +let ProductPage = class ProductPage extends AppEntityEditor { + constructor(injector, router, formBuilder, productService, accountService, validatorService, settings) { + super(injector, ExtractionProduct, + // Data service + { + load: (id, options) => productService.load(id, options), + canUserWrite: (data, opts) => productService.canUserWrite(data, opts), + save: (data, _) => productService.save(data), + delete: (data, _) => productService.deleteAll([data]), + listenChanges: (id, opts) => productService.listenChanges(id, opts) + }, + // Editor options + { + pathIdAttribute: 'productId', + tabCount: 3 + }); + this.injector = injector; + this.router = router; + this.formBuilder = formBuilder; + this.productService = productService; + this.accountService = accountService; + this.validatorService = validatorService; + this.settings = settings; + this.debug = !environment.production; + } + get form() { + return this.productForm.form; + } + ngOnInit() { + super.ngOnInit(); + this.registerSubscription(this.datasourceTable.filterChanges + .pipe(filter(_ => !this.loading && !this.saving), debounceTime(450)) + .subscribe((filter) => { + var _a; + const json = filter.asObject({ minify: true }); + const filterControl = this.form.get('filter'); + const previousJson = (_a = ExtractionFilter.fromObject(filterControl === null || filterControl === void 0 ? void 0 : filterControl.value)) === null || _a === void 0 ? void 0 : _a.asObject({ minify: true }); + if (!equals(json, previousJson)) { + this.form.patchValue({ filter: json }); + this.markAsDirty(); + } + })); + } + enable(opts) { + super.enable(opts); + // Label always disable is saved + if (!this.isNewData) { + this.form.get('label').disable(); + } + } + openMap(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.dirty) { + // Ask user confirmation + const { confirmed, save } = yield Alerts.askSaveBeforeAction(this.alertCtrl, this.translate); + if (!confirmed) + return; + if (save) + yield this.save(event); + } + if (!this.data || isEmptyArray(this.data.stratum)) + return; // Unable to load the map + return setTimeout(() => + // open the map + this.router.navigate(['../../map'], { + relativeTo: this.route, + queryParams: { + category: this.data.category, + label: this.data.label, + sheet: this.data.stratum[0].sheetName + } + }), 200); // Add a delay need by matTooltip to be hide + }); + } + updateProduct(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.dirty) { + // Ask user confirmation + const { confirmed, save } = yield Alerts.askSaveBeforeAction(this.alertCtrl, this.translate, { valid: this.valid }); + if (!confirmed) + return; + if (save) + yield this.save(event); + } + this.markAsLoading(); + try { + const updatedEntity = yield this.productService.updateProduct(this.data.id); + yield this.onEntityLoaded(updatedEntity); + yield this.updateView(updatedEntity); + Toasts.show(this.toastController, this.translate, { + type: 'info', + message: 'EXTRACTION.PRODUCT.INFO.UPDATED_SUCCEED' + }); + } + catch (err) { + this.setError(err); + } + finally { + this.markAsLoaded(); + } + // Switch to result tab + if (!this.data.isSpatial) { + this.selectedTabIndex = ProductPageTabs.RESULT; + } + }); + } + /* -- protected -- */ + setValue(data) { + return __awaiter(this, void 0, void 0, function* () { + // Apply data to form + yield this.productForm.setValue(data.asObject()); + yield this.initDatasourceTable(data); + if (!data.isSpatial) { + yield this.initResultTable(data); + } + }); + } + initDatasourceTable(data) { + var _a, _b, _c; + return __awaiter(this, void 0, void 0, function* () { + // Apply to table + try { + let sourceTypeId; + if (isNotNil(data.parentId)) { + sourceTypeId = data.parentId; + } + else { + yield this.datasourceTable.ready(); + const types = this.datasourceTable.types; + // Resolve by format + version + const format = ((_a = data.format) === null || _a === void 0 ? void 0 : _a.startsWith('AGG_')) ? data.format.substring(4) : data.format; + sourceTypeId = (_b = types.find(t => t.format === format && t.version === data.version)) === null || _b === void 0 ? void 0 : _b.id; + // Or resolve by format only, if not found + if (isNil(sourceTypeId)) { + sourceTypeId = (_c = types.find(t => t.format === format)) === null || _c === void 0 ? void 0 : _c.id; + } + // Types not found: stop here + if (isNil(sourceTypeId)) { + console.warn(`[product] Unknown datasource type: unable to find the format '${data.format}' in types [${types.join(',')}]`); + this.datasourceTable.markAsLoaded(); + return; + } + } + const filter = data.filter || (data.filterContent && JSON.parse(data.filterContent)); + // Load data + yield this.datasourceTable.load(sourceTypeId, { filter, + // Should load data, if current tab + emitEvent: this.selectedTabIndex === ProductPageTabs.DATASOURCE + }); + } + catch (err) { + console.error(err); + } + }); + } + initResultTable(data) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + this.resultTable.types = [data]; + // Apply to table + try { + yield this.resultTable.load(data.id, { + filter: { + sheetName: (_a = data.sheetNames) === null || _a === void 0 ? void 0 : _a[0] + }, + // Should load data, if current tab + emitEvent: this.selectedTabIndex === ProductPageTabs.RESULT + }); + } + catch (err) { + console.error(err); + } + }); + } + onTabChange(event, queryTabIndexParamName) { + // If changed to dataset tab, make sure table has been loaded + switch (event === null || event === void 0 ? void 0 : event.index) { + case ProductPageTabs.DATASOURCE: + this.datasourceTable.onRefresh.emit(); + break; + case ProductPageTabs.RESULT: + this.resultTable.onRefresh.emit(); + break; + } + return super.onTabChange(event, queryTabIndexParamName); + } + getValue() { + const _super = Object.create(null, { + getValue: { get: () => super.getValue } + }); + return __awaiter(this, void 0, void 0, function* () { + const data = yield _super.getValue.call(this); + // Re add label, because missing when field disable + data.label = this.form.get('label').value; + // Re add columns + data.columns = this.columns; + // Set default strata + if (data.isSpatial) { + (data.stratum || []).forEach((strata, index) => strata.isDefault = index === 0); + } + else { + // No strata is not a spatial product + data.stratum = null; + } + // Update filter + data.filter = this.datasourceTable.getFilterValue(); + return data; + }); + } + computeTitle(data) { + return __awaiter(this, void 0, void 0, function* () { + // new data + if (!data || isNil(data.id)) { + return yield this.translate.get('EXTRACTION.AGGREGATION.NEW.TITLE').toPromise(); + } + // Existing data + return yield this.translate.get('EXTRACTION.AGGREGATION.EDIT.TITLE', data).toPromise(); + }); + } + computePageHistory(title) { + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.debug('[entity-editor] Computing page history, using url: ' + this.router.url); + return { + title, + subtitle: this.translate.instant('EXTRACTION.TYPES_MENU.PRODUCT_DIVIDER'), + icon: 'cloud-download-outline', + path: `/extraction/product/${this.data.id}` + }; + }); + } + getFirstInvalidTabIndex() { + return 0; + } + registerForms() { + this.addChildForm(this.productForm); + //this.addChildForm(this.datasourceTable); + } + onNewEntity(data, options) { + const _super = Object.create(null, { + onNewEntity: { get: () => super.onNewEntity } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.onNewEntity.call(this, data, options); + this.markAsReady(); + }); + } + onEntityLoaded(data, options) { + const _super = Object.create(null, { + onEntityLoaded: { get: () => super.onEntityLoaded } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.onEntityLoaded.call(this, data, options); + yield this.productForm.updateLists(data); + // Define default back link + this.defaultBackHref = `̀/extraction/data?category=${ExtractionCategories.PRODUCT}&label=${data.label}`; + this.markAsReady(); + }); + } + onEntityDeleted(data) { + return __awaiter(this, void 0, void 0, function* () { + // Change back href + this.defaultBackHref = '/extraction/data'; + }); + } +}; +__decorate([ + ViewChild('productForm', { static: true }), + __metadata("design:type", ProductForm) +], ProductPage.prototype, "productForm", void 0); +__decorate([ + ViewChild('datasourceTable', { static: true }), + __metadata("design:type", ExtractionTablePage) +], ProductPage.prototype, "datasourceTable", void 0); +__decorate([ + ViewChild('resultTable', { static: true }), + __metadata("design:type", ExtractionTablePage) +], ProductPage.prototype, "resultTable", void 0); +ProductPage = __decorate([ + Component({ + selector: 'app-product-page', + templateUrl: './product.page.html', + styleUrls: ['./product.page.scss'], + providers: [ + { provide: ValidatorService, useExisting: ExtractionProductValidatorService } + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + Router, + UntypedFormBuilder, + ProductService, + AccountService, + ExtractionProductValidatorService, + LocalSettingsService]) +], ProductPage); +export { ProductPage }; +//# sourceMappingURL=product.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/product/product.page.js.map b/out-tsc/app/app/extraction/product/product.page.js.map new file mode 100644 index 000000000..1ee3dfa70 --- /dev/null +++ b/out-tsc/app/app/extraction/product/product.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"product.page.js","sourceRoot":"","sources":["../../../../../src/app/extraction/product/product.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/product/product.service.js b/out-tsc/app/app/extraction/product/product.service.js new file mode 100644 index 000000000..59ba73cd5 --- /dev/null +++ b/out-tsc/app/app/extraction/product/product.service.js @@ -0,0 +1,370 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { of } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { AccountService, BaseGraphqlService, CryptoService, EntityUtils, escapeRegExp, firstNotNilPromise, GraphqlService, isEmptyArray, isNil, isNilOrBlank, isNotNil, ReferentialUtils, StatusIds, } from '@sumaris-net/ngx-components'; +import { ExtractionCategories, ExtractionColumn, ExtractionFilter, ExtractionType, ExtractionTypeUtils } from '../type/extraction-type.model'; +import { SAVE_AS_OBJECT_OPTIONS } from '@app/data/services/model/data-entity.model'; +import { ExtractionProduct } from './product.model'; +import { ExtractionFragments } from '../common/extraction.service'; +import { environment } from '@environments/environment'; +import { DataErrorCodes } from '@app/data/services/errors'; +import { ExtractionErrorCodes } from '@app/extraction/common/extraction.errors'; +import { ExtractionTypeFilter } from '@app/extraction/type/extraction-type.filter'; +import { ExtractionTypeService } from '@app/extraction/type/extraction-type.service'; +import { TranslateService } from '@ngx-translate/core'; +import { DataCommonFragments } from '@app/trip/common/data.fragments'; +export const ExtractionProductFragments = { + product: gql ` + fragment ExtractionProductFragment on ExtractionProductVO { + id + label + name + format + version + sheetNames + description + comments + docUrl + creationDate + updateDate + filterContent + isSpatial + statusId + parentId + processingFrequencyId + stratum { + id + updateDate + isDefault + sheetName + spatialColumnName + timeColumnName + aggColumnName + aggFunction + techColumnName + } + recorderPerson { + ...LightPersonFragment + } + recorderDepartment { + ...LightDepartmentFragment + } + } + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + `, +}; +const Queries = { + load: gql `query ExtractionProduct($id: Int!) { + data: extractionProduct(id: $id) { + ...ExtractionProductFragment + documentation + } + } + ${ExtractionProductFragments.product}`, + loadAll: gql `query ExtractionProducts($filter: ExtractionTypeFilterVOInput) { + data: extractionProducts(filter: $filter) { + ...ExtractionProductFragment + } + } + ${ExtractionProductFragments.product}`, + loadColumns: gql ` query ExtractionColumns($type: ExtractionTypeVOInput!, $sheet: String){ + data: extractionColumns(type: $type, sheet: $sheet){ + ...ExtractionColumnFragment + values + } + } + ${ExtractionFragments.column}` +}; +const Mutations = { + save: gql `mutation SaveExtractionProduct($product: ExtractionProductVOInput!){ + data: saveExtractionProduct(product: $product){ + ...ExtractionProductFragment + documentation + } + } + ${ExtractionProductFragments.product}`, + update: gql `mutation UpdateExtractionProduct($id: Int!){ + data: updateExtractionProduct(id: $id){ + ...ExtractionProductFragment + documentation + } + } + ${ExtractionProductFragments.product}`, + deleteAll: gql `mutation DeleteProducts($ids:[Int]!){ + deleteProducts(ids: $ids) + }` +}; +let ProductService = class ProductService extends BaseGraphqlService { + constructor(graphql, extractionTypeService, accountService, translateService) { + super(graphql, environment); + this.graphql = graphql; + this.extractionTypeService = extractionTypeService; + this.accountService = accountService; + this.translateService = translateService; + } + /** + * Watch products + */ + watchAll(dataFilter, options) { + if (this._debug) + console.debug('[product-service] Loading products...'); + dataFilter = this.asFilter(dataFilter); + const variables = { + filter: dataFilter === null || dataFilter === void 0 ? void 0 : dataFilter.asPodObject() + }; + return this.mutableWatchQuery({ + queryName: 'LoadAll', + query: Queries.loadAll, + arrayFieldName: 'data', + insertFilterFn: dataFilter === null || dataFilter === void 0 ? void 0 : dataFilter.asFilterFn(), + variables, + error: { code: ExtractionErrorCodes.LOAD_EXTRACTION_GEO_TYPES_ERROR, message: 'EXTRACTION.ERROR.LOAD_GEO_TYPES_ERROR' }, + fetchPolicy: options && options.fetchPolicy || 'network-only' + }) + .pipe(map((data) => { + const entities = ((data === null || data === void 0 ? void 0 : data.data) || []).map(ExtractionProduct.fromObject); + return { + data: entities, + total: data.total || entities.length + }; + })); + } + load(id, options) { + return __awaiter(this, void 0, void 0, function* () { + const { data } = yield this.graphql.query({ + query: Queries.load, + variables: { + id + }, + error: { code: ExtractionErrorCodes.LOAD_EXTRACTION_GEO_TYPES_ERROR, message: 'EXTRACTION.ERROR.LOAD_GEO_TYPE_ERROR' }, + fetchPolicy: options && options.fetchPolicy || 'network-only' + }); + return data && ExtractionProduct.fromObject(data) || null; + }); + } + computeNextLabel(format, types) { + return __awaiter(this, void 0, void 0, function* () { + let unique = false; + while (!unique) { + const hash = CryptoService.sha512(`${format}-${Date.now()}`).substr(0, 8); + const label = `${format}-${hash}`; + if (types) { + unique = !types.some(t => label.toUpperCase() === t.label.toUpperCase()); + } + else { + unique = !(yield this.extractionTypeService.existsByLabel(label, { fetchPolicy: 'no-cache' })); + } + if (unique) + return label; + } + }); + } + computeNextName(name, types) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (isNilOrBlank(name)) + return name; // Skip if blank + // Fetch all types + types = types || ((_a = (yield firstNotNilPromise(this.watchAll({ + searchAttribute: 'name', searchText: name + })))) === null || _a === void 0 ? void 0 : _a.data); + if (isEmptyArray(types)) + return name; // Skip if no other types + name = name.trim(); + const nameRegExp = new RegExp(`^${escapeRegExp(name)}(?:\\s*\\((\\d+)\\)\\s*)$`); + const maxIncrement = (types || []) + .filter(type => type.name && type.name.startsWith(name)) + .map(type => { + const matches = nameRegExp.exec(type.name); + return matches && +matches[1] || 0; + }) + .reduce((max, n) => Math.max(max, n), 0) || 0; + return `${name} (${maxIncrement + 1})`; + }); + } + listenChanges(id, opts) { + console.warn('listenChanges() not implemented yet'); + return of(); + } + /** + * Load columns metadata + * + * @param type + * @param sheetName + * @param options + */ + loadColumns(type, sheetName, options) { + return __awaiter(this, void 0, void 0, function* () { + const variables = { + type: ExtractionTypeUtils.minify(type), + sheet: sheetName + }; + const now = Date.now(); + if (this._debug) + console.debug('[product-service] Loading columns... using options:', variables); + const res = yield this.graphql.query({ + query: Queries.loadColumns, + variables, + error: { code: ExtractionErrorCodes.LOAD_EXTRACTION_ROWS_ERROR, message: 'EXTRACTION.ERROR.LOAD_ROWS_ERROR' }, + fetchPolicy: options && options.fetchPolicy || 'network-only' + }); + if (!res || !res.data) + return null; + const data = res.data.map(ExtractionColumn.fromObject); + // Compute column index + (data || []).forEach((c, index) => c.index = index); + if (this._debug) + console.debug(`[product-service] Columns ${type.category} ${type.label} loaded in ${Date.now() - now}ms`, data); + return data; + }); + } + canUserWrite(entity, opts) { + return this.accountService.isAdmin() + // New date allow for supervisors + || (isNil(entity.id) && this.accountService.isSupervisor()) + // Supervisor on existing data, and the same recorder department + || (ReferentialUtils.isNotEmpty(entity && entity.recorderDepartment) && this.accountService.canUserWriteDataForDepartment(entity.recorderDepartment)); + } + save(entity, filter) { + return __awaiter(this, void 0, void 0, function* () { + const now = Date.now(); + if (this._debug) + console.debug('[product-service] Saving product...'); + // Make sure to have entities + entity = ExtractionProduct.fromObject(entity); + filter = ExtractionFilter.fromObject(filter); + this.fillDefaultProperties(entity); + const isNew = isNil(entity.id); + entity.filter = filter || entity.filter; + // Transform to json + const json = entity.asObject(SAVE_AS_OBJECT_OPTIONS); + if (this._debug) + console.debug('[product-service] Using minify object, to send:', json); + yield this.graphql.mutate({ + mutation: Mutations.save, + variables: { + product: json + }, + error: { code: DataErrorCodes.SAVE_ENTITY_ERROR, message: 'ERROR.SAVE_ENTITY_ERROR' }, + update: (cache, { data }) => { + const savedEntity = data && data.data; + EntityUtils.copyIdAndUpdateDate(savedEntity, entity); + console.debug(`[product-service] Product saved in ${Date.now() - now}ms`, savedEntity); + // Convert into the extraction type + const savedType = ExtractionType.fromObject(savedEntity).asObject(); + savedType.__typename = ExtractionType.TYPENAME; // Restore typename + // Insert into cached queries + if (isNew) { + this.insertIntoMutableCachedQueries(cache, { + query: Queries.loadAll, + data: savedEntity + }); + // Insert as an extraction types + this.extractionTypeService.insertIntoCache(cache, savedType); + } + // Update from cached queries + else { + this.extractionTypeService.updateCache(cache, savedType); + } + } + }); + return entity; + }); + } + delete(type) { + return __awaiter(this, void 0, void 0, function* () { + if (!type || isNil(type.id)) + throw Error('Missing type or type.id'); + const now = Date.now(); + if (this._debug) + console.debug(`[product-service] Deleting product {id: ${type.id}'}`); + yield this.graphql.mutate({ + mutation: Mutations.deleteAll, + variables: { + ids: [type.id] + }, + update: (cache) => { + // Remove from cache + const cacheKey = { __typename: ExtractionProduct.TYPENAME, id: type.id, label: type.label, category: ExtractionCategories.PRODUCT }; + cache.evict({ id: cache.identify(cacheKey) }); + cache.evict({ id: cache.identify(Object.assign(Object.assign({}, cacheKey), { __typename: ExtractionType.TYPENAME })) }); + if (this._debug) + console.debug(`[product-service] Product deleted in ${Date.now() - now}ms`); + } + }); + }); + } + deleteAll(entities) { + return __awaiter(this, void 0, void 0, function* () { + yield Promise.all((entities || []) + .filter(t => t && isNotNil(t.id)).map(type => this.delete(type))); + }); + } + /** + * Update data product (re-execute the extraction or the aggregation) + * + * @param id the identifier of the extraction product to update + */ + updateProduct(id) { + return __awaiter(this, void 0, void 0, function* () { + const now = Date.now(); + if (this._debug) + console.debug(`[product-service] Updating extraction product #{id}...`); + let savedEntity; + yield this.graphql.mutate({ + mutation: Mutations.update, + variables: { id }, + error: { code: ExtractionErrorCodes.UPDATE_PRODUCT_ERROR, message: 'EXTRACTION.ERROR.UPDATE_PRODUCT_ERROR' }, + update: (cache, { data }) => { + savedEntity = data && data.data; + console.debug(`[product-service] Product updated in ${Date.now() - now}ms`, savedEntity); + // Convert into the extraction type + const savedType = ExtractionType.fromObject(savedEntity).asObject(); + savedType.__typename = ExtractionType.TYPENAME; + // Update from cached queries + this.extractionTypeService.updateCache(cache, savedType); + } + }); + return ExtractionProduct.fromObject(savedEntity); + }); + } + /* -- protected methods -- */ + fillDefaultProperties(entity) { + // If new product + if (isNil(entity.id)) { + // Compute label + entity.label = entity.label || `${entity.format}-${Date.now()}`; + // Recorder department + entity.recorderDepartment = ReferentialUtils.isNotEmpty(entity.recorderDepartment) ? entity.recorderDepartment : this.accountService.department; + // Recorder person + entity.recorderPerson = entity.recorderPerson || this.accountService.person; + } + entity.name = entity.name || this.translateService.instant('EXTRACTION.PRODUCT.NEW.DEFAULT_NAME', entity); + entity.statusId = isNotNil(entity.statusId) ? entity.statusId : StatusIds.TEMPORARY; + // Description + if (!entity.description) { + entity.description = this.translateService.instant('EXTRACTION.PRODUCT.NEW.DEFAULT_DESCRIPTION', this.accountService.person); + } + } + copyIdAndUpdateDate(source, target) { + EntityUtils.copyIdAndUpdateDate(source, target); + } + asFilter(filter) { + return ExtractionTypeFilter.fromObject(filter); + } + asObject(type) { + return ExtractionTypeUtils.minify(type); + } +}; +ProductService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [GraphqlService, + ExtractionTypeService, + AccountService, + TranslateService]) +], ProductService); +export { ProductService }; +//# sourceMappingURL=product.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/product/product.service.js.map b/out-tsc/app/app/extraction/product/product.service.js.map new file mode 100644 index 000000000..25872c9f1 --- /dev/null +++ b/out-tsc/app/app/extraction/product/product.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"product.service.js","sourceRoot":"","sources":["../../../../../src/app/extraction/product/product.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/product/product.validator.js b/out-tsc/app/app/extraction/product/product.validator.js new file mode 100644 index 000000000..476c0a0ac --- /dev/null +++ b/out-tsc/app/app/extraction/product/product.validator.js @@ -0,0 +1,58 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { AppFormArray, EntityUtils, isNil, isNotEmptyArray, SharedValidators } from '@sumaris-net/ngx-components'; +import { ExtractionProduct } from './product.model'; +import { AppValidatorService } from '@sumaris-net/ngx-components'; +import { toBoolean, toNumber } from '@sumaris-net/ngx-components'; +import { AggregationStrataValidatorService } from '@app/extraction/strata/strata.validator'; +let ExtractionProductValidatorService = class ExtractionProductValidatorService extends AppValidatorService { + constructor(formBuilder, strataValidatorService) { + super(formBuilder); + this.formBuilder = formBuilder; + this.strataValidatorService = strataValidatorService; + } + getFormGroup(data) { + return this.formBuilder.group({ + __typename: ExtractionProduct.TYPENAME, + id: [data && data.id || null], + format: [data && data.format || null, Validators.required], + version: [data && data.version || null, Validators.maxLength(10)], + label: [data && data.label || null, Validators.required], + name: [data && data.name || null, Validators.required], + description: [data && data.description || null, Validators.maxLength(255)], + comments: [data && data.comments || null, Validators.maxLength(2000)], + updateDate: [data && data.updateDate || null], + creationDate: [data && data.creationDate || null], + parentId: [toNumber(data === null || data === void 0 ? void 0 : data.parentId, null)], + filter: [data && data.filter || null], + filterContent: [data && data.filterContent || null, Validators.maxLength(10000)], + documentation: [data && data.documentation || null, Validators.maxLength(10000)], + statusId: [toNumber(data && data.statusId, null), Validators.required], + isSpatial: [toBoolean(data && data.isSpatial, false)], + processingFrequencyId: [toNumber(data && data.processingFrequencyId, null), Validators.required], + recorderDepartment: [data && data.recorderDepartment || null, SharedValidators.entity], + recorderPerson: [data && data.recorderPerson || null, SharedValidators.entity], + stratum: this.getStratumArray(data), + }); + } + getStratumArray(data) { + const formArray = new AppFormArray((strata) => this.getStrataFormGroup(strata), (v1, v2) => EntityUtils.equals(v1, v2, 'id') || v1.sheetName === v2.sheetName, (strata) => !strata || isNil(strata.sheetName), { + allowEmptyArray: false + }); + if (isNotEmptyArray(data === null || data === void 0 ? void 0 : data.stratum)) { + formArray.patchValue(data === null || data === void 0 ? void 0 : data.stratum); + } + return formArray; + } + getStrataFormGroup(data) { + return this.strataValidatorService.getFormGroup(data); + } +}; +ExtractionProductValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + AggregationStrataValidatorService]) +], ExtractionProductValidatorService); +export { ExtractionProductValidatorService }; +//# sourceMappingURL=product.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/product/product.validator.js.map b/out-tsc/app/app/extraction/product/product.validator.js.map new file mode 100644 index 000000000..69cf5f1d4 --- /dev/null +++ b/out-tsc/app/app/extraction/product/product.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"product.validator.js","sourceRoot":"","sources":["../../../../../src/app/extraction/product/product.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/strata/strata.model.js b/out-tsc/app/app/extraction/strata/strata.model.js new file mode 100644 index 000000000..945665e41 --- /dev/null +++ b/out-tsc/app/app/extraction/strata/strata.model.js @@ -0,0 +1,24 @@ +var AggregationStrata_1; +import { __decorate, __metadata } from "tslib"; +import { Entity, EntityClass, toBoolean } from '@sumaris-net/ngx-components'; +let AggregationStrata = AggregationStrata_1 = class AggregationStrata extends Entity { + constructor() { + super(AggregationStrata_1.TYPENAME); + } + fromObject(source) { + super.fromObject(source); + this.sheetName = source.sheetName; + this.isDefault = toBoolean(source.isDefault, false); + this.spatialColumnName = source.spatialColumnName; + this.timeColumnName = source.timeColumnName; + this.aggColumnName = source.aggColumnName; + this.aggFunction = source.aggFunction; + this.techColumnName = source.techColumnName; + } +}; +AggregationStrata = AggregationStrata_1 = __decorate([ + EntityClass({ typename: 'AggregationStrataVO' }), + __metadata("design:paramtypes", []) +], AggregationStrata); +export { AggregationStrata }; +//# sourceMappingURL=strata.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/strata/strata.model.js.map b/out-tsc/app/app/extraction/strata/strata.model.js.map new file mode 100644 index 000000000..f13c33edd --- /dev/null +++ b/out-tsc/app/app/extraction/strata/strata.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"strata.model.js","sourceRoot":"","sources":["../../../../../src/app/extraction/strata/strata.model.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAYtE,IAAM,iBAAiB,yBAAvB,MAAM,iBAAkB,SAAQ,MAAyB;IAa9D;QACE,KAAK,CAAC,mBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,UAAU,CAAC,MAAW;QACpB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAClD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC5C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IAC9C,CAAC;CACF,CAAA;AA3BY,iBAAiB;IAD7B,WAAW,CAAC,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC;;GACpC,iBAAiB,CA2B7B;SA3BY,iBAAiB"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/strata/strata.validator.js b/out-tsc/app/app/extraction/strata/strata.validator.js new file mode 100644 index 000000000..dfb572b77 --- /dev/null +++ b/out-tsc/app/app/extraction/strata/strata.validator.js @@ -0,0 +1,29 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { AppValidatorService } from '@sumaris-net/ngx-components'; +import { AggregationStrata } from '@app/extraction/strata/strata.model'; +let AggregationStrataValidatorService = class AggregationStrataValidatorService extends AppValidatorService { + constructor(formBuilder) { + super(formBuilder); + this.formBuilder = formBuilder; + } + getFormGroup(data) { + return this.formBuilder.group({ + __typename: [AggregationStrata.TYPENAME], + id: [null], + sheetName: [data && data.sheetName || null, Validators.required], + timeColumnName: [data && data.timeColumnName || 'year', Validators.required], + spatialColumnName: [data && data.spatialColumnName || 'square', Validators.required], + aggColumnName: [data && data.aggColumnName || null, Validators.required], + aggFunction: [data && data.aggFunction || 'SUM', Validators.required], + techColumnName: [data && data.techColumnName || null] + }); + } +}; +AggregationStrataValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder]) +], AggregationStrataValidatorService); +export { AggregationStrataValidatorService }; +//# sourceMappingURL=strata.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/strata/strata.validator.js.map b/out-tsc/app/app/extraction/strata/strata.validator.js.map new file mode 100644 index 000000000..da0ce4e21 --- /dev/null +++ b/out-tsc/app/app/extraction/strata/strata.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"strata.validator.js","sourceRoot":"","sources":["../../../../../src/app/extraction/strata/strata.validator.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAoB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAGjE,IAAM,iCAAiC,GAAvC,MAAM,iCAAkC,SAAQ,mBAAsC;IAE3F,YACY,WAA+B;QACzC,KAAK,CAAC,WAAW,CAAC,CAAC;QADT,gBAAW,GAAX,WAAW,CAAoB;IAE3C,CAAC;IAED,YAAY,CAAC,IAAK;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAC5B,UAAU,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YACxC,EAAE,EAAE,CAAC,IAAI,CAAC;YACV,SAAS,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;YAChE,cAAc,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC;YAC5E,iBAAiB,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,IAAI,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC;YACpF,aAAa,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;YACxE,WAAW,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC;YACrE,cAAc,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC;SACtD,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAnBY,iCAAiC;IAD7C,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAIN,kBAAkB;GAHhC,iCAAiC,CAmB7C;SAnBY,iCAAiC"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/table/extraction-table.page.js b/out-tsc/app/app/extraction/table/extraction-table.page.js new file mode 100644 index 000000000..d8dc0b17b --- /dev/null +++ b/out-tsc/app/app/extraction/table/extraction-table.page.js @@ -0,0 +1,742 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input, ViewChild } from '@angular/core'; +import { BehaviorSubject, EMPTY, merge, Subject } from 'rxjs'; +import { Alerts, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, firstNotNilPromise, isNil, isNilOrBlank, isNotNil, isNotNilOrBlank, SETTINGS_DISPLAY_COLUMNS, sleep, StatusIds, TableSelectColumnsComponent, } from '@sumaris-net/ngx-components'; +import { TableDataSource } from '@e-is/ngx-material-table'; +import { ExtractionCategories, ExtractionFilterCriterion, ExtractionRow, ExtractionType, ExtractionTypeCategory, ExtractionTypeUtils, } from '../type/extraction-type.model'; +import { debounceTime, filter, map, throttleTime } from 'rxjs/operators'; +import { DEFAULT_CRITERION_OPERATOR, ExtractionAbstractPage } from '../common/extraction-abstract.page'; +import { MatTable } from '@angular/material/table'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort } from '@angular/material/sort'; +import { MatExpansionPanel } from '@angular/material/expansion'; +import { ProductService } from '@app/extraction/product/product.service'; +import { ExtractionProduct } from '@app/extraction/product/product.model'; +import { ExtractionTypeService } from '@app/extraction/type/extraction-type.service'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { RxState } from '@rx-angular/state'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { ExtractionUtils } from '@app/extraction/common/extraction.utils'; +let ExtractionTablePage = class ExtractionTablePage extends ExtractionAbstractPage { + constructor(injector, state, productService, programRefService, extractionTypeService, cd) { + super(injector, state); + this.productService = productService; + this.programRefService = programRefService; + this.extractionTypeService = extractionTypeService; + this.cd = cd; + this.stopSubject = new Subject(); + this.$programLabel = this._state.select('programLabel'); + this.$programs = this._state.select('programs'); + this.$program = this._state.select('program'); + this.$categories = this._state.select('categories'); + this.$enableTripReport = this._state.select('enableTripReport'); + this.defaultPageSize = DEFAULT_PAGE_SIZE; + this.defaultPageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS; + this.cacheDuration = null; // = default + this.$title = new BehaviorSubject('EXTRACTION.TABLE.TITLE'); + this.$columns = new BehaviorSubject(undefined); + this.canCreateProduct = false; + this.isAdmin = false; + this.filterPanelFloating = true; + this.stickyEnd = true; + this.autoload = true; + this.embedded = false; + this.showToolbar = true; + this.showFilter = true; + this.showDownloadButton = true; + this.displayedColumns = []; + this.dataSource = new TableDataSource([], ExtractionRow); + this.isAdmin = this.accountService.isAdmin(); + this.stickyEnd = !this.mobile; + } + set programLabel(value) { + this._state.set('programLabel', (_) => value); + } + get programLabel() { + var _a; + return this._state.get('programLabel') || ((_a = this.program) === null || _a === void 0 ? void 0 : _a.label); + } + set program(value) { + this._state.set('program', (_) => value); + } + get program() { + return this._state.get('program'); + } + set enableTripReport(value) { + this._state.set('enableTripReport', (_) => value); + } + get enableTripReport() { + return this._state.get('enableTripReport'); + } + get filterChanges() { + return this.criteriaForm.form.valueChanges + .pipe( + //debounceTime(450), + map(_ => this.getFilterValue())); + } + ngOnInit() { + var _a, _b; + super.ngOnInit(); + // If the user changes the sort order, reset back to the first page. + if (this.sort && this.paginator) { + this.registerSubscription(this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0)); + } + this.registerSubscription(merge(this.onRefresh, ((_a = this.sort) === null || _a === void 0 ? void 0 : _a.sortChange) || EMPTY, ((_b = this.paginator) === null || _b === void 0 ? void 0 : _b.page) || EMPTY) + .pipe(debounceTime(100), throttleTime(500) // Need because of 'this.paginator.pageIndex = 0' later + ) + .subscribe(() => { + if (isNil(this.type)) + return; // Skip if no type + // If already loading: skip + if (this.loading) { + // Warn user that he should wait + if (this.started && !this.embedded) + this.showToast({ type: 'warning', message: 'EXTRACTION.INFO.PLEASE_WAIT_WHILE_RUNNING' }); + return; + } + // Reset paginator if filter change + if (this.paginator && this.paginator.pageIndex > 0 && this.dirty) { + this.paginator.pageIndex = 0; + } + if (!this.started) { + console.warn('[extraction-table] Service not started: skip refresh event'); + return; + } + // Load data + return this.loadData(); + })); + this.filterCriteriaCount$ = this.criteriaForm.form.valueChanges + .pipe(map(_ => this.criteriaForm.criteriaCount)); + this._state.connect('programs', this.programRefService.watchAll(0, 100, 'label', 'asc', { + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], + acquisitionLevelLabels: [ + // Acquisition levels used by Trip -> Operation + AcquisitionLevelCodes.TRIP, AcquisitionLevelCodes.OPERATION, AcquisitionLevelCodes.CHILD_OPERATION, + // Acquisition levels used by ObservedLocation -> Landing + AcquisitionLevelCodes.OBSERVED_LOCATION, AcquisitionLevelCodes.LANDING + ] + }), (s, { data }) => data); + this._state.connect('program', this._state.select(['programLabel', 'programs'], res => res) + .pipe(map(({ programLabel, programs }) => programLabel && (programs || []).find(p => p.label === programLabel) || null))); + this._state.connect('categories', this.types$ + .pipe(filter(isNotNil), map(ExtractionTypeCategory.fromTypes))); + this._state.connect('enableTripReport', this._state.select('program') + .pipe(map(program => (program === null || program === void 0 ? void 0 : program.getPropertyAsBoolean(ProgramProperties.TRIP_REPORT_ENABLE)) || false))); + if (this.autoload && !this.embedded) { + this.loadFromRouteOrSettings(); + } + else { + this.markAsLoaded(); + } + } + ngOnDestroy() { + super.ngOnDestroy(); + this.stopSubject.next(); + } + loadFromRouteOrSettings() { + const _super = Object.create(null, { + loadFromRouteOrSettings: { get: () => super.loadFromRouteOrSettings } + }); + return __awaiter(this, void 0, void 0, function* () { + const found = yield _super.loadFromRouteOrSettings.call(this); + if (found) + return found; + // Mark as loaded, if not found + setTimeout(() => this.markAsLoaded()); + }); + } + updateView(data) { + const _super = Object.create(null, { + translateColumns: { get: () => super.translateColumns } + }); + return __awaiter(this, void 0, void 0, function* () { + try { + this.data = data; + // Translate names + _super.translateColumns.call(this, data.columns); + // Sort columns, by rankOrder + this.sortedColumns = data.columns.slice() + // Sort by rankOder + .sort((col1, col2) => col1.rankOrder - col2.rankOrder); + this.displayedColumns = this.sortedColumns + .map(column => column.columnName) + // Remove id + .filter(columnName => columnName !== 'id') + // Add actions column + .concat(['actions']); + this.$columns.next(data.columns); // WARN: must keep the original column order + // Update rows + this.dataSource.updateDatasource(data.rows || []); + // Update title + yield this.updateTitle(); + // Wait end of datasource loading + //await firstFalsePromise(this.dataSource.loadingSubject); + setTimeout(() => this.updateQueryParams()); + } + catch (err) { + console.error('Error while updating the view', err); + } + finally { + this.markAsLoaded({ emitEvent: false }); + this.markAsUntouched({ emitEvent: false }); + this.markAsPristine({ emitEvent: false }); + this.enable({ emitEvent: false }); + this.markForCheck(); + } + }); + } + setType(type, opts) { + const _super = Object.create(null, { + setType: { get: () => super.setType } + }); + return __awaiter(this, void 0, void 0, function* () { + const changed = yield _super.setType.call(this, type, Object.assign(Object.assign({}, opts), { emitEvent: false, skipLocationChange: true })); + if (changed) { + this.stopSubject.next(); // Cancelled existing load process + this.canCreateProduct = this.type && this.accountService.isSupervisor(); + this.resetPaginatorAndSort(); + this.updateTitle(); + // Close the filter panel + if (this.filterExpansionPanel && this.filterExpansionPanel.expanded) { + this.filterExpansionPanel.close(); + } + // Reset program + this.resetProgram(); + if (!opts || opts.emitEvent !== false) { + this.markAsReady(); + this.markAsStarted(); + this.onRefresh.emit(); + } + } + return changed; + }); + } + setTypeAndProgram(type, programLabel, opts = { emitEvent: true }) { + return __awaiter(this, void 0, void 0, function* () { + // Apply type + yield this.setType(type, { emitEvent: false }); + // Apply filter + if (this.criteriaForm.sheetName && isNotNilOrBlank(programLabel)) { + yield this.criteriaForm.setValue([ + ExtractionFilterCriterion.fromObject({ + sheetName: this.criteriaForm.sheetName, + name: 'project', + operator: '=', + value: programLabel, + hidden: true // Hide + }), + ExtractionFilterCriterion.fromObject({ operator: '=' }) + ], { emitEvent: false }); + } + // Apply program label + this.setProgramLabel(programLabel); + // Refresh data + if (!opts || opts.emitEvent !== false) { + this.markAsReady(); + this.markAsStarted(); + this.onRefresh.emit(); + } + }); + } + setSheetName(sheetName, opts) { + opts = Object.assign({ emitEvent: !this.loading }, opts); + // Reset sort and paginator + const resetPaginator = (opts.emitEvent !== false && isNotNil(sheetName) && this.sheetName !== sheetName); + super.setSheetName(sheetName, opts); + if (resetPaginator) { + this.resetPaginatorAndSort(); + } + } + setFilterValue(filter, opts) { + const _super = Object.create(null, { + setFilterValue: { get: () => super.setFilterValue } + }); + return __awaiter(this, void 0, void 0, function* () { + filter = this.service.asFilter(filter); + // Detect and hide the project (=program) criterion + let programLabel; + filter.criteria = (filter.criteria || []).map(criterion => { + // Detect project field + if (criterion.name === 'project' && criterion.operator === '=' && isNotNilOrBlank(criterion.value)) { + criterion = criterion.clone(); + // Mark as hidden + criterion.hidden = true; + // Remember + programLabel = criterion.value; + } + return criterion; + }); + // Apply program label + if (isNotNilOrBlank(programLabel)) { + this.setProgramLabel(programLabel); + } + // Set filter value + yield _super.setFilterValue.call(this, filter, opts); + }); + } + resetPaginatorAndSort() { + if (this.sort) + this.sort.active = undefined; + if (this.paginator) + this.paginator.pageIndex = 0; + } + openSelectColumnsModal(event) { + return __awaiter(this, void 0, void 0, function* () { + const columns = this.sortedColumns + .map((column) => ({ + name: column.columnName, + label: column.name, + visible: this.displayedColumns.indexOf(column.columnName) !== -1 + })); + const modal = yield this.modalCtrl.create({ + component: TableSelectColumnsComponent, + componentProps: { columns } + }); + // On dismiss + modal.onDidDismiss() + .then(res => { + if (!res) + return; // CANCELLED + // Apply columns + this.displayedColumns = (columns && columns.filter(c => c.visible).map(c => c.name) || []) + // Add actions column + .concat(['actions']); + // Update local settings + return this.settings.savePageSetting(this.settingsId, this.displayedColumns, SETTINGS_DISPLAY_COLUMNS); + }); + return modal.present(); + }); + } + onCellValueClick(event, column, value) { + if (!this.showFilter) + return; // Skip if cannot filter + const hasChanged = this.criteriaForm.addFilterCriterion({ + name: column.columnName, + operator: DEFAULT_CRITERION_OPERATOR, + value, + sheetName: this.sheetName + }, { + appendValue: event.ctrlKey + }); + if (!hasChanged) + return; + const openExpansionPanel = this.filterExpansionPanel && !this.filterExpansionPanel.expanded; + if (openExpansionPanel) { + this.filterExpansionPanel.open(); + } + if (!event.ctrlKey) { + this.onRefresh.emit(); + if (openExpansionPanel) { + setTimeout(() => this.filterExpansionPanel.close(), 500); + } + } + } + aggregateAndSave(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.type || !this.canCreateProduct) + return; // Skip + this.markAsLoading(); + this.error = null; + const filter = this.getFilterValue(); + this.disable(); + try { + console.info('[extraction-table] Aggregating and saving as new product...'); + // Compute format, label and name + const parentFormat = this.type.format.toUpperCase(); + const format = parentFormat.startsWith('AGG_') ? parentFormat : `AGG_${parentFormat}`; + const [label, name] = yield Promise.all([ + this.productService.computeNextLabel(format, this.types), + this.computeNextProductName(format) + ]); + const entity = ExtractionProduct.fromObject({ + label, + name, + format, + isSpatial: this.type.isSpatial, + parent: this.type.id >= 0 ? ExtractionTypeUtils.minify(this.type) : null + }); + // Save aggregation + const savedEntity = yield this.productService.save(entity, filter); + // Wait for types cache updates + yield sleep(1000); + // Open the new aggregation (no wait) + yield this.openProduct(savedEntity); + // Change current type + yield this.setType(savedEntity, { emitEvent: true, skipLocationChange: false, sheetName: undefined }); + } + catch (err) { + console.error(err); + this.error = err && err.message || err; + this.markAsDirty(); + } + finally { + this.markAsLoaded(); + this.enable(); + } + }); + } + save(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.type) + return; // Skip + this.markAsLoading(); + this.error = null; + const filter = this.getFilterValue(); + this.disable(); + try { + console.info('[extraction-table] Saving as new product...'); + // Compute label and name + const [label, name] = yield Promise.all([ + this.productService.computeNextLabel(this.type.format, this.types), + this.computeNextProductName(this.type.format) + ]); + const entity = ExtractionProduct.fromObject({ + label, + name, + format: this.type.format, + version: this.type.version, + parent: this.type.id >= 0 ? ExtractionTypeUtils.minify(this.type) : null + }); + // Save extraction + const savedEntity = yield this.productService.save(entity, filter); + // Wait for types cache updates + yield sleep(1000); + // Open the new aggregation + yield this.openProduct(savedEntity); + // Change current type + yield this.setType(savedEntity, { emitEvent: true, skipLocationChange: false, sheetName: undefined }); + } + catch (err) { + console.error(err); + this.error = err && err.message || err; + this.markAsDirty(); + } + finally { + this.markAsLoaded(); + this.enable(); + } + }); + } + delete(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.type || isNil(this.type.id)) + return; + if (this.type.category !== ExtractionCategories.PRODUCT) { + console.warn('[extraction-table] Only product extraction can be deleted !'); + return; + } + const confirm = yield this.askDeleteConfirmation(event); + if (!confirm) + return; // user cancelled + // Mark as loading, and disable + this.markAsLoading(); + this.error = null; + this.disable(); + try { + const aggType = ExtractionProduct.fromObject(this.type.asObject()); + yield this.productService.delete(aggType); + // Wait propagation to types + yield sleep(4000); + // Change type, to the first one + const types = yield firstNotNilPromise(this.types$); + if (types && types.length) { + yield this.setType(types[0], { emitEvent: false, skipLocationChange: false, sheetName: undefined }); + } + } + catch (err) { + console.error(err); + this.error = err && err.message || err; + this.markAsDirty(); + } + finally { + this.markAsLoaded({ emitEvent: false }); + this.enable(); + this.markForCheck(); + } + }); + } + openMap(event) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (((_a = this.type) === null || _a === void 0 ? void 0 : _a.isSpatial) !== true) + return; // Skip + if (event) { + event.preventDefault(); + event.stopPropagation(); + } + return setTimeout(() => + // open the map + this.router.navigate(['extraction', 'map'], { + // TODO replace by ExtractionUtils.asQueryParams(this.type, this.getFilterValue()) + queryParams: Object.assign({ category: this.type.category, label: this.type.label }, this.getFilterAsQueryParams()) + }), 200); // Add a delay need by matTooltip to be hide + }); + } + openProduct(type, event) { + type = type || this.type; + if (event) { + // Need, to close mat tooltip + event.preventDefault(); + event.stopImmediatePropagation(); + } + if (!type) + return; // skip if not a aggregation type + console.debug(`[extraction-table] Opening product {${type.label}`); + return setTimeout(() => + // open the aggregation type + this.router.navigate(['extraction', 'product', type.id]), 100); + } + applyFilterAndClosePanel(event) { + this.onRefresh.emit(event); + this.filterExpansionPanel.close(); + } + resetFilter(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.programLabel) { + // Keep program (reapply type + program) + yield this.setTypeAndProgram(this.type, this.programLabel, { emitEvent: false }); + } + else { + // Clear all filter + this.criteriaForm.reset(); + } + // Apply filter + this.applyFilterAndClosePanel(event); + }); + } + doRefresh(event) { + this.cacheDuration = 'none'; + this.onRefresh.emit(event); + // Wait end + setTimeout(() => __awaiter(this, void 0, void 0, function* () { + yield this.waitIdle(); + // complete (e.g. IonRefresher) + if ((event === null || event === void 0 ? void 0 : event.target) && event.target.complete) { + event.target.complete(); + } + // Refresh cache duration + this.cacheDuration = null; + }), 650); + } + /* -- protected method -- */ + toggleFilterPanelFloating() { + this.filterPanelFloating = !this.filterPanelFloating; + this.markForCheck(); + } + updateQueryParams(type, opts = { skipLocationChange: false, skipSettingsChange: false }) { + const _super = Object.create(null, { + updateQueryParams: { get: () => super.updateQueryParams } + }); + return __awaiter(this, void 0, void 0, function* () { + if (this.embedded) + return; // Skip route update route, if embedded + return _super.updateQueryParams.call(this, type, opts); + }); + } + resetProgram() { + this._state.set({ programLabel: null, program: null }); + } + watchAllTypes() { + const filter = { + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] + }; + return this.extractionTypeService.watchAll(0, 1000, 'label', 'asc', filter); + } + loadType(id, opts) { + return this.extractionTypeService.load(id, opts); + } + loadData() { + var _a, _b, _c, _d; + return __awaiter(this, void 0, void 0, function* () { + if (!((_a = this.type) === null || _a === void 0 ? void 0 : _a.label)) + return; // skip + // To many call + if (this.stopSubject.observers.length >= 1) + throw new Error('Too many call of loadData()'); + const typeLabel = this.type.label; + this.markAsLoading(); + this.resetError(); + let cancelled = false; + const cancelSubscription = this.stopSubject + .subscribe(() => { + var _a; + if (((_a = this.type) === null || _a === void 0 ? void 0 : _a.label) !== typeLabel) { + console.debug(`[extraction-table] Loading ${typeLabel} [CANCELLED]`); + cancelled = true; + } + }); + const filter = this.getFilterValue(); + this.disable(); + this.markForCheck(); + const now = Date.now(); + console.info(`[extraction-table] Loading ${typeLabel} (sheet: ${filter.sheetName}, cacheDuration: ${this.cacheDuration})...`); + try { + // Load rows + const data = yield this.service.loadRows(this.type, this.paginator ? this.paginator.pageIndex * this.paginator.pageSize : null, ((_b = this.paginator) === null || _b === void 0 ? void 0 : _b.pageSize) || DEFAULT_PAGE_SIZE, (_c = this.sort) === null || _c === void 0 ? void 0 : _c.active, (_d = this.sort) === null || _d === void 0 ? void 0 : _d.direction, filter, { cacheDuration: this.cacheDuration }); + if (cancelled) + return; // Stop if cancelled + console.info(`[extraction-table] Loading ${typeLabel} (sheet: ${filter.sheetName}) [OK] in ${Date.now() - now}ms`); + // Update the view + yield this.updateView(data); + } + catch (err) { + if (!cancelled) { + console.error(err); + this.error = err && err.message || err; + this.markAsDirty(); + } + } + finally { + if (!cancelled) { + this.markAsLoaded(); + this.enable(); + } + cancelSubscription === null || cancelSubscription === void 0 ? void 0 : cancelSubscription.unsubscribe(); + } + }); + } + fromObject(json) { + return ExtractionType.fromObject(json); + } + isEquals(t1, t2) { + return ExtractionType.equals(t1, t2); + } + askDeleteConfirmation(event) { + return Alerts.askActionConfirmation(this.alertCtrl, this.translate, true, event); + } + parseCriteriaFromString(queryString, sheet) { + var _a; + const criteria = super.parseCriteriaFromString(queryString, sheet); + const programIndex = (criteria || []).findIndex(criterion => (!sheet || criterion.sheetName === sheet) + && criterion.operator === '=' + && criterion.name === 'project' + && isNotNilOrBlank(criterion.value)); + if (programIndex !== -1) { + const programLabel = (_a = criteria[programIndex]) === null || _a === void 0 ? void 0 : _a.value; + this.setProgramLabel(programLabel); + criteria[programIndex].hidden = true; + } + return criteria; + } + setProgramLabel(value) { + this.programLabel = value; + } + /* -- private method -- */ + computeNextProductName(format) { + return __awaiter(this, void 0, void 0, function* () { + if (!format) + return null; + // Use program as format, if any + const program = this.program; + if (isNotNilOrBlank(program === null || program === void 0 ? void 0 : program.label)) { + format = program.label; + } + const i18nPrefix = (format === null || format === void 0 ? void 0 : format.startsWith('AGG_')) ? 'EXTRACTION.AGGREGATION.NEW.' : 'EXTRACTION.PRODUCT.NEW.'; + const defaultName = yield this.translate.get(i18nPrefix + 'DEFAULT_NAME', { format }).toPromise(); + return this.productService.computeNextName(defaultName, this.types); + }); + } + updateTitle() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.type) { + this.$title.next('EXTRACTION.TABLE.TITLE'); + return; + } + const categoryKey = `EXTRACTION.CATEGORY.${this.type.category.toUpperCase()}`; + const categoryName = yield this.translate.get(categoryKey).toPromise(); + const titlePrefix = (categoryName !== categoryKey) ? `${categoryName}
` : ''; + if (isNilOrBlank(titlePrefix)) { + console.warn('Missing i18n key \'' + categoryKey + '\''); + } + // Try to get a title with the program + const program = this.program; + if (isNotNilOrBlank(program === null || program === void 0 ? void 0 : program.label)) { + const titleKey = `EXTRACTION.FORMAT.${this.type.format.toUpperCase()}.TITLE_PROGRAM`; + const title = yield this.translate.get(titleKey, program).toPromise(); + if (title !== titleKey) { + this.$title.next(titlePrefix + title); + return; + } + } + // By default: use type name (should have been translated before) + this.$title.next(titlePrefix + this.type.name); + }); + } + markForCheck() { + this.cd.markForCheck(); + } + openTripReport() { + return __awaiter(this, void 0, void 0, function* () { + const program = this.program; + if (!program || !this.enableTripReport) + return; // Skip + const reportType = program.getProperty(ProgramProperties.TRIP_REPORT_TYPE); + const reportPath = reportType !== 'legacy' ? [reportType] : []; + const filter = this.getFilterValue(); + yield this.router.navigate(['extraction', 'report', 'trips', ...reportPath], { + queryParams: ExtractionUtils.asQueryParams(this.type, filter) + }); + }); + } + watchExtractionTypesByProgram(programLabel) { + if (this._extractionTypesProgramLabel !== programLabel) { + this._extractionTypesProgramLabel = programLabel; + this._extractionTypesByPrograms$ = this.extractionTypeService.watchAllByProgramLabels([programLabel]); + } + return this._extractionTypesByPrograms$; + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], ExtractionTablePage.prototype, "autoload", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ExtractionTablePage.prototype, "embedded", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ExtractionTablePage.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ExtractionTablePage.prototype, "showFilter", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ExtractionTablePage.prototype, "showDownloadButton", void 0); +__decorate([ + ViewChild(MatTable, { static: true }), + __metadata("design:type", MatSort) +], ExtractionTablePage.prototype, "table", void 0); +__decorate([ + ViewChild(MatPaginator, { static: true }), + __metadata("design:type", MatPaginator) +], ExtractionTablePage.prototype, "paginator", void 0); +__decorate([ + ViewChild(MatSort, { static: true }), + __metadata("design:type", MatSort) +], ExtractionTablePage.prototype, "sort", void 0); +__decorate([ + ViewChild(MatExpansionPanel, { static: true }), + __metadata("design:type", MatExpansionPanel) +], ExtractionTablePage.prototype, "filterExpansionPanel", void 0); +ExtractionTablePage = __decorate([ + Component({ + selector: 'app-extraction-table-page', + templateUrl: './extraction-table.page.html', + styleUrls: ['./extraction-table.page.scss'], + providers: [RxState], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + RxState, + ProductService, + ProgramRefService, + ExtractionTypeService, + ChangeDetectorRef]) +], ExtractionTablePage); +export { ExtractionTablePage }; +//# sourceMappingURL=extraction-table.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/table/extraction-table.page.js.map b/out-tsc/app/app/extraction/table/extraction-table.page.js.map new file mode 100644 index 000000000..5dcc29958 --- /dev/null +++ b/out-tsc/app/app/extraction/table/extraction-table.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extraction-table.page.js","sourceRoot":"","sources":["../../../../../src/app/extraction/table/extraction-table.page.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAqB,SAAS,EAAE,MAAM,eAAe,CAAC;AACrI,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAc,OAAO,EAAE,MAAM,MAAM,CAAC;AAC1E,OAAO,EACL,MAAM,EAEN,iBAAiB,EACjB,yBAAyB,EAEzB,kBAAkB,EAClB,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,eAAe,EAEf,wBAAwB,EACxB,KAAK,EACL,SAAS,EACT,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EACL,oBAAoB,EAGpB,yBAAyB,EAEzB,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAmB,MAAM,oCAAoC,CAAC;AAEzH,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAInF,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAkB,MAAM,iDAAiD,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAiBnE,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,sBAA4D;IAiEnG,YACE,QAAkB,EAClB,KAAoC,EAC1B,cAA8B,EAC9B,iBAAoC,EACpC,qBAA4C,EAC5C,EAAqB;QAE/B,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QALb,mBAAc,GAAd,cAAc,CAAgB;QAC9B,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,OAAE,GAAF,EAAE,CAAmB;QArEzB,gBAAW,GAAG,IAAI,OAAO,EAAQ,CAAC;QAEvB,kBAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACnD,cAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC3C,aAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzC,gBAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC/C,sBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAE9E,oBAAe,GAAG,iBAAiB,CAAC;QACpC,2BAAsB,GAAG,yBAAyB,CAAC;QACnD,kBAAa,GAAkB,IAAI,CAAC,CAAC,YAAY;QAGjD,WAAM,GAAG,IAAI,eAAe,CAAS,wBAAwB,CAAC,CAAC;QAG/D,aAAQ,GAAG,IAAI,eAAe,CAAqB,SAAS,CAAC,CAAC;QAE9D,qBAAgB,GAAG,KAAK,CAAC;QACzB,YAAO,GAAG,KAAK,CAAC;QAGhB,wBAAmB,GAAG,IAAI,CAAC;QAC3B,cAAS,GAAG,IAAI,CAAC;QAER,aAAQ,GAAG,IAAI,CAAC;QAChB,aAAQ,GAAG,KAAK,CAAC;QACjB,gBAAW,GAAG,IAAI,CAAC;QACnB,eAAU,GAAG,IAAI,CAAC;QAClB,uBAAkB,GAAG,IAAI,CAAC;QA4CjC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,eAAe,CAAgB,EAAE,EAAE,aAAa,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;IAEhC,CAAC;IA1CD,IAAc,YAAY,CAAC,KAAa;QACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IACD,IAAc,YAAY;;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,KAAI,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAK,CAAA,CAAC;IAChE,CAAC;IAED,IAAc,OAAO,CAAC,KAAc;QAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IACD,IAAc,OAAO;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IACD,IAAc,gBAAgB,CAAC,KAAc;QAC3C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IACD,IAAc,gBAAgB;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY;aACvC,IAAI;QACH,oBAAoB;QACpB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAChC,CAAC;IACN,CAAC;IAmBD,QAAQ;;QAEN,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEjB,oEAAoE;QACpE,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;YAC/B,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CACnE,CAAC;SACH;QAED,IAAI,CAAC,oBAAoB,CACvB,KAAK,CACH,IAAI,CAAC,SAAS,EACd,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,UAAU,KAAI,KAAK,EAC9B,CAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,IAAI,KAAI,KAAK,CAC9B;aACA,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,YAAY,CAAC,GAAG,CAAC,CAAC,uDAAuD;SAC1E;aACA,SAAS,CAAC,GAAG,EAAE;YACd,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,kBAAkB;YAChD,2BAA2B;YAC3B,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,gCAAgC;gBAChC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE,IAAI,CAAC,SAAS,CAAC,EAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,2CAA2C,EAAC,CAAC,CAAC;gBAC5H,OAAO;aACR;YAED,mCAAmC;YACnC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;gBAChE,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;aAC9B;YAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;gBAC3E,OAAO;aACR;YAED,YAAY;YACZ,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC,CAAC;QAEN,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY;aAC5D,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAC1C,CAAC;QAEJ,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAiB;YACrG,SAAS,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC;YAClD,sBAAsB,EAAE;gBACtB,+CAA+C;gBAC/C,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,CAAC,SAAS,EAAE,qBAAqB,CAAC,eAAe;gBAClG,yDAAyD;gBACzD,qBAAqB,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,OAAO;aACvE;SACF,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAE3B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;aACxF,IAAI,CACH,GAAG,CAAC,CAAC,EAAC,YAAY,EAAE,QAAQ,EAAC,EAAE,EAAE,CAAC,YAAY,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,IAAI,IAAI,CAAC,CAChH,CAAC,CAAC;QAEL,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM;aAC1C,IAAI,CACH,MAAM,CAAC,QAAQ,CAAC,EAChB,GAAG,CAAC,sBAAsB,CAAC,SAAS,CAAC,CACtC,CAAC,CAAC;QAEL,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;aAClE,IAAI,CACH,GAAG,CAAC,OAAO,CAAC,EAAE,CAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,oBAAoB,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,KAAI,KAAK,CAAC,CAC9F,CAAC,CAAC;QAEL,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACnC,IAAI,CAAC,uBAAuB,EAAE,CAAC;SAChC;aACI;YACH,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;IACH,CAAC;IAED,WAAW;QACT,KAAK,CAAC,WAAW,EAAE,CAAC;QAEpB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAEe,uBAAuB;;;;;YACrC,MAAM,KAAK,GAAG,MAAM,OAAM,uBAAuB,WAAE,CAAC;YACpD,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;YAExB,+BAA+B;YAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACxC,CAAC;KAAA;IAEK,UAAU,CAAC,IAAsB;;;;;YAErC,IAAI;gBACF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBAEjB,kBAAkB;gBAClB,OAAM,gBAAgB,YAAC,IAAI,CAAC,OAAO,EAAE;gBAErC,6BAA6B;gBAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;oBACvC,mBAAmB;qBAClB,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;gBAEzD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa;qBACvC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;oBACjC,YAAY;qBACX,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC;oBAC1C,qBAAqB;qBACpB,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;gBAEvB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,4CAA4C;gBAE9E,cAAc;gBACd,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAElD,eAAe;gBACf,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;gBAEzB,iCAAiC;gBACjC,0DAA0D;gBAE1D,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;aAC5C;YACD,OAAM,GAAG,EAAE;gBACT,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;aACrD;oBACO;gBACN,IAAI,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;gBACxC,IAAI,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC3C,IAAI,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC1C,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;gBAClC,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;QACH,CAAC;KAAA;IAEK,OAAO,CAAC,IAAoB,EAAE,IAAgF;;;;;YAElH,MAAM,OAAO,GAAG,MAAM,OAAM,OAAO,YAAC,IAAI,kCAAM,IAAI,KAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,IAAE,CAAC;YAEjG,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,kCAAkC;gBAE3D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;gBAExE,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;gBAEnB,yBAAyB;gBACzB,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE;oBACnE,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;iBACnC;gBAED,gBAAgB;gBAChB,IAAI,CAAC,YAAY,EAAE,CAAC;gBAEpB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;oBAErC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACnB,IAAI,CAAC,aAAa,EAAE,CAAC;oBAErB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;iBACvB;aACF;YAED,OAAO,OAAO,CAAC;QAEjB,CAAC;KAAA;IAEK,iBAAiB,CAAC,IAAoB,EAAE,YAAoB,EAAE,IAAI,GAAG,EAAC,SAAS,EAAE,IAAI,EAAC;;YAE1F,aAAa;YACb,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;YAE7C,eAAe;YACf,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,eAAe,CAAC,YAAY,CAAC,EAAE;gBAChE,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;oBAC/B,yBAAyB,CAAC,UAAU,CAAC;wBACnC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS;wBACtC,IAAI,EAAE,SAAS;wBACf,QAAQ,EAAE,GAAG;wBACb,KAAK,EAAE,YAAY;wBACnB,MAAM,EAAE,IAAI,CAAC,OAAO;qBACrB,CAAC;oBACF,yBAAyB,CAAC,UAAU,CAAC,EAAC,QAAQ,EAAE,GAAG,EAAC,CAAC;iBACtD,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;aACxB;YAED,sBAAsB;YACtB,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAEnC,eAAe;YACf,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;gBAErC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,aAAa,EAAE,CAAC;gBAErB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;aACvB;QACH,CAAC;KAAA;IAED,YAAY,CAAC,SAAiB,EAAE,IAA4D;QAC1F,IAAI,mBACF,SAAS,EAAE,CAAC,IAAI,CAAC,OAAO,IACnB,IAAI,CACV,CAAC;QAEF,2BAA2B;QAC3B,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QAEzG,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAEpC,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,qBAAqB,EAAE,CAAC;SAC9B;IACH,CAAC;IAEK,cAAc,CAAC,MAAwB,EAAE,IAA8B;;;;;YAE3E,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAEvC,mDAAmD;YACnD,IAAI,YAAoB,CAAC;YACzB,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gBACxD,uBAAuB;gBACvB,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,QAAQ,KAAK,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;oBAClG,SAAS,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;oBAC9B,iBAAiB;oBACjB,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;oBAExB,WAAW;oBACX,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;iBAChC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC,CAAC,CAAC;YAEH,sBAAsB;YACtB,IAAI,eAAe,CAAC,YAAY,CAAC,EAAE;gBACjC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;aACpC;YAED,mBAAmB;YACnB,MAAM,OAAM,cAAc,YAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC;KAAA;IAED,qBAAqB;QACnB,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAC5C,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;IACnD,CAAC;IAEK,sBAAsB,CAAC,KAAW;;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa;iBAC/B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACd,IAAI,EAAE,MAAM,CAAC,UAAU;gBACvB,KAAK,EAAE,MAAM,CAAC,IAAI;gBAClB,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aACjE,CAAC,CAAC,CAAC;YAER,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBACxC,SAAS,EAAE,2BAA2B;gBACtC,cAAc,EAAE,EAAC,OAAO,EAAC;aAC1B,CAAC,CAAC;YAEH,aAAa;YACb,KAAK,CAAC,YAAY,EAAE;iBACjB,IAAI,CAAC,GAAG,CAAC,EAAE;gBACV,IAAI,CAAC,GAAG;oBAAE,OAAO,CAAC,YAAY;gBAE9B,gBAAgB;gBAChB,IAAI,CAAC,gBAAgB,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACxF,qBAAqB;qBACpB,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;gBAEvB,wBAAwB;gBACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;YACzG,CAAC,CAAC,CAAC;YACL,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;KAAA;IAED,gBAAgB,CAAC,KAAiB,EAAE,MAAwB,EAAE,KAAa;QACzE,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,CAAC,wBAAwB;QAEtD,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;YACtD,IAAI,EAAE,MAAM,CAAC,UAAU;YACvB,QAAQ,EAAE,0BAA0B;YACpC,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,EAAE;YACD,WAAW,EAAE,KAAK,CAAC,OAAO;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,UAAU;YAAE,OAAO;QAExB,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;QAC5F,IAAI,kBAAkB,EAAE;YACtB,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;SAClC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YAClB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YAEtB,IAAI,kBAAkB,EAAE;gBACtB,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;aAC1D;SACF;IACH,CAAC;IAEK,gBAAgB,CAAC,KAAa;;YAClC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB;gBAAE,OAAO,CAAC,OAAO;YAEzD,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,EAAE,CAAC;YAEf,IAAI;gBACF,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;gBAE5E,iCAAiC;gBACjC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBACpD,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,YAAY,EAAE,CAAC;gBACtF,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBACtC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;oBACxD,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;iBACpC,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC;oBAC1C,KAAK;oBACL,IAAI;oBACJ,MAAM;oBACN,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;oBAC9B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;iBACzE,CAAC,CAAC;gBAEH,mBAAmB;gBACnB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAEnE,+BAA+B;gBAC/B,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;gBAElB,qCAAqC;gBACrC,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;gBAEpC,sBAAsB;gBACtB,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAC,CAAC,CAAC;aAGrG;YAAC,OAAO,GAAG,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnB,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;gBACvC,IAAI,CAAC,WAAW,EAAE,CAAC;aACpB;oBAAS;gBACR,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,EAAE,CAAC;aACf;QACH,CAAC;KAAA;IAEK,IAAI,CAAC,KAAa;;YACtB,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,OAAO;YAE/B,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,EAAE,CAAC;YAEf,IAAI;gBACF,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;gBAE5D,yBAAyB;gBACzB,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBACtC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;oBAClE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;iBAC5C,CAAC,CAAC;gBACL,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC;oBAC1C,KAAK;oBACL,IAAI;oBACJ,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;oBACxB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;oBAC1B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;iBACzE,CAAC,CAAC;gBAEH,kBAAkB;gBAClB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAEnE,+BAA+B;gBAC/B,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;gBAElB,2BAA2B;gBAC3B,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;gBAEpC,sBAAsB;gBACtB,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAC,CAAC,CAAC;aACrG;YAAC,OAAO,GAAG,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnB,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;gBACvC,IAAI,CAAC,WAAW,EAAE,CAAC;aACpB;oBAAS;gBACR,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,EAAE,CAAC;aACf;QAGH,CAAC;KAAA;IAEK,MAAM,CAAC,KAAa;;YACxB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,OAAO;YAE9C,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,oBAAoB,CAAC,OAAO,EAAE;gBACvD,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;gBAC5E,OAAO;aACR;YAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,CAAC,OAAO;gBAAE,OAAO,CAAC,iBAAiB;YAEvC,+BAA+B;YAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,OAAO,EAAE,CAAC;YAEf,IAAI;gBACF,MAAM,OAAO,GAAG,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACnE,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAE1C,4BAA4B;gBAC5B,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;gBAElB,gCAAgC;gBAChC,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACpD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;oBACzB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAC,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAC,CAAC,CAAC;iBACnG;aACF;YACD,OAAO,GAAG,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnB,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;gBACvC,IAAI,CAAC,WAAW,EAAE,CAAC;aACpB;oBACO;gBACN,IAAI,CAAC,YAAY,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;gBACtC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;QAEH,CAAC;KAAA;IAEK,OAAO,CAAC,KAAa;;;YACzB,IAAI,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,SAAS,MAAK,IAAI;gBAAE,OAAO,CAAC,OAAO;YAElD,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,CAAC,eAAe,EAAE,CAAC;aACzB;YAED,OAAO,UAAU,CAAC,GAAG,EAAE;YACrB,eAAe;YACd,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,EAAE,KAAK,CAAC,EACzC;gBACE,kFAAkF;gBAClF,WAAW,kBACT,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAC5B,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,IACnB,IAAI,CAAC,sBAAsB,EAAE,CACjC;aACF,CAAC,EACJ,GAAG,CAAC,CAAC,CAAC,4CAA4C;;KACrD;IAED,WAAW,CAAC,IAAqB,EAAE,KAAa;QAC9C,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QAEzB,IAAI,KAAK,EAAE;YACT,6BAA6B;YAC7B,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,CAAC,wBAAwB,EAAE,CAAC;SAClC;QAED,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,iCAAiC;QAEpD,OAAO,CAAC,KAAK,CAAC,uCAAuC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAEnE,OAAO,UAAU,CAAC,GAAG,EAAE;QACrB,4BAA4B;QAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EACzD,GAAG,CAAC,CAAC;IACT,CAAC;IAED,wBAAwB,CAAC,KAAa;QACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IACpC,CAAC;IAEK,WAAW,CAAC,KAAa;;YAE7B,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,wCAAwC;gBACxC,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;aAChF;iBACI;gBACH,mBAAmB;gBACnB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;aAC3B;YAED,eAAe;YACf,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;KAAA;IAED,SAAS,CAAC,KAAwB;QAChC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE3B,WAAW;QACX,UAAU,CAAC,GAAS,EAAE;YACpB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEtB,+BAA+B;YAC/B,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,KAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC1C,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;aACzB;YAED,yBAAyB;YACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC,CAAA,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;IAID,4BAA4B;IAE5B,yBAAyB;QACvB,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACrD,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEK,iBAAiB,CAAC,IAAqB,EAAE,IAAI,GAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE;;;;;YAC3G,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO,CAAC,uCAAuC;YAElE,OAAO,OAAM,iBAAiB,YAAC,IAAI,EAAE,IAAI,EAAE;QAC7C,CAAC;KAAA;IAES,YAAY;QACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAC,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;IACvD,CAAC;IAES,aAAa;QACrB,MAAM,MAAM,GAAyB;YACnC,SAAS,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC;SACnD,CAAC;QAEF,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC;IAES,QAAQ,CAAC,EAAU,EAAE,IAA+B;QAC5D,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACnD,CAAC;IAEe,QAAQ;;;YAEtB,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,KAAK,CAAA;gBAAE,OAAO,CAAC,OAAO;YAEtC,eAAe;YACf,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAE3F,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAClC,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,EAAE,CAAC;YAElB,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW;iBACxC,SAAS,CAAC,GAAG,EAAE;;gBACd,IAAI,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,KAAK,MAAK,SAAS,EAAE;oBAClC,OAAO,CAAC,KAAK,CAAC,8BAA8B,SAAS,cAAc,CAAC,CAAC;oBACrE,SAAS,GAAG,IAAI,CAAC;iBAClB;YACH,CAAC,CAAC,CAAC;YAEL,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,YAAY,EAAE,CAAC;YAEpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,8BAA8B,SAAS,YAAY,MAAM,CAAC,SAAS,oBAAoB,IAAI,CAAC,aAAa,MAAM,CAAC,CAAC;YAE9H,IAAI;gBAEF,YAAY;gBACZ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAChD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAC1E,CAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,QAAQ,KAAI,iBAAiB,EAC7C,MAAA,IAAI,CAAC,IAAI,0CAAE,MAAM,EACjB,MAAA,IAAI,CAAC,IAAI,0CAAE,SAAS,EACpB,MAAM,EACN,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CACtC,CAAC;gBAEF,IAAI,SAAS;oBAAE,OAAO,CAAC,oBAAoB;gBAE3C,OAAO,CAAC,IAAI,CAAC,8BAA8B,SAAS,YAAY,MAAM,CAAC,SAAS,aAAa,IAAI,CAAC,GAAG,EAAE,GAAC,GAAG,IAAI,CAAC,CAAC;gBAEjH,kBAAkB;gBAClB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aAE7B;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,CAAC,SAAS,EAAE;oBACd,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACnB,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;oBACvC,IAAI,CAAC,WAAW,EAAE,CAAC;iBACpB;aACF;oBACO;gBACN,IAAI,CAAC,SAAS,EAAE;oBACd,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,IAAI,CAAC,MAAM,EAAE,CAAC;iBACf;gBAED,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,WAAW,EAAE,CAAC;aACnC;;KACF;IAES,UAAU,CAAC,IAAS;QAC5B,OAAO,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAES,QAAQ,CAAC,EAAkB,EAAE,EAAkB;QACvD,OAAO,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC;IAES,qBAAqB,CAAC,KAAa;QAC3C,OAAO,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACnF,CAAC;IAES,uBAAuB,CAAC,WAAmB,EAAE,KAAc;;QACnE,MAAM,QAAQ,GAAG,KAAK,CAAC,uBAAuB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAEnE,MAAM,YAAY,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAC1D,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC,SAAS,KAAK,KAAK,CAAC;eACtC,SAAS,CAAC,QAAQ,KAAK,GAAG;eAC1B,SAAS,CAAC,IAAI,KAAK,SAAS;eAC5B,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACvC,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;YACvB,MAAM,YAAY,GAAG,MAAA,QAAQ,CAAC,YAAY,CAAC,0CAAE,KAAK,CAAC;YACnD,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAEnC,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;SACtC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAES,eAAe,CAAC,KAAc;QACtC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED,0BAA0B;IAEZ,sBAAsB,CAAC,MAAc;;YACjD,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YAEzB,gCAAgC;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAI,eAAe,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC,EAAE;gBACnC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;aACxB;YAED,MAAM,UAAU,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,yBAAyB,CAAC;YAC1G,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,GAAG,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;YAElG,OAAO,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACtE,CAAC;KAAA;IAEa,WAAW;;YACvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;gBAC3C,OAAO;aACR;YAED,MAAM,WAAW,GAAG,uBAAuB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YAC9E,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,CAAC;YACvE,MAAM,WAAW,GAAG,CAAC,YAAY,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,UAAU,YAAY,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;YAChG,IAAI,YAAY,CAAC,WAAW,CAAC,EAAE;gBAC7B,OAAO,CAAC,IAAI,CAAC,qBAAqB,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC;aAC1D;YAED,sCAAsC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAI,eAAe,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC,EAAE;gBACnC,MAAM,QAAQ,GAAG,qBAAqB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC;gBACrF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;gBACtE,IAAI,KAAK,KAAK,QAAQ,EAAE;oBACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC;oBACtC,OAAO;iBACR;aACF;YAED,iEAAiE;YACjE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;KAAA;IAGS,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;IAEe,cAAc;;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB;gBAAE,OAAO,CAAC,OAAO;YAEvD,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAiB,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;YAC3F,MAAM,UAAU,GAAG,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACrC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,EAAE;gBAC3E,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;KAAA;IAKS,6BAA6B,CAAC,YAAoB;QAC1D,IAAI,IAAI,CAAC,4BAA4B,KAAK,YAAY,EAAE;YACtD,IAAI,CAAC,4BAA4B,GAAG,YAAY,CAAC;YACjD,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;SACvG;QAED,OAAO,IAAI,CAAC,2BAA2B,CAAC;IAC1C,CAAC;CACF,CAAA;AAlxBC;IAAC,KAAK,EAAE;;qDAAiB;AACzB;IAAC,KAAK,EAAE;;qDAAkB;AAC1B;IAAC,KAAK,EAAE;;wDAAoB;AAC5B;IAAC,KAAK,EAAE;;uDAAmB;AAC3B;IAAC,KAAK,EAAE;;+DAA2B;AAEnC;IAAC,SAAS,CAAC,QAAQ,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC;8BAAQ,OAAO;kDAAC;AACpD;IAAC,SAAS,CAAC,YAAY,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC;8BAAY,YAAY;sDAAC;AACjE;IAAC,SAAS,CAAC,OAAO,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC;8BAAO,OAAO;iDAAC;AAClD;IAAC,SAAS,CAAC,iBAAiB,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC;8BAAuB,iBAAiB;iEAAC;AApC3E,mBAAmB;IAP/B,SAAS,CAAC;QACT,QAAQ,EAAE,2BAA2B;QACrC,WAAW,EAAE,8BAA8B;QAC3C,SAAS,EAAE,CAAC,8BAA8B,CAAC;QAC3C,SAAS,EAAE,CAAC,OAAO,CAAC;QACpB,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAmEY,QAAQ;QACX,OAAO;QACY,cAAc;QACX,iBAAiB;QACb,qBAAqB;QACxC,iBAAiB;GAvEtB,mBAAmB,CA6yB/B;SA7yBY,mBAAmB"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/type/extraction-type.filter.js b/out-tsc/app/app/extraction/type/extraction-type.filter.js new file mode 100644 index 000000000..705d48e7a --- /dev/null +++ b/out-tsc/app/app/extraction/type/extraction-type.filter.js @@ -0,0 +1,62 @@ +var ExtractionTypeFilter_1; +import { __decorate } from "tslib"; +import { EntityClass, isNotEmptyArray, isNotNil } from '@sumaris-net/ngx-components'; +import { BaseReferentialFilter } from '@app/referential/services/filter/referential.filter'; +import { ExtractionType } from '@app/extraction/type/extraction-type.model'; +let ExtractionTypeFilter = ExtractionTypeFilter_1 = class ExtractionTypeFilter extends BaseReferentialFilter { + constructor() { + super(...arguments); + this.category = null; + this.format = null; + this.formats = null; + this.version = null; + this.isSpatial = null; + } + static fromType(source) { + source = ExtractionType.fromObject(source); + const target = ExtractionTypeFilter_1.fromObject(source.asObject({ keepTypename: false })); + return target; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.isSpatial = source.isSpatial; + this.category = source.category; + this.format = source.format; + this.formats = source.formats; + this.version = source.version; + } + buildFilter() { + const filterFns = super.buildFilter(); + // Filter by spatial + if (isNotNil(this.isSpatial)) { + filterFns.push(entity => this.isSpatial === entity.isSpatial); + } + // Filter by category + if (isNotNil(this.category)) { + filterFns.push(entity => this.category === entity.category); + } + // Filter by label + if (isNotNil(this.label)) { + filterFns.push(entity => this.label === entity.label); + } + // Filter by format + if (isNotNil(this.format)) { + filterFns.push(entity => this.format === entity.format); + } + // Filter by formats + else if (isNotEmptyArray(this.formats)) { + const formats = this.formats; + filterFns.push(entity => formats.includes(entity.format)); + } + // Filter by version + if (isNotNil(this.version)) { + filterFns.push(entity => this.version === entity.version); + } + return filterFns; + } +}; +ExtractionTypeFilter = ExtractionTypeFilter_1 = __decorate([ + EntityClass({ typename: 'ExtractionTypeFilterVO' }) +], ExtractionTypeFilter); +export { ExtractionTypeFilter }; +//# sourceMappingURL=extraction-type.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/type/extraction-type.filter.js.map b/out-tsc/app/app/extraction/type/extraction-type.filter.js.map new file mode 100644 index 000000000..70a5cbfe6 --- /dev/null +++ b/out-tsc/app/app/extraction/type/extraction-type.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extraction-type.filter.js","sourceRoot":"","sources":["../../../../../src/app/extraction/type/extraction-type.filter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/type/extraction-type.model.js b/out-tsc/app/app/extraction/type/extraction-type.model.js new file mode 100644 index 000000000..f1fd3a4fb --- /dev/null +++ b/out-tsc/app/app/extraction/type/extraction-type.model.js @@ -0,0 +1,282 @@ +/* -- Extraction -- */ +var ExtractionType_1, ExtractionFilterCriterion_1; +import { __decorate, __metadata } from "tslib"; +import { BaseReferential, capitalizeFirstLetter, collectByProperty, Department, Entity, EntityClass, EntityFilter, equals, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, Person, toNumber, trimEmptyToNull } from '@sumaris-net/ngx-components'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +export const ExtractionCategories = { + PRODUCT: 'PRODUCT', + LIVE: 'LIVE', +}; +let ExtractionType = ExtractionType_1 = class ExtractionType extends BaseReferential { + constructor(__typename) { + super(__typename || ExtractionType_1.TYPENAME); + this.format = null; + this.version = null; + this.sheetNames = null; + this.isSpatial = null; + this.docUrl = null; + this.processingFrequencyId = null; + this.parent = null; + this.parentId = null; + this.recorderPerson = null; + this.recorderDepartment = null; + this.recorderDepartment = null; + } + static equals(o1, o2) { + return o1 && o2 ? o1.label === o2.label && o1.format === o2.format && o1.version === o2.version : o1 === o2; + } + static fromLiveLabel(label) { + return ExtractionType_1.fromObject({ label, category: 'LIVE' }); + } + fromObject(source, opts) { + var _a; + super.fromObject(source, opts); + this.format = source.format; + this.version = source.version; + this.sheetNames = source.sheetNames; + this.isSpatial = source.isSpatial; + this.docUrl = source.docUrl; + this.parent = source.parent && ExtractionType_1.fromObject(source.parent); + this.parentId = toNumber(source.parentId, (_a = source.parent) === null || _a === void 0 ? void 0 : _a.id); + this.processingFrequencyId = source.processingFrequencyId; + this.recorderPerson = source.recorderPerson && Person.fromObject(source.recorderPerson) || null; + this.recorderDepartment = source.recorderDepartment && Department.fromObject(source.recorderDepartment); + } + asObject(opts) { + var _a; + const target = super.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS)); + target.recorderPerson = this.recorderPerson && this.recorderPerson.asObject(opts) || undefined; + target.recorderDepartment = this.recorderDepartment && this.recorderDepartment.asObject(opts) || undefined; + if (opts === null || opts === void 0 ? void 0 : opts.minify) { + target.parentId = toNumber((_a = this.parent) === null || _a === void 0 ? void 0 : _a.id, this.parentId); + delete target.parent; + } + else { + target.parent = this.parent && this.parent.asObject(opts); + } + return target; + } + get category() { + return (isNil(this.id) || this.id < 0) && !this.isSpatial ? 'LIVE' : 'PRODUCT'; + } +}; +ExtractionType = ExtractionType_1 = __decorate([ + EntityClass({ typename: 'ExtractionTypeVO' }), + __metadata("design:paramtypes", [String]) +], ExtractionType); +export { ExtractionType }; +export class ExtractionResult { + static fromObject(source) { + if (!source || source instanceof ExtractionResult) + return source; + const target = new ExtractionResult(); + target.fromObject(source); + return target; + } + fromObject(source) { + this.total = source.total; + this.columns = source.columns && source.columns.map(ExtractionColumn.fromObject) || null; + this.rows = source.rows && source.rows.slice() || null; + return this; + } +} +let ExtractionColumn = class ExtractionColumn { + static isNumeric(source) { + return source && (source.type === 'integer' || source.type === 'double'); + } + fromObject(source) { + this.id = source.id; + this.creationDate = source.creationDate; + this.index = source.index; + this.label = source.label; + this.name = source.name; + this.columnName = source.columnName; + this.type = source.type; + this.description = source.description; + this.rankOrder = source.rankOrder; + this.values = source.values && source.values.slice(); + return this; + } +}; +ExtractionColumn = __decorate([ + EntityClass({ typename: 'ExtractionColumnVO' }) +], ExtractionColumn); +export { ExtractionColumn }; +export class ExtractionRow extends Array { + constructor(...items) { + super(...items); + } +} +let ExtractionFilter = class ExtractionFilter extends EntityFilter { + fromObject(source) { + super.fromObject(source); + this.searchText = source.searchText; + this.criteria = source.criteria && source.criteria.map(ExtractionFilterCriterion.fromObject); + this.sheetName = source.sheetName; + this.preview = source.preview; + this.meta = source.meta; + return this; + } + asObject(opts) { + const target = super.asObject(opts); + target.criteria = this.criteria && this.criteria + // Remove empty criterion + .filter(criterion => isNotNil(criterion.name) && ExtractionFilterCriterion.isNotEmpty(criterion)) + // Serialize to object + .map(criterion => criterion.asObject && criterion.asObject(opts) || criterion) || undefined; + return target; + } +}; +ExtractionFilter = __decorate([ + EntityClass({ typename: 'ExtractionFilterVO' }) +], ExtractionFilter); +export { ExtractionFilter }; +export const CRITERION_OPERATOR_LIST = Object.freeze([ + { symbol: '=' }, + { symbol: '!=' }, + { symbol: '>' }, + { symbol: '>=' }, + { symbol: '<' }, + { symbol: '<=' }, + { symbol: 'BETWEEN', name: 'EXTRACTION.FILTER.BETWEEN' }, + { symbol: 'NULL', name: 'EXTRACTION.FILTER.NULL' }, + { symbol: 'NOT NULL', name: 'EXTRACTION.FILTER.NOT_NULL' } +]); +let ExtractionFilterCriterion = ExtractionFilterCriterion_1 = class ExtractionFilterCriterion extends Entity { + constructor() { + super(ExtractionFilterCriterion_1.TYPENAME); + this.hidden = false; + } + static isNotEmpty(criterion) { + return criterion && (isNotNilOrBlank(criterion.value) + || isNotEmptyArray(criterion.values) + || criterion.operator === 'NULL' + || criterion.operator === 'NOT NULL'); + } + static isEmpty(criterion) { + return !this.isNotEmpty(criterion); + } + static equals(c1, c2) { + return (c1 === c2) + || (isNil(c1) && isNil(c2)) + || (isNotNil(c1) + && c1.name === (c2 === null || c2 === void 0 ? void 0 : c2.name) + && c1.operator === (c2 === null || c2 === void 0 ? void 0 : c2.operator) + && c1.value === (c2 === null || c2 === void 0 ? void 0 : c2.value) + && equals(c1.values, c2 === null || c2 === void 0 ? void 0 : c2.values) + && c1.endValue === (c2 === null || c2 === void 0 ? void 0 : c2.endValue) + && c1.sheetName === (c2 === null || c2 === void 0 ? void 0 : c2.sheetName)); + } + fromObject(source) { + super.fromObject(source); + this.name = source.name; + this.operator = source.operator; + this.value = source.value; + this.values = source.values; + this.endValue = source.endValue; + this.sheetName = source.sheetName; + this.hidden = source.hidden || false; + return this; + } + asObject(opts) { + const target = super.asObject(opts); + // Pod serialization + if (opts === null || opts === void 0 ? void 0 : opts.minify) { + const isMulti = (typeof target.value === 'string' && target.value.indexOf(',') !== -1) + || isNotEmptyArray(target.values); + switch (target.operator) { + case '=': + case 'IN': + if (isMulti) { + target.operator = 'IN'; + target.values = (target.values || target.value.split(',')) + .map(trimEmptyToNull) + .filter(isNotNil); + delete target.value; + } + break; + case '!=': + if (isMulti) { + target.operator = 'NOT IN'; + target.values = (target.values || target.value.split(',')) + .map(trimEmptyToNull) + .filter(isNotNil); + delete target.value; + } + break; + case 'BETWEEN': + if (isNotNilOrBlank(target.endValue)) { + if (typeof target.value === 'string') { + target.values = [target.value.trim(), target.endValue.trim()]; + } + else { + target.values = [target.value, target.endValue]; + } + } + delete target.value; + break; + } + delete target.endValue; + delete target.hidden; + } + return target; + } +}; +ExtractionFilterCriterion = ExtractionFilterCriterion_1 = __decorate([ + EntityClass({ typename: 'ExtractionFilterCriterionVO' }), + __metadata("design:paramtypes", []) +], ExtractionFilterCriterion); +export { ExtractionFilterCriterion }; +export class ExtractionTypeUtils { + static computeI18nName(translate, type) { + if (isNil(type)) + return undefined; + if (type.name) + return type; // Skip if already has a name + // Get format + const format = type.format + // Parse label if not fetched + || type.label && type.label.split('-')[0].toUpperCase(); + let key = `EXTRACTION.FORMAT.${format}.TITLE`.toUpperCase(); + let name = translate.instant(key, type); + // No I18n translation + if (name === key) { + // Use name, or label (but replace underscore with space) + key = type.name || (format && format.replace(/[_-]+/g, ' ').toUpperCase()); + // First letter as upper case + name = capitalizeFirstLetter(key.toLowerCase()); + } + if (typeof type.clone === 'function') { + type = type.clone(); + } + type.name = name; + return type; + } + static minify(type) { + return { + id: type.id, + label: type.label, + format: type.format, + version: type.version + }; + } + static isProduct(type) { + return isNotNil(type.id) && type.id >= 0; + } +} +export class ExtractionTypeCategory { + static fromTypes(types) { + const typesByCategory = collectByProperty(types, 'category'); + // Add a spatial product category + if (typesByCategory['PRODUCT']) { + const spatialProduct = typesByCategory['PRODUCT'].filter(t => t.isSpatial && t.id >= 0 /*exclude live agg*/); + if (isNotEmptyArray(spatialProduct)) { + typesByCategory['PRODUCT'] = typesByCategory['PRODUCT'].filter(t => !t.isSpatial); + typesByCategory['SPATIAL_PRODUCT'] = spatialProduct; + } + } + return Object.getOwnPropertyNames(typesByCategory) + .map(category => ({ label: category, types: typesByCategory[category] })); + } +} +//# sourceMappingURL=extraction-type.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/type/extraction-type.model.js.map b/out-tsc/app/app/extraction/type/extraction-type.model.js.map new file mode 100644 index 000000000..aa24a6a5c --- /dev/null +++ b/out-tsc/app/app/extraction/type/extraction-type.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extraction-type.model.js","sourceRoot":"","sources":["../../../../../src/app/extraction/type/extraction-type.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/type/extraction-type.service.js b/out-tsc/app/app/extraction/type/extraction-type.service.js new file mode 100644 index 000000000..1b27a254f --- /dev/null +++ b/out-tsc/app/app/extraction/type/extraction-type.service.js @@ -0,0 +1,182 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { of } from 'rxjs'; +import { filter, map, mergeMap, switchMap, tap } from 'rxjs/operators'; +import { AccountService, BaseEntityService, GraphqlService, isNil, isNilOrBlank, isNotEmptyArray, PlatformService, propertyComparator, ReferentialUtils, StatusIds, } from '@sumaris-net/ngx-components'; +import { ExtractionType, ExtractionTypeUtils } from './extraction-type.model'; +import { ExtractionTypeFilter } from '@app/extraction/type/extraction-type.filter'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { TranslateService } from '@ngx-translate/core'; +import { intersectArrays } from '@app/shared/functions'; +import { DataCommonFragments } from "@app/trip/common/data.fragments"; +export const ExtractionTypeFragments = { + lightType: gql ` + fragment LightExtractionTypeFragment on ExtractionTypeVO { + id + label + name + format + version + updateDate + } + `, + type: gql ` + fragment ExtractionTypeFragment on ExtractionTypeVO { + id + label + name + format + version + description + docUrl + updateDate + comments + isSpatial + statusId + sheetNames + processingFrequencyId + recorderPerson { + ...LightPersonFragment + } + recorderDepartment { + ...LightDepartmentFragment + } + } + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + `, +}; +const Queries = { + loadAll: gql `query ExtractionTypes($filter: ExtractionTypeFilterVOInput) { + data: extractionTypes(filter: $filter) { + ...ExtractionTypeFragment + } + } + ${ExtractionTypeFragments.type}`, +}; +const fixWorkaroundDataFn = ({ data, total }) => { + // Workaround because saveAggregation() doest not add NEW extraction type correctly + data = (data || []).filter(e => { + if (isNil(e === null || e === void 0 ? void 0 : e.label)) { + console.warn('[extraction-service] FIXME: Invalid extraction type (no format)... bad cache insertion in saveAggregation() ?'); + return false; + } + return true; + }); + return { data, total }; +}; +let ExtractionTypeService = class ExtractionTypeService extends BaseEntityService { + constructor(graphql, platformService, accountService, programRefService, translate) { + super(graphql, platformService, ExtractionType, ExtractionTypeFilter, { + queries: Queries + }); + this.graphql = graphql; + this.platformService = platformService; + this.accountService = accountService; + this.programRefService = programRefService; + this.translate = translate; + } + loadAll(offset, size, sortBy, sortDirection, filter, opts) { + return super.loadAll(offset, size, sortBy, sortDirection, filter, Object.assign(Object.assign({}, opts), { withTotal: false // Always false (loadAllWithTotal query not defined yet) + })) + .then(fixWorkaroundDataFn); + } + existsByLabel(label, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (isNilOrBlank(label)) + return false; + const { data } = yield this.loadAll(0, 1, null, null, { + label + }, opts); + return ReferentialUtils.isNotEmpty(data && data[0]); + }); + } + /** + * Watch products + */ + watchAll(offset, size, sortBy, sortDirection, filter, options) { + return super.watchAll(offset, size, sortBy, sortDirection, filter, options) + .pipe(map(fixWorkaroundDataFn)); + } + insertIntoCache(cache, entity) { + if (!entity || isNil(entity.id)) + throw new Error('Extraction type (with an id) is required, to insert into the cache.'); + console.info('[extraction-type-service] Inserting into cache:', entity); + this.insertIntoMutableCachedQueries(cache, { + queries: this.getLoadQueries(), + data: entity + }); + } + updateCache(cache, entity) { + if (!entity || isNil(entity.id)) + throw new Error('Extraction type (with an id) is required, to update the cache.'); + console.info('[extraction-type-service] Updating cache:', entity); + // Remove, then insert, from extraction types + const exists = this.removeFromMutableCachedQueriesByIds(cache, { + queries: this.getLoadQueries(), + ids: entity.id + }) > 0; + if (exists) { + this.insertIntoMutableCachedQueries(cache, { + queries: this.getLoadQueries(), + data: entity + }); + } + } + /** + * Watch extraction types from given program labels + * + * @protected + */ + watchAllByProgramLabels(programLabels, filter, opts) { + return of(programLabels) + .pipe(mergeMap(labels => this.programRefService.loadAllByLabels(labels)), switchMap(programs => this.watchAllByPrograms(programs, filter, opts))); + } + /** + * Watch extraction types from given programs + * + * @protected + */ + watchAllByPrograms(programs, typeFilter, opts) { + // @ts-ignore + return of(programs) + .pipe(filter(isNotEmptyArray), + // Get extraction formats of selected programs (apply an intersection) + map(values => { + const formatArrays = values.map(program => { + const programFormats = program.getPropertyAsStrings(ProgramProperties.EXTRACTION_FORMATS); + if (isNotEmptyArray(programFormats)) + return programFormats; + // Not configured in program options: return all formats + return ProgramProperties.EXTRACTION_FORMATS.values + .map(item => { var _a; return (_a = item.key) === null || _a === void 0 ? void 0 : _a.toUpperCase(); }) // Extract the format (from option's key) + .filter(format => format !== 'NA'); // Skip the 'NA' format + }); + if (formatArrays.length === 1) + return formatArrays[0]; + return intersectArrays(formatArrays); + }), + // DEBUG + tap(formats => console.debug(`[extraction-type-service] Watching types, filtered by formats [${formats.join(', ')}] ...`)), + // Load extraction types, from program's formats + switchMap(formats => this.watchAll(0, 100, null, null, Object.assign(Object.assign({ statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], isSpatial: false, category: 'LIVE' }, typeFilter), { formats }), opts)), + // Translate types, and sort + map(({ data }) => + // Compute i18n name + data.map(t => ExtractionTypeUtils.computeI18nName(this.translate, t)) + // Then sort by name + .sort(propertyComparator('name')))); + } +}; +ExtractionTypeService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [GraphqlService, + PlatformService, + AccountService, + ProgramRefService, + TranslateService]) +], ExtractionTypeService); +export { ExtractionTypeService }; +//# sourceMappingURL=extraction-type.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/type/extraction-type.service.js.map b/out-tsc/app/app/extraction/type/extraction-type.service.js.map new file mode 100644 index 000000000..6c14276be --- /dev/null +++ b/out-tsc/app/app/extraction/type/extraction-type.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extraction-type.service.js","sourceRoot":"","sources":["../../../../../src/app/extraction/type/extraction-type.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/extraction/type/select-extraction-type.modal.js b/out-tsc/app/app/extraction/type/select-extraction-type.modal.js new file mode 100644 index 000000000..c49bf62eb --- /dev/null +++ b/out-tsc/app/app/extraction/type/select-extraction-type.modal.js @@ -0,0 +1,77 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core'; +import { ModalController } from '@ionic/angular'; +import { first, map } from 'rxjs/operators'; +import { TranslateService } from '@ngx-translate/core'; +import { propertyComparator } from '@sumaris-net/ngx-components'; +import { ExtractionTypeUtils } from '@app/extraction/type/extraction-type.model'; +import { ExtractionTypeFilter } from '@app/extraction/type/extraction-type.filter'; +import { ExtractionTypeService } from '@app/extraction/type/extraction-type.service'; +let SelectExtractionTypeModal = class SelectExtractionTypeModal { + constructor(viewCtrl, service, translate, cd) { + this.viewCtrl = viewCtrl; + this.service = service; + this.translate = translate; + this.cd = cd; + this.loading = true; + this.title = null; + this.helpText = null; + this.filter = null; + } + ngOnInit() { + // Load items + this.types$ = this.service.watchAll(0, 100, null, null, this.filter, {}) + .pipe(map(({ data }) => + // Compute i18n name + data.map(t => ExtractionTypeUtils.computeI18nName(this.translate, t)) + // Then sort by name + .sort(propertyComparator('name')))); + // Update loading indicator + this.types$.pipe(first()).subscribe((_) => this.markAsLoaded()); + } + selectType(type) { + this.close(type); + } + close(event) { + return __awaiter(this, void 0, void 0, function* () { + yield this.viewCtrl.dismiss(event); + }); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.viewCtrl.dismiss(); + }); + } + markForCheck() { + this.cd.markForCheck(); + } + markAsLoaded() { + this.loading = false; + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", String) +], SelectExtractionTypeModal.prototype, "title", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SelectExtractionTypeModal.prototype, "helpText", void 0); +__decorate([ + Input(), + __metadata("design:type", ExtractionTypeFilter) +], SelectExtractionTypeModal.prototype, "filter", void 0); +SelectExtractionTypeModal = __decorate([ + Component({ + selector: 'app-select-extraction-type-modal', + templateUrl: './select-extraction-type.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [ModalController, + ExtractionTypeService, + TranslateService, + ChangeDetectorRef]) +], SelectExtractionTypeModal); +export { SelectExtractionTypeModal }; +//# sourceMappingURL=select-extraction-type.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/extraction/type/select-extraction-type.modal.js.map b/out-tsc/app/app/extraction/type/select-extraction-type.modal.js.map new file mode 100644 index 000000000..429448bff --- /dev/null +++ b/out-tsc/app/app/extraction/type/select-extraction-type.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"select-extraction-type.modal.js","sourceRoot":"","sources":["../../../../../src/app/extraction/type/select-extraction-type.modal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,KAAK,EAAU,MAAM,eAAe,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAkB,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAEjG,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AAa9E,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IASpC,YACY,QAAyB,EACzB,OAA8B,EAC9B,SAA2B,EAC3B,EAAqB;QAHrB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,YAAO,GAAP,OAAO,CAAuB;QAC9B,cAAS,GAAT,SAAS,CAAkB;QAC3B,OAAE,GAAF,EAAE,CAAmB;QAXjC,YAAO,GAAG,IAAI,CAAC;QAGN,UAAK,GAAW,IAAI,CAAC;QACrB,aAAQ,GAAW,IAAI,CAAC;QACxB,WAAM,GAAyB,IAAI,CAAC;IAS7C,CAAC;IAED,QAAQ;QAEN,aAAa;QACb,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;aACrE,IAAI,CACH,GAAG,CAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE;QACb,oBAAoB;QACpB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACnE,oBAAoB;aACnB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CACpC,CACF,CAAC;QAEJ,2BAA2B;QAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,UAAU,CAAC,IAAuB;QAEhC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAEK,KAAK,CAAC,KAAW;;YAErB,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;KAAA;IAEK,MAAM;;YACV,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAChC,CAAC;KAAA;IAES,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;IAES,YAAY;QACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;CACF,CAAA;AApDC;IAAC,KAAK,EAAE;;wDAAsB;AAC9B;IAAC,KAAK,EAAE;;2DAAyB;AACjC;IAAC,KAAK,EAAE;8BAAS,oBAAoB;yDAAQ;AAPlC,yBAAyB;IALrC,SAAS,CAAC;QACT,QAAQ,EAAE,kCAAkC;QAC5C,WAAW,EAAE,qCAAqC;QAClD,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAWsB,eAAe;QAChB,qBAAqB;QACnB,gBAAgB;QACvB,iBAAiB;GAbtB,yBAAyB,CAyDrC;SAzDY,yBAAyB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/form/referential-editor.class.js b/out-tsc/app/app/referential/form/referential-editor.class.js new file mode 100644 index 000000000..1489d0909 --- /dev/null +++ b/out-tsc/app/app/referential/form/referential-editor.class.js @@ -0,0 +1,164 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Directive, Injector } from '@angular/core'; +import { UntypedFormGroup } from '@angular/forms'; +import { AccountService, AppEntityEditor, changeCaseToUnderscore, EntityUtils, firstNotNilPromise, isNil, isNotNil, ReferentialUtils, } from '@sumaris-net/ngx-components'; +import { ReferentialRefService } from '../services/referential-ref.service'; +import { environment } from '@environments/environment'; +import { ReferentialService } from '@app/referential/services/referential.service'; +import { BehaviorSubject } from 'rxjs'; +let AppReferentialEditor = class AppReferentialEditor extends AppEntityEditor { + constructor(injector, dataType, dataService, form, opts) { + super(injector, dataType, dataService, Object.assign({ i18nPrefix: (opts === null || opts === void 0 ? void 0 : opts.i18nPrefix) + || `REFERENTIAL.${changeCaseToUnderscore(opts.entityName).toUpperCase()}.` }, opts)); + this.injector = injector; + this.fieldDefinitions = {}; + this.$levels = new BehaviorSubject(undefined); + this.accountService = injector.get(AccountService); + this.referentialService = injector.get(ReferentialService); + this.referentialRefService = injector.get(ReferentialRefService); + this.mobile = this.settings.mobile; + this.entityName = opts.entityName; + this.form = form; + // default values + this.uniqueLabel = (opts === null || opts === void 0 ? void 0 : opts.uniqueLabel) === true; + this.defaultBackHref = `/referential/list?entity=${this.entityName}`; + this._logPrefix = this.entityName + ? `[${changeCaseToUnderscore(this.entityName).replace(/_/g, '-')}-page] ` + : '[referential-page] '; + this.debug = !environment.production; + this.withLevels = (opts === null || opts === void 0 ? void 0 : opts.withLevels) || false; + if (this.withLevels) { + this.loadLevels(); + } + } + ready(opts) { + const _super = Object.create(null, { + ready: { get: () => super.ready } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.ready.call(this, opts); + // Wait levels to be loaded + if (this.withLevels) + yield firstNotNilPromise(this.$levels); + }); + } + load(id, opts) { + return super.load(id, Object.assign({ entityName: this.entityName }, opts)); + } + listenChanges(id, opts) { + return super.listenChanges(id, Object.assign(Object.assign({}, opts), { entityName: this.entityName })); + } + enable() { + super.enable(); + if (this.uniqueLabel && !this.isNewData) { + this.form.get('label').disable(); + } + } + /* -- protected methods -- */ + registerFieldDefinition(opts) { + this.fieldDefinitions[opts.key] = opts; + } + setValue(data) { + if (!data) + return; // Skip + const json = data.asObject(); + // Load level as an object + if (this.withLevels && isNotNil(data.levelId) && typeof data.levelId === 'number') { + json.levelId = (this.$levels.value || []).find(l => l.id === data.levelId); + } + json.entityName = json.entityName || this.entityName; + this.form.patchValue(json, { emitEvent: false }); + this.markAsPristine(); + } + getValue() { + const _super = Object.create(null, { + getValue: { get: () => super.getValue } + }); + return __awaiter(this, void 0, void 0, function* () { + const data = yield _super.getValue.call(this); + // Re add label, because missing when field disable + if (this.uniqueLabel) { + data.label = this.form.get('label').value; + data.label = data.label && data.label.toUpperCase(); + } + // Transform level object into levelId + if (this.withLevels && isNotNil(data.levelId)) { + data.levelId = ReferentialUtils.isNotEmpty(data.levelId) ? data.levelId.id : data.levelId; + } + return data; + }); + } + computeTitle(data) { + // new data + if (!data || isNil(data.id)) { + return this.translate.get(this.i18nContext.prefix + 'NEW.TITLE').toPromise(); + } + // Existing data + return this.translate.get(this.i18nContext.prefix + 'EDIT.TITLE', data).toPromise(); + } + computePageHistory(title) { + const _super = Object.create(null, { + computePageHistory: { get: () => super.computePageHistory } + }); + return __awaiter(this, void 0, void 0, function* () { + return Object.assign(Object.assign({}, (yield _super.computePageHistory.call(this, title))), { title: `${this.data.label} - ${this.data.name}`, subtitle: `REFERENTIAL.ENTITY.${changeCaseToUnderscore(this.entityName).toUpperCase()}`, icon: 'list' }); + }); + } + getFirstInvalidTabIndex() { + if (this.form.invalid) + return 0; + return -1; + } + onNewEntity(data, options) { + const _super = Object.create(null, { + onNewEntity: { get: () => super.onNewEntity } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.onNewEntity.call(this, data, options); + // Check label is unique + if (this.uniqueLabel) { + this.form.get('label') + .setAsyncValidators((control) => __awaiter(this, void 0, void 0, function* () { + const label = control.enabled && control.value; + const filter = { + entityName: this.entityName, + excludedIds: isNotNil(this.data.id) ? [this.data.id] : undefined + }; + return label && (yield this.referentialService.existsByLabel(label, filter)) ? { unique: true } : null; + })); + } + this.markAsReady(); + }); + } + onEntityLoaded(data, options) { + const _super = Object.create(null, { + onEntityLoaded: { get: () => super.onEntityLoaded } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.onEntityLoaded.call(this, data, options); + this.markAsReady(); + }); + } + loadLevels() { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const levels = yield this.referentialRefService.loadLevels(this.entityName); + const sortAttributes = (_a = this.fieldDefinitions.level) === null || _a === void 0 ? void 0 : _a.autocomplete.attributes; + if (sortAttributes.length) { + levels.sort(EntityUtils.sortComparator('label', 'asc')); + } + this.$levels.next(levels); + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +AppReferentialEditor = __decorate([ + Directive() + // tslint:disable-next-line:directive-class-suffix + , + __metadata("design:paramtypes", [Injector, Function, Object, UntypedFormGroup, Object]) +], AppReferentialEditor); +export { AppReferentialEditor }; +//# sourceMappingURL=referential-editor.class.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/form/referential-editor.class.js.map b/out-tsc/app/app/referential/form/referential-editor.class.js.map new file mode 100644 index 000000000..c67b4c1d2 --- /dev/null +++ b/out-tsc/app/app/referential/form/referential-editor.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential-editor.class.js","sourceRoot":"","sources":["../../../../../src/app/referential/form/referential-editor.class.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAmB,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EACL,cAAc,EAEd,eAAe,EAEf,sBAAsB,EAEtB,WAAW,EACX,kBAAkB,EAKlB,KAAK,EACL,QAAQ,EAER,gBAAgB,GAEjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACnF,OAAO,EAAE,eAAe,EAAc,MAAM,MAAM,CAAC;AAU5C,IAAe,oBAAoB,GAAnC,MAAe,oBAKpB,SAAQ,eAAyB;IAgBjC,YACY,QAAkB,EAC5B,QAAqB,EACrB,WAAc,EACd,IAAsB,EACtB,IAAiC;QAEjC,KAAK,CAAC,QAAQ,EACZ,QAAQ,EACR,WAAW,kBAET,UAAU,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU;mBACvB,eAAe,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,GAAG,IACzE,IAAI,EAEV,CAAC;QAdQ,aAAQ,GAAR,QAAQ,CAAU;QAXrB,qBAAgB,GAA2B,EAAE,CAAC;QAG9C,YAAO,GAAG,IAAI,eAAe,CAAmB,SAAS,CAAC,CAAC;QAuBlE,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC3D,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAEjE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,iBAAiB;QACjB,IAAI,CAAC,WAAW,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,MAAK,IAAI,CAAC;QAC9C,IAAI,CAAC,eAAe,GAAG,4BAA4B,IAAI,CAAC,UAAU,EAAE,CAAC;QACrE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;YAC/B,CAAC,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS;YACzE,CAAC,CAAC,qBAAqB,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,KAAI,KAAK,CAAC;QAE5C,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;IACH,CAAC;IAEK,KAAK,CAAC,IAAqB;;;;;YAC/B,MAAM,OAAM,KAAK,YAAC,IAAI,CAAC,CAAC;YAExB,2BAA2B;YAC3B,IAAI,IAAI,CAAC,UAAU;gBAAE,MAAM,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9D,CAAC;KAAA;IAED,IAAI,CAAC,EAAO,EAAE,IAA+H;QAC3I,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,kBAAG,UAAU,EAAE,IAAI,CAAC,UAAU,IAAK,IAAI,EAAE,CAAC;IAChE,CAAC;IAED,aAAa,CAAC,EAAM,EAAE,IAAU;QAC9B,OAAO,KAAK,CAAC,aAAa,CAAC,EAAE,kCAAM,IAAI,KAAE,UAAU,EAAE,IAAI,CAAC,UAAU,IAAE,CAAC;IACzE,CAAC;IAED,MAAM;QACJ,KAAK,CAAC,MAAM,EAAE,CAAC;QAEf,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACvC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;SAClC;IACH,CAAC;IAED,6BAA6B;IAEnB,uBAAuB,CAAC,IAAyB;QACzD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACzC,CAAC;IAES,QAAQ,CAAC,IAAO;QACxB,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,OAAO;QAE1B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE7B,0BAA0B;QAC1B,IAAI,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;YACjF,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;SAC5E;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;QAErD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;QAE/C,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAEe,QAAQ;;;;;YACtB,MAAM,IAAI,GAAG,MAAM,OAAM,QAAQ,WAAE,CAAC;YAEpC,mDAAmD;YACnD,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;gBAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;aACrD;YAED,sCAAsC;YACtC,IAAI,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBAC7C,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,OAA0B,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;aAC/G;YAED,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAES,YAAY,CAAC,IAAO;QAC5B,WAAW;QACX,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,SAAS,EAAE,CAAC;SAC9E;QAED,gBAAgB;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,YAAY,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;IACtF,CAAC;IAEe,kBAAkB,CAAC,KAAa;;;;;YAC9C,uCACK,CAAC,MAAM,OAAM,kBAAkB,YAAC,KAAK,CAAC,CAAC,KAC1C,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAC/C,QAAQ,EAAE,sBAAsB,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,EAAE,EACvF,IAAI,EAAE,MAAM,IACZ;QACJ,CAAC;KAAA;IAES,uBAAuB;QAC/B,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC;QAChC,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAEe,WAAW,CAAC,IAAO,EAAE,OAAkC;;;;;YACrE,MAAM,OAAM,WAAW,YAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEvC,wBAAwB;YACxB,IAAI,IAAI,CAAC,WAAW,EAAE;gBACtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;qBACnB,kBAAkB,CAAC,CAAO,OAAwB,EAAE,EAAE;oBACrD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;oBAC/C,MAAM,MAAM,GAAG;wBACb,UAAU,EAAE,IAAI,CAAC,UAAU;wBAC3B,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAuB,CAAC,CAAC,CAAC,CAAC,SAAS;qBACtF,CAAC;oBACF,OAAO,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACvG,CAAC,CAAA,CAAC,CAAC;aACJ;YAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;KAAA;IAEe,cAAc,CAAC,IAAO,EAAE,OAAkC;;;;;YACxE,MAAM,OAAM,cAAc,YAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAE1C,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;KAAA;IAEK,UAAU;;;YACd,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAE5E,MAAM,cAAc,GAAG,MAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,0CAAE,YAAY,CAAC,UAAU,CAAC;YAC5E,IAAI,cAAc,CAAC,MAAM,EAAE;gBACzB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;aACzD;YACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;KAC3B;IAES,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;CACF,CAAA;AAxLqB,oBAAoB;IAFzC,SAAS,EAAE;IACZ,kDAAkD;;qCAuB1B,QAAQ,oBAGtB,gBAAgB;GAzBJ,oBAAoB,CAwLzC;SAxLqB,oBAAoB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/form/referential-form.module.js b/out-tsc/app/app/referential/form/referential-form.module.js new file mode 100644 index 000000000..4f1a5a263 --- /dev/null +++ b/out-tsc/app/app/referential/form/referential-form.module.js @@ -0,0 +1,32 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { ReferentialForm } from './referential.form'; +import { TranslateModule } from '@ngx-translate/core'; +import { TextMaskModule } from 'angular2-text-mask'; +import { CommonModule } from '@angular/common'; +import { AppCoreModule } from '@app/core/core.module'; +let AppReferentialFormModule = class AppReferentialFormModule { +}; +AppReferentialFormModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TextMaskModule, + TranslateModule.forChild(), + AppCoreModule, + ], + declarations: [ + // Pipes + // Components + ReferentialForm, + ], + exports: [ + TranslateModule, + // Pipes + // Components + ReferentialForm, + ], + }) +], AppReferentialFormModule); +export { AppReferentialFormModule }; +//# sourceMappingURL=referential-form.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/form/referential-form.module.js.map b/out-tsc/app/app/referential/form/referential-form.module.js.map new file mode 100644 index 000000000..84d138372 --- /dev/null +++ b/out-tsc/app/app/referential/form/referential-form.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential-form.module.js","sourceRoot":"","sources":["../../../../../src/app/referential/form/referential-form.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAyB/C,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;CACpC,CAAA;AADY,wBAAwB;IAvBpC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,cAAc;YACd,eAAe,CAAC,QAAQ,EAAE;YAE1B,aAAa;SACd;QACD,YAAY,EAAE;YACZ,QAAQ;YAER,aAAa;YACb,eAAe;SAChB;QACD,OAAO,EAAE;YACP,eAAe;YAEf,QAAQ;YAER,aAAa;YACb,eAAe;SAChB;KACF,CAAC;GACW,wBAAwB,CACpC;SADY,wBAAwB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/form/referential.form.js b/out-tsc/app/app/referential/form/referential.form.js new file mode 100644 index 000000000..0abcd68d5 --- /dev/null +++ b/out-tsc/app/app/referential/form/referential.form.js @@ -0,0 +1,88 @@ +import { __decorate, __metadata, __param } from "tslib"; +import { ReferentialValidatorService } from '../services/validator/referential.validator'; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input, Optional } from '@angular/core'; +import { AppForm, splitById, StatusList } from '@sumaris-net/ngx-components'; +import { ValidatorService } from '@e-is/ngx-material-table'; +import { FormGroupDirective } from '@angular/forms'; +let ReferentialForm = class ReferentialForm extends AppForm { + constructor(injector, validatorService, formGroupDir) { + super(injector, (formGroupDir === null || formGroupDir === void 0 ? void 0 : formGroupDir.form) || (validatorService === null || validatorService === void 0 ? void 0 : validatorService.getRowValidator())); + this.validatorService = validatorService; + this.formGroupDir = formGroupDir; + this._statusList = StatusList; + this.showError = true; + this.showDescription = true; + this.showComments = true; + this.cd = injector.get(ChangeDetectorRef); + } + set statusList(values) { + this._statusList = values; + // Fill statusById + this.statusById = splitById(values); + } + get statusList() { + return this._statusList; + } + ngOnInit() { + var _a, _b; + this.setForm(this.form || ((_a = this.formGroupDir) === null || _a === void 0 ? void 0 : _a.form) || ((_b = this.validatorService) === null || _b === void 0 ? void 0 : _b.getRowValidator())); + super.ngOnInit(); + // Fill statusById, if not set by input + if (this._statusList && !this.statusById) { + this.statusById = splitById(this._statusList); + } + } + setValue(data, opts) { + super.setValue(data, opts); + // Make sure to set entityName if set from Input() + const entityNameControl = this.form.get('entityName'); + if (entityNameControl && this.entityName && entityNameControl.value !== this.entityName) { + entityNameControl.setValue(this.entityName, opts); + } + } + markForCheck() { + var _a; + (_a = this.cd) === null || _a === void 0 ? void 0 : _a.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], ReferentialForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ReferentialForm.prototype, "showDescription", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ReferentialForm.prototype, "showComments", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ReferentialForm.prototype, "entityName", void 0); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], ReferentialForm.prototype, "statusList", null); +ReferentialForm = __decorate([ + Component({ + selector: 'app-referential-form', + templateUrl: './referential.form.html', + changeDetection: ChangeDetectionStrategy.OnPush, + providers: [ + { + provide: ValidatorService, + useExisting: ReferentialValidatorService + } + ] + }), + __param(1, Optional()), + __param(2, Optional()), + __metadata("design:paramtypes", [Injector, + ValidatorService, + FormGroupDirective]) +], ReferentialForm); +export { ReferentialForm }; +//# sourceMappingURL=referential.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/form/referential.form.js.map b/out-tsc/app/app/referential/form/referential.form.js.map new file mode 100644 index 000000000..b63ae14a1 --- /dev/null +++ b/out-tsc/app/app/referential/form/referential.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential.form.js","sourceRoot":"","sources":["../../../../../src/app/referential/form/referential.form.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAU,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzH,OAAO,EAAE,OAAO,EAAyC,SAAS,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACpH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAa7C,IAAM,eAAe,GAArB,MAAM,eAA8D,SAAQ,OAAU;IAuB3F,YACE,QAAkB,EACI,gBAAkC,EAClC,YAAgC;QAEtD,KAAK,CAAC,QAAQ,EAAC,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,IAAI,MAAI,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,eAAe,EAAE,CAAA,CAAC,CAAC;QAHpD,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,iBAAY,GAAZ,YAAY,CAAoB;QAtBhD,gBAAW,GAAG,UAAU,CAAC;QAExB,cAAS,GAAG,IAAI,CAAC;QACjB,oBAAe,GAAG,IAAI,CAAC;QACvB,iBAAY,GAAG,IAAI,CAAC;QAqB3B,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC5C,CAAC;IAnBD,IACI,UAAU,CAAC,MAAiB;QAC9B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;QAE1B,kBAAkB;QAClB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAwB,CAAC;IACvC,CAAC;IAWD,QAAQ;;QACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAI,MAAA,IAAI,CAAC,YAAY,0CAAE,IAAI,CAAA,KAAI,MAAA,IAAI,CAAC,gBAAgB,0CAAE,eAAe,EAAE,CAAA,CAAC,CAAC;QAE/F,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEjB,uCAAuC;QACvC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACxC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC/C;IACH,CAAC;IAED,QAAQ,CAAC,IAAO,EAAE,IAAkD;QAClE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE3B,kDAAkD;QAClD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACtD,IAAI,iBAAiB,IAAI,IAAI,CAAC,UAAU,IAAI,iBAAiB,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,EAAE;YACvF,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SACnD;IACH,CAAC;IAES,YAAY;;QACpB,MAAA,IAAI,CAAC,EAAE,0CAAE,YAAY,EAAE,CAAC;IAC1B,CAAC;CACF,CAAA;AAlDC;IAAC,KAAK,EAAE;;kDAAkB;AAC1B;IAAC,KAAK,EAAE;;wDAAwB;AAChC;IAAC,KAAK,EAAE;;qDAAqB;AAC7B;IAAC,KAAK,EAAE;;mDAAY;AAEpB;IAAC,KAAK,EAAE;;;iDAMP;AAjBU,eAAe;IAX3B,SAAS,CAAC;QACT,QAAQ,EAAE,sBAAsB;QAChC,WAAW,EAAE,yBAAyB;QACtC,eAAe,EAAE,uBAAuB,CAAC,MAAM;QAC/C,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,gBAAgB;gBACzB,WAAW,EAAE,2BAA2B;aACzC;SACF;KACF,CAAC;IA0BG,WAAA,QAAQ,EAAE,CAAA;IACV,WAAA,QAAQ,EAAE,CAAA;qCAFD,QAAQ;QACsB,gBAAgB;QACpB,kBAAkB;GA1B7C,eAAe,CAwD3B;SAxDY,eAAe"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/location/location.utils.js b/out-tsc/app/app/referential/location/location.utils.js new file mode 100644 index 000000000..478a60383 --- /dev/null +++ b/out-tsc/app/app/referential/location/location.utils.js @@ -0,0 +1,77 @@ +import { isNil } from '@sumaris-net/ngx-components'; +import { Geometries } from '@app/shared/geometries.utils'; +export class LocationUtils { + /** + * Return statistical rectangle (ICES or GFCM) from longitude/latitude (in decimal degrees - WG84). + * + * @param lat a latitude (in decimal degrees - WG84) + * @param lon a longitude (in decimal degrees - WG84) + * @return A label corresponding to a statistical rectangle, or undefined if no statistical rectangle exists for this position + */ + static getRectangleLabelByLatLong(lat, lon) { + if (isNil(lat) || isNil(lon)) + return undefined; // Skip + let result; + // If position inside "Mediterranean and black sea" : + if ((lon >= 0 && lon < 42 && lat >= 30 && lat < 47.5) || (lon >= -6 && lon < 0 && lat >= 35 && lat < 40)) { + // Number of rectangles, between the given latitude and 30°N : + const nbdemidegreeLat = Math.floor(lat - 30) * 2; + // Number of rectangles, between the given longitude and 6°W : + const nbdemidegreeLong = Math.floor(lon + 6) * 2; + // Letter change every 10 rectangles, starting with 'A' : + const letter = String.fromCharCode(Math.floor(nbdemidegreeLong / 10) + 65); + const rest = nbdemidegreeLong % 10; + result = `M${nbdemidegreeLat}${letter}${rest}`; + } + // If position inside "Atlantic (nord-east)" : + else if (lon >= -50 && lon <= 70 && lat >= 36 && lat <= 89) { + const halfDegreesNb = Math.floor((lat - 36) * 2) + 1; + const degreesNb = Math.floor(lon + 50); + const letter = String.fromCharCode(Math.floor(degreesNb / 10) + 65); + const rest = degreesNb % 10; + result = `${halfDegreesNb}${letter}${rest}`; + } + return result; + } + static isStatisticalRectangleLabel(label) { + return (label && LocationUtils.RECTANGLE_LABEL_REGEXP.test(label)) || false; + } + static getGeometryFromRectangleLabel(rectangleLabel, opts = { checkValid: true }) { + const bbox = LocationUtils.getBBoxFromRectangleLabel(rectangleLabel); + // Check is valid + if (opts.checkValid && !bbox) + throw new Error(`Invalid statistical rectangle '${rectangleLabel}': unknown format`); + return (bbox && Geometries.createRectangleGeometry(bbox[0], bbox[1], bbox[2], bbox[3], false)) || undefined; + } + static getBBoxFromRectangleLabel(rectangleLabel) { + if (!rectangleLabel || !this.isStatisticalRectangleLabel(rectangleLabel)) + return undefined; // Skip if invalid + // If rectangle inside "Mediterranean and black sea" + if (rectangleLabel.startsWith('M')) { + const rectangleLabelNoLetter = rectangleLabel.substring(1); + const nbDemiDegreeLat = rectangleLabelNoLetter.substring(0, 2); + const letter = rectangleLabelNoLetter.substring(2, 3); + const rest = rectangleLabelNoLetter.substring(3); + const latitude = +nbDemiDegreeLat * 0.5 + 30; + const longitude = +rest * 0.5 + (letter.charCodeAt(0) - 65) * 5 - 6; + return [longitude, latitude, longitude + 0.5, latitude + 0.5]; + } + // If rectangle inside "Atlantic (nord-east)" : + else { + let nbDemiDegreeLat = rectangleLabel.substring(0, 2); + let letter = rectangleLabel.substring(2, 3); + let rest = rectangleLabel.substring(3); + // Special case for '102D0' + if (rectangleLabel.length === 5) { + nbDemiDegreeLat = rectangleLabel.substring(0, 3); + letter = rectangleLabel.substring(3, 4); + rest = rectangleLabel.substring(4); + } + const latitude = +nbDemiDegreeLat * 0.5 + 35.5; + const longitude = +rest + (letter.charCodeAt(0) - 65) * 10 - 50; + return [longitude, latitude, longitude + 1, latitude + 0.5]; + } + } +} +LocationUtils.RECTANGLE_LABEL_REGEXP = /^M?[0-9]{2,3}[A-Z][0-9]{1,2}$/; +//# sourceMappingURL=location.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/location/location.utils.js.map b/out-tsc/app/app/referential/location/location.utils.js.map new file mode 100644 index 000000000..94e2f4adc --- /dev/null +++ b/out-tsc/app/app/referential/location/location.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"location.utils.js","sourceRoot":"","sources":["../../../../../src/app/referential/location/location.utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/metier/metier-routing.module.js b/out-tsc/app/app/referential/metier/metier-routing.module.js new file mode 100644 index 000000000..9f7b74cec --- /dev/null +++ b/out-tsc/app/app/referential/metier/metier-routing.module.js @@ -0,0 +1,28 @@ +import { __decorate } from "tslib"; +import { RouterModule } from '@angular/router'; +import { NgModule } from '@angular/core'; +import { MetierPage } from '@app/referential/metier/metier.page'; +import { AppMetierModule } from '@app/referential/metier/metier.module'; +const routes = [ + { + path: ':id', + pathMatch: 'full', + component: MetierPage, + data: { + profile: 'ADMIN' + } + } +]; +let AppMetierRoutingModule = class AppMetierRoutingModule { +}; +AppMetierRoutingModule = __decorate([ + NgModule({ + imports: [ + AppMetierModule, + RouterModule.forChild(routes) + ], + exports: [RouterModule] + }) +], AppMetierRoutingModule); +export { AppMetierRoutingModule }; +//# sourceMappingURL=metier-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/metier/metier-routing.module.js.map b/out-tsc/app/app/referential/metier/metier-routing.module.js.map new file mode 100644 index 000000000..fe30b55c0 --- /dev/null +++ b/out-tsc/app/app/referential/metier/metier-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"metier-routing.module.js","sourceRoot":"","sources":["../../../../../src/app/referential/metier/metier-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,UAAU;QACrB,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO;SACjB;KACF;CACF,CAAC;AASK,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;CAAI,CAAA;AAA1B,sBAAsB;IAPlC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,eAAe;YACf,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC9B;QACD,OAAO,EAAE,CAAC,YAAY,CAAC;KACxB,CAAC;GACW,sBAAsB,CAAI;SAA1B,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/metier/metier.model.js b/out-tsc/app/app/referential/metier/metier.model.js new file mode 100644 index 000000000..98445a6a2 --- /dev/null +++ b/out-tsc/app/app/referential/metier/metier.model.js @@ -0,0 +1,45 @@ +var Metier_1; +import { __decorate, __metadata } from "tslib"; +import { BaseReferential, EntityClass, ReferentialRef, uncapitalizeFirstLetter } from '@sumaris-net/ngx-components'; +let Metier = Metier_1 = class Metier extends BaseReferential { + constructor() { + super(Metier_1.TYPENAME); + this.gear = null; + this.taxonGroup = null; + this.entityName = Metier_1.ENTITY_NAME; + } + asObject(opts) { + const target = super.asObject(opts); + if (!opts || opts.minify !== true) { + target.gear = this.gear && this.gear.asObject(opts) || undefined; + if (target.gear && !target.gear.entityName) { + // Fixme gear entityName here + console.warn('Missing gear.entityName in Metier instance', this); + target.gear.entityName = 'Gear'; + } + target.taxonGroup = this.taxonGroup && this.taxonGroup.asObject(opts) || undefined; + } + return target; + } + fromObject(source, opts) { + super.fromObject(source); + this.entityName = source.entityName || Metier_1.ENTITY_NAME; + this.gear = source.gear && ReferentialRef.fromObject(source.gear); + this.taxonGroup = source.taxonGroup && ReferentialRef.fromObject(source.taxonGroup); + // Copy label/name from child (TaxonGroup or Gear) + if (opts && opts.useChildAttributes) { + const childKey = uncapitalizeFirstLetter(opts.useChildAttributes); + if (source[childKey]) { + this.label = source[childKey].label || this.label; + this.name = source[childKey].name || this.name; + } + } + } +}; +Metier.ENTITY_NAME = 'Metier'; +Metier = Metier_1 = __decorate([ + EntityClass({ typename: 'MetierVO' }), + __metadata("design:paramtypes", []) +], Metier); +export { Metier }; +//# sourceMappingURL=metier.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/metier/metier.model.js.map b/out-tsc/app/app/referential/metier/metier.model.js.map new file mode 100644 index 000000000..13d4ac040 --- /dev/null +++ b/out-tsc/app/app/referential/metier/metier.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"metier.model.js","sourceRoot":"","sources":["../../../../../src/app/referential/metier/metier.model.ts"],"names":[],"mappings":";;AAAA,OAAO,EACL,eAAe,EACf,WAAW,EAEX,cAAc,EACd,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAQ9B,IAAM,MAAM,cAAZ,MAAM,MAAO,SAAQ,eAAoF;IAO9G;QACE,KAAK,CAAC,QAAM,CAAC,QAAQ,CAAC,CAAC;QAJzB,SAAI,GAAmB,IAAI,CAAC;QAC5B,eAAU,GAAmB,IAAI,CAAC;QAIhC,IAAI,CAAC,UAAU,GAAG,QAAM,CAAC,WAAW,CAAC;IACvC,CAAC;IAED,QAAQ,CAAC,IAAiC;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;YACjC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;YAEjE,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC1C,6BAA6B;gBAC7B,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,IAAI,CAAC,CAAC;gBACjE,MAAM,CAAC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;aACjC;YAED,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;SACpF;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,MAAW,EAAE,IAA8B;QACpD,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,QAAM,CAAC,WAAW,CAAC;QAC1D,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAEpF,kDAAkD;QAClD,IAAI,IAAI,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACnC,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAClE,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE;gBACpB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;gBAClD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;aAChD;SACF;IACH,CAAC;;AAzCM,kBAAW,GAAG,QAAQ,CAAC;AADnB,MAAM;IADlB,WAAW,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;;GACzB,MAAM,CA2ClB;SA3CY,MAAM"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/metier/metier.module.js b/out-tsc/app/app/referential/metier/metier.module.js new file mode 100644 index 000000000..648c0bef8 --- /dev/null +++ b/out-tsc/app/app/referential/metier/metier.module.js @@ -0,0 +1,35 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { TranslateModule } from '@ngx-translate/core'; +import { CommonModule } from '@angular/common'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppReferentialFormModule } from '@app/referential/form/referential-form.module'; +import { AppReferentialPipesModule } from '@app/referential/pipes/referential-pipes.module'; +import { AppReferentialTableModule } from '@app/referential/table/referential-table.module'; +import { MetierPage } from '@app/referential/metier/metier.page'; +let AppMetierModule = class AppMetierModule { +}; +AppMetierModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TranslateModule.forChild(), + AppCoreModule, + // Sub modules + AppReferentialFormModule, + AppReferentialPipesModule, + AppReferentialTableModule + ], + declarations: [ + // Components + MetierPage + ], + exports: [ + TranslateModule, + // Components + MetierPage + ], + }) +], AppMetierModule); +export { AppMetierModule }; +//# sourceMappingURL=metier.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/metier/metier.module.js.map b/out-tsc/app/app/referential/metier/metier.module.js.map new file mode 100644 index 000000000..b5ca20866 --- /dev/null +++ b/out-tsc/app/app/referential/metier/metier.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"metier.module.js","sourceRoot":"","sources":["../../../../../src/app/referential/metier/metier.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AA0B1D,IAAM,eAAe,GAArB,MAAM,eAAe;CAC3B,CAAA;AADY,eAAe;IAxB3B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,eAAe,CAAC,QAAQ,EAAE;YAE1B,aAAa;YAEb,cAAc;YACd,wBAAwB;YACxB,yBAAyB;YACzB,yBAAyB;SAC1B;QACD,YAAY,EAAE;YAEZ,aAAa;YACb,UAAU;SACX;QACD,OAAO,EAAE;YACP,eAAe;YAEf,aAAa;YACb,UAAU;SACX;KACF,CAAC;GACW,eAAe,CAC3B;SADY,eAAe"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/metier/metier.page.js b/out-tsc/app/app/referential/metier/metier.page.js new file mode 100644 index 000000000..bdc9907e5 --- /dev/null +++ b/out-tsc/app/app/referential/metier/metier.page.js @@ -0,0 +1,77 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, ViewChild } from '@angular/core'; +import { StatusIds } from '@sumaris-net/ngx-components'; +import { AppReferentialEditor } from '@app/referential/form/referential-editor.class'; +import { ReferentialForm } from '@app/referential/form/referential.form'; +import { MetierValidatorService } from '@app/referential/metier/metier.validator'; +import { MetierService } from '@app/referential/metier/metier.service'; +import { Metier } from '@app/referential/metier/metier.model'; +import { TaxonGroupTypeIds } from '@app/referential/services/model/taxon-group.model'; +import { GearLevelIds } from '@app/referential/services/model/model.enum'; +let MetierPage = class MetierPage extends AppReferentialEditor { + constructor(injector, dataService, validatorService) { + super(injector, Metier, dataService, validatorService.getFormGroup(), { + entityName: Metier.ENTITY_NAME, + uniqueLabel: true, + withLevels: false, + tabCount: 1, + }); + this.registerFieldDefinition({ + key: 'gear', + label: `REFERENTIAL.METIER.GEAR`, + type: 'entity', + autocomplete: { + suggestFn: (value, filter) => this.referentialRefService.suggest(value, filter), + filter: { + entityName: 'Gear', + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], + levelIds: [GearLevelIds.FAO], + }, + }, + }); + this.registerFieldDefinition({ + key: 'taxonGroup', + label: `REFERENTIAL.METIER.TAXON_GROUP`, + type: 'entity', + autocomplete: { + suggestLengthThreshold: 2, + suggestFn: (value, filter) => this.referentialRefService.suggest(value, filter), + filter: { + entityName: 'TaxonGroup', + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], + levelIds: [TaxonGroupTypeIds.METIER_DCF_5, TaxonGroupTypeIds.METIER_NATIONAL], + }, + }, + }); + } + /* -- protected Metiers -- */ + registerForms() { + this.addChildForms([this.referentialForm]); + } + setValue(data) { + super.setValue(data); + } + onEntitySaved(data) { + return __awaiter(this, void 0, void 0, function* () { }); + } + getFirstInvalidTabIndex() { + if (this.referentialForm.invalid) + return 0; + return -1; + } +}; +__decorate([ + ViewChild('referentialForm', { static: true }), + __metadata("design:type", ReferentialForm) +], MetierPage.prototype, "referentialForm", void 0); +MetierPage = __decorate([ + Component({ + selector: 'app-metier', + templateUrl: 'metier.page.html', + styleUrls: ['metier.page.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, MetierService, MetierValidatorService]) +], MetierPage); +export { MetierPage }; +//# sourceMappingURL=metier.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/metier/metier.page.js.map b/out-tsc/app/app/referential/metier/metier.page.js.map new file mode 100644 index 000000000..78481df28 --- /dev/null +++ b/out-tsc/app/app/referential/metier/metier.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"metier.page.js","sourceRoot":"","sources":["../../../../../src/app/referential/metier/metier.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/metier/metier.service.js b/out-tsc/app/app/referential/metier/metier.service.js new file mode 100644 index 000000000..2c4188f0a --- /dev/null +++ b/out-tsc/app/app/referential/metier/metier.service.js @@ -0,0 +1,42 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { ReferentialService } from '@app/referential/services/referential.service'; +import { AccountService, GraphqlService, LocalSettingsService, MINIFY_ENTITY_FOR_POD, ReferentialRef } from '@sumaris-net/ngx-components'; +import { Metier } from '@app/referential/metier/metier.model'; +const MetierQueries = { + load: '', +}; +let MetierService = class MetierService extends ReferentialService { + constructor(graphql, accountService, settings) { + super(graphql, accountService, settings, Metier); + this.graphql = graphql; + this.accountService = accountService; + this.settings = settings; + } + asObject(source, opts) { + var _a, _b; + const target = super.asObject(source, opts); + target.properties = { + gear: ((_a = source.gear) === null || _a === void 0 ? void 0 : _a.asObject(Object.assign(Object.assign({}, MINIFY_ENTITY_FOR_POD), { keepEntityName: true }))) || undefined, + taxonGroup: ((_b = source.taxonGroup) === null || _b === void 0 ? void 0 : _b.asObject(Object.assign(Object.assign({}, MINIFY_ENTITY_FOR_POD), { keepEntityName: true }))) || undefined, + }; + delete target.taxonGroup; + delete target.gear; + return target; + } + fromObject(source, opts) { + var _a, _b; + const target = super.fromObject(source, opts); + target.gear = ReferentialRef.fromObject(source.gear || ((_a = source.properties) === null || _a === void 0 ? void 0 : _a.gear)); + target.taxonGroup = ReferentialRef.fromObject(source.taxonGroup || ((_b = source.properties) === null || _b === void 0 ? void 0 : _b.taxonGroup)); + return target; + } +}; +MetierService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [GraphqlService, + AccountService, + LocalSettingsService]) +], MetierService); +export { MetierService }; +//# sourceMappingURL=metier.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/metier/metier.service.js.map b/out-tsc/app/app/referential/metier/metier.service.js.map new file mode 100644 index 000000000..bc0989368 --- /dev/null +++ b/out-tsc/app/app/referential/metier/metier.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"metier.service.js","sourceRoot":"","sources":["../../../../../src/app/referential/metier/metier.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC1I,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAE9D,MAAM,aAAa,GAAG;IACpB,IAAI,EAAE,EAAE;CACT,CAAC;AAGK,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,kBAA0B;IAE3D,YAAsB,OAAuB,EACvB,cAA8B,EAC9B,QAA8B;QAClD,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAH7B,YAAO,GAAP,OAAO,CAAgB;QACvB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,aAAQ,GAAR,QAAQ,CAAsB;IAEpD,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,IAAU;;QAEjC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,UAAU,GAAG;YAClB,IAAI,EAAE,CAAA,MAAA,MAAM,CAAC,IAAI,0CAAE,QAAQ,iCAAK,qBAAqB,KAAE,cAAc,EAAE,IAAI,IAAE,KAAI,SAAS;YAC1F,UAAU,EAAE,CAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,QAAQ,iCAAK,qBAAqB,KAAE,cAAc,EAAE,IAAI,IAAE,KAAI,SAAS;SACvG,CAAC;QACF,OAAO,MAAM,CAAC,UAAU,CAAC;QACzB,OAAO,MAAM,CAAC,IAAI,CAAC;QAEnB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,MAAW,EAAE,IAAU;;QAChC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,GAAG,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAI,MAAA,MAAM,CAAC,UAAU,0CAAE,IAAI,CAAA,CAAC,CAAC;QAChF,MAAM,CAAC,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,KAAI,MAAA,MAAM,CAAC,UAAU,0CAAE,UAAU,CAAA,CAAC,CAAC;QAClG,OAAO,MAAM,CAAC;IAChB,CAAC;CAEF,CAAA;AA5BY,aAAa;IADzB,UAAU,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;qCAGF,cAAc;QACP,cAAc;QACpB,oBAAoB;GAJzC,aAAa,CA4BzB;SA5BY,aAAa"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/metier/metier.validator.js b/out-tsc/app/app/referential/metier/metier.validator.js new file mode 100644 index 000000000..e917cdf21 --- /dev/null +++ b/out-tsc/app/app/referential/metier/metier.validator.js @@ -0,0 +1,24 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { SharedValidators } from '@sumaris-net/ngx-components'; +import { ReferentialValidatorService } from '@app/referential/services/validator/referential.validator'; +let MetierValidatorService = class MetierValidatorService extends ReferentialValidatorService { + constructor(formBuilder) { + super(formBuilder); + this.formBuilder = formBuilder; + } + getRowValidator() { + return this.getFormGroup(); + } + getFormGroupConfig(data, opts) { + const config = super.getFormGroupConfig(data, opts); + return Object.assign(Object.assign({}, config), { gear: [data === null || data === void 0 ? void 0 : data.gear, Validators.compose([Validators.required, SharedValidators.entity])], taxonGroup: [data === null || data === void 0 ? void 0 : data.taxonGroup, SharedValidators.entity] }); + } +}; +MetierValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder]) +], MetierValidatorService); +export { MetierValidatorService }; +//# sourceMappingURL=metier.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/metier/metier.validator.js.map b/out-tsc/app/app/referential/metier/metier.validator.js.map new file mode 100644 index 000000000..50d59df17 --- /dev/null +++ b/out-tsc/app/app/referential/metier/metier.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"metier.validator.js","sourceRoot":"","sources":["../../../../../src/app/referential/metier/metier.validator.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAoB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAa,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,2DAA2D,CAAC;AAKjG,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,2BAA2B;IAErE,YACY,WAA+B;QAEzC,KAAK,CAAC,WAAW,CAAC,CAAC;QAFT,gBAAW,GAAX,WAAW,CAAoB;IAG3C,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED,kBAAkB,CAAC,IAAa,EAAE,IAA4D;QAC5F,MAAM,MAAM,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpD,uCACK,MAAM,KACT,IAAI,EAAE,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EACtF,UAAU,EAAE,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC,IACvD;IACJ,CAAC;CAEF,CAAA;AArBY,sBAAsB;IADlC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAIN,kBAAkB;GAHhC,sBAAsB,CAqBlC;SArBY,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pipes/pmfms.pipe.js b/out-tsc/app/app/referential/pipes/pmfms.pipe.js new file mode 100644 index 000000000..a02cc5e78 --- /dev/null +++ b/out-tsc/app/app/referential/pipes/pmfms.pipe.js @@ -0,0 +1,227 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable, Pipe } from '@angular/core'; +import { PmfmValueUtils } from '../services/model/pmfm-value.model'; +import { PmfmUtils } from '../services/model/pmfm.model'; +import { DateFormatService, formatLatitude, formatLongitude, isNotNil, isNotNilOrBlank, LocalSettingsService, TranslateContextService } from '@sumaris-net/ngx-components'; +import { TranslateService } from '@ngx-translate/core'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +let PmfmIdStringPipe = class PmfmIdStringPipe { + constructor(translate, translateContext) { + this.translate = translate; + this.translateContext = translateContext; + } + transform(pmfm) { + var _a; + return pmfm && ((_a = pmfm.id) === null || _a === void 0 ? void 0 : _a.toString()) || null; + } +}; +PmfmIdStringPipe = __decorate([ + Pipe({ + name: 'pmfmIdString' + }), + __metadata("design:paramtypes", [TranslateService, + TranslateContextService]) +], PmfmIdStringPipe); +export { PmfmIdStringPipe }; +let PmfmNamePipe = class PmfmNamePipe { + constructor(translate, translateContext) { + this.translate = translate; + this.translateContext = translateContext; + } + transform(pmfm, opts) { + if (!pmfm) + return ''; + // Try to resolve PMFM using prefix + label + if (isNotNilOrBlank(opts === null || opts === void 0 ? void 0 : opts.i18nPrefix)) { + const i18nKey = opts.i18nPrefix + pmfm.label; + // I18n translation WITH context, if any + if (opts.i18nContext) { + const contextualTranslation = this.translateContext.instant(i18nKey, opts.i18nContext); + if (contextualTranslation !== i18nKey) { + return PmfmUtils.sanitizeName(contextualTranslation, pmfm, opts); + } + } + // I18n translation without context + const translation = this.translate.instant(i18nKey); + if (translation !== i18nKey) { + return PmfmUtils.sanitizeName(translation, pmfm, opts); + } + } + // Default name, computed from the PMFM object + return PmfmUtils.getPmfmName(pmfm, opts); + } +}; +PmfmNamePipe = __decorate([ + Pipe({ + name: 'pmfmName' + }), + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [TranslateService, + TranslateContextService]) +], PmfmNamePipe); +export { PmfmNamePipe }; +let PmfmValuePipe = class PmfmValuePipe { + constructor(dateFormat, settings) { + this.dateFormat = dateFormat; + this.settings = settings; + } + transform(value, opts) { + return this.format(value, opts); + } + format(value, opts) { + // Multiple values + if (Array.isArray(value)) { + return value.map(v => this.format(v, opts)).join((opts === null || opts === void 0 ? void 0 : opts.separator) || ', '); + } + const type = PmfmUtils.getExtendedType(opts === null || opts === void 0 ? void 0 : opts.pmfm); + switch (type) { + case 'date': + return this.dateFormat.transform(value, { time: false }); + case 'dateTime': + return this.dateFormat.transform(value, { time: true }); + case 'duration': + return value || null; + case 'latitude': + return formatLatitude(value, { pattern: this.settings.latLongFormat, placeholderChar: '0' }); + case 'longitude': + return formatLongitude(value, { pattern: this.settings.latLongFormat, placeholderChar: '0' }); + case 'integer': + case 'double': + if (opts.applyDisplayConversion && isNotNil(value) && opts.pmfm.displayConversion) { + value = opts.pmfm.displayConversion.conversionCoefficient * value; + } + return PmfmValueUtils.valueToString(value, opts); + default: + return PmfmValueUtils.valueToString(value, opts); + } + } +}; +PmfmValuePipe = __decorate([ + Pipe({ + name: 'pmfmValue' + }), + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [DateFormatService, + LocalSettingsService]) +], PmfmValuePipe); +export { PmfmValuePipe }; +let IsDatePmfmPipe = class IsDatePmfmPipe { + transform(pmfm) { + return pmfm && PmfmUtils.isDate(pmfm) || false; + } +}; +IsDatePmfmPipe = __decorate([ + Pipe({ + name: 'isDatePmfm' + }), + Injectable({ providedIn: 'root' }) +], IsDatePmfmPipe); +export { IsDatePmfmPipe }; +let IsComputedPmfmPipe = class IsComputedPmfmPipe { + transform(pmfm) { + return (pmfm === null || pmfm === void 0 ? void 0 : pmfm.isComputed) || false; + } +}; +IsComputedPmfmPipe = __decorate([ + Pipe({ + name: 'isComputedPmfm' + }), + Injectable({ providedIn: 'root' }) +], IsComputedPmfmPipe); +export { IsComputedPmfmPipe }; +let IsMultiplePmfmPipe = class IsMultiplePmfmPipe { + transform(pmfm) { + return (pmfm === null || pmfm === void 0 ? void 0 : pmfm.isMultiple) || false; + } +}; +IsMultiplePmfmPipe = __decorate([ + Pipe({ + name: 'isMultiplePmfm' + }), + Injectable({ providedIn: 'root' }) +], IsMultiplePmfmPipe); +export { IsMultiplePmfmPipe }; +let IsWeightPmfmPipe = class IsWeightPmfmPipe { + transform(pmfm) { + return pmfm && PmfmUtils.isWeight(pmfm) || false; + } +}; +IsWeightPmfmPipe = __decorate([ + Pipe({ + name: 'isWeightPmfm' + }), + Injectable({ providedIn: 'root' }) +], IsWeightPmfmPipe); +export { IsWeightPmfmPipe }; +let PmfmFieldStylePipe = class PmfmFieldStylePipe { + constructor(settings) { + this._mobile = settings.mobile; + } + transform(pmfm, maxItemCountForButtons) { + var _a; + return pmfm && this._mobile && (pmfm.type === 'boolean' + || (pmfm.isQualitative && ((_a = pmfm.qualitativeValues) === null || _a === void 0 ? void 0 : _a.length) <= (maxItemCountForButtons || ProgramProperties.MEASUREMENTS_MAX_VISIBLE_BUTTONS.defaultValue || 4))) ? 'button' : undefined /*default*/; + } +}; +PmfmFieldStylePipe = __decorate([ + Pipe({ + name: 'pmfmFieldStyle' + }), + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [LocalSettingsService]) +], PmfmFieldStylePipe); +export { PmfmFieldStylePipe }; +let PmfmValueColorPipe = class PmfmValueColorPipe { + transform(pmfmValue, opts, data) { + const pmfm = opts['pmfm'] || opts; + const mapWithFn = typeof opts['mapWith'] === 'function' ? opts['mapWith'] : undefined; + if (!pmfm || !mapWithFn) + return undefined; + // Get the color + const color = mapWithFn(pmfmValue, pmfm, data); + // Transform to CSS color (by default) + if (opts['css'] !== false) { + return color ? `var(--ion-color-${color})` : undefined; + } + return color; + } +}; +PmfmValueColorPipe = __decorate([ + Pipe({ + name: 'pmfmValueColor' + }) +], PmfmValueColorPipe); +export { PmfmValueColorPipe }; +let PmfmValueIconPipe = class PmfmValueIconPipe { + transform(pmfmValue, opts, data) { + const pmfm = opts['pmfm'] || opts; + const mapToColorFn = typeof opts['mapWith'] === 'function' ? opts['mapWith'] : undefined; + if (!pmfm || !mapToColorFn) + return undefined; + // Get the color + const color = mapToColorFn(pmfmValue, pmfm, data); + if (!color) + return null; + const result = { color }; + switch (color) { + case 'success': + result.icon = 'checkmark-circle'; + break; + case 'warning': + result.icon = 'warning'; + break; + case 'warning900': + case 'danger': + result.icon = 'alert-circle'; + break; + } + return result; + } +}; +PmfmValueIconPipe = __decorate([ + Pipe({ + name: 'pmfmValueIcon' + }) +], PmfmValueIconPipe); +export { PmfmValueIconPipe }; +//# sourceMappingURL=pmfms.pipe.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pipes/pmfms.pipe.js.map b/out-tsc/app/app/referential/pipes/pmfms.pipe.js.map new file mode 100644 index 000000000..b88268a5f --- /dev/null +++ b/out-tsc/app/app/referential/pipes/pmfms.pipe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfms.pipe.js","sourceRoot":"","sources":["../../../../../src/app/referential/pipes/pmfms.pipe.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pipes/referential-pipes.module.js b/out-tsc/app/app/referential/pipes/referential-pipes.module.js new file mode 100644 index 000000000..a1a45e77b --- /dev/null +++ b/out-tsc/app/app/referential/pipes/referential-pipes.module.js @@ -0,0 +1,54 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { ReferentialToStringPipe } from './referential-to-string.pipe'; +import { TranslateModule } from '@ngx-translate/core'; +import { IsComputedPmfmPipe, IsDatePmfmPipe, IsMultiplePmfmPipe, IsWeightPmfmPipe, PmfmFieldStylePipe, PmfmIdStringPipe, PmfmNamePipe, PmfmValueColorPipe, PmfmValueIconPipe, PmfmValuePipe } from './pmfms.pipe'; +import { TextMaskModule } from 'angular2-text-mask'; +import { CommonModule } from '@angular/common'; +import { AppCoreModule } from '@app/core/core.module'; +import { WeightFormatPipe } from '@app/referential/pipes/weights.pipe'; +let AppReferentialPipesModule = class AppReferentialPipesModule { +}; +AppReferentialPipesModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TextMaskModule, + TranslateModule.forChild(), + AppCoreModule, + ], + declarations: [ + // Pipes + ReferentialToStringPipe, + PmfmIdStringPipe, + PmfmNamePipe, + PmfmValuePipe, + PmfmValueColorPipe, + PmfmValueIconPipe, + IsDatePmfmPipe, + IsWeightPmfmPipe, + IsComputedPmfmPipe, + IsMultiplePmfmPipe, + PmfmFieldStylePipe, + WeightFormatPipe, + ], + exports: [ + TranslateModule, + // Pipes + ReferentialToStringPipe, + PmfmIdStringPipe, + PmfmNamePipe, + PmfmValuePipe, + PmfmValueColorPipe, + PmfmValueIconPipe, + IsDatePmfmPipe, + IsWeightPmfmPipe, + IsComputedPmfmPipe, + IsMultiplePmfmPipe, + PmfmFieldStylePipe, + WeightFormatPipe, + ], + }) +], AppReferentialPipesModule); +export { AppReferentialPipesModule }; +//# sourceMappingURL=referential-pipes.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pipes/referential-pipes.module.js.map b/out-tsc/app/app/referential/pipes/referential-pipes.module.js.map new file mode 100644 index 000000000..aad57ed1d --- /dev/null +++ b/out-tsc/app/app/referential/pipes/referential-pipes.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential-pipes.module.js","sourceRoot":"","sources":["../../../../../src/app/referential/pipes/referential-pipes.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AA2ChE,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;CACrC,CAAA;AADY,yBAAyB;IAzCrC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,cAAc;YACd,eAAe,CAAC,QAAQ,EAAE;YAE1B,aAAa;SACd;QACD,YAAY,EAAE;YACZ,QAAQ;YACR,uBAAuB;YACvB,gBAAgB;YAChB,YAAY;YACZ,aAAa;YACb,kBAAkB;YAClB,iBAAiB;YACjB,cAAc;YACd,gBAAgB;YAChB,kBAAkB;YAClB,kBAAkB;YAClB,kBAAkB;YAClB,gBAAgB;SACjB;QACD,OAAO,EAAE;YACP,eAAe;YAEf,QAAQ;YACR,uBAAuB;YACvB,gBAAgB;YAChB,YAAY;YACZ,aAAa;YACb,kBAAkB;YAClB,iBAAiB;YACjB,cAAc;YACd,gBAAgB;YAChB,kBAAkB;YAClB,kBAAkB;YAClB,kBAAkB;YAClB,gBAAgB;SACjB;KACF,CAAC;GACW,yBAAyB,CACrC;SADY,yBAAyB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pipes/referential-to-string.pipe.js b/out-tsc/app/app/referential/pipes/referential-to-string.pipe.js new file mode 100644 index 000000000..787326e39 --- /dev/null +++ b/out-tsc/app/app/referential/pipes/referential-to-string.pipe.js @@ -0,0 +1,22 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable, Pipe } from '@angular/core'; +import { referentialsToString, referentialToString } from '@sumaris-net/ngx-components'; +let ReferentialToStringPipe = class ReferentialToStringPipe { + constructor() { + } + transform(value, opts) { + const properties = Array.isArray(opts) ? opts : opts && opts.properties; + if (Array.isArray(value)) + return referentialsToString(value, properties, opts && opts['separator']); + return referentialToString(value, properties); + } +}; +ReferentialToStringPipe = __decorate([ + Pipe({ + name: 'referentialToString' + }), + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", []) +], ReferentialToStringPipe); +export { ReferentialToStringPipe }; +//# sourceMappingURL=referential-to-string.pipe.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pipes/referential-to-string.pipe.js.map b/out-tsc/app/app/referential/pipes/referential-to-string.pipe.js.map new file mode 100644 index 000000000..6c0783008 --- /dev/null +++ b/out-tsc/app/app/referential/pipes/referential-to-string.pipe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential-to-string.pipe.js","sourceRoot":"","sources":["../../../../../src/app/referential/pipes/referential-to-string.pipe.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAiB,MAAM,eAAe,CAAC;AAChE,OAAO,EAA+B,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAM9G,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAElC;IAEA,CAAC;IAED,SAAS,CAAC,KAAyC,EAAE,IAA6D;QAChH,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC;QACxE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACpG,OAAO,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;CACF,CAAA;AAXY,uBAAuB;IAJnC,IAAI,CAAC;QACJ,IAAI,EAAE,qBAAqB;KAC5B,CAAC;IACD,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;;GACpB,uBAAuB,CAWnC;SAXY,uBAAuB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pipes/weights.pipe.js b/out-tsc/app/app/referential/pipes/weights.pipe.js new file mode 100644 index 000000000..1d72eabb9 --- /dev/null +++ b/out-tsc/app/app/referential/pipes/weights.pipe.js @@ -0,0 +1,37 @@ +import { __decorate } from "tslib"; +import { Pipe } from '@angular/core'; +import { isNil } from '@sumaris-net/ngx-components'; +import { WeightUtils } from '@app/referential/services/model/model.utils'; +let WeightFormatPipe = class WeightFormatPipe { + transform(value, opts) { + if (isNil(value)) + return ''; + let fromUnit = ((opts === null || opts === void 0 ? void 0 : opts.fromUnit) || 'kg'); + let toUnit = ((opts === null || opts === void 0 ? void 0 : opts.toUnit) || 'auto'); + // Detect target unit + if (toUnit === 'auto') { + value = WeightUtils.convert(value, fromUnit, 'kg'); + fromUnit = 'kg'; + if (value < 0.001) + toUnit = 'mg'; + else if (value < 1) + toUnit = 'g'; + else if (value < 1000) + toUnit = 'kg'; + else + toUnit = 't'; + } + // Apply conversion + if (fromUnit !== toUnit) { + value = WeightUtils.convert(+value, fromUnit, toUnit); + } + return WeightUtils.format(value, Object.assign(Object.assign({}, opts), { unit: toUnit })); + } +}; +WeightFormatPipe = __decorate([ + Pipe({ + name: 'weightFormat' + }) +], WeightFormatPipe); +export { WeightFormatPipe }; +//# sourceMappingURL=weights.pipe.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pipes/weights.pipe.js.map b/out-tsc/app/app/referential/pipes/weights.pipe.js.map new file mode 100644 index 000000000..ad8fb354c --- /dev/null +++ b/out-tsc/app/app/referential/pipes/weights.pipe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"weights.pipe.js","sourceRoot":"","sources":["../../../../../src/app/referential/pipes/weights.pipe.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAiB,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAKnE,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAE3B,SAAS,CAAC,KAAoB,EAAE,IAK/B;QACC,IAAI,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAE5B,IAAI,QAAQ,GAAG,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,IAAI,CAAqB,CAAC;QAC5D,IAAI,MAAM,GAAG,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,KAAI,MAAM,CAA8B,CAAC;QAEnE,qBAAqB;QACrB,IAAI,MAAM,KAAK,MAAM,EAAE;YACrB,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,QAA4B,EAAE,IAAI,CAAC,CAAC;YACvE,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,KAAK,GAAG,KAAK;gBAAE,MAAM,GAAG,IAAI,CAAC;iBAC5B,IAAI,KAAK,GAAG,CAAC;gBAAE,MAAM,GAAG,GAAG,CAAC;iBAC5B,IAAI,KAAK,GAAG,IAAI;gBAAE,MAAM,GAAG,IAAI,CAAC;;gBAChC,MAAM,GAAG,GAAG,CAAC;SACnB;QACD,mBAAmB;QACnB,IAAI,QAAQ,KAAK,MAAM,EAAE;YACvB,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;SACvD;QACD,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,kCAAM,IAAI,KAAE,IAAI,EAAE,MAAM,IAAE,CAAC;IAC5D,CAAC;CAEF,CAAA;AA7BY,gBAAgB;IAH5B,IAAI,CAAC;QACJ,IAAI,EAAE,cAAc;KACrB,CAAC;GACW,gBAAgB,CA6B5B;SA7BY,gBAAgB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/field/pmfm-qv.form-field.component.js b/out-tsc/app/app/referential/pmfm/field/pmfm-qv.form-field.component.js new file mode 100644 index 000000000..24606b861 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/field/pmfm-qv.form-field.component.js @@ -0,0 +1,393 @@ +var PmfmQvFormField_1; +import { __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, Input, Optional, Output, QueryList, ViewChild, ViewChildren } from '@angular/core'; +import { merge, of } from 'rxjs'; +import { filter, map, takeUntil, tap } from 'rxjs/operators'; +import { UntypedFormControl, FormGroupDirective, NG_VALUE_ACCESSOR, Validators } from '@angular/forms'; +import { AppFormUtils, focusInput, isNotEmptyArray, isNotNil, LocalSettingsService, referentialToString, ReferentialUtils, SharedValidators, sort, StatusIds, suggestFromArray, toBoolean, toNumber, selectInputRange, isNotNilOrBlank } from '@sumaris-net/ngx-components'; +import { PmfmIds } from '../../services/model/model.enum'; +import { PmfmUtils } from '../../services/model/pmfm.model'; +let PmfmQvFormField = PmfmQvFormField_1 = class PmfmQvFormField { + constructor(settings, cd, formGroupDir) { + this.settings = settings; + this.cd = cd; + this.formGroupDir = formGroupDir; + this._onChangeCallback = (_) => { }; + this._onTouchedCallback = () => { }; + this.destroySubject = new EventEmitter(true); + this._displayValue = ''; + this.onShowDropdown = new EventEmitter(true); + this.selectedIndex = -1; + this.showAllButtons = false; + this.floatLabel = 'auto'; + this.readonly = false; + this.compact = false; + this.clearable = false; + this.onPressEnter = new EventEmitter(); + this.focused = new EventEmitter(); + this.blurred = new EventEmitter(); + this.clicked = new EventEmitter(); + this.compareWith = ReferentialUtils.equals; + this.selectInputContent = AppFormUtils.selectInputContent; + this.mobile = settings.mobile; + } + get nativeElement() { + return this.matInput && this.matInput.nativeElement; + } + get sortedQualitativeValues() { + return this._sortedQualitativeValues; + } + set tabindex(value) { + this._tabindex = value; + this.markForCheck(); + } + get tabindex() { + return this._tabindex; + } + get disabled() { + return this.formControl.disabled; + } + ngOnInit() { + var _a; + // Set defaults + this.style = this.style || (this.mobile ? 'select' : 'autocomplete'); + this.formControl = this.formControl || this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName); + if (!this.formControl) + throw new Error('Missing mandatory attribute \'formControl\' or \'formControlName\' in .'); + if (!this.pmfm) + throw new Error('Missing mandatory attribute \'pmfm\' in .'); + let qualitativeValues = this.pmfm.qualitativeValues || []; + if (!qualitativeValues.length && PmfmUtils.isFullPmfm(this.pmfm)) { + // Get qualitative values from parameter + qualitativeValues = ((_a = this.pmfm.parameter) === null || _a === void 0 ? void 0 : _a.qualitativeValues) || []; + if (!qualitativeValues.length) { + console.warn(`Pmfm {id: ${this.pmfm.id}, label: '${this.pmfm.label}'} has no qualitative values, neither the parent PmfmStrategy!`, this.pmfm); + } + } + // Exclude disabled values + this._qualitativeValues = qualitativeValues.filter(qv => qv.statusId !== StatusIds.DISABLE); + this.required = toBoolean(this.required, this.pmfm.required || false); + this.formControl.setValidators(this.required ? [Validators.required, SharedValidators.entity] : SharedValidators.entity); + const attributes = this.settings.getFieldDisplayAttributes('qualitativeValue', ['label', 'name']); + const displayAttributes = this.compact && attributes.length > 1 ? ['label'] : attributes; + this.searchAttributes = isNotEmptyArray(this.searchAttributes) && this.searchAttributes || attributes; + this.sortAttribute = isNotNil(this.sortAttribute) + ? this.sortAttribute + : (this.style === 'button' ? 'name' : attributes[0]); + // Sort values (but keep original order if LANDING/DISCARD or mobile) + this._sortedQualitativeValues = (this.mobile || this.pmfm.id === PmfmIds.DISCARD_OR_LANDING) + ? this._qualitativeValues + : sort(this._qualitativeValues, this.sortAttribute, { numeric: true, sensitivity: 'base' }); + this.placeholder = this.placeholder || PmfmUtils.getPmfmName(this.pmfm, { withUnit: !this.compact }); + this.displayWith = this.displayWith || ((obj) => referentialToString(obj, displayAttributes)); + this.clearable = this.compact ? false : this.clearable; + // On desktop, manage autocomplete + if (!this.mobile) { + if (!this._sortedQualitativeValues.length) { + this._items$ = of([]); + } + else { + this._items$ = merge(this.onShowDropdown + .pipe(filter(event => !event.defaultPrevented), map((_) => this._sortedQualitativeValues)), this.formControl.valueChanges + .pipe(filter(ReferentialUtils.isEmpty), map(value => suggestFromArray(this._sortedQualitativeValues, value, { + searchAttributes: this.searchAttributes + })), map(res => res && res.data), tap(items => this.updateImplicitValue(items)))) + .pipe(takeUntil(this.destroySubject)); + } + } + // If button, listen enable/disable changes (hack using statusChanges) + if (this.style === 'button') { + this.maxVisibleButtons = toNumber(this.maxVisibleButtons, 4); + this.buttonsColCount = toNumber(this.buttonsColCount, Math.min(this.maxVisibleButtons, 4)); + if (this._qualitativeValues.length <= this.maxVisibleButtons) { + this.maxVisibleButtons = 999; // Hide the expand button + } + this.formControl.statusChanges + .pipe(takeUntil(this.destroySubject)) + .subscribe(() => { + this.updateSelectedIndex(this.value, { emitEvent: false /*done after*/ }); + this.markForCheck(); + }); + } + } + ngOnDestroy() { + this.destroySubject.emit(); + } + get value() { + return this.formControl.value; + } + writeValue(value, event) { + if (value !== this.formControl.value) { + this.formControl.patchValue(value, { emitEvent: false }); + this._onChangeCallback(value); + } + if (this.style === 'button') { + this.updateSelectedIndex(value); + if (event) + this.onPressEnter.emit(event); + } + } + registerOnChange(fn) { + this._onChangeCallback = fn; + } + registerOnTouched(fn) { + this._onTouchedCallback = fn; + } + setDisabledState(isDisabled) { + } + _onClick(event) { + this.clicked.emit(event); + this.onShowDropdown.emit(event); + } + filterInputTextFocusEvent(event) { + var _a; + if (!event || event.defaultPrevented) + return; + // Ignore event from mat-option + if (event.relatedTarget instanceof HTMLElement && event.relatedTarget.tagName === 'MAT-OPTION') { + event.preventDefault(); + if (event.stopPropagation) + event.stopPropagation(); + event.returnValue = false; + // DEBUG + //if (this.debug) console.debug(this.logPrefix + ' Cancelling focus event'); + return false; + } + // DEBUG + //if (this.debug) console.debug(this.logPrefix + ' Select input content'); + const hasContent = isNotNilOrBlank((_a = event.target) === null || _a === void 0 ? void 0 : _a.value); + // If combo is empty, or if has content but should force to show panel on focus + if (!hasContent) { + // DEBUG + //if (this.debug) console.debug(this.logPrefix + ' Emit focus event'); + this.focused.emit(); + this.onShowDropdown.emit(event); + return true; + } + return false; + } + filterInputTextBlurEvent(event) { + if (!event || event.defaultPrevented) + return; + // Ignore event from mat-option + if (event.relatedTarget instanceof HTMLElement && event.relatedTarget.tagName === 'MAT-OPTION') { + event.preventDefault(); + if (event.stopPropagation) + event.stopPropagation(); + event.returnValue = false; + // DEBUG + //if (this.debug) console.debug(this.logPrefix + " Cancelling blur event"); + return false; + } + // When leave component without object, use implicit value if stored + if (this._implicitValue && typeof this.formControl.value !== 'object') { + this.writeValue(this._implicitValue); + } + this._implicitValue = null; + this.checkIfTouched(); + // Move caret to the beginning (fix issue IMAGINE-469) + selectInputRange(event.target, 0, 0); + this.blurred.emit(event); + return true; + } + filterMatSelectFocusEvent(event) { + if (!event || event.defaultPrevented) + return; + // DEBUG + // console.debug(this.logPrefix + " Received focus event", event); + this.focused.emit(event); + } + filterMatSelectBlurEvent(event) { + if (!event || event.defaultPrevented) + return; + // DEBUG + // console.debug(this.logPrefix + " Received blur event", event); + if (event.relatedTarget instanceof HTMLElement && ( + // Ignore event from mat-option + (event.relatedTarget.tagName === 'MAT-OPTION') + || (event.relatedTarget.tagName === 'INPUT') && event.relatedTarget.classList.contains('searchbar-input'))) { + event.preventDefault(); + if (event.stopPropagation) + event.stopPropagation(); + event.returnValue = false; + // DEBUG + // console.debug(this.logPrefix + " Cancelling blur event"); + return false; + } + // When leave component without object, use implicit value if stored + if (this._implicitValue && typeof this.formControl.value !== 'object') { + this.writeValue(this._implicitValue); + } + this._implicitValue = null; + this.checkIfTouched(); + this.blurred.emit(event); + return true; + } + clear() { + this.formControl.setValue(null); + this.markForCheck(); + } + focus() { + focusInput(this.matInput); + } + getQvId(item) { + return item.id; + } + /* -- protected methods -- */ + updateImplicitValue(res) { + // Store implicit value (will use it onBlur if not other value selected) + if (res && res.length === 1) { + this._implicitValue = res[0]; + this.formControl.setErrors(null); + } + else { + this._implicitValue = undefined; + } + } + updateSelectedIndex(value, opts = { emitEvent: true }) { + const index = isNotNil(value === null || value === void 0 ? void 0 : value.id) ? this._sortedQualitativeValues.findIndex(qv => qv.id === value.id) : -1; + if (this.selectedIndex !== index) { + this.selectedIndex = index; + if (this.selectedIndex > this.maxVisibleButtons) { + this.showAllButtons = true; + } + if (!opts || opts.emitEvent !== false) + this.markForCheck(); + } + } + checkIfTouched() { + if (this.formControl.touched) { + this.markForCheck(); + this._onTouchedCallback(); + } + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Function) +], PmfmQvFormField.prototype, "displayWith", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PmfmQvFormField.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmQvFormField.prototype, "pmfm", void 0); +__decorate([ + Input(), + __metadata("design:type", UntypedFormControl) +], PmfmQvFormField.prototype, "formControl", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PmfmQvFormField.prototype, "formControlName", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PmfmQvFormField.prototype, "placeholder", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PmfmQvFormField.prototype, "floatLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PmfmQvFormField.prototype, "appearance", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PmfmQvFormField.prototype, "required", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmQvFormField.prototype, "readonly", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmQvFormField.prototype, "compact", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmQvFormField.prototype, "clearable", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PmfmQvFormField.prototype, "style", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], PmfmQvFormField.prototype, "searchAttributes", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PmfmQvFormField.prototype, "sortAttribute", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PmfmQvFormField.prototype, "autofocus", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], PmfmQvFormField.prototype, "maxVisibleButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], PmfmQvFormField.prototype, "buttonsColCount", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PmfmQvFormField.prototype, "showButtonIcons", void 0); +__decorate([ + Input(), + __metadata("design:type", Number), + __metadata("design:paramtypes", [Number]) +], PmfmQvFormField.prototype, "tabindex", null); +__decorate([ + Output('keyup.enter'), + __metadata("design:type", Object) +], PmfmQvFormField.prototype, "onPressEnter", void 0); +__decorate([ + Output('focus'), + __metadata("design:type", Object) +], PmfmQvFormField.prototype, "focused", void 0); +__decorate([ + Output('blur'), + __metadata("design:type", Object) +], PmfmQvFormField.prototype, "blurred", void 0); +__decorate([ + Output('click'), + __metadata("design:type", Object) +], PmfmQvFormField.prototype, "clicked", void 0); +__decorate([ + ViewChild('matInput'), + __metadata("design:type", ElementRef) +], PmfmQvFormField.prototype, "matInput", void 0); +__decorate([ + ViewChildren('button'), + __metadata("design:type", QueryList) +], PmfmQvFormField.prototype, "buttons", void 0); +PmfmQvFormField = PmfmQvFormField_1 = __decorate([ + Component({ + selector: 'app-pmfm-qv-field', + styleUrls: ['./pmfm-qv.form-field.component.scss'], + templateUrl: './pmfm-qv.form-field.component.html', + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => PmfmQvFormField_1), + multi: true + } + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __param(2, Optional()), + __metadata("design:paramtypes", [LocalSettingsService, + ChangeDetectorRef, + FormGroupDirective]) +], PmfmQvFormField); +export { PmfmQvFormField }; +//# sourceMappingURL=pmfm-qv.form-field.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/field/pmfm-qv.form-field.component.js.map b/out-tsc/app/app/referential/pmfm/field/pmfm-qv.form-field.component.js.map new file mode 100644 index 000000000..57268a492 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/field/pmfm-qv.form-field.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfm-qv.form-field.component.js","sourceRoot":"","sources":["../../../../../../src/app/referential/pmfm/field/pmfm-qv.form-field.component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/field/pmfm.form-field.component.js b/out-tsc/app/app/referential/pmfm/field/pmfm.form-field.component.js new file mode 100644 index 000000000..702c9744a --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/field/pmfm.form-field.component.js @@ -0,0 +1,419 @@ +var PmfmFormField_1; +import { __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, Input, Optional, Output, ViewChild, } from '@angular/core'; +import { AbstractControl, FormGroupDirective, NG_VALUE_ACCESSOR, UntypedFormArray, UntypedFormBuilder, UntypedFormControl, } from '@angular/forms'; +import { AppFormArray, filterNumberInput, focusInput, isNil, isNilOrBlank, isNotNil, isNotNilOrBlank, LocalSettingsService, MatDateTime, setTabIndex, toBoolean, toNumber, } from '@sumaris-net/ngx-components'; +import { PmfmUtils } from '../../services/model/pmfm.model'; +import { PmfmValidators } from '../../services/validator/pmfm.validators'; +import { PmfmLabelPatterns, UnitLabel, UnitLabelPatterns } from '../../services/model/model.enum'; +import { PmfmNamePipe } from '@app/referential/pipes/pmfms.pipe'; +import { RxState } from '@rx-angular/state'; +import { filter, map } from 'rxjs/operators'; +const noop = () => { }; +let PmfmFormField = PmfmFormField_1 = class PmfmFormField extends RxState { + constructor(settings, cd, formBuilder, pmfmNamePipe, formGroupDir) { + super(); + this.settings = settings; + this.cd = cd; + this.formBuilder = formBuilder; + this.pmfmNamePipe = pmfmNamePipe; + this.formGroupDir = formGroupDir; + this._onChangeCallback = noop; + this._onTouchedCallback = noop; + this.type$ = this.select('type'); + this.control$ = this.select('control'); + this.arrayEditingIndex = undefined; + this.readonly = false; + this.hidden = false; + this.compact = false; + this.floatLabel = 'auto'; + // When async validator (e.g. BatchForm), force update when error detected + this.listenStatusChanges = false; + this.onPressEnter = new EventEmitter(); + this.focused = new EventEmitter(); + this.blurred = new EventEmitter(); + this.clicked = new EventEmitter(); + this.filterNumberInput = filterNumberInput; + this.undefined = undefined; + this.mobile = settings.mobile; + // Fill controlName using the pmfm + this.connect('controlName', this.select('pmfm').pipe(filter(isNotNil), map(pmfm => { var _a; return (_a = pmfm.id) === null || _a === void 0 ? void 0 : _a.toString(); }), filter(isNotNilOrBlank))); + // get control from controlName + if (this.formGroupDir) { + this.connect('control', this.select('controlName').pipe(filter(isNotNilOrBlank), map(controlName => this.formGroupDir.form.get(controlName)), filter(isNotNil))); + } + } + /** + * Same as `formControl`, but avoid to activate the Angular directive + */ + set control(value) { + this.set('control', _ => value); + } + get control() { + return this.get('control'); + } + /** + * Same as `formControlName`, but avoid to activate the Angular directive + */ + set controlName(value) { + this.set('controlName', _ => value); + } + get controlName() { + return this.get('controlName'); + } + set pmfm(value) { + this.set('pmfm', _ => value); + } + get pmfm() { + return this.get('pmfm'); + } + set formControl(value) { + this.control = value; + } + get formControl() { + return this.control; + } + set formControlName(value) { + this.controlName = value; + } + get formControlName() { + return this.controlName; + } + set type(value) { + this.set('type', _ => value); + } + get type() { + return this.get('type'); + } + get value() { + return this.control.value; + } + get latLongFormat() { + return this.settings.settings.latLongFormat || 'DDMM'; + } + get disabled() { + var _a; + return (_a = this.control) === null || _a === void 0 ? void 0 : _a.disabled; + } + get formArray() { + return this.control; + } + ngOnInit() { + this.connect('type', this.select(['control', 'pmfm'], _ => _) + .pipe( + //debounceTime(1000), + map(({ pmfm, control }) => { + var _a; + if (!pmfm) + throw new Error('Missing mandatory attribute \'pmfm\' in .'); + if (!control) + throw new Error('Missing mandatory attribute \'formControl\' or \'formControlName\' in .'); + (_a = this._statusChangesSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + // Default values + this.required = toBoolean(this.required, pmfm.required); + if (control instanceof UntypedFormArray) { + // Make sure to get an App form array (that can be resized) + if (!(control instanceof AppFormArray)) + throw new Error('Please use AppFormArray instead of UntypedFormArray - check the validator service'); + this.acquisitionNumber = toNumber(this.acquisitionNumber, PmfmUtils.isDenormalizedPmfm(this.pmfm) ? this.pmfm.acquisitionNumber : -1); + if (control.length === 0) + control.resize(1); + return 'array'; + } + else if (control instanceof UntypedFormControl) { + // DEBUG + //if (PmfmUtils.isWeight(pmfm)) console.debug('[pmfm-form-field] Configuring for the pmfm: ' + pmfm.label); + this.acquisitionNumber = 1; // Force to 1 + control.setValidators(PmfmValidators.create(pmfm)); + // Force a refresh, when control status changed (useful in some case - e.g. in BatchForm, weight pmfms can be updated with `opts={emitEvent: false}` ) + if (this.listenStatusChanges) { + this._statusChangesSubscription = control.statusChanges.subscribe((_) => this.markForCheck()); + } + // Default values + this.placeholder = this.placeholder || this.pmfmNamePipe.transform(pmfm, { + withUnit: !this.compact, + i18nPrefix: this.i18nPrefix, + i18nContext: this.i18nSuffix + }); + // Compute the field type (use special case for Latitude/Longitude) + let type = pmfm.type; + if (this.hidden || pmfm.hidden) { + type = 'hidden'; + } + else if (type === 'double') { + if (PmfmLabelPatterns.LATITUDE.test(pmfm.label)) { + type = 'latitude'; + } + else if (PmfmLabelPatterns.LONGITUDE.test(pmfm.label)) { + type = 'longitude'; + } + else if (pmfm.unitLabel === UnitLabel.DECIMAL_HOURS || UnitLabelPatterns.DECIMAL_HOURS.test(pmfm.unitLabel)) { + type = 'duration'; + } + else { + this.numberInputStep = this.computeNumberInputStep(pmfm); + } + } + else if (type === 'date') { + if (pmfm.unitLabel === UnitLabel.DATE_TIME || UnitLabelPatterns.DATE_TIME.test(pmfm.unitLabel)) { + type = 'dateTime'; + } + } + // Update tab index + this.updateTabIndex(); + this.cd.detectChanges(); + return type; + } + else { + throw new Error('Unknown control type: ' + control.constructor.name); + } + }))); + } + ngOnDestroy() { + var _a; + super.ngOnDestroy(); + (_a = this._statusChangesSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + } + writeValue(value) { + if (this.type === 'array') { + if (Array.isArray(value) && value !== this.control.value) { + this.control.patchValue(value, { emitEvent: false }); + this._onChangeCallback(value); + } + } + else { + // FIXME This is a hack, because some time invalid value are passed + // Example: in the batch group table (inline edition) + if (PmfmUtils.isNumeric(this.pmfm) && Number.isNaN(value)) { + //console.warn("Trying to set NaN value, in a measurement field ! " + this.constructor.name); + value = null; + if (value !== this.control.value) { + this.control.patchValue(value, { emitEvent: false }); + this._onChangeCallback(value); + } + } + } + } + registerOnChange(fn) { + this._onChangeCallback = fn; + } + registerOnTouched(fn) { + this._onTouchedCallback = fn; + } + setDisabledState(isDisabled) { + this.markForCheck(); + } + markAsTouched() { + var _a; + if ((_a = this.control) === null || _a === void 0 ? void 0 : _a.touched) { + this.markForCheck(); + this._onTouchedCallback(); + } + } + filterAlphanumericalInput(event) { + // TODO: Add features (e.g. check against a regexp/pattern ?) + } + focus() { + if (this.hidden) { + console.warn('Cannot focus an hidden measurement field!'); + } + else { + focusInput(this.matInput); + } + } + /* -- protected method -- */ + computeNumberInputStep(pmfm) { + var _a; + // FIXME: choisir la valeur min, ou vide ? - cf issue #554 + // return PmfmUtils.getOrComputePrecision(pmfm, 1) + return ((_a = PmfmUtils.getOrComputePrecision(pmfm, null)) === null || _a === void 0 ? void 0 : _a.toString()) || ''; + } + updateTabIndex() { + if (isNil(this.tabindex) || this.tabindex === -1) + return; + setTimeout(() => { + if (!this.matInput) + return; + setTabIndex(this.matInput, this.tabindex); + this.markForCheck(); + }); + } + markForCheck() { + this.cd.markForCheck(); + } + formArrayAdd(event) { + const autofocus = this.autofocus; + this.autofocus = false; + event.preventDefault(); + event.stopPropagation(); + event.stopImmediatePropagation(); + this.formArray.add(null, { emitEvent: false }); + this.arrayEditingIndex = this.formArray.length - 1; + // Let the time for fields validation + setTimeout(() => { + this.autofocus = autofocus; + this.markForCheck(); + }, 250); + } + formArrayRemoveAt(index, opts) { + this.formArray.removeAt(index); + if (!opts || opts.markAsDirty !== false) + this.formArray.markAsDirty(); + this.markForCheck(); + } + formArrayRemoveEmptyOnFocusLost(event, index) { + event.stopPropagation(); + setTimeout(() => { + const control = this.formArray.at(index); + // If empty: remove it + if (control && isNilOrBlank(control.value)) { + this.formArray.removeAt(index); + this.markForCheck(); + } + }, 250); + } +}; +__decorate([ + ViewChild(MatDateTime), + __metadata("design:type", MatDateTime) +], PmfmFormField.prototype, "matDateTime", void 0); +__decorate([ + Input(), + __metadata("design:type", AbstractControl), + __metadata("design:paramtypes", [AbstractControl]) +], PmfmFormField.prototype, "control", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], PmfmFormField.prototype, "controlName", null); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], PmfmFormField.prototype, "pmfm", null); +__decorate([ + Input(), + __metadata("design:type", UntypedFormControl), + __metadata("design:paramtypes", [UntypedFormControl]) +], PmfmFormField.prototype, "formControl", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], PmfmFormField.prototype, "formControlName", null); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PmfmFormField.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PmfmFormField.prototype, "required", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmFormField.prototype, "readonly", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmFormField.prototype, "hidden", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PmfmFormField.prototype, "placeholder", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmFormField.prototype, "compact", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PmfmFormField.prototype, "floatLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], PmfmFormField.prototype, "tabindex", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PmfmFormField.prototype, "autofocus", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PmfmFormField.prototype, "style", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PmfmFormField.prototype, "showButtonIcons", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], PmfmFormField.prototype, "maxVisibleButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], PmfmFormField.prototype, "acquisitionNumber", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PmfmFormField.prototype, "defaultLatitudeSign", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PmfmFormField.prototype, "defaultLongitudeSign", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PmfmFormField.prototype, "i18nPrefix", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PmfmFormField.prototype, "i18nSuffix", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmFormField.prototype, "listenStatusChanges", void 0); +__decorate([ + Output('keyup.enter'), + __metadata("design:type", Object) +], PmfmFormField.prototype, "onPressEnter", void 0); +__decorate([ + Output('focus'), + __metadata("design:type", Object) +], PmfmFormField.prototype, "focused", void 0); +__decorate([ + Output('blur'), + __metadata("design:type", Object) +], PmfmFormField.prototype, "blurred", void 0); +__decorate([ + Output('click'), + __metadata("design:type", Object) +], PmfmFormField.prototype, "clicked", void 0); +__decorate([ + ViewChild('matInput'), + __metadata("design:type", ElementRef) +], PmfmFormField.prototype, "matInput", void 0); +PmfmFormField = PmfmFormField_1 = __decorate([ + Component({ + selector: 'app-pmfm-field', + styleUrls: ['./pmfm.form-field.component.scss'], + templateUrl: './pmfm.form-field.component.html', + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => PmfmFormField_1), + multi: true + } + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __param(4, Optional()), + __metadata("design:paramtypes", [LocalSettingsService, + ChangeDetectorRef, + UntypedFormBuilder, + PmfmNamePipe, + FormGroupDirective]) +], PmfmFormField); +export { PmfmFormField }; +//# sourceMappingURL=pmfm.form-field.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/field/pmfm.form-field.component.js.map b/out-tsc/app/app/referential/pmfm/field/pmfm.form-field.component.js.map new file mode 100644 index 000000000..4872dbdfd --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/field/pmfm.form-field.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfm.form-field.component.js","sourceRoot":"","sources":["../../../../../../src/app/referential/pmfm/field/pmfm.form-field.component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/field/pmfm.form-field.module.js b/out-tsc/app/app/referential/pmfm/field/pmfm.form-field.module.js new file mode 100644 index 000000000..151b7c00b --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/field/pmfm.form-field.module.js @@ -0,0 +1,34 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { PmfmQvFormField } from './pmfm-qv.form-field.component'; +import { PmfmFormField } from './pmfm.form-field.component'; +import { TranslateModule } from '@ngx-translate/core'; +import { CommonModule } from '@angular/common'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppReferentialPipesModule } from '@app/referential/pipes/referential-pipes.module'; +let AppPmfmFormFieldModule = class AppPmfmFormFieldModule { +}; +AppPmfmFormFieldModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TranslateModule.forChild(), + // App modules + AppCoreModule, + AppReferentialPipesModule + ], + declarations: [ + // Components + PmfmFormField, + PmfmQvFormField + ], + exports: [ + TranslateModule, + // Components + PmfmFormField, + PmfmQvFormField + ], + }) +], AppPmfmFormFieldModule); +export { AppPmfmFormFieldModule }; +//# sourceMappingURL=pmfm.form-field.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/field/pmfm.form-field.module.js.map b/out-tsc/app/app/referential/pmfm/field/pmfm.form-field.module.js.map new file mode 100644 index 000000000..d36f30e06 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/field/pmfm.form-field.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfm.form-field.module.js","sourceRoot":"","sources":["../../../../../../src/app/referential/pmfm/field/pmfm.form-field.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAyBrF,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;CAClC,CAAA;AADY,sBAAsB;IAvBlC,QAAQ,CAAC;QACN,OAAO,EAAE;YACL,YAAY;YACZ,eAAe,CAAC,QAAQ,EAAE;YAE1B,cAAc;YACd,aAAa;YACb,yBAAyB;SAC5B;QACH,YAAY,EAAE;YAEZ,aAAa;YACb,aAAa;YACb,eAAe;SAChB;QACD,OAAO,EAAE;YACP,eAAe;YAEf,aAAa;YACb,aAAa;YACb,eAAe;SAChB;KACF,CAAC;GACW,sBAAsB,CAClC;SADY,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/method/method-routing.module.js b/out-tsc/app/app/referential/pmfm/method/method-routing.module.js new file mode 100644 index 000000000..e82fcd666 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/method/method-routing.module.js @@ -0,0 +1,28 @@ +import { __decorate } from "tslib"; +import { RouterModule } from '@angular/router'; +import { NgModule } from '@angular/core'; +import { MethodPage } from '@app/referential/pmfm/method/method.page'; +import { AppPmfmMethodModule } from '@app/referential/pmfm/method/method.module'; +const routes = [ + { + path: ':id', + pathMatch: 'full', + component: MethodPage, + data: { + profile: 'ADMIN' + } + } +]; +let AppPmfmMethodRoutingModule = class AppPmfmMethodRoutingModule { +}; +AppPmfmMethodRoutingModule = __decorate([ + NgModule({ + imports: [ + AppPmfmMethodModule, + RouterModule.forChild(routes) + ], + exports: [RouterModule] + }) +], AppPmfmMethodRoutingModule); +export { AppPmfmMethodRoutingModule }; +//# sourceMappingURL=method-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/method/method-routing.module.js.map b/out-tsc/app/app/referential/pmfm/method/method-routing.module.js.map new file mode 100644 index 000000000..95c39d634 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/method/method-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"method-routing.module.js","sourceRoot":"","sources":["../../../../../../src/app/referential/pmfm/method/method-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAEjF,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,UAAU;QACrB,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO;SACjB;KACF;CACF,CAAC;AASK,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;CAAI,CAAA;AAA9B,0BAA0B;IAPtC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,mBAAmB;YACnB,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC9B;QACD,OAAO,EAAE,CAAC,YAAY,CAAC;KACxB,CAAC;GACW,0BAA0B,CAAI;SAA9B,0BAA0B"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/method/method.model.js b/out-tsc/app/app/referential/pmfm/method/method.model.js new file mode 100644 index 000000000..a30b25e5a --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/method/method.model.js @@ -0,0 +1,29 @@ +var Method_1; +import { __decorate, __metadata } from "tslib"; +import { BaseReferential, EntityClass } from '@sumaris-net/ngx-components'; +let Method = Method_1 = class Method extends BaseReferential { + constructor() { + super(Method_1.TYPENAME); + this.isCalculated = null; + this.isEstimated = null; + this.entityName = Method_1.ENTITY_NAME; + } + fromObject(source) { + super.fromObject(source); + this.entityName = Method_1.ENTITY_NAME; + this.isCalculated = source.isCalculated; + this.isEstimated = source.isEstimated; + return this; + } + asObject(options) { + const target = super.asObject(options); + return target; + } +}; +Method.ENTITY_NAME = 'Method'; +Method = Method_1 = __decorate([ + EntityClass({ typename: 'MethodVO' }), + __metadata("design:paramtypes", []) +], Method); +export { Method }; +//# sourceMappingURL=method.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/method/method.model.js.map b/out-tsc/app/app/referential/pmfm/method/method.model.js.map new file mode 100644 index 000000000..90faaf251 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/method/method.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"method.model.js","sourceRoot":"","sources":["../../../../../../src/app/referential/pmfm/method/method.model.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,eAAe,EAAyB,WAAW,EAAa,MAAM,6BAA6B,CAAC;AAGtG,IAAM,MAAM,cAAZ,MAAM,MAAO,SAAQ,eAAuB;IAQjD;QACE,KAAK,CAAC,QAAM,CAAC,QAAQ,CAAC,CAAC;QAJzB,iBAAY,GAAY,IAAI,CAAC;QAC7B,gBAAW,GAAY,IAAI,CAAC;QAI1B,IAAI,CAAC,UAAU,GAAG,QAAM,CAAC,WAAW,CAAC;IACvC,CAAC;IAED,UAAU,CAAC,MAAW;QACpB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,QAAM,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,OAA+B;QACtC,MAAM,MAAM,GAAQ,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;;AAtBM,kBAAW,GAAG,QAAQ,CAAC;AAFnB,MAAM;IADlB,WAAW,CAAC,EAAC,QAAQ,EAAE,UAAU,EAAC,CAAC;;GACvB,MAAM,CAyBlB;SAzBY,MAAM"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/method/method.module.js b/out-tsc/app/app/referential/pmfm/method/method.module.js new file mode 100644 index 000000000..745c3f829 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/method/method.module.js @@ -0,0 +1,35 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { TranslateModule } from '@ngx-translate/core'; +import { CommonModule } from '@angular/common'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppReferentialFormModule } from '@app/referential/form/referential-form.module'; +import { AppReferentialPipesModule } from '@app/referential/pipes/referential-pipes.module'; +import { AppReferentialTableModule } from '@app/referential/table/referential-table.module'; +import { MethodPage } from '@app/referential/pmfm/method/method.page'; +let AppPmfmMethodModule = class AppPmfmMethodModule { +}; +AppPmfmMethodModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TranslateModule.forChild(), + AppCoreModule, + // Sub modules + AppReferentialFormModule, + AppReferentialPipesModule, + AppReferentialTableModule + ], + declarations: [ + // Components + MethodPage + ], + exports: [ + TranslateModule, + // Components + MethodPage + ], + }) +], AppPmfmMethodModule); +export { AppPmfmMethodModule }; +//# sourceMappingURL=method.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/method/method.module.js.map b/out-tsc/app/app/referential/pmfm/method/method.module.js.map new file mode 100644 index 000000000..3f46ad5d2 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/method/method.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"method.module.js","sourceRoot":"","sources":["../../../../../../src/app/referential/pmfm/method/method.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AA0B/D,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;CAC/B,CAAA;AADY,mBAAmB;IAxB/B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,eAAe,CAAC,QAAQ,EAAE;YAE1B,aAAa;YAEb,cAAc;YACd,wBAAwB;YACxB,yBAAyB;YACzB,yBAAyB;SAC1B;QACD,YAAY,EAAE;YAEZ,aAAa;YACb,UAAU;SACX;QACD,OAAO,EAAE;YACP,eAAe;YAEf,aAAa;YACb,UAAU;SACX;KACF,CAAC;GACW,mBAAmB,CAC/B;SADY,mBAAmB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/method/method.page.js b/out-tsc/app/app/referential/pmfm/method/method.page.js new file mode 100644 index 000000000..c72d11866 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/method/method.page.js @@ -0,0 +1,57 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, ViewChild } from '@angular/core'; +import { AppReferentialEditor } from '@app/referential/form/referential-editor.class'; +import { ReferentialForm } from '@app/referential/form/referential.form'; +import { Method } from '@app/referential/pmfm/method/method.model'; +import { MethodService } from '@app/referential/pmfm/method/method.service'; +import { MethodValidatorService } from '@app/referential/pmfm/method/method.validator'; +let MethodPage = class MethodPage extends AppReferentialEditor { + constructor(injector, dataService, validatorService) { + super(injector, Method, dataService, validatorService.getFormGroup(), { + entityName: Method.ENTITY_NAME, + uniqueLabel: true, + withLevels: false, + tabCount: 1, + }); + this.registerFieldDefinition({ + key: 'isCalculated', + label: `REFERENTIAL.METHOD.IS_CALCULATED`, + type: 'boolean', + }); + this.registerFieldDefinition({ + key: 'isEstimated', + label: `REFERENTIAL.METHOD.IS_ESTIMATED`, + type: 'boolean', + }); + } + /* -- protected methods -- */ + registerForms() { + this.addChildForms([this.referentialForm]); + } + setValue(data) { + super.setValue(data); + } + onEntitySaved(data) { + return __awaiter(this, void 0, void 0, function* () { }); + } + getFirstInvalidTabIndex() { + if (this.referentialForm.invalid) + return 0; + return -1; + } +}; +__decorate([ + ViewChild('referentialForm', { static: true }), + __metadata("design:type", ReferentialForm) +], MethodPage.prototype, "referentialForm", void 0); +MethodPage = __decorate([ + Component({ + selector: 'app-method', + templateUrl: 'method.page.html', + styleUrls: ['method.page.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, MethodService, MethodValidatorService]) +], MethodPage); +export { MethodPage }; +//# sourceMappingURL=method.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/method/method.page.js.map b/out-tsc/app/app/referential/pmfm/method/method.page.js.map new file mode 100644 index 000000000..f24bb85be --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/method/method.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"method.page.js","sourceRoot":"","sources":["../../../../../../src/app/referential/pmfm/method/method.page.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAExF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AAQhF,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,oBAA2C;IAGzE,YAAY,QAAkB,EAAE,WAA0B,EAAE,gBAAwC;QAClG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,CAAC,YAAY,EAAE,EAAE;YACpE,UAAU,EAAE,MAAM,CAAC,WAAW;YAC9B,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;QAEH,IAAI,CAAC,uBAAuB,CAAC;YAC3B,GAAG,EAAE,cAAc;YACnB,KAAK,EAAE,kCAAkC;YACzC,IAAI,EAAE,SAAS;SAChB,CAAC,CAAC;QAEH,IAAI,CAAC,uBAAuB,CAAC;YAC3B,GAAG,EAAE,aAAa;YAClB,KAAK,EAAE,iCAAiC;YACxC,IAAI,EAAE,SAAS;SAChB,CAAC,CAAC;IACL,CAAC;IAED,6BAA6B;IAEnB,aAAa;QACrB,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IAC7C,CAAC;IAES,QAAQ,CAAC,IAAY;QAC7B,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAEe,aAAa,CAAC,IAAiB;8DAAkB,CAAC;KAAA;IAExD,uBAAuB;QAC/B,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;CACF,CAAA;AAvCC;IAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;8BAAkB,eAAe;mDAAC;AADtE,UAAU;IANtB,SAAS,CAAC;QACT,QAAQ,EAAE,YAAY;QACtB,WAAW,EAAE,kBAAkB;QAC/B,SAAS,EAAE,CAAC,kBAAkB,CAAC;QAC/B,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAIsB,QAAQ,EAAe,aAAa,EAAoB,sBAAsB;GAHzF,UAAU,CAwCtB;SAxCY,UAAU"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/method/method.service.js b/out-tsc/app/app/referential/pmfm/method/method.service.js new file mode 100644 index 000000000..4f0daf1f3 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/method/method.service.js @@ -0,0 +1,38 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { ReferentialService } from '@app/referential/services/referential.service'; +import { AccountService, GraphqlService, LocalSettingsService, toBoolean } from '@sumaris-net/ngx-components'; +import { Method } from '@app/referential/pmfm/method/method.model'; +let MethodService = class MethodService extends ReferentialService { + constructor(graphql, accountService, settings) { + super(graphql, accountService, settings, Method); + this.graphql = graphql; + this.accountService = accountService; + this.settings = settings; + } + asObject(source, opts) { + const target = super.asObject(source, opts); + target.properties = { + isEstimated: source.isEstimated, + isCalculated: source.isCalculated, + }; + delete target.isEstimated; + delete target.isCalculated; + return target; + } + fromObject(source, opts) { + var _a, _b; + const target = super.fromObject(source, opts); + target.isCalculated = toBoolean(source.isCalculated, (_a = source.properties) === null || _a === void 0 ? void 0 : _a.isCalculated); + target.isEstimated = toBoolean(source.isEstimated, (_b = source.properties) === null || _b === void 0 ? void 0 : _b.isEstimated); + return target; + } +}; +MethodService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [GraphqlService, + AccountService, + LocalSettingsService]) +], MethodService); +export { MethodService }; +//# sourceMappingURL=method.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/method/method.service.js.map b/out-tsc/app/app/referential/pmfm/method/method.service.js.map new file mode 100644 index 000000000..2817c4394 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/method/method.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"method.service.js","sourceRoot":"","sources":["../../../../../../src/app/referential/pmfm/method/method.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAiC,MAAM,+CAA+C,CAAC;AAClH,OAAO,EAAE,cAAc,EAAqB,cAAc,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACjI,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAK5D,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,kBAA0B;IAE3D,YAAsB,OAAuB,EACvB,cAA8B,EAC9B,QAA8B;QAClD,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAH7B,YAAO,GAAP,OAAO,CAAgB;QACvB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,aAAQ,GAAR,QAAQ,CAAsB;IAEpD,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,IAAU;QAEjC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,UAAU,GAAG;YAClB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,CAAC;QACF,OAAO,MAAM,CAAC,WAAW,CAAC;QAC1B,OAAO,MAAM,CAAC,YAAY,CAAC;QAE3B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,MAAW,EAAE,IAAU;;QAChC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,MAAA,MAAM,CAAC,UAAU,0CAAE,YAAY,CAAC,CAAC;QACtF,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,MAAA,MAAM,CAAC,UAAU,0CAAE,WAAW,CAAC,CAAC;QACnF,OAAO,MAAM,CAAC;IAChB,CAAC;CAEF,CAAA;AA5BY,aAAa;IADzB,UAAU,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;qCAGF,cAAc;QACP,cAAc;QACpB,oBAAoB;GAJzC,aAAa,CA4BzB;SA5BY,aAAa"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/method/method.validator.js b/out-tsc/app/app/referential/pmfm/method/method.validator.js new file mode 100644 index 000000000..e51f30e4c --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/method/method.validator.js @@ -0,0 +1,24 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { toBoolean } from '@sumaris-net/ngx-components'; +import { ReferentialValidatorService } from '@app/referential/services/validator/referential.validator'; +let MethodValidatorService = class MethodValidatorService extends ReferentialValidatorService { + constructor(formBuilder) { + super(formBuilder); + this.formBuilder = formBuilder; + } + getRowValidator() { + return this.getFormGroup(); + } + getFormGroupConfig(data, opts) { + const config = super.getFormGroupConfig(data, opts); + return Object.assign(Object.assign({}, config), { isCalculated: [toBoolean(data === null || data === void 0 ? void 0 : data.isCalculated, null), Validators.required], isEstimated: [toBoolean(data === null || data === void 0 ? void 0 : data.isEstimated, null), Validators.required] }); + } +}; +MethodValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder]) +], MethodValidatorService); +export { MethodValidatorService }; +//# sourceMappingURL=method.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/method/method.validator.js.map b/out-tsc/app/app/referential/pmfm/method/method.validator.js.map new file mode 100644 index 000000000..bc5a74c2b --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/method/method.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"method.validator.js","sourceRoot":"","sources":["../../../../../../src/app/referential/pmfm/method/method.validator.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAoB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,2DAA2D,CAAC;AAIjG,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,2BAA2B;IAErE,YACY,WAA+B;QAEzC,KAAK,CAAC,WAAW,CAAC,CAAC;QAFT,gBAAW,GAAX,WAAW,CAAoB;IAG3C,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED,kBAAkB,CAAC,IAAa,EAAE,IAA4D;QAC5F,MAAM,MAAM,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpD,uCACK,MAAM,KACT,YAAY,EAAE,CAAC,SAAS,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,EACxE,WAAW,EAAE,CAAC,SAAS,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,IACtE;IACJ,CAAC;CAEF,CAAA;AArBY,sBAAsB;IADlC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAIN,kBAAkB;GAHhC,sBAAsB,CAqBlC;SArBY,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/parameter/parameter-routing.module.js b/out-tsc/app/app/referential/pmfm/parameter/parameter-routing.module.js new file mode 100644 index 000000000..02edf9368 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/parameter/parameter-routing.module.js @@ -0,0 +1,28 @@ +import { __decorate } from "tslib"; +import { RouterModule } from '@angular/router'; +import { NgModule } from '@angular/core'; +import { ParameterPage } from '@app/referential/pmfm/parameter/parameter.page'; +import { AppPmfmParameterModule } from '@app/referential/pmfm/parameter/parameter.module'; +const routes = [ + { + path: ':id', + pathMatch: 'full', + component: ParameterPage, + data: { + profile: 'ADMIN' + } + } +]; +let AppPmfmParameterRoutingModule = class AppPmfmParameterRoutingModule { +}; +AppPmfmParameterRoutingModule = __decorate([ + NgModule({ + imports: [ + AppPmfmParameterModule, + RouterModule.forChild(routes) + ], + exports: [RouterModule] + }) +], AppPmfmParameterRoutingModule); +export { AppPmfmParameterRoutingModule }; +//# sourceMappingURL=parameter-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/parameter/parameter-routing.module.js.map b/out-tsc/app/app/referential/pmfm/parameter/parameter-routing.module.js.map new file mode 100644 index 000000000..32c52f1b0 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/parameter/parameter-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parameter-routing.module.js","sourceRoot":"","sources":["../../../../../../src/app/referential/pmfm/parameter/parameter-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAE1F,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,aAAa;QACxB,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO;SACjB;KACF;CACF,CAAC;AASK,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;CAAI,CAAA;AAAjC,6BAA6B;IAPzC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,sBAAsB;YACtB,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC9B;QACD,OAAO,EAAE,CAAC,YAAY,CAAC;KACxB,CAAC;GACW,6BAA6B,CAAI;SAAjC,6BAA6B"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/parameter/parameter.module.js b/out-tsc/app/app/referential/pmfm/parameter/parameter.module.js new file mode 100644 index 000000000..e59c41187 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/parameter/parameter.module.js @@ -0,0 +1,35 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { TranslateModule } from '@ngx-translate/core'; +import { CommonModule } from '@angular/common'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppReferentialFormModule } from '@app/referential/form/referential-form.module'; +import { AppReferentialPipesModule } from '@app/referential/pipes/referential-pipes.module'; +import { AppReferentialTableModule } from '@app/referential/table/referential-table.module'; +import { ParameterPage } from '@app/referential/pmfm/parameter/parameter.page'; +let AppPmfmParameterModule = class AppPmfmParameterModule { +}; +AppPmfmParameterModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TranslateModule.forChild(), + // App modules + AppCoreModule, + AppReferentialFormModule, + AppReferentialPipesModule, + AppReferentialTableModule + ], + declarations: [ + // Components + ParameterPage + ], + exports: [ + TranslateModule, + // Components + ParameterPage + ], + }) +], AppPmfmParameterModule); +export { AppPmfmParameterModule }; +//# sourceMappingURL=parameter.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/parameter/parameter.module.js.map b/out-tsc/app/app/referential/pmfm/parameter/parameter.module.js.map new file mode 100644 index 000000000..43a62f32b --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/parameter/parameter.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parameter.module.js","sourceRoot":"","sources":["../../../../../../src/app/referential/pmfm/parameter/parameter.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAyBxE,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;CAClC,CAAA;AADY,sBAAsB;IAvBlC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,eAAe,CAAC,QAAQ,EAAE;YAE1B,cAAc;YACd,aAAa;YACb,wBAAwB;YACxB,yBAAyB;YACzB,yBAAyB;SAC1B;QACD,YAAY,EAAE;YAEZ,aAAa;YACb,aAAa;SACd;QACD,OAAO,EAAE;YACP,eAAe;YAEf,aAAa;YACb,aAAa;SACd;KACF,CAAC;GACW,sBAAsB,CAClC;SADY,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/parameter/parameter.page.js b/out-tsc/app/app/referential/pmfm/parameter/parameter.page.js new file mode 100644 index 000000000..f12ad3e4e --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/parameter/parameter.page.js @@ -0,0 +1,163 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, ViewChild } from '@angular/core'; +import { ValidatorService } from '@e-is/ngx-material-table'; +import { ReferentialForm } from '../../form/referential.form'; +import { ParameterValidatorService } from '../../services/validator/parameter.validator'; +import { AccountService, AppEntityEditor, fadeInOutAnimation, isNil, referentialToString, } from '@sumaris-net/ngx-components'; +import { Parameter } from '../../services/model/parameter.model'; +import { ParameterService } from '../../services/parameter.service'; +import { ReferentialRefService } from '../../services/referential-ref.service'; +import { environment } from '@environments/environment'; +import { SimpleReferentialTable } from '../../table/referential-simple.table'; +let ParameterPage = class ParameterPage extends AppEntityEditor { + constructor(injector, accountService, validatorService, parameterService, referentialRefService) { + super(injector, Parameter, parameterService, { + tabCount: 1 + }); + this.injector = injector; + this.accountService = accountService; + this.validatorService = validatorService; + this.parameterService = parameterService; + this.referentialRefService = referentialRefService; + this.referentialToString = referentialToString; + this.form = validatorService.getFormGroup(); + // default values + this.defaultBackHref = '/referential/list?entity=Parameter'; + this.canEdit = this.accountService.isAdmin(); + this.tabCount = 2; + this.debug = !environment.production; + this.fieldDefinitions = { + type: { + key: `type`, + label: `REFERENTIAL.PARAMETER.TYPE`, + type: 'enum', + required: true, + values: ['double', 'string', 'qualitative_value', 'date', 'boolean'] + .map(key => ({ key, value: ('REFERENTIAL.PARAMETER.TYPE_ENUM.' + key.toUpperCase()) })) + } + }; + } + get type() { + return this.form.controls.type.value; + } + get isQualitative() { + return this.type === 'qualitative_value'; + } + ngOnInit() { + super.ngOnInit(); + // Set entity name (required for referential form validator) + this.referentialForm.entityName = Parameter.ENTITY_NAME; + // Check label is unique + this.form.get('label') + .setAsyncValidators((control) => __awaiter(this, void 0, void 0, function* () { + const label = control.enabled && control.value; + return label && (yield this.parameterService.existsByLabel(label, { excludedId: this.data && this.data.id })) ? + { unique: true } : null; + })); + this.markAsReady(); + } + /* -- protected methods -- */ + updateView(data, opts) { + const _super = Object.create(null, { + updateView: { get: () => super.updateView } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.updateView.call(this, data, opts); + this.tabCount = this.isQualitative ? 2 : 1; + }); + } + enable() { + super.enable(); + if (!this.isNewData) { + this.form.get('label').disable(); + } + } + registerForms() { + this.addChildForms([this.qualitativeValuesTable, this.referentialForm]); + } + setValue(data) { + if (!data) + return; // Skip + const json = data.asObject(); + json.qualitativeValues = json.qualitativeValues || []; // Make sure to it array + this.form.patchValue(json, { emitEvent: false }); + // QualitativeValues + this.qualitativeValuesTable.value = data.qualitativeValues && data.qualitativeValues.slice() || []; // force update + this.markAsPristine(); + } + getValue() { + const _super = Object.create(null, { + getValue: { get: () => super.getValue } + }); + return __awaiter(this, void 0, void 0, function* () { + const data = yield _super.getValue.call(this); + // Re add label, because missing when field disable + data.label = this.form.get('label').value; + data.label = data.label && data.label.toUpperCase(); + yield this.qualitativeValuesTable.save(); + data.qualitativeValues = this.qualitativeValuesTable.value; + return data; + }); + } + computeTitle(data) { + // new data + if (!data || isNil(data.id)) { + return this.translate.get('REFERENTIAL.PARAMETER.NEW.TITLE').toPromise(); + } + // Existing data + return this.translate.get('REFERENTIAL.PARAMETER.EDIT.TITLE', data).toPromise(); + } + computePageHistory(title) { + const _super = Object.create(null, { + computePageHistory: { get: () => super.computePageHistory } + }); + return __awaiter(this, void 0, void 0, function* () { + return Object.assign(Object.assign({}, (yield _super.computePageHistory.call(this, title))), { title: `${this.data.label} - ${this.data.name}`, subtitle: 'REFERENTIAL.ENTITY.PARAMETER', icon: 'list' }); + }); + } + getFirstInvalidTabIndex() { + if (this.referentialForm.invalid) + return 0; + if (this.isQualitative && this.qualitativeValuesTable.invalid) + return 1; + return -1; + } + onEntityLoaded(data, options) { + const _super = Object.create(null, { + onEntityLoaded: { get: () => super.onEntityLoaded } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.onEntityLoaded.call(this, data, options); + this.canEdit = this.canUserWrite(data); + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + ViewChild('referentialForm', { static: true }), + __metadata("design:type", ReferentialForm) +], ParameterPage.prototype, "referentialForm", void 0); +__decorate([ + ViewChild('qualitativeValuesTable', { static: true }), + __metadata("design:type", SimpleReferentialTable) +], ParameterPage.prototype, "qualitativeValuesTable", void 0); +ParameterPage = __decorate([ + Component({ + selector: 'app-parameter', + templateUrl: 'parameter.page.html', + providers: [ + { provide: ValidatorService, useExisting: ParameterValidatorService } + ], + animations: [fadeInOutAnimation], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + AccountService, + ParameterValidatorService, + ParameterService, + ReferentialRefService]) +], ParameterPage); +export { ParameterPage }; +//# sourceMappingURL=parameter.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/parameter/parameter.page.js.map b/out-tsc/app/app/referential/pmfm/parameter/parameter.page.js.map new file mode 100644 index 000000000..1ebdcf544 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/parameter/parameter.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parameter.page.js","sourceRoot":"","sources":["../../../../../../src/app/referential/pmfm/parameter/parameter.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/pmfm-routing.module.js b/out-tsc/app/app/referential/pmfm/pmfm-routing.module.js new file mode 100644 index 000000000..f22696022 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/pmfm-routing.module.js @@ -0,0 +1,28 @@ +import { __decorate } from "tslib"; +import { RouterModule } from '@angular/router'; +import { NgModule } from '@angular/core'; +import { PmfmPage } from './pmfm.page'; +import { AppPmfmModule } from '@app/referential/pmfm/pmfm.module'; +const routes = [ + { + path: ':id', + pathMatch: 'full', + component: PmfmPage, + data: { + profile: 'ADMIN' + } + } +]; +let AppPmfmRoutingModule = class AppPmfmRoutingModule { +}; +AppPmfmRoutingModule = __decorate([ + NgModule({ + imports: [ + AppPmfmModule, + RouterModule.forChild(routes) + ], + exports: [RouterModule] + }) +], AppPmfmRoutingModule); +export { AppPmfmRoutingModule }; +//# sourceMappingURL=pmfm-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/pmfm-routing.module.js.map b/out-tsc/app/app/referential/pmfm/pmfm-routing.module.js.map new file mode 100644 index 000000000..92c6993ad --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/pmfm-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfm-routing.module.js","sourceRoot":"","sources":["../../../../../src/app/referential/pmfm/pmfm-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,QAAQ;QACnB,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO;SACjB;KACF;CACF,CAAC;AASK,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAAI,CAAA;AAAxB,oBAAoB;IAPhC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC9B;QACD,OAAO,EAAE,CAAC,YAAY,CAAC;KACxB,CAAC;GACW,oBAAoB,CAAI;SAAxB,oBAAoB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/pmfm.module.js b/out-tsc/app/app/referential/pmfm/pmfm.module.js new file mode 100644 index 000000000..d365d1bce --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/pmfm.module.js @@ -0,0 +1,35 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { PmfmPage } from './pmfm.page'; +import { TranslateModule } from '@ngx-translate/core'; +import { CommonModule } from '@angular/common'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppReferentialFormModule } from '@app/referential/form/referential-form.module'; +import { AppReferentialPipesModule } from '@app/referential/pipes/referential-pipes.module'; +import { AppReferentialTableModule } from '@app/referential/table/referential-table.module'; +let AppPmfmModule = class AppPmfmModule { +}; +AppPmfmModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TranslateModule.forChild(), + // App modules + AppCoreModule, + AppReferentialFormModule, + AppReferentialPipesModule, + AppReferentialTableModule, + ], + declarations: [ + // Components + PmfmPage, + ], + exports: [ + TranslateModule, + // Components + PmfmPage, + ], + }) +], AppPmfmModule); +export { AppPmfmModule }; +//# sourceMappingURL=pmfm.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/pmfm.module.js.map b/out-tsc/app/app/referential/pmfm/pmfm.module.js.map new file mode 100644 index 000000000..91621089b --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/pmfm.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfm.module.js","sourceRoot":"","sources":["../../../../../src/app/referential/pmfm/pmfm.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AA6BrF,IAAM,aAAa,GAAnB,MAAM,aAAa;CACzB,CAAA;AADY,aAAa;IAvBzB,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,eAAe,CAAC,QAAQ,EAAE;YAE1B,cAAc;YACd,aAAa;YACb,wBAAwB;YACxB,yBAAyB;YACzB,yBAAyB;SAC1B;QACD,YAAY,EAAE;YAEZ,aAAa;YACb,QAAQ;SACT;QACD,OAAO,EAAE;YACP,eAAe;YAEf,aAAa;YACb,QAAQ;SACT;KACF,CAAC;GACW,aAAa,CACzB;SADY,aAAa"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/pmfm.page.js b/out-tsc/app/app/referential/pmfm/pmfm.page.js new file mode 100644 index 000000000..242da8452 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/pmfm.page.js @@ -0,0 +1,336 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, ViewChild } from '@angular/core'; +import { ValidatorService } from '@e-is/ngx-material-table'; +import { AccountService, AppEntityEditor, fadeInOutAnimation, isEmptyArray, isNil, isNilOrBlank, isNotEmptyArray, joinProperties, joinPropertiesPath, Referential, referentialToString, ReferentialUtils, } from '@sumaris-net/ngx-components'; +import { ReferentialForm } from '../form/referential.form'; +import { PmfmValidatorService } from '../services/validator/pmfm.validator'; +import { Pmfm } from '../services/model/pmfm.model'; +import { PmfmService } from '../services/pmfm.service'; +import { ReferentialRefService } from '../services/referential-ref.service'; +import { ParameterService } from '../services/parameter.service'; +import { filter, mergeMap } from 'rxjs/operators'; +import { BehaviorSubject } from 'rxjs'; +import { environment } from '@environments/environment'; +import { SelectReferentialModal } from '@app/referential/table/select-referential.modal'; +import { IonCheckbox, ModalController } from '@ionic/angular'; +import { SimpleReferentialTable } from '@app/referential/table/referential-simple.table'; +import { UnitIds } from '@app/referential/services/model/model.enum'; +let PmfmPage = class PmfmPage extends AppEntityEditor { + constructor(injector, accountService, validatorService, pmfmService, parameterService, referentialRefService, modalCtrl) { + super(injector, Pmfm, pmfmService, { tabCount: 2 }); + this.injector = injector; + this.accountService = accountService; + this.validatorService = validatorService; + this.pmfmService = pmfmService; + this.parameterService = parameterService; + this.referentialRefService = referentialRefService; + this.modalCtrl = modalCtrl; + this.$parameter = new BehaviorSubject(null); + this.useDefaultQualitativesValues = true; + this.referentialToString = referentialToString; + this.form = validatorService.getFormGroup(); + // default values + this.defaultBackHref = '/referential/list?entity=Pmfm'; + this.debug = !environment.production; + } + get matrix() { + return this.form.controls.matrix.value; + } + get hasMatrix() { + return ReferentialUtils.isNotEmpty(this.matrix); + } + ngOnInit() { + super.ngOnInit(); + // Set entity name (required for referential form validator) + this.referentialForm.entityName = 'Pmfm'; + const autocompleteConfig = { + suggestFn: (value, opts) => this.referentialRefService.suggest(value, opts), + displayWith: (value) => value && joinPropertiesPath(value, ['label', 'name']), + attributes: ['label', 'name'], + columnSizes: [6, 6], + }; + this.fieldDefinitions = { + parameter: { + key: `parameter`, + label: `REFERENTIAL.PMFM.PARAMETER`, + type: 'entity', + autocomplete: Object.assign(Object.assign({}, autocompleteConfig), { filter: { entityName: 'Parameter' }, showAllOnFocus: false }), + }, + unit: { + key: `unit`, + label: `REFERENTIAL.PMFM.UNIT`, + type: 'entity', + autocomplete: Object.assign(Object.assign({}, autocompleteConfig), { attributes: ['label'], filter: { entityName: 'Unit' }, showAllOnFocus: false }), + }, + // Numerical options + minValue: { + key: `minValue`, + label: `REFERENTIAL.PMFM.MIN_VALUE`, + type: 'double', + }, + maxValue: { + key: `maxValue`, + label: `REFERENTIAL.PMFM.MAX_VALUE`, + type: 'double', + }, + defaultValue: { + key: `defaultValue`, + label: `REFERENTIAL.PMFM.DEFAULT_VALUE`, + type: 'double', + }, + maximumNumberDecimals: { + key: `maximumNumberDecimals`, + label: `REFERENTIAL.PMFM.MAXIMUM_NUMBER_DECIMALS`, + type: 'integer', + minValue: 0, + }, + signifFiguresNumber: { + key: `signifFiguresNumber`, + label: `REFERENTIAL.PMFM.SIGNIF_FIGURES_NUMBER`, + type: 'integer', + minValue: 0, + }, + precision: { + key: `precision`, + label: `REFERENTIAL.PMFM.PRECISION`, + type: 'double', + minValue: 0, + }, + matrix: { + key: `matrix`, + label: `REFERENTIAL.PMFM.MATRIX`, + type: 'entity', + autocomplete: Object.assign(Object.assign({}, autocompleteConfig), { attributes: ['id', 'name'], filter: { entityName: 'Matrix' }, showAllOnFocus: false }), + }, + fraction: { + key: `fraction`, + label: `REFERENTIAL.PMFM.FRACTION`, + type: 'entity', + autocomplete: Object.assign(Object.assign({}, autocompleteConfig), { attributes: ['id', 'name'], filter: { entityName: 'Fraction' }, showAllOnFocus: false }), + }, + method: { + key: `method`, + label: `REFERENTIAL.PMFM.METHOD`, + type: 'entity', + autocomplete: Object.assign(Object.assign({}, autocompleteConfig), { attributes: ['id', 'name'], filter: { entityName: 'Method' }, showAllOnFocus: false }), + }, + }; + // TODO : See #450 (need to implement `levelIds[]` to get "n to n" relation between Fraction and Matrix) + // Check fraction + // this.form.get('fraction') + // .setAsyncValidators(async (control: AbstractControl) => { + // const value = control.enabled && control.value; + // return value && (!this.matrix || value.levelId !== this.matrix.id) ? {entity: true} : null; + // }); + // Listen for parameter + this.registerSubscription(this.form + .get('parameter') + .valueChanges.pipe(filter(ReferentialUtils.isNotEmpty), mergeMap((p) => this.parameterService.load(p.id))) + .subscribe((p) => { + // If qualitative value: use 'None' unit + if (p.isQualitative) { + this.form.get('unit').setValue({ id: UnitIds.NONE }); + } + else { + // Remove default unit (added just before) + const unit = this.form.get('unit').value; + if (unit && unit.id === UnitIds.NONE && !unit.label) { + this.form.get('unit').setValue(null, { emitEvent: false }); + } + } + this.$parameter.next(p); + })); + } + ngOnDestroy() { + super.ngOnDestroy(); + this.$parameter.complete(); + } + addNewParameter() { + return __awaiter(this, void 0, void 0, function* () { + yield this.router.navigateByUrl('/referential/parameter/new'); + return true; + }); + } + openParameter(parameter) { + return __awaiter(this, void 0, void 0, function* () { + parameter = parameter || this.$parameter.value; + if (isNil(parameter)) + return; + const succeed = yield this.router.navigateByUrl(`/referential/parameter/${parameter.id}?label=${parameter.label}`); + return succeed; + }); + } + /* -- protected methods -- */ + registerForms() { + this.addChildForms([this.referentialForm, this.qualitativeValuesTable]); + } + setValue(data) { + var _a; + if (!data) + return; // Skip + const json = data.asObject(); + json.entityName = Pmfm.ENTITY_NAME; + this.form.patchValue(json, { emitEvent: false }); + // qualitativeValues + if (isNilOrBlank(data.qualitativeValues)) { + this.qualitativeValuesTable.value = ((_a = data.parameter) === null || _a === void 0 ? void 0 : _a.qualitativeValues) || []; + this.btnUseDefaultQualitativeValues.checked = true; + this.useDefaultQualitativesValues = true; + } + else { + this.qualitativeValuesTable.value = this.data.qualitativeValues.map((d) => Referential.fromObject(d.asObject())); + this.btnUseDefaultQualitativeValues.checked = false; + this.useDefaultQualitativesValues = false; + } + this.markAsPristine(); + } + getValue() { + const _super = Object.create(null, { + getValue: { get: () => super.getValue } + }); + return __awaiter(this, void 0, void 0, function* () { + const data = yield _super.getValue.call(this); + // Re add label, because missing when field disable + data.label = this.form.get('label').value; + data.label = data.label && data.label.toUpperCase(); + data.qualitativeValues = this.useDefaultQualitativesValues ? null : this.qualitativeValuesTable.value; + return data; + }); + } + computeTitle(data) { + // new data + if (!data || isNil(data.id)) { + return this.translate.get('REFERENTIAL.PMFM.NEW.TITLE').toPromise(); + } + // Existing data + return this.translate.get('REFERENTIAL.PMFM.EDIT.TITLE', { title: joinProperties(this.data, ['label', 'name']) }).toPromise(); + } + computePageHistory(title) { + const _super = Object.create(null, { + computePageHistory: { get: () => super.computePageHistory } + }); + return __awaiter(this, void 0, void 0, function* () { + return Object.assign(Object.assign({}, (yield _super.computePageHistory.call(this, title))), { title: joinProperties(this.data, ['label', 'name']), subtitle: 'REFERENTIAL.ENTITY.PMFM', icon: 'list' }); + }); + } + getFirstInvalidTabIndex() { + if (this.referentialForm.invalid) + return 0; + return 0; + } + onNewEntity(data, options) { + const _super = Object.create(null, { + onNewEntity: { get: () => super.onNewEntity } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.onNewEntity.call(this, data, options); + // Check label is unique + this.form.get('label').setAsyncValidators((control) => __awaiter(this, void 0, void 0, function* () { + const label = control.enabled && control.value; + return label && (yield this.pmfmService.existsByLabel(label, { excludedId: this.data.id })) ? { unique: true } : null; + })); + this.markAsReady(); + }); + } + onEntityLoaded(data, options) { + const _super = Object.create(null, { + onEntityLoaded: { get: () => super.onEntityLoaded } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.onEntityLoaded.call(this, data, options); + this.markAsReady(); + }); + } + markForCheck() { + this.cd.markForCheck(); + } + toggleUseDefaultQualitativeValues(event) { + return __awaiter(this, void 0, void 0, function* () { + // NOTE : the status of the check btn is not already updated at this moment this is why is it inverted + if (!this.btnUseDefaultQualitativeValues.checked) { + this.qualitativeValuesTable.value = this.data.parameter.qualitativeValues; + this.useDefaultQualitativesValues = true; + this.markAsDirty(); + } + else { + this.qualitativeValuesTable.value = null; + const data = yield this.openSelectReferentialModal(); + if (isNilOrBlank(data)) { + this.btnUseDefaultQualitativeValues.checked = true; + this.qualitativeValuesTable.value = this.data.parameter.qualitativeValues; + } + else { + this.useDefaultQualitativesValues = false; + } + } + }); + } + openSelectReferentialModal(opts) { + return __awaiter(this, void 0, void 0, function* () { + const excludedIds = (this.qualitativeValuesTable.value || []).map((q) => q.id); + const filter = { + entityName: 'QualitativeValue', + levelId: this.form.get('parameter').value.id, + excludedIds, + }; + console.debug(`[pmfm-page] Opening select PMFM modal, with filter:`, filter); + const hasTopModal = !!(yield this.modalCtrl.getTop()); + const modal = yield this.modalCtrl.create({ + component: SelectReferentialModal, + componentProps: Object.assign(Object.assign({}, opts), { allowMultipleSelection: true, showLevelFilter: false, filter }), + keyboardClose: true, + backdropDismiss: false, + cssClass: hasTopModal ? 'modal-large stack-modal' : 'modal-large', + }); + yield modal.present(); + const { data } = yield modal.onDidDismiss(); + if (isNotEmptyArray(data)) { + this.qualitativeValuesTable.value = isEmptyArray(this.qualitativeValuesTable.value) ? data : this.qualitativeValuesTable.value.concat(data); + this.markAsDirty(); + } + return data; + }); + } + onAfterDeleteQualitativeValueRows(deletedRows) { + var _a, _b; + this.markAsDirty(); + if (isEmptyArray(this.qualitativeValuesTable.value)) { + this.useDefaultQualitativesValues = true; + this.btnUseDefaultQualitativeValues.checked = true; + this.qualitativeValuesTable.value = ((_b = (_a = this.data) === null || _a === void 0 ? void 0 : _a.parameter) === null || _b === void 0 ? void 0 : _b.qualitativeValues) || []; + } + } + onQualitativeValueRowClick(row) { + this.qualitativeValuesTable.selection.toggle(row); + } +}; +__decorate([ + ViewChild('referentialForm', { static: true }), + __metadata("design:type", ReferentialForm) +], PmfmPage.prototype, "referentialForm", void 0); +__decorate([ + ViewChild('qualitativeValuesTable', { static: true }), + __metadata("design:type", SimpleReferentialTable) +], PmfmPage.prototype, "qualitativeValuesTable", void 0); +__decorate([ + ViewChild('btnUseDefaultQualitativeValues', { static: true }), + __metadata("design:type", IonCheckbox) +], PmfmPage.prototype, "btnUseDefaultQualitativeValues", void 0); +PmfmPage = __decorate([ + Component({ + selector: 'app-pmfm', + templateUrl: 'pmfm.page.html', + providers: [{ provide: ValidatorService, useExisting: PmfmValidatorService }], + animations: [fadeInOutAnimation], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + AccountService, + PmfmValidatorService, + PmfmService, + ParameterService, + ReferentialRefService, + ModalController]) +], PmfmPage); +export { PmfmPage }; +//# sourceMappingURL=pmfm.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/pmfm.page.js.map b/out-tsc/app/app/referential/pmfm/pmfm.page.js.map new file mode 100644 index 000000000..79d85ad90 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/pmfm.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfm.page.js","sourceRoot":"","sources":["../../../../../src/app/referential/pmfm/pmfm.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/table/pmfms.table.js b/out-tsc/app/app/referential/pmfm/table/pmfms.table.js new file mode 100644 index 000000000..23561f6d6 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/table/pmfms.table.js @@ -0,0 +1,85 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { UntypedFormBuilder } from '@angular/forms'; +import { AppTable, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, StatusById, StatusList } from '@sumaris-net/ngx-components'; +import { debounceTime, filter } from 'rxjs/operators'; +import { environment } from '@environments/environment'; +let PmfmsTable = class PmfmsTable extends AppTable { + constructor(injector, formBuilder, cd) { + super(injector, + // columns + RESERVED_START_COLUMNS + .concat([ + 'name', + 'unit', + 'matrix', + 'fraction', + 'method', + 'status' + ]) + .concat(RESERVED_END_COLUMNS)); + this.cd = cd; + this.statusList = StatusList; + this.statusById = StatusById; + this.showToolbar = false; + this.showFilter = true; + this.allowMultipleSelection = true; + this.showPaginator = true; + this.sticky = true; + this.i18nColumnPrefix = 'REFERENTIAL.'; + this.inlineEdition = false; + this.autoLoad = false; // waiting dataSource to be set + this.filterForm = formBuilder.group({ + searchText: [null] + }); + // Update filter when changes + this.registerSubscription(this.filterForm.valueChanges + .pipe(debounceTime(250), filter(() => this.filterForm.valid)) + // Applying the filter + .subscribe((json) => this.setFilter(Object.assign(Object.assign({}, this.filter), json), { emitEvent: this.mobile }))); + this.debug = !environment.production; + } + clearControlValue(event, formControl) { + if (event) + event.stopPropagation(); // Avoid to enter input the field + formControl.setValue(null); + return false; + } + /* -- protected methods -- */ + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmsTable.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmsTable.prototype, "showFilter", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmsTable.prototype, "allowMultipleSelection", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmsTable.prototype, "showPaginator", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmsTable.prototype, "sticky", void 0); +PmfmsTable = __decorate([ + Component({ + selector: 'app-pmfms-table', + templateUrl: './pmfms.table.html', + styleUrls: ['./pmfms.table.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + UntypedFormBuilder, + ChangeDetectorRef]) +], PmfmsTable); +export { PmfmsTable }; +//# sourceMappingURL=pmfms.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/table/pmfms.table.js.map b/out-tsc/app/app/referential/pmfm/table/pmfms.table.js.map new file mode 100644 index 000000000..e481618af --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/table/pmfms.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfms.table.js","sourceRoot":"","sources":["../../../../../../src/app/referential/pmfm/table/pmfms.table.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACvG,OAAO,EAAmB,kBAAkB,EAAoB,MAAM,gBAAgB,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC7H,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAUjD,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,QAA0B;IAaxD,YACE,QAAkB,EAClB,WAA+B,EACrB,EAAqB;QAE/B,KAAK,CAAC,QAAQ;QACZ,UAAU;QACV,sBAAsB;aACnB,MAAM,CAAC;YACN,MAAM;YACN,MAAM;YACN,QAAQ;YACR,UAAU;YACV,QAAQ;YACR,QAAQ;SAAC,CAAC;aACX,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAZzB,OAAE,GAAF,EAAE,CAAmB;QAZxB,eAAU,GAAG,UAAU,CAAC;QACxB,eAAU,GAAG,UAAU,CAAC;QAExB,gBAAW,GAAG,KAAK,CAAC;QACpB,eAAU,GAAG,IAAI,CAAC;QAClB,2BAAsB,GAAG,IAAI,CAAC;QAC9B,kBAAa,GAAG,IAAI,CAAC;QACrB,WAAM,GAAG,IAAI,CAAC;QAmBrB,IAAI,CAAC,gBAAgB,GAAG,cAAc,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,+BAA+B;QAEtD,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC;YAClC,UAAU,EAAE,CAAC,IAAI,CAAC;SACnB,CAAC,CAAC;QAEH,6BAA6B;QAC7B,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,UAAU,CAAC,YAAY;aACzB,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CACpC;YACD,sBAAsB;aACrB,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,iCAC5B,IAAI,CAAC,MAAM,GACX,IAAI,GACT,EAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC,CAAC,CAC/B,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;IACvC,CAAC;IAED,iBAAiB,CAAC,KAAY,EAAE,WAA4B;QAC1D,IAAI,KAAK;YAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,iCAAiC;QACrE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6BAA6B;IAEnB,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;CACF,CAAA;AA3DC;IAAC,KAAK,EAAE;;+CAAqB;AAC7B;IAAC,KAAK,EAAE;;8CAAmB;AAC3B;IAAC,KAAK,EAAE;;0DAA+B;AACvC;IAAC,KAAK,EAAE;;iDAAsB;AAC9B;IAAC,KAAK,EAAE;;0CAAe;AAXZ,UAAU;IANtB,SAAS,CAAC;QACT,QAAQ,EAAE,iBAAiB;QAC3B,WAAW,EAAE,oBAAoB;QACjC,SAAS,EAAE,CAAC,oBAAoB,CAAC;QACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAeY,QAAQ;QACL,kBAAkB;QACjB,iBAAiB;GAhBtB,UAAU,CAkEtB;SAlEY,UAAU"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/table/select-pmfm.modal.js b/out-tsc/app/app/referential/pmfm/table/select-pmfm.modal.js new file mode 100644 index 000000000..234b096df --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/table/select-pmfm.modal.js @@ -0,0 +1,34 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector } from '@angular/core'; +import { PmfmService } from '../../services/pmfm.service'; +import { Pmfm } from '../../services/model/pmfm.model'; +import { BaseSelectEntityModal } from '../../table/base-select-entity.modal'; +import { PmfmFilter } from '@app/referential/services/filter/pmfm.filter'; +let SelectPmfmModal = class SelectPmfmModal extends BaseSelectEntityModal { + constructor(injector, dataService, cd) { + super(injector, Pmfm, PmfmFilter, dataService, { + watchAllOptions: { + withDetails: true // Force to use PmfmFragment + } + }); + this.cd = cd; + } + computeTitle() { + return __awaiter(this, void 0, void 0, function* () { + return 'REFERENTIAL.ENTITY.PMFM'; + }); + } +}; +SelectPmfmModal = __decorate([ + Component({ + selector: 'app-select-pmfm-modal', + styleUrls: ['./select-pmfm.modal.scss'], + templateUrl: './select-pmfm.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + PmfmService, + ChangeDetectorRef]) +], SelectPmfmModal); +export { SelectPmfmModal }; +//# sourceMappingURL=select-pmfm.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/table/select-pmfm.modal.js.map b/out-tsc/app/app/referential/pmfm/table/select-pmfm.modal.js.map new file mode 100644 index 000000000..f348e3b2d --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/table/select-pmfm.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"select-pmfm.modal.js","sourceRoot":"","sources":["../../../../../../src/app/referential/pmfm/table/select-pmfm.modal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAU,MAAM,eAAe,CAAC;AACxG,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAC;AAcnE,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,qBAAuC;IAE1E,YACI,QAAkB,EAClB,WAAwB,EACd,EAAqB;QAEjC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAC9B,WAAW,EACX;YACE,eAAe,EAAE;gBACf,WAAW,EAAE,IAAI,CAAC,4BAA4B;aAC/C;SACF,CAAC,CAAC;QARO,OAAE,GAAF,EAAE,CAAmB;IASnC,CAAC;IAEe,YAAY;;YAC1B,OAAO,yBAAyB,CAAC;QACnC,CAAC;KAAA;CAEF,CAAA;AApBY,eAAe;IAN3B,SAAS,CAAC;QACT,QAAQ,EAAE,uBAAuB;QACjC,SAAS,EAAE,CAAC,0BAA0B,CAAC;QACvC,WAAW,EAAE,0BAA0B;QACvC,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAIc,QAAQ;QACL,WAAW;QACV,iBAAiB;GALxB,eAAe,CAoB3B;SApBY,eAAe"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/table/select-pmfm.module.js b/out-tsc/app/app/referential/pmfm/table/select-pmfm.module.js new file mode 100644 index 000000000..b426510ef --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/table/select-pmfm.module.js @@ -0,0 +1,33 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { TranslateModule } from '@ngx-translate/core'; +import { CommonModule } from '@angular/common'; +import { SelectPmfmModal } from './select-pmfm.modal'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppReferentialPipesModule } from '@app/referential/pipes/referential-pipes.module'; +import { PmfmsTable } from '@app/referential/pmfm/table/pmfms.table'; +let AppPmfmSelectModalModule = class AppPmfmSelectModalModule { +}; +AppPmfmSelectModalModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TranslateModule.forChild(), + // App modules + AppCoreModule, + AppReferentialPipesModule, + ], + declarations: [ + // Components + PmfmsTable, + SelectPmfmModal + ], + exports: [ + TranslateModule, + // Components + SelectPmfmModal + ], + }) +], AppPmfmSelectModalModule); +export { AppPmfmSelectModalModule }; +//# sourceMappingURL=select-pmfm.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/pmfm/table/select-pmfm.module.js.map b/out-tsc/app/app/referential/pmfm/table/select-pmfm.module.js.map new file mode 100644 index 000000000..551bed4e4 --- /dev/null +++ b/out-tsc/app/app/referential/pmfm/table/select-pmfm.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"select-pmfm.module.js","sourceRoot":"","sources":["../../../../../../src/app/referential/pmfm/table/select-pmfm.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAwB9D,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;CACpC,CAAA;AADY,wBAAwB;IAtBpC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,eAAe,CAAC,QAAQ,EAAE;YAE1B,cAAc;YACd,aAAa;YACb,yBAAyB;SAC1B;QACD,YAAY,EAAE;YAEZ,aAAa;YACb,UAAU;YACV,eAAe;SAChB;QACD,OAAO,EAAE;YACP,eAAe;YAEf,aAAa;YACb,eAAe;SAChB;KACF,CAAC;GACW,wBAAwB,CACpC;SADY,wBAAwB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/program/privilege/person-privileges.table.js b/out-tsc/app/app/referential/program/privilege/person-privileges.table.js new file mode 100644 index 000000000..9ca77e836 --- /dev/null +++ b/out-tsc/app/app/referential/program/privilege/person-privileges.table.js @@ -0,0 +1,111 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, Input } from '@angular/core'; +import { ValidatorService } from '@e-is/ngx-material-table'; +import { AppInMemoryTable, InMemoryEntitiesService, PersonService, PersonUtils, Referential, ReferentialUtils, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, StatusIds, } from '@sumaris-net/ngx-components'; +import { ReferentialFilter } from '@app/referential/services/filter/referential.filter'; +import { ProgramPersonValidatorService } from '@app/referential/program/privilege/program-person.validator'; +import { ProgramPerson } from '@app/referential/services/model/program.model'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +let PersonPrivilegesTable = class PersonPrivilegesTable extends AppInMemoryTable { + constructor(injector, validatorService, memoryDataService, personService, referentialRefService) { + super(injector, RESERVED_START_COLUMNS.concat(['person', 'department', 'privilege', 'location']).concat(RESERVED_END_COLUMNS), ProgramPerson, memoryDataService, validatorService); + this.validatorService = validatorService; + this.memoryDataService = memoryDataService; + this.personService = personService; + this.referentialRefService = referentialRefService; + this.showToolbar = true; + this.showError = true; + this.useSticky = false; + this.title = null; + this.locationLevelIds = null; + this.displayAttributes = { + department: undefined, + }; + this.defaultSortDirection = 'asc'; + this.defaultSortBy = 'id'; + this.i18nColumnPrefix = 'PROGRAM.PRIVILEGES.'; + this.inlineEdition = true; + } + ngOnInit() { + super.ngOnInit(); + // Person autocomplete + this.registerAutocompleteField('person', { + showAllOnFocus: false, + service: this.personService, + filter: { + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE], + }, + attributes: ['lastName', 'firstName', 'department.name'], + displayWith: PersonUtils.personToString, + mobile: this.mobile, + }); + this.memoryDataService.addSortByReplacement('person', 'person.' + this.autocompleteFields.person.attributes[0]); + // Department + this.displayAttributes.department = this.settings.getFieldDisplayAttributes('department'); + this.memoryDataService.addSortByReplacement('department', 'department.' + this.displayAttributes.department[0]); + this.registerAutocompleteField('privilege', { + service: this.referentialRefService, + filter: { + entityName: 'ProgramPrivilege', + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], + }, + attributes: ['name'], + mobile: this.mobile, + }); + this.memoryDataService.addSortByReplacement('privilege', 'privilege.name'); + this.registerAutocompleteField('location', { + showAllOnFocus: false, + suggestFn: (value, filter) => this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { levelIds: this.locationLevelIds })), + filter: { + entityName: 'Location', + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], + }, + mobile: this.mobile, + }); + this.memoryDataService.addSortByReplacement('location', 'location.' + this.autocompleteFields.location.attributes[0]); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], PersonPrivilegesTable.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PersonPrivilegesTable.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PersonPrivilegesTable.prototype, "useSticky", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PersonPrivilegesTable.prototype, "title", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], PersonPrivilegesTable.prototype, "locationLevelIds", void 0); +PersonPrivilegesTable = __decorate([ + Component({ + selector: 'app-person-privileges-table', + templateUrl: 'person-privileges.table.html', + styleUrls: ['./person-privileges.table.scss'], + providers: [ + { provide: ValidatorService, useExisting: ProgramPersonValidatorService }, + { + provide: InMemoryEntitiesService, + useFactory: () => new InMemoryEntitiesService(Referential, ReferentialFilter, { + equals: ReferentialUtils.equals, + }), + }, + ], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + ValidatorService, + InMemoryEntitiesService, + PersonService, + ReferentialRefService]) +], PersonPrivilegesTable); +export { PersonPrivilegesTable }; +//# sourceMappingURL=person-privileges.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/program/privilege/person-privileges.table.js.map b/out-tsc/app/app/referential/program/privilege/person-privileges.table.js.map new file mode 100644 index 000000000..2ed2b00da --- /dev/null +++ b/out-tsc/app/app/referential/program/privilege/person-privileges.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"person-privileges.table.js","sourceRoot":"","sources":["../../../../../../src/app/referential/program/privilege/person-privileges.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/program/privilege/program-person.validator.js b/out-tsc/app/app/referential/program/privilege/program-person.validator.js new file mode 100644 index 000000000..09c34f0ac --- /dev/null +++ b/out-tsc/app/app/referential/program/privilege/program-person.validator.js @@ -0,0 +1,28 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { SharedValidators } from '@sumaris-net/ngx-components'; +let ProgramPersonValidatorService = class ProgramPersonValidatorService { + constructor(formBuilder) { + this.formBuilder = formBuilder; + } + getRowValidator() { + return this.getFormGroup(); + } + getFormGroup(data) { + return this.formBuilder.group({ + id: [data && data.id || null], + updateDate: [data && data.updateDate || null], + programId: [data && data.programId || null], + location: [data && data.location || null, SharedValidators.entity], + privilege: [data && data.privilege || null, Validators.compose([Validators.required, SharedValidators.entity])], + person: [data && data.person || null, Validators.compose([Validators.required, SharedValidators.entity])], + }); + } +}; +ProgramPersonValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder]) +], ProgramPersonValidatorService); +export { ProgramPersonValidatorService }; +//# sourceMappingURL=program-person.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/program/privilege/program-person.validator.js.map b/out-tsc/app/app/referential/program/privilege/program-person.validator.js.map new file mode 100644 index 000000000..62f4ed9c3 --- /dev/null +++ b/out-tsc/app/app/referential/program/privilege/program-person.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"program-person.validator.js","sourceRoot":"","sources":["../../../../../../src/app/referential/program/privilege/program-person.validator.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAoB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGlF,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAIxD,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;IAExC,YACY,WAA+B;QAA/B,gBAAW,GAAX,WAAW,CAAoB;IAE3C,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED,YAAY,CAAC,IAAoB;QAC/B,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAC5B,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC;YAC7B,UAAU,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;YAC7C,SAAS,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;YAC3C,QAAQ,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC;YAClE,SAAS,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/G,MAAM,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;SAC1G,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AArBY,6BAA6B;IADzC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAIN,kBAAkB;GAHhC,6BAA6B,CAqBzC;SArBY,6BAA6B"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/program/program.module.js b/out-tsc/app/app/referential/program/program.module.js new file mode 100644 index 000000000..78ec3ce2c --- /dev/null +++ b/out-tsc/app/app/referential/program/program.module.js @@ -0,0 +1,48 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { ProgramPage } from './program.page'; +import { TranslateModule } from '@ngx-translate/core'; +import { TextMaskModule } from 'angular2-text-mask'; +import { CommonModule } from '@angular/common'; +import { ProgramsPage } from './programs.page'; +import { AppCoreModule } from '@app/core/core.module'; +import { PersonPrivilegesTable } from './privilege/person-privileges.table'; +import { AppReferentialFormModule } from '@app/referential/form/referential-form.module'; +import { AppReferentialPipesModule } from '@app/referential/pipes/referential-pipes.module'; +import { AppStrategyModule } from '@app/referential/strategy/strategy.module'; +import { AppReferentialTableModule } from '@app/referential/table/referential-table.module'; +import { SelectProgramModal } from '@app/referential/program/select-program.modal'; +let AppProgramModule = class AppProgramModule { +}; +AppProgramModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TextMaskModule, + TranslateModule.forChild(), + AppCoreModule, + // Sub modules + AppReferentialFormModule, + AppReferentialTableModule, + AppReferentialPipesModule, + AppStrategyModule + ], + declarations: [ + // Components + ProgramsPage, + ProgramPage, + PersonPrivilegesTable, + SelectProgramModal + ], + exports: [ + TranslateModule, + // Components + ProgramsPage, + ProgramPage, + PersonPrivilegesTable, + SelectProgramModal + ], + }) +], AppProgramModule); +export { AppProgramModule }; +//# sourceMappingURL=program.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/program/program.module.js.map b/out-tsc/app/app/referential/program/program.module.js.map new file mode 100644 index 000000000..398eee611 --- /dev/null +++ b/out-tsc/app/app/referential/program/program.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"program.module.js","sourceRoot":"","sources":["../../../../../src/app/referential/program/program.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AAkC5E,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAC5B,CAAA;AADY,gBAAgB;IAhC5B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,cAAc;YACd,eAAe,CAAC,QAAQ,EAAE;YAE1B,aAAa;YAEb,cAAc;YACd,wBAAwB;YACxB,yBAAyB;YACzB,yBAAyB;YACzB,iBAAiB;SAClB;QACD,YAAY,EAAE;YAEZ,aAAa;YACb,YAAY;YACZ,WAAW;YACX,qBAAqB;YACrB,kBAAkB;SACnB;QACD,OAAO,EAAE;YACP,eAAe;YAEf,aAAa;YACb,YAAY;YACZ,WAAW;YACX,qBAAqB;YACrB,kBAAkB;SACnB;KACF,CAAC;GACW,gBAAgB,CAC5B;SADY,gBAAgB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/program/program.page.js b/out-tsc/app/app/referential/program/program.page.js new file mode 100644 index 000000000..ee750da63 --- /dev/null +++ b/out-tsc/app/app/referential/program/program.page.js @@ -0,0 +1,462 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, ViewChild } from '@angular/core'; +import { ValidatorService } from '@e-is/ngx-material-table'; +import { UntypedFormBuilder } from '@angular/forms'; +import { Program } from '../services/model/program.model'; +import { ProgramService } from '../services/program.service'; +import { ReferentialForm } from '../form/referential.form'; +import { ProgramValidatorService } from '../services/validator/program.validator'; +import { StrategiesTable } from '../strategy/strategies.table'; +import { AccountService, AppEntityEditor, AppListForm, AppPropertiesForm, changeCaseToUnderscore, EntityUtils, fadeInOutAnimation, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, referentialToString, ReferentialUtils, SharedValidators, StatusIds, } from '@sumaris-net/ngx-components'; +import { ReferentialRefService } from '../services/referential-ref.service'; +import { ModalController } from '@ionic/angular'; +import { ProgramProperties } from '../services/config/program.config'; +import { SelectReferentialModal } from '../table/select-referential.modal'; +import { environment } from '@environments/environment'; +import { SamplingStrategiesTable } from '../strategy/sampling/sampling-strategies.table'; +import { PersonPrivilegesTable } from '@app/referential/program/privilege/person-privileges.table'; +import { LocationLevels } from '@app/referential/services/model/model.enum'; +import { RxState } from '@rx-angular/state'; +const PROGRAM_TABS = { + LOCATIONS: 1, + STRATEGIES: 2, + OPTIONS: 3, + PERSONS: 4, +}; +let ProgramPage = class ProgramPage extends AppEntityEditor { + constructor(injector, programService, formBuilder, accountService, validatorService, referentialRefService, modalCtrl, _state) { + super(injector, Program, programService, { + pathIdAttribute: 'programId', + autoOpenNextTab: false, + tabCount: 5, + }); + this.injector = injector; + this.programService = programService; + this.formBuilder = formBuilder; + this.accountService = accountService; + this.validatorService = validatorService; + this.referentialRefService = referentialRefService; + this.modalCtrl = modalCtrl; + this._state = _state; + this.TABS = PROGRAM_TABS; + this.strategiesTable$ = this._state.select('strategiesTables'); + this.fieldDefinitions = {}; + this.i18nFieldPrefix = 'PROGRAM.'; + this.strategyEditor = 'legacy'; + this.i18nTabStrategiesSuffix = ''; + this.referentialToString = referentialToString; + this.referentialEquals = ReferentialUtils.equals; + this.form = validatorService.getFormGroup(); + // default values + this.mobile = this.settings.mobile; + this.defaultBackHref = '/referential/list?entity=Program'; + this._enabled = this.accountService.isAdmin(); + this.propertyDefinitions = Object.values(ProgramProperties).map((def) => { + // Add default configuration for entity/entities + if (def.type === 'entity' || def.type === 'entities') { + def = Object.assign({}, def); // Copy + def.autocomplete = Object.assign({ suggestFn: (value, filter) => this.referentialRefService.suggest(value, filter), attributes: ['label', 'name'] }, (def.autocomplete || {})); + } + return def; + }); + this.debug = !environment.production; + } + get strategiesTable() { + return this._state.get('strategiesTables'); + } + set strategiesTable(value) { + this._state.set('strategiesTables', () => value); + } + ngOnInit() { + super.ngOnInit(); + // Set entity name (required for referential form validator) + this.referentialForm.entityName = 'Program'; + // Check label is unique + // TODO BLA: FIXME: le control reste en pending ! + const idControl = this.form.get('id'); + this.form.get('label').setAsyncValidators((control) => __awaiter(this, void 0, void 0, function* () { + console.debug('[program-page] Checking of label is unique...'); + const exists = yield this.programService.existsByLabel(control.value, { + excludedIds: isNotNil(idControl.value) ? [idControl.value] : undefined, + }, { fetchPolicy: 'network-only' }); + if (exists) { + console.warn('[program-page] Label not unique!'); + return { unique: true }; + } + console.debug('[program-page] Checking of label is unique [OK]'); + SharedValidators.clearError(control, 'unique'); + })); + this.registerFormField('gearClassification', { + type: 'entity', + autocomplete: { + suggestFn: (value, filter) => this.referentialRefService.suggest(value, filter), + filter: { + entityName: 'GearClassification', + }, + }, + }); + this.registerFormField('taxonGroupType', { + key: 'taxonGroupType', + type: 'entity', + autocomplete: { + suggestFn: (value, filter) => this.referentialRefService.suggest(value, filter), + filter: { + entityName: 'TaxonGroupType', + }, + }, + }); + this.markAsReady(); + } + load(id, opts) { + // Force the load from network + return super.load(id, Object.assign(Object.assign({}, opts), { fetchPolicy: 'network-only' })); + } + enable(opts) { + super.enable(opts); + // TODO BLA remove this ? + this.locationClassificationList.enable(opts); + if (!this.isNewData) { + this.form.get('label').disable(); + } + } + /* -- protected methods -- */ + registerForms() { + this.addChildForms([this.referentialForm, this.propertiesForm, this.locationClassificationList, this.locationList, this.personsTable]); + } + registerFormField(fieldName, def) { + const definition = Object.assign({ key: fieldName, label: this.i18nFieldPrefix + changeCaseToUnderscore(fieldName).toUpperCase() }, def); + this.fieldDefinitions[fieldName] = definition; + } + onNewEntity(data, options) { + const _super = Object.create(null, { + onNewEntity: { get: () => super.onNewEntity } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.onNewEntity.call(this, data, options); + this.markAsReady(); + }); + } + onEntityLoaded(data, options) { + const _super = Object.create(null, { + onEntityLoaded: { get: () => super.onEntityLoaded } + }); + return __awaiter(this, void 0, void 0, function* () { + yield this.loadEntityProperties(data); + yield _super.onEntityLoaded.call(this, data, options); + this.strategyEditor = (data && data.getProperty(ProgramProperties.STRATEGY_EDITOR)) || 'legacy'; + this.i18nTabStrategiesSuffix = this.strategyEditor === 'sampling' ? '.SAMPLING' : ''; + this.cd.detectChanges(); + this.markAsReady(); + }); + } + onEntitySaved(data) { + const _super = Object.create(null, { + onEntitySaved: { get: () => super.onEntitySaved } + }); + return __awaiter(this, void 0, void 0, function* () { + yield this.loadEntityProperties(data); + yield _super.onEntitySaved.call(this, data); + }); + } + setValue(data) { + data = data || new Program(); + this.form.patchValue(Object.assign(Object.assign({}, data), { properties: [], locationClassifications: [], strategies: [], persons: [] }), { emitEvent: false }); + // Program properties + this.propertiesForm.value = EntityUtils.getMapAsArray(data.properties); + // Location classification + this.locationClassificationList.setValue(data.locationClassifications || []); + // Locations + this.locationList.setValue(data.locations || []); + // Users + this.personsTable.setValue(data.persons || []); + this.markForCheck(); + } + loadEntityProperties(data) { + return __awaiter(this, void 0, void 0, function* () { + yield Promise.all(Object.keys(data.properties) + .map((key) => this.propertyDefinitions.find((def) => def.key === key && (def.type === 'entity' || def.type === 'entities' || def.type === 'enums'))) + .filter(isNotNil) + .map((def) => __awaiter(this, void 0, void 0, function* () { + let value = data.properties[def.key]; + switch (def.type) { + case 'entity': { + value = typeof value === 'string' ? value.trim() : value; + if (isNotNilOrBlank(value)) { + const entity = yield this.resolveEntity(def, value); + data.properties[def.key] = entity; + } + else { + data.properties[def.key] = null; + } + break; + } + case 'entities': { + const values = (value || '').trim().split(/[|,]+/); + if (isNotEmptyArray(values)) { + const entities = yield Promise.all(values.map((v) => this.resolveEntity(def, v))); + data.properties[def.key] = entities; + } + else { + data.properties[def.key] = null; + } + break; + } + case 'enums': { + const keys = (value || '').trim().split(/[|,]+/); + if (isNotEmptyArray(keys)) { + const enumValues = keys.map((key) => { var _a; return (_a = def.values) === null || _a === void 0 ? void 0 : _a.find((defValue) => defValue && key === (defValue['key'] || defValue)); }); + data.properties[def.key] = enumValues || null; + } + else { + data.properties[def.key] = null; + } + break; + } + } + }))); + }); + } + resolveEntity(def, value) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!def.autocomplete) { + console.warn('Missing autocomplete, in definition of property ' + def.key); + return; // Skip + } + const filter = Object.assign({}, def.autocomplete.filter); // Copy filter + const joinAttribute = ((_a = def.autocomplete.filter) === null || _a === void 0 ? void 0 : _a.joinAttribute) || 'id'; + if (joinAttribute === 'id') { + filter.id = parseInt(value); + value = '*'; + } + else { + filter.searchAttribute = joinAttribute; + } + const suggestFn = def.autocomplete.suggestFn || this.referentialRefService.suggest; + try { + // Fetch entity, as a referential + const res = yield suggestFn(value, filter); + const data = Array.isArray(res) ? res : res.data; + return ((data && data[0]) || { id: value, label: '??' }); + } + catch (err) { + console.error('Cannot fetch entity, from option: ' + def.key + '=' + value, err); + return { id: value, label: '??' }; + } + }); + } + getJsonValueToSave() { + const _super = Object.create(null, { + getJsonValueToSave: { get: () => super.getJsonValueToSave } + }); + return __awaiter(this, void 0, void 0, function* () { + const data = yield _super.getJsonValueToSave.call(this); + // Re add label, because missing when field disable + data.label = this.form.get('label').value; + // Transform properties + data.properties = this.propertiesForm.value; + data.properties + .filter((property) => this.propertyDefinitions.find((def) => def.key === property.key && (def.type === 'entity' || def.type === 'entities'))) + .forEach((property) => { + var _a; + if (Array.isArray(property.value)) { + property.value = property.value + .map((v) => v === null || v === void 0 ? void 0 : v.id) + .filter(isNotNil) + .join(','); + } + else { + property.value = (_a = property.value) === null || _a === void 0 ? void 0 : _a.id; + } + }); + data.properties + .filter((property) => this.propertyDefinitions.find((def) => def.key === property.key && def.type === 'enums')) + .forEach((property) => { + var _a; + if (Array.isArray(property.value)) { + property.value = property.value + .map((v) => v === null || v === void 0 ? void 0 : v.key) + .filter(isNotNil) + .join(','); + } + else { + property.value = (_a = property.value) === null || _a === void 0 ? void 0 : _a.key; + } + }); + // Users + if (this.personsTable.dirty) { + yield this.personsTable.save(); + } + data.persons = this.personsTable.value; + return data; + }); + } + computeTitle(data) { + // new data + if (!data || isNil(data.id)) { + return this.translate.get('PROGRAM.NEW.TITLE').toPromise(); + } + // Existing data + return this.translate.get('PROGRAM.EDIT.TITLE', data).toPromise(); + } + computePageHistory(title) { + const _super = Object.create(null, { + computePageHistory: { get: () => super.computePageHistory } + }); + return __awaiter(this, void 0, void 0, function* () { + return Object.assign(Object.assign({}, (yield _super.computePageHistory.call(this, title))), { icon: 'contract', title: `${this.data.label} - ${this.data.name}`, subtitle: 'REFERENTIAL.ENTITY.PROGRAM' }); + }); + } + getFirstInvalidTabIndex() { + var _a; + if (this.referentialForm.invalid) + return 0; + if (this.locationList.invalid) + return 1; + if ((_a = this.strategiesTable) === null || _a === void 0 ? void 0 : _a.invalid) + return 2; + if (this.propertiesForm.invalid) + return 3; + if (this.personsTable.invalid) + return 4; + return 0; + } + addLocationClassification() { + return __awaiter(this, void 0, void 0, function* () { + if (this.disabled) + return; // Skip + const items = yield this.openSelectReferentialModal({ + allowMultipleSelection: true, + filter: { + entityName: 'LocationClassification', + }, + }); + // Add to list + (items || []).forEach((item) => this.locationClassificationList.add(item)); + this.markForCheck(); + }); + } + addLocation() { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (this.disabled) + return; // Skip + const classificationIds = (this.locationClassificationList.value || []).map((item) => item.id); + const rectangleLocationLevelIds = LocationLevels.getStatisticalRectangleLevelIds(); + const levelIds = (_a = (yield this.referentialRefService.loadAll(0, 1000, null, null, { + entityName: 'LocationLevel', + levelIds: classificationIds, + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE], + }))) === null || _a === void 0 ? void 0 : _a.data.map((item) => item.id).filter((levelId) => !rectangleLocationLevelIds.includes(levelId)); + const excludedIds = (this.locationList.value || []).map((item) => item.id); + const items = yield this.openSelectReferentialModal({ + filter: { + entityName: 'Location', + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE], + levelIds, + excludedIds, + }, + }); + // Add to list + (items || []).forEach((item) => this.locationList.add(item)); + this.markForCheck(); + }); + } + onOpenStrategy(row) { + return __awaiter(this, void 0, void 0, function* () { + const saved = yield this.saveIfDirtyAndConfirm(); + if (!saved) + return; // Cannot save + this.markAsLoading(); + setTimeout(() => __awaiter(this, void 0, void 0, function* () { + yield this.router.navigate(['referential', 'programs', this.data.id, 'strategies', this.strategyEditor, row.currentData.id], { + queryParams: {}, + }); + this.markAsLoaded(); + })); + }); + } + onNewStrategy(event) { + return __awaiter(this, void 0, void 0, function* () { + const savedOrContinue = yield this.saveIfDirtyAndConfirm(); + if (savedOrContinue) { + this.markAsLoading(); + setTimeout(() => __awaiter(this, void 0, void 0, function* () { + yield this.router.navigate(['referential', 'programs', this.data.id, 'strategy', this.strategyEditor, 'new'], { + queryParams: {}, + }); + this.markAsLoaded(); + })); + } + }); + } + openSelectReferentialModal(opts) { + return __awaiter(this, void 0, void 0, function* () { + const hasTopModal = !!(yield this.modalCtrl.getTop()); + const modal = yield this.modalCtrl.create({ + component: SelectReferentialModal, + componentProps: opts, + keyboardClose: true, + backdropDismiss: false, + cssClass: hasTopModal ? 'modal-large stack-modal' : 'modal-large', + }); + yield modal.present(); + const { data } = yield modal.onDidDismiss(); + return data; + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + ViewChild('referentialForm', { static: true }), + __metadata("design:type", ReferentialForm) +], ProgramPage.prototype, "referentialForm", void 0); +__decorate([ + ViewChild('propertiesForm', { static: true }), + __metadata("design:type", AppPropertiesForm) +], ProgramPage.prototype, "propertiesForm", void 0); +__decorate([ + ViewChild('locationClassificationList', { static: true }), + __metadata("design:type", AppListForm) +], ProgramPage.prototype, "locationClassificationList", void 0); +__decorate([ + ViewChild('legacyStrategiesTable', { static: true }), + __metadata("design:type", StrategiesTable) +], ProgramPage.prototype, "legacyStrategiesTable", void 0); +__decorate([ + ViewChild('samplingStrategiesTable', { static: true }), + __metadata("design:type", SamplingStrategiesTable) +], ProgramPage.prototype, "samplingStrategiesTable", void 0); +__decorate([ + ViewChild('personsTable', { static: true }), + __metadata("design:type", PersonPrivilegesTable) +], ProgramPage.prototype, "personsTable", void 0); +__decorate([ + ViewChild('locationList', { static: true }), + __metadata("design:type", AppListForm) +], ProgramPage.prototype, "locationList", void 0); +ProgramPage = __decorate([ + Component({ + selector: 'app-program', + templateUrl: 'program.page.html', + styleUrls: ['./program.page.scss'], + providers: [ + { provide: ValidatorService, useExisting: ProgramValidatorService }, + RxState + ], + animations: [fadeInOutAnimation], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + ProgramService, + UntypedFormBuilder, + AccountService, + ProgramValidatorService, + ReferentialRefService, + ModalController, + RxState]) +], ProgramPage); +export { ProgramPage }; +//# sourceMappingURL=program.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/program/program.page.js.map b/out-tsc/app/app/referential/program/program.page.js.map new file mode 100644 index 000000000..74aea7e34 --- /dev/null +++ b/out-tsc/app/app/referential/program/program.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"program.page.js","sourceRoot":"","sources":["../../../../../src/app/referential/program/program.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/program/programs.page.js b/out-tsc/app/app/referential/program/programs.page.js new file mode 100644 index 000000000..228dd4151 --- /dev/null +++ b/out-tsc/app/app/referential/program/programs.page.js @@ -0,0 +1,53 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ViewChild } from '@angular/core'; +import { AccountService, LocalSettingsService } from '@sumaris-net/ngx-components'; +import { ModalController, Platform } from '@ionic/angular'; +import { ActivatedRoute, Router } from '@angular/router'; +import { Location } from '@angular/common'; +import { ReferentialTable } from '../table/referential.table'; +import { AppRootTableSettingsEnum } from '@app/data/table/root-table.class'; +export const ProgramsPageSettingsEnum = { + PAGE_ID: 'programs', + FILTER_KEY: AppRootTableSettingsEnum.FILTER_KEY, +}; +let ProgramsPage = class ProgramsPage { + constructor(route, router, platform, location, modalCtrl, accountService, settings, cd) { + this.route = route; + this.router = router; + this.platform = platform; + this.location = location; + this.modalCtrl = modalCtrl; + this.accountService = accountService; + this.settings = settings; + this.cd = cd; + const isAdmin = this.accountService.isAdmin(); + this.canEdit = isAdmin || this.accountService.isSupervisor(); + this.canDelete = isAdmin; + } + ngOnInit() { + this.table.settingsId = ProgramsPageSettingsEnum.PAGE_ID; + this.table.entityName = 'Program'; + this.table.restoreFilterOrLoad(); + } +}; +__decorate([ + ViewChild('table', { static: true }), + __metadata("design:type", ReferentialTable) +], ProgramsPage.prototype, "table", void 0); +ProgramsPage = __decorate([ + Component({ + selector: 'app-program-page', + templateUrl: './programs.page.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [ActivatedRoute, + Router, + Platform, + Location, + ModalController, + AccountService, + LocalSettingsService, + ChangeDetectorRef]) +], ProgramsPage); +export { ProgramsPage }; +//# sourceMappingURL=programs.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/program/programs.page.js.map b/out-tsc/app/app/referential/program/programs.page.js.map new file mode 100644 index 000000000..2817b0a2d --- /dev/null +++ b/out-tsc/app/app/referential/program/programs.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"programs.page.js","sourceRoot":"","sources":["../../../../../src/app/referential/program/programs.page.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAU,SAAS,EAAE,MAAM,eAAe,CAAC;AACzG,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,OAAO,EAAE,UAAU;IACnB,UAAU,EAAE,wBAAwB,CAAC,UAAU;CAChD,CAAC;AAOK,IAAM,YAAY,GAAlB,MAAM,YAAY;IAOvB,YACY,KAAqB,EACrB,MAAc,EACd,QAAkB,EAClB,QAAkB,EAClB,SAA0B,EAC1B,cAA8B,EAC9B,QAA8B,EAC9B,EAAqB;QAPrB,UAAK,GAAL,KAAK,CAAgB;QACrB,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAAU;QAClB,aAAQ,GAAR,QAAQ,CAAU;QAClB,cAAS,GAAT,SAAS,CAAiB;QAC1B,mBAAc,GAAd,cAAc,CAAgB;QAC9B,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,OAAE,GAAF,EAAE,CAAmB;QAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAC9C,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QAC7D,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,KAAK,CAAC,UAAU,GAAI,wBAAwB,CAAC,OAAO,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;IACnC,CAAC;CAKF,CAAA;AA1BC;IAAC,SAAS,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;8BAAQ,gBAAgB;2CAAC;AALnD,YAAY;IALxB,SAAS,CAAC;QACT,QAAQ,EAAE,kBAAkB;QAC5B,WAAW,EAAE,sBAAsB;QACnC,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCASmB,cAAc;QACb,MAAM;QACJ,QAAQ;QACR,QAAQ;QACP,eAAe;QACV,cAAc;QACpB,oBAAoB;QAC1B,iBAAiB;GAftB,YAAY,CA+BxB;SA/BY,YAAY"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/program/select-program.modal.js b/out-tsc/app/app/referential/program/select-program.modal.js new file mode 100644 index 000000000..2328760c1 --- /dev/null +++ b/out-tsc/app/app/referential/program/select-program.modal.js @@ -0,0 +1,46 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector } from '@angular/core'; +import { StatusIds } from '@sumaris-net/ngx-components'; +import { Program } from '@app/referential/services/model/program.model'; +import { ProgramFilter } from '@app/referential/services/filter/program.filter'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { BaseSelectEntityModal } from '@app/referential/table/base-select-entity.modal'; +let SelectProgramModal = class SelectProgramModal extends BaseSelectEntityModal { + constructor(injector, dataService, cd) { + super(injector, Program, ProgramFilter, dataService); + this.cd = cd; + } + ngOnInit() { + this.filter = ProgramFilter.fromObject(Object.assign({ statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] }, this.filter)); + super.ngOnInit(); + } + computeTitle() { + return __awaiter(this, void 0, void 0, function* () { + return 'REFERENTIAL.ENTITY.PROGRAM'; + }); + } + markForCheck() { + this.cd.markForCheck(); + } + onRowClick(row) { + if (this.allowMultipleSelection) { + this.table.selection.toggle(row); + } + else { + this.table.selection.setSelection(row); + this.close(); + } + } +}; +SelectProgramModal = __decorate([ + Component({ + selector: 'app-select-program-modal', + templateUrl: './select-program.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + ProgramRefService, + ChangeDetectorRef]) +], SelectProgramModal); +export { SelectProgramModal }; +//# sourceMappingURL=select-program.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/program/select-program.modal.js.map b/out-tsc/app/app/referential/program/select-program.modal.js.map new file mode 100644 index 000000000..aed3b2c7a --- /dev/null +++ b/out-tsc/app/app/referential/program/select-program.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"select-program.modal.js","sourceRoot":"","sources":["../../../../../src/app/referential/program/select-program.modal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAU,MAAM,eAAe,CAAC;AACxG,OAAO,EAAwD,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE9G,OAAO,EAAE,OAAO,EAAE,MAAM,+CAA+C,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAiC,MAAM,iDAAiD,CAAC;AAWhH,IAAM,kBAAkB,GAAxB,MAAM,kBACX,SAAQ,qBAA6C;IAGrD,YACE,QAAkB,EAClB,WAA8B,EACpB,EAAqB;QAE/B,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QAF3C,OAAE,GAAF,EAAE,CAAmB;IAGjC,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,UAAU,iBACpC,SAAS,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,IAC/C,IAAI,CAAC,MAAM,EACd,CAAC;QAEH,KAAK,CAAC,QAAQ,EAAE,CAAC;IACnB,CAAC;IAEe,YAAY;;YAC1B,OAAO,4BAA4B,CAAC;QACtC,CAAC;KAAA;IAES,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;IAES,UAAU,CAAC,GAA0B;QAC7C,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAClC;aACI;YACH,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,EAAE,CAAC;SACd;IACH,CAAC;CACF,CAAA;AAtCY,kBAAkB;IAL9B,SAAS,CAAC;QACT,QAAQ,EAAE,0BAA0B;QACpC,WAAW,EAAE,6BAA6B;QAC1C,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAMY,QAAQ;QACL,iBAAiB;QAChB,iBAAiB;GAPtB,kBAAkB,CAsC9B;SAtCY,kBAAkB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/referential-routing.module.js b/out-tsc/app/app/referential/referential-routing.module.js new file mode 100644 index 000000000..3de2b306a --- /dev/null +++ b/out-tsc/app/app/referential/referential-routing.module.js @@ -0,0 +1,140 @@ +import { __decorate } from "tslib"; +import { RouterModule } from '@angular/router'; +import { NgModule } from '@angular/core'; +import { ReferentialTable } from './table/referential.table'; +import { ProgramPage } from './program/program.page'; +import { ComponentDirtyGuard } from '@sumaris-net/ngx-components'; +import { AppReferentialModule } from './referential.module'; +import { StrategyPage } from './strategy/strategy.page'; +import { ProgramsPage } from './program/programs.page'; +import { SamplingStrategyPage } from './strategy/sampling/sampling-strategy.page'; +import { StrategiesPage } from './strategy/strategies.page'; +const routes = [ + { + path: 'list', + pathMatch: 'full', + component: ReferentialTable, + runGuardsAndResolvers: 'pathParamsChange', + data: { + profile: 'ADMIN' + } + }, + { + path: 'programs', + children: [ + { + path: '', + component: ProgramsPage, + pathMatch: 'full', + data: { + profile: 'SUPERVISOR' + }, + runGuardsAndResolvers: 'pathParamsChange' + }, + { + path: ':programId', + data: { + profile: 'SUPERVISOR', + pathIdParam: 'programId' + }, + children: [ + { + path: '', + pathMatch: 'full', + component: ProgramPage, + data: { + profile: 'SUPERVISOR', + pathIdParam: 'programId' + }, + runGuardsAndResolvers: 'pathParamsChange', + canDeactivate: [ComponentDirtyGuard] + }, + { + path: 'strategies', + data: { + profile: 'USER', + pathIdParam: 'programId' + }, + children: [ + { + path: '', + pathMatch: 'full', + component: StrategiesPage, + data: { + profile: 'USER', + pathIdParam: 'programId' + }, + runGuardsAndResolvers: 'pathParamsChange', + canDeactivate: [ComponentDirtyGuard] + }, + { + path: 'legacy/:strategyId', + pathMatch: 'full', + component: StrategyPage, + data: { + profile: 'USER', + pathIdParam: 'strategyId' + }, + runGuardsAndResolvers: 'pathParamsChange', + canDeactivate: [ComponentDirtyGuard] + }, + { + path: 'sampling/:strategyId', + pathMatch: 'full', + component: SamplingStrategyPage, + data: { + profile: 'USER', + pathIdParam: 'strategyId' + }, + runGuardsAndResolvers: 'pathParamsChange', + canDeactivate: [ComponentDirtyGuard] + } + ] + } + ] + } + ] + }, + { + path: 'software', + loadChildren: () => import('./software/software-routing.module').then(m => m.AppSoftwareRoutingModule) + }, + // Pmfm sub modules + { + path: 'pmfm', + loadChildren: () => import('./pmfm/pmfm-routing.module').then(m => m.AppPmfmRoutingModule) + }, + { + path: 'parameter', + loadChildren: () => import('./pmfm/parameter/parameter-routing.module').then(m => m.AppPmfmParameterRoutingModule) + }, + { + path: 'method', + loadChildren: () => import('./pmfm/method/method-routing.module').then(m => m.AppPmfmMethodRoutingModule) + }, + { + path: 'taxonGroup', + loadChildren: () => import('./taxon-group/taxon-group-routing.module').then(m => m.AppTaxonGroupRoutingModule) + }, + { + path: 'taxonName', + loadChildren: () => import('./taxon-name/taxon-name-routing.module').then(m => m.AppTaxonNameRoutingModule) + }, + { + path: 'metier', + loadChildren: () => import('./metier/metier-routing.module').then(m => m.AppMetierRoutingModule) + }, +]; +let ReferentialRoutingModule = class ReferentialRoutingModule { +}; +ReferentialRoutingModule = __decorate([ + NgModule({ + imports: [ + AppReferentialModule, + RouterModule.forChild(routes) + ], + exports: [RouterModule] + }) +], ReferentialRoutingModule); +export { ReferentialRoutingModule }; +//# sourceMappingURL=referential-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/referential-routing.module.js.map b/out-tsc/app/app/referential/referential-routing.module.js.map new file mode 100644 index 000000000..624c977a6 --- /dev/null +++ b/out-tsc/app/app/referential/referential-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential-routing.module.js","sourceRoot":"","sources":["../../../../src/app/referential/referential-routing.module.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/referential.module.js b/out-tsc/app/app/referential/referential.module.js new file mode 100644 index 000000000..236d6eb86 --- /dev/null +++ b/out-tsc/app/app/referential/referential.module.js @@ -0,0 +1,44 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { TranslateModule } from '@ngx-translate/core'; +import { TextMaskModule } from 'angular2-text-mask'; +import { CommonModule } from '@angular/common'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppStrategyModule } from '@app/referential/strategy/strategy.module'; +import { AppTranscribingModule } from '@app/referential/transcribing/transcribing.module'; +import { AppReferentialFormModule } from '@app/referential/form/referential-form.module'; +import { AppReferentialPipesModule } from '@app/referential/pipes/referential-pipes.module'; +import { AppProgramModule } from '@app/referential/program/program.module'; +import { AppReferentialTableModule } from '@app/referential/table/referential-table.module'; +let AppReferentialModule = class AppReferentialModule { +}; +AppReferentialModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TextMaskModule, + TranslateModule.forChild(), + AppCoreModule, + // Sub modules + AppReferentialFormModule, + AppReferentialTableModule, + AppReferentialPipesModule, + AppProgramModule, + AppStrategyModule, + AppTranscribingModule, + ], + declarations: [], + exports: [ + TranslateModule, + // Sub Modules + AppReferentialPipesModule, + AppReferentialFormModule, + AppReferentialTableModule, + AppProgramModule, + AppStrategyModule, + AppTranscribingModule, + ], + }) +], AppReferentialModule); +export { AppReferentialModule }; +//# sourceMappingURL=referential.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/referential.module.js.map b/out-tsc/app/app/referential/referential.module.js.map new file mode 100644 index 000000000..4c7dfb3f6 --- /dev/null +++ b/out-tsc/app/app/referential/referential.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential.module.js","sourceRoot":"","sources":["../../../../src/app/referential/referential.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAgCrF,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAChC,CAAA;AADY,oBAAoB;IA9BhC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,cAAc;YACd,eAAe,CAAC,QAAQ,EAAE;YAE1B,aAAa;YAEb,cAAc;YACd,wBAAwB;YACxB,yBAAyB;YACzB,yBAAyB;YACzB,gBAAgB;YAChB,iBAAiB;YACjB,qBAAqB;SACtB;QACD,YAAY,EAAE,EACb;QACD,OAAO,EAAE;YACP,eAAe;YAEf,cAAc;YACd,yBAAyB;YACzB,wBAAwB;YACxB,yBAAyB;YACzB,gBAAgB;YAChB,iBAAiB;YACjB,qBAAqB;SACtB;KACF,CAAC;GACW,oBAAoB,CAChC;SADY,oBAAoB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/referential.testing.module.js b/out-tsc/app/app/referential/referential.testing.module.js new file mode 100644 index 000000000..30569f05c --- /dev/null +++ b/out-tsc/app/app/referential/referential.testing.module.js @@ -0,0 +1,48 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { CommonModule } from '@angular/common'; +import { CoreModule, SharedModule } from '@sumaris-net/ngx-components'; +import { TranslateModule } from '@ngx-translate/core'; +import { AppReferentialModule } from './referential.module'; +import { PmfmStrategiesTableTestPage } from './strategy/sampling/testing/pmfm-strategies.table.test'; +import { AppProgramModule } from '@app/referential/program/program.module'; +export const REFERENTIAL_TESTING_PAGES = [ + { label: 'Referential module', divider: true }, + { label: 'Pmfm Strategies Table', page: '/testing/referential/pmfmStrategiesTable' } +]; +const routes = [ + { + path: '', + pathMatch: 'full', + redirectTo: 'pmfmStrategiesTable' + }, + { + path: 'pmfmStrategiesTable', + pathMatch: 'full', + component: PmfmStrategiesTableTestPage + } +]; +let ReferentialTestingModule = class ReferentialTestingModule { +}; +ReferentialTestingModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + SharedModule, + CoreModule, + TranslateModule.forChild(), + RouterModule.forChild(routes), + AppReferentialModule, + AppProgramModule + ], + declarations: [ + PmfmStrategiesTableTestPage + ], + exports: [ + PmfmStrategiesTableTestPage + ] + }) +], ReferentialTestingModule); +export { ReferentialTestingModule }; +//# sourceMappingURL=referential.testing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/referential.testing.module.js.map b/out-tsc/app/app/referential/referential.testing.module.js.map new file mode 100644 index 000000000..284d67836 --- /dev/null +++ b/out-tsc/app/app/referential/referential.testing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential.testing.module.js","sourceRoot":"","sources":["../../../../src/app/referential/referential.testing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAe,MAAM,6BAA6B,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,wDAAwD,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAE3E,MAAM,CAAC,MAAM,yBAAyB,GAAkB;IACtD,EAAC,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,IAAI,EAAC;IAC5C,EAAC,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,0CAA0C,EAAC;CACnF,CAAC;AAEF,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,UAAU,EAAE,qBAAqB;KAClC;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,2BAA2B;KACvC;CACF,CAAC;AAmBK,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;CAEpC,CAAA;AAFY,wBAAwB;IAjBpC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,YAAY;YACZ,UAAU;YACV,eAAe,CAAC,QAAQ,EAAE;YAC1B,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,oBAAoB;YACpB,gBAAgB;SACjB;QACD,YAAY,EAAE;YACZ,2BAA2B;SAC5B;QACD,OAAO,EAAE;YACP,2BAA2B;SAC5B;KACF,CAAC;GACW,wBAAwB,CAEpC;SAFY,wBAAwB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/referential.utils.js b/out-tsc/app/app/referential/referential.utils.js new file mode 100644 index 000000000..5f9dc8983 --- /dev/null +++ b/out-tsc/app/app/referential/referential.utils.js @@ -0,0 +1,5 @@ +export const ReferentialI18nKeys = { + DEFAULT_I18N_LEVEL_NAME: 'REFERENTIAL.LEVEL', + DEFAULT_I18N_PARENT_NAME: 'REFERENTIAL.PARENT' +}; +//# sourceMappingURL=referential.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/referential.utils.js.map b/out-tsc/app/app/referential/referential.utils.js.map new file mode 100644 index 000000000..6acbc43a4 --- /dev/null +++ b/out-tsc/app/app/referential/referential.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential.utils.js","sourceRoot":"","sources":["../../../../src/app/referential/referential.utils.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,uBAAuB,EAAE,mBAAmB;IAC5C,wBAAwB,EAAE,oBAAoB;CAC/C,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/base-referential-ref-service.class.js b/out-tsc/app/app/referential/services/base-referential-ref-service.class.js new file mode 100644 index 000000000..4e218d344 --- /dev/null +++ b/out-tsc/app/app/referential/services/base-referential-ref-service.class.js @@ -0,0 +1,56 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { EntitiesStorage, NetworkService } from '@sumaris-net/ngx-components'; +import { Directive, Injector } from '@angular/core'; +import { BaseReferentialService } from '@app/referential/services/base-referential-service.class'; +let BaseReferentialRefService = class BaseReferentialRefService extends BaseReferentialService { + constructor(injector, dataType, filterType, options) { + super(injector, dataType, filterType, options); + this.dataType = dataType; + this.filterType = filterType; + this.network = injector.get(NetworkService); + this.entities = injector.get(EntitiesStorage); + } + loadAll(offset, size, sortBy, sortDirection, filter, opts) { + const _super = Object.create(null, { + loadAll: { get: () => super.loadAll } + }); + return __awaiter(this, void 0, void 0, function* () { + const offline = this.network.offline && (!opts || opts.fetchPolicy !== 'network-only'); + if (offline) { + return this.loadAllLocally(offset, size, sortBy, sortDirection, filter, opts); + } + return _super.loadAll.call(this, offset, size, sortBy, sortDirection, filter, opts); + }); + } + loadAllLocally(offset, size, sortBy, sortDirection, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + filter = this.asFilter(filter); + const variables = { + offset: offset || 0, + size: size || 100, + sortBy: sortBy || filter.searchAttribute || 'label', + sortDirection: sortDirection || 'asc', + filter: filter && filter.asFilterFn() + }; + const { data, total } = yield this.entities.loadAll(this._typename, variables); + const entities = (!opts || opts.toEntity !== false) ? + (data || []).map(json => this.fromObject(json)) : + (data || []); + const res = { data: entities, total }; + // Add fetch more function + const nextOffset = (offset || 0) + entities.length; + if (nextOffset < total) { + res.fetchMore = () => this.loadAllLocally(nextOffset, size, sortBy, sortDirection, filter, opts); + } + return res; + }); + } +}; +BaseReferentialRefService = __decorate([ + Directive() + // tslint:disable-next-line:directive-class-suffix + , + __metadata("design:paramtypes", [Injector, Function, Function, Object]) +], BaseReferentialRefService); +export { BaseReferentialRefService }; +//# sourceMappingURL=base-referential-ref-service.class.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/base-referential-ref-service.class.js.map b/out-tsc/app/app/referential/services/base-referential-ref-service.class.js.map new file mode 100644 index 000000000..d2cab84e8 --- /dev/null +++ b/out-tsc/app/app/referential/services/base-referential-ref-service.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"base-referential-ref-service.class.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/base-referential-ref-service.class.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/base-referential-service.class.js b/out-tsc/app/app/referential/services/base-referential-service.class.js new file mode 100644 index 000000000..19974aa17 --- /dev/null +++ b/out-tsc/app/app/referential/services/base-referential-service.class.js @@ -0,0 +1,76 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { BaseEntityService, GraphqlService, isNotNil, PlatformService, ReferentialUtils, } from '@sumaris-net/ngx-components'; +import { Directive, Injector } from '@angular/core'; +export const TEXT_SEARCH_IGNORE_CHARS_REGEXP = /[ \t-*]+/g; +let BaseReferentialService = class BaseReferentialService extends BaseEntityService { + constructor(injector, dataType, filterType, options) { + super(injector.get(GraphqlService), injector.get(PlatformService), dataType, filterType, Object.assign({}, options)); + this.dataType = dataType; + this.filterType = filterType; + } + watchAll(offset, size, sortBy, sortDirection, filter, opts) { + // Use search attribute as default sort, is set + sortBy = sortBy || filter && filter.searchAttribute; + // Call inherited function + return super.watchAll(offset, size, sortBy, sortDirection, filter, opts); + } + loadAll(offset, size, sortBy, sortDirection, filter, opts) { + const _super = Object.create(null, { + loadAll: { get: () => super.loadAll } + }); + return __awaiter(this, void 0, void 0, function* () { + // Use search attribute as default sort, is set + sortBy = sortBy || (filter === null || filter === void 0 ? void 0 : filter.searchAttribute); + // Call inherited function + return _super.loadAll.call(this, offset, size, sortBy, sortDirection, filter, opts); + }); + } + load(id, opts) { + const _super = Object.create(null, { + load: { get: () => super.load } + }); + return __awaiter(this, void 0, void 0, function* () { + const query = opts && opts.query || this.queries.load; + if (!query) { + if (!this.queries.loadAll) + throw new Error('Not implemented'); + const data = yield this.loadAll(0, 1, null, null, { id }, opts); + return data && data[0]; + } + return _super.load.call(this, id, opts); + }); + } + suggest(value, filter, sortBy, sortDirection, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (ReferentialUtils.isNotEmpty(value)) + return { data: [value] }; + value = (typeof value === 'string' && value !== '*') && value || undefined; + // Replace '*' character by undefined + if (!value || value === '*') { + value = undefined; + } + // trim search text, and ignore some characters + else if (value && typeof value === 'string') { + value = value.trim().replace(TEXT_SEARCH_IGNORE_CHARS_REGEXP, '*'); + } + return this.loadAll(0, !value ? 30 : 10, sortBy, sortDirection, Object.assign(Object.assign({}, filter), { searchText: value }), Object.assign({ withTotal: true /* Used by autocomplete */ }, opts)); + }); + } + equals(e1, e2) { + return e1 && e2 && ((isNotNil(e1.id) && e1.id === e2.id) || (e1.label && e1.label === e2.label)); + } + existsByLabel(label, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + const count = yield this.countAll(filter, opts); + return count > 0; + }); + } +}; +BaseReferentialService = __decorate([ + Directive() + // tslint:disable-next-line:directive-class-suffix + , + __metadata("design:paramtypes", [Injector, Function, Function, Object]) +], BaseReferentialService); +export { BaseReferentialService }; +//# sourceMappingURL=base-referential-service.class.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/base-referential-service.class.js.map b/out-tsc/app/app/referential/services/base-referential-service.class.js.map new file mode 100644 index 000000000..6575de475 --- /dev/null +++ b/out-tsc/app/app/referential/services/base-referential-service.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"base-referential-service.class.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/base-referential-service.class.ts"],"names":[],"mappings":";AAKA,OAAO,EACL,iBAAiB,EAIjB,cAAc,EAGd,QAAQ,EAER,eAAe,EACf,gBAAgB,GAEjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAQpD,MAAM,CAAC,MAAM,+BAA+B,GAAG,WAAW,CAAC;AAwBpD,IAAe,sBAAsB,GAArC,MAAe,sBAUpB,SAAQ,iBAA4C;IAKpD,YACE,QAAkB,EACR,QAAoB,EACpB,UAAsB,EAChC,OAAiD;QAEjD,KAAK,CACH,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,EAC5B,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,EAC7B,QAAQ,EACR,UAAU,oBAEL,OAAO,EACV,CAAC;QAXK,aAAQ,GAAR,QAAQ,CAAY;QACpB,eAAU,GAAV,UAAU,CAAY;IAWlC,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,IAAY,EAAE,MAAe,EAAE,aAA6B,EAAE,MAAU,EAAE,IAAS;QAC1G,+CAA+C;QAC/C,MAAM,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,eAAe,CAAC;QACpD,0BAA0B;QAC1B,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3E,CAAC;IAEK,OAAO,CAAC,MAAc,EAAE,IAAY,EAC5B,MAAyB,EACzB,aAA6B,EAC7B,MAAmB,EACnB,IAA+B;;;;;YAC3C,+CAA+C;YAC/C,MAAM,GAAG,MAAM,KAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,eAAe,CAAA,CAAC;YAE3C,0BAA0B;YAC1B,OAAO,OAAM,OAAO,YAAC,MAAM,EAAE,IAAI,EAAE,MAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE;QACpF,CAAC;KAAA;IAEK,IAAI,CAAC,EAAM,EAAE,IAAS;;;;;YAC1B,MAAM,KAAK,GAAG,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACtD,IAAI,CAAC,KAAK,EAAE;gBACV,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBAC9D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAkB,EAAE,IAAI,CAAC,CAAC;gBAChF,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;aACxB;YACD,OAAO,OAAM,IAAI,YAAC,EAAE,EAAE,IAAI,EAAE;QAC9B,CAAC;KAAA;IAEK,OAAO,CAAC,KAAU,EAAE,MAAmB,EAC/B,MAAyB,EACzB,aAA6B,EAC7B,IAGC;;YACb,IAAI,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC;gBAAE,OAAO,EAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAC,CAAC;YAC/D,KAAK,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,SAAS,CAAC;YAC3E,qCAAqC;YACrC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,GAAG,EAAE;gBAC3B,KAAK,GAAG,SAAS,CAAC;aACnB;YACD,+CAA+C;iBAC1C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC3C,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;aACpE;YAED,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,kCAEvD,MAAM,KACT,UAAU,EAAE,KAAe,KAE7B,gBAAC,SAAS,EAAE,IAAI,CAAC,0BAA0B,IAAK,IAAI,CAAkB,CACvE,CAAC;QACJ,CAAC;KAAA;IAED,MAAM,CAAC,EAAK,EAAE,EAAK;QACjB,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACnG,CAAC;IAEK,aAAa,CAAC,KAAa,EAAE,MAAmB,EAAE,IAAyC;;YAC/F,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAU,CAAC,CAAC;YACtD,OAAO,KAAK,GAAG,CAAC,CAAC;QACnB,CAAC;KAAA;CAIF,CAAA;AAlGqB,sBAAsB;IAF3C,SAAS,EAAE;IACZ,kDAAkD;;qCAiBpC,QAAQ;GAhBA,sBAAsB,CAkG3C;SAlGqB,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/config/program.config.js b/out-tsc/app/app/referential/services/config/program.config.js new file mode 100644 index 000000000..89b5e4721 --- /dev/null +++ b/out-tsc/app/app/referential/services/config/program.config.js @@ -0,0 +1,1000 @@ +import { isNilOrBlank, removeDuplicatesFromArray, StatusIds } from '@sumaris-net/ngx-components'; +import { LocationLevelGroups, LocationLevelIds, UnitLabel } from '../model/model.enum'; +import { TaxonGroupTypeIds } from '@app/referential/services/model/taxon-group.model'; +import { DataStrategyResolutions } from '@app/data/form/data-editor.utils'; +export const SAMPLING_STRATEGIES_FEATURE_NAME = 'samplingStrategies'; +export const OperationPasteFlags = Object.freeze({ + NONE: 0, + DATE: 1, + TIME: 2, + POSITION: 4, + FISHING_AREA: 8, + MEASUREMENT: 16, + GEAR: 32, + METIER: 64, + // ALL FLAGS + ALL: (1 + 2 + 4 + 8 + 16 + 32 + 64) +}); +export const ProgramProperties = Object.freeze({ + // Access right + DATA_OBSERVERS_CAN_WRITE: { + key: 'sumaris.data.observers.canWrite', + label: 'PROGRAM.OPTIONS.DATA_OBSERVERS_CAN_WRITE', + type: 'boolean', + defaultValue: false, + }, + // Strategies resolution + DATA_STRATEGY_RESOLUTION: { + key: 'sumaris.data.strategy.resolution', + label: 'PROGRAM.OPTIONS.DATA_STRATEGY_RESOLUTION', + type: 'enum', + values: [ + { + key: DataStrategyResolutions.LAST, + value: 'PROGRAM.OPTIONS.DATA_STRATEGY_RESOLUTION_ENUM.LAST' + }, + { + key: DataStrategyResolutions.USER_SELECT, + value: 'PROGRAM.OPTIONS.DATA_STRATEGY_RESOLUTION_ENUM.USER_SELECT' + }, + { + key: DataStrategyResolutions.SPATIO_TEMPORAL, + value: 'PROGRAM.OPTIONS.DATA_STRATEGY_RESOLUTION_ENUM.SPATIO_TEMPORAL' + }, + { + key: DataStrategyResolutions.NONE, + value: 'PROGRAM.OPTIONS.DATA_STRATEGY_RESOLUTION_ENUM.NONE' + }, + ], + // TODO + //defaultValue: DataStrategyResolutions.LAST + defaultValue: DataStrategyResolutions.SPATIO_TEMPORAL + }, + // Trip + TRIP_LOCATION_LEVEL_IDS: { + key: 'sumaris.trip.location.level.ids', + label: 'PROGRAM.OPTIONS.TRIP_LOCATION_LEVEL_IDS', + type: 'entities', + autocomplete: { + filter: { + entityName: 'LocationLevel', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + }, + attributes: ['name'] + }, + defaultValue: LocationLevelIds.PORT.toString() + }, + TRIP_LOCATION_FILTER_MIN_LENGTH: { + key: 'sumaris.trip.location.filter.searchText.minLength', + label: 'PROGRAM.OPTIONS.TRIP_LOCATION_FILTER_SEARCH_TEXT_MIN_LENGTH', + type: 'integer', + defaultValue: 0 + }, + TRIP_SALE_ENABLE: { + key: 'sumaris.trip.sale.enable', + label: 'PROGRAM.OPTIONS.TRIP_SALE_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_OBSERVERS_ENABLE: { + key: 'sumaris.trip.observers.enable', + label: 'PROGRAM.OPTIONS.TRIP_OBSERVERS_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_OFFLINE_IMPORT_LOCATION_LEVEL_IDS: { + key: 'sumaris.trip.offline.import.location.level.ids', + label: 'PROGRAM.OPTIONS.TRIP_OFFLINE_IMPORT_LOCATION_LEVEL_IDS', + type: 'entities', + autocomplete: { + filter: { + entityName: 'LocationLevel', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + }, + attributes: ['name'] + }, + defaultValue: undefined // = Import all locations define in LocationLevelIds + }, + TRIP_METIERS_ENABLE: { + key: 'sumaris.trip.metiers.enable', + label: 'PROGRAM.OPTIONS.TRIP_METIERS_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + TRIP_METIERS_HISTORY_NB_DAYS: { + key: 'sumaris.trip.metiers.history.days', + label: 'PROGRAM.OPTIONS.TRIP_METIERS_HISTORY_NB_DAYS', + defaultValue: '30', + type: 'integer' + }, + TRIP_MEASUREMENTS_OPTIONAL_ON_FIELD_MODE: { + key: 'sumaris.trip.onboard.measurements.optional', + label: 'PROGRAM.OPTIONS.TRIP_MEASUREMENTS_OPTIONAL_ON_FIELD_MODE', + defaultValue: 'false', + type: 'boolean' + }, + TRIP_HELP_URL: { + key: 'sumaris.trip.help.url', + label: 'PROGRAM.OPTIONS.TRIP_HELP_URL', + type: 'string' + }, + TRIP_PHYSICAL_GEARS_COLUMNS_PMFM_IDS: { + key: 'sumaris.trip.gears.columns.pmfmIds', + label: 'PROGRAM.OPTIONS.TRIP_PHYSICAL_GEARS_COLUMNS_PMFM_IDS', + defaultValue: null, + type: 'entities', + autocomplete: { + filter: { + entityName: 'Pmfm', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + }, + attributes: ['id', 'label', 'name'], + columnSizes: [2, 4, 6] + }, + }, + TRIP_PHYSICAL_GEAR_RANK_ORDER_ENABLE: { + key: 'sumaris.trip.gear.rankOrder.enable', + label: 'PROGRAM.OPTIONS.TRIP_PHYSICAL_GEAR_RANK_ORDER_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + TRIP_PHYSICAL_GEAR_ALLOW_CHILDREN: { + key: 'sumaris.trip.gear.allowChildren', + label: 'PROGRAM.OPTIONS.TRIP_PHYSICAL_GEAR_ALLOW_CHILDREN', + defaultValue: 'false', + type: 'boolean' + }, + TRIP_PHYSICAL_GEAR_MIN_CHILDREN_COUNT: { + key: 'sumaris.trip.gear.minChildrenCount', + label: 'PROGRAM.OPTIONS.TRIP_PHYSICAL_GEAR_MIN_CHILDREN_COUNT', + defaultValue: 2, + type: 'integer' + }, + TRIP_PHYSICAL_GEAR_HELP_MESSAGE: { + key: 'sumaris.trip.gear.help.message', + label: 'PROGRAM.OPTIONS.TRIP_PHYSICAL_GEAR_HELP_MESSAGE', + defaultValue: undefined, + type: 'string' + }, + // Trip map + TRIP_MAP_ENABLE: { + key: 'sumaris.trip.map.enable', + label: 'PROGRAM.OPTIONS.TRIP_MAP_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_MAP_CENTER: { + key: 'sumaris.trip.map.center', + label: 'PROGRAM.OPTIONS.TRIP_MAP_CENTER', + defaultValue: '46.879966,-10', + type: 'string' + }, + TRIP_MAP_ZOOM: { + key: 'sumaris.trip.map.zoom', + label: 'PROGRAM.OPTIONS.TRIP_MAP_ZOOM', + defaultValue: 5, + type: 'integer' + }, + TRIP_OPERATION_PASTE_FLAGS: { + key: 'sumaris.trip.operation.paste.flags', + label: 'PROGRAM.OPTIONS.TRIP_OPERATION_PASTE_FLAGS', + defaultValue: '0', + type: 'enum', + values: [ + { + key: '' + OperationPasteFlags.NONE, + value: 'PROGRAM.OPTIONS.TRIP_OPERATION_PASTE_FLAGS_ENUM.NONE' + }, + { + // eslint-disable-next-line no-bitwise + key: '' + (OperationPasteFlags.DATE | OperationPasteFlags.POSITION | OperationPasteFlags.FISHING_AREA | OperationPasteFlags.GEAR | OperationPasteFlags.METIER), + value: 'PROGRAM.OPTIONS.TRIP_OPERATION_PASTE_FLAGS_ENUM.DATE_POSITION_FISHING_AREA_GEAR_METIER' + }, + { + // eslint-disable-next-line no-bitwise + key: '' + (OperationPasteFlags.DATE | OperationPasteFlags.TIME | OperationPasteFlags.POSITION | OperationPasteFlags.FISHING_AREA | OperationPasteFlags.GEAR | OperationPasteFlags.METIER), + value: 'PROGRAM.OPTIONS.TRIP_OPERATION_PASTE_FLAGS_ENUM.DATE_TIME_POSITION_FISHING_AREA_GEAR_METIER' + }, + { + // eslint-disable-next-line no-bitwise + key: '' + (OperationPasteFlags.DATE | OperationPasteFlags.POSITION | OperationPasteFlags.FISHING_AREA | OperationPasteFlags.MEASUREMENT | OperationPasteFlags.GEAR | OperationPasteFlags.METIER), + value: 'PROGRAM.OPTIONS.TRIP_OPERATION_PASTE_FLAGS_ENUM.DATE_POSITION_FISHING_AREA_MEASUREMENT_GEAR_METIER' + } + ] + }, + TRIP_OPERATION_MEASUREMENTS_OPTIONAL_ON_FIELD_MODE: { + key: 'sumaris.trip.operation.onboard.measurements.optional', + label: 'PROGRAM.OPTIONS.TRIP_OPERATION_MEASUREMENTS_OPTIONAL_ON_FIELD_MODE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_OPERATION_HELP_URL: { + key: 'sumaris.trip.operation.help.url', + label: 'PROGRAM.OPTIONS.TRIP_OPERATION_HELP_URL', + type: 'string' + }, + TRIP_POSITION_BOUNDING_BOX: { + key: 'sumaris.trip.operation.position.boundingBox', + label: 'PROGRAM.OPTIONS.TRIP_POSITION_BOUNDING_BOX', + type: 'string' // expected BBox + }, + TRIP_OPERATION_METIER_ENABLE: { + key: 'sumaris.trip.operation.metier.enable', + label: 'PROGRAM.OPTIONS.TRIP_OPERATION_METIER_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_POSITION_ENABLE: { + key: 'sumaris.trip.operation.position.enable', + label: 'PROGRAM.OPTIONS.TRIP_POSITION_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_BATCH_ENABLE: { + key: 'sumaris.trip.operation.batch.enable', + label: 'PROGRAM.OPTIONS.TRIP_BATCH_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_BATCH_TAXON_NAME_ENABLE: { + key: 'sumaris.trip.operation.batch.taxonName.enable', + label: 'PROGRAM.OPTIONS.TRIP_BATCH_TAXON_NAME_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_BATCH_TAXON_GROUP_ENABLE: { + key: 'sumaris.trip.operation.batch.taxonGroup.enable', + label: 'PROGRAM.OPTIONS.TRIP_BATCH_TAXON_GROUP_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_BATCH_TAXON_GROUPS_NO_WEIGHT: { + key: 'sumaris.trip.operation.batch.taxonGroups.noWeight', + label: 'PROGRAM.OPTIONS.TRIP_BATCH_TAXON_GROUPS_NO_WEIGHT', + defaultValue: '', + type: 'string' + }, + TRIP_BATCH_TAXON_GROUPS_NO_LANDING: { + key: 'sumaris.trip.operation.batch.taxonGroups.noLanding', + label: 'PROGRAM.OPTIONS.TRIP_BATCH_TAXON_GROUPS_NO_LANDING', + defaultValue: '', + type: 'string' + }, + TRIP_BATCH_AUTO_FILL: { + key: 'sumaris.trip.operation.batch.autoFill', + label: 'PROGRAM.OPTIONS.TRIP_BATCH_AUTO_FILL', + defaultValue: 'false', + type: 'boolean' + }, + TRIP_BATCH_SAMPLING_RATIO_FORMAT: { + key: 'sumaris.trip.operation.batch.samplingRatio.format', + label: 'PROGRAM.OPTIONS.TRIP_BATCH_SAMPLING_RATIO_FORMAT', + defaultValue: '%', + type: 'enum', + values: [ + { + key: '%', + value: 'TRIP.BATCH.EDIT.SAMPLING_RATIO_PCT' + }, + { + key: '1/w', + value: 'TRIP.BATCH.EDIT.SAMPLING_COEFFICIENT' + } + ] + }, + TRIP_BATCH_INDIVIDUAL_COUNT_COMPUTE: { + key: 'sumaris.trip.operation.batch.individualCount.compute', + label: 'PROGRAM.OPTIONS.TRIP_BATCH_INDIVIDUAL_COUNT_COMPUTE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_BATCH_MEASURE_INDIVIDUAL_COUNT_ENABLE: { + key: 'sumaris.trip.operation.batch.individualCount.enable', + label: 'PROGRAM.OPTIONS.TRIP_BATCH_MEASURE_INDIVIDUAL_COUNT_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_BATCH_MEASURE_INDIVIDUAL_TAXON_NAME_ENABLE: { + key: 'sumaris.trip.operation.batch.individual.taxonName.enable', + label: 'PROGRAM.OPTIONS.TRIP_BATCH_MEASURE_INDIVIDUAL_TAXON_NAME_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_BATCH_MEASURE_INDIVIDUAL_TAXON_GROUP_ENABLE: { + key: 'sumaris.trip.operation.batch.individual.taxonGroup.enable', + label: 'PROGRAM.OPTIONS.TRIP_BATCH_MEASURE_INDIVIDUAL_TAXON_GROUP_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_BATCH_MEASURE_INDIVIDUAL_WEIGHT_DISPLAYED_UNIT: { + key: 'sumaris.trip.operation.batch.individual.weightUnit', + label: 'PROGRAM.OPTIONS.TRIP_BATCH_MEASURE_INDIVIDUAL_WEIGHT_UNIT', + type: 'enum', + values: [ + { + key: UnitLabel.KG, + value: UnitLabel.KG + }, + { + key: UnitLabel.GRAM, + value: UnitLabel.GRAM + }, + { + key: UnitLabel.MG, + value: UnitLabel.MG + }, + { + key: UnitLabel.TON, + value: UnitLabel.TON + } + ], + // No default value (keep PMFM unit) + //defaultValue: UnitLabel.KG + }, + TRIP_BATCH_MEASURE_RANK_ORDER_COMPUTE: { + key: 'sumaris.trip.operation.batch.rankOrder.compute', + label: 'PROGRAM.OPTIONS.TRIP_BATCH_MEASURE_RANK_ORDER_COMPUTE', + defaultValue: 'false', + type: 'boolean' + }, + TRIP_BATCH_MEASURE_ENABLE: { + key: 'sumaris.trip.operation.batch.measure.enable', + label: 'PROGRAM.OPTIONS.TRIP_BATCH_MEASURE_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_BATCH_WEIGHT_ENABLE: { + key: 'sumaris.trip.operation.batch.weight.enable', + label: 'PROGRAM.OPTIONS.TRIP_BATCH_WEIGHT_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_BATCH_LENGTH_WEIGHT_CONVERSION_ENABLE: { + key: 'sumaris.trip.operation.batch.lengthWeightConversion.enable', + label: 'PROGRAM.OPTIONS.TRIP_BATCH_LENGTH_WEIGHT_CONVERSION_ENABLE', + type: 'boolean', + defaultValue: 'false' + }, + TRIP_BATCH_ROUND_WEIGHT_CONVERSION_COUNTRY_ID: { + key: 'sumaris.trip.operation.batch.roundWeightConversion.country.id', + label: 'PROGRAM.OPTIONS.TRIP_BATCH_ROUND_WEIGHT_CONVERSION_COUNTRY_ID', + type: 'entity', + autocomplete: { + filter: { + entityName: 'Location', + levelId: LocationLevelIds.COUNTRY, + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + }, + attributes: ['name'] + }, + defaultValue: undefined + }, + TRIP_BATCH_MEASURE_ICHTHYOMETER_ENABLE: { + key: 'sumaris.trip.operation.batch.ichthyometer.enable', + label: 'PROGRAM.OPTIONS.TRIP_BATCH_MEASURE_ICHTHYOMETER_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_SAMPLE_ENABLE: { + key: 'sumaris.trip.operation.sample.enable', + label: 'PROGRAM.OPTIONS.TRIP_SAMPLE_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + TRIP_SAMPLE_DATE_TIME_ENABLE: { + key: 'sumaris.trip.operation.sample.dateTime.enable', + label: 'PROGRAM.OPTIONS.TRIP_SAMPLE_DATE_TIME_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_SAMPLE_TAXON_NAME_ENABLE: { + key: 'sumaris.trip.operation.sample.taxonName.enable', + label: 'PROGRAM.OPTIONS.TRIP_SAMPLE_TAXON_NAME_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_SAMPLE_TAXON_GROUP_ENABLE: { + key: 'sumaris.trip.operation.sample.taxonGroup.enable', + label: 'PROGRAM.OPTIONS.TRIP_SAMPLE_TAXON_GROUP_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_SAMPLE_LABEL_ENABLE: { + key: 'sumaris.trip.operation.sample.label.enable', + label: 'PROGRAM.OPTIONS.TRIP_SAMPLE_LABEL_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + TRIP_SAMPLE_IMAGES_ENABLE: { + key: 'sumaris.trip.operation.sample.images.enable', + label: 'PROGRAM.OPTIONS.TRIP_SAMPLE_IMAGES_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + TRIP_LATITUDE_SIGN: { + key: 'sumaris.trip.operation.latitude.defaultSign', + label: 'PROGRAM.OPTIONS.TRIP_LATITUDE_DEFAULT_SIGN', + type: 'enum', + values: [ + { + key: '+', + value: 'N' + }, + { + key: '-', + value: 'S' + } + ] + }, + TRIP_LONGITUDE_SIGN: { + key: 'sumaris.trip.operation.longitude.defaultSign', + label: 'PROGRAM.OPTIONS.TRIP_LONGITUDE_DEFAULT_SIGN', + type: 'enum', + values: [ + { + key: '+', + value: 'E' + }, + { + key: '-', + value: 'W' + } + ] + }, + TRIP_ALLOW_PARENT_OPERATION: { + key: 'sumaris.trip.operation.allowParent', + label: 'PROGRAM.OPTIONS.TRIP_ALLOW_PARENT_OPERATION', + defaultValue: 'false', + type: 'boolean' + }, + TRIP_DISTANCE_MAX_WARNING: { + key: 'sumaris.trip.operation.distanceMaxWarning', + label: 'PROGRAM.OPTIONS.TRIP_OPERATION_DISTANCE_MAX_WARNING', + defaultValue: '0', + type: 'integer' + }, + TRIP_DISTANCE_MAX_ERROR: { + key: 'sumaris.trip.operation.distanceMaxError', + label: 'PROGRAM.OPTIONS.TRIP_OPERATION_DISTANCE_MAX_ERROR', + defaultValue: '0', + type: 'integer' + }, + TRIP_MIN_DURATION_HOURS: { + key: 'sumaris.trip.minDurationInHours', + label: 'PROGRAM.OPTIONS.TRIP_MIN_DURATION_HOURS', + defaultValue: '1', + type: 'integer' + }, + TRIP_MAX_DURATION_HOURS: { + key: 'sumaris.trip.maxDurationInHours', + label: 'PROGRAM.OPTIONS.TRIP_MAX_DURATION_HOURS', + defaultValue: '2400', + type: 'integer' + }, + TRIP_APPLY_DATE_ON_NEW_OPERATION: { + key: 'sumaris.trip.operation.copyTripDates', + label: 'PROGRAM.OPTIONS.TRIP_APPLY_DATE_ON_NEW_OPERATION', + defaultValue: 'false', + type: 'boolean' + }, + TRIP_REPORT_ENABLE: { + key: 'sumaris.trip.report.enable', + label: 'PROGRAM.OPTIONS.TRIP_REPORT_ENABLE', + type: 'boolean', + defaultValue: 'false' + }, + TRIP_REPORT_TYPE: { + key: 'sumaris.trip.report.type', + label: 'PROGRAM.OPTIONS.TRIP_REPORT_TYPE', + type: 'enum', + values: [ + { + key: 'legacy', + value: 'PROGRAM.OPTIONS.TRIP_REPORT_TYPE_LEGACY' + }, + { + key: 'selectivity', + value: 'PROGRAM.OPTIONS.TRIP_REPORT_TYPE_SELECTIVITY' + } + ], + defaultValue: 'legacy' + }, + // Operation + TRIP_OPERATION_EDITOR: { + key: 'sumaris.operation.editor', + label: 'PROGRAM.OPTIONS.TRIP_OPERATION_EDITOR', + type: 'enum', + values: [ + { + key: 'legacy', + value: 'PROGRAM.OPTIONS.TRIP_OPERATION_EDITOR_LEGACY' + }, + { + key: 'selectivity', + value: 'PROGRAM.OPTIONS.TRIP_OPERATION_EDITOR_SELECTIVITY' + } + ], + defaultValue: 'legacy' + }, + TRIP_OPERATION_METIER_FILTER: { + key: 'sumaris.trip.operation.metier.filter', + label: 'PROGRAM.OPTIONS.TRIP_OPERATION_METIER_FILTER', + defaultValue: 'false', + type: 'boolean' + }, + TRIP_OPERATION_FISHING_AREA_LOCATION_LEVEL_IDS: { + key: 'sumaris.trip.operation.fishingArea.locationLevel.ids', + label: 'PROGRAM.OPTIONS.TRIP_OPERATION_FISHING_AREA_LOCATION_LEVEL_IDS', + type: 'entities', + autocomplete: { + filter: { + entityName: 'LocationLevel', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + }, + attributes: ['name'] + }, + defaultValue: LocationLevelIds.RECTANGLE_ICES.toString() + }, + TRIP_OPERATION_METIER_TAXON_GROUP_TYPE_IDS: { + key: 'sumaris.trip.operation.metier.taxonGroupType.ids', + label: 'PROGRAM.OPTIONS.TRIP_OPERATION_METIER_TAXON_GROUP_TYPE_IDS', + type: 'entities', + autocomplete: { + filter: { + entityName: 'TaxonGroupType', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + }, + attributes: ['name'] + }, + defaultValue: TaxonGroupTypeIds.METIER_DCF_5.toString() + }, + TRIP_OPERATION_FISHING_START_DATE_ENABLE: { + key: 'sumaris.trip.operation.fishingStartDateEnable', + label: 'PROGRAM.OPTIONS.TRIP_OPERATION_FISHING_START_DATE_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + TRIP_OPERATION_FISHING_END_DATE_ENABLE: { + key: 'sumaris.trip.operation.fishingEndDateEnable', + label: 'PROGRAM.OPTIONS.TRIP_OPERATION_FISHING_END_DATE_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + TRIP_OPERATION_END_DATE_ENABLE: { + key: 'sumaris.trip.operation.endDateEnable', + label: 'PROGRAM.OPTIONS.TRIP_OPERATION_END_DATE_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + TRIP_OPERATION_MAX_SHOOTING_DURATION_HOURS: { + key: 'sumaris.trip.operation.maxShootingDurationInHours', + label: 'PROGRAM.OPTIONS.TRIP_OPERATION_MAX_SHOOTING_DURATION_HOURS', + defaultValue: '12', + type: 'integer' + }, + TRIP_OPERATION_MAX_TOTAL_DURATION_HOURS: { + key: 'sumaris.trip.operation.maxTotalDurationInHours', + label: 'PROGRAM.OPTIONS.TRIP_OPERATION_MAX_TOTAL_DURATION_HOURS', + defaultValue: '2400', + type: 'integer' + }, + TRIP_EXTRACTION_SAMPLING_METHOD: { + key: 'sumaris.trip.extraction.sampling.method', + label: 'PROGRAM.OPTIONS.TRIP_EXTRACTION_SAMPLING_METHOD', + type: 'enum', + values: [ + { + key: 'Observer', + value: 'PROGRAM.OPTIONS.TRIP_EXTRACTION_SAMPLING_METHODS.OBSERVER' + }, + { + key: 'SelfSampling', + value: 'PROGRAM.OPTIONS.TRIP_EXTRACTION_SAMPLING_METHODS.SELF_SAMPLING' + } + ], + defaultValue: 'Observer' // See RDB/COST extraction specification + }, + TRIP_EXTRACTION_AREA_LOCATION_LEVEL_IDS: { + key: 'sumaris.trip.extraction.area.locationLevel.ids', + label: 'PROGRAM.OPTIONS.TRIP_EXTRACTION_AREA_LOCATION_LEVEL_IDS', + type: 'entities', + autocomplete: { + filter: { + entityName: 'LocationLevel', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + }, + attributes: ['name'] + }, + defaultValue: null + }, + TRIP_EXTRACTION_BATCH_DENORMALIZATION_ENABLE: { + key: 'sumaris.trip.extraction.batch.denormalization.enable', + label: 'PROGRAM.OPTIONS.TRIP_EXTRACTION_BATCH_DENORMALIZATION_ENABLE', + type: 'boolean', + defaultValue: 'false' + }, + // Observed location + OBSERVED_LOCATION_END_DATE_TIME_ENABLE: { + key: 'sumaris.observedLocation.endDateTime.enable', + label: 'PROGRAM.OPTIONS.OBSERVED_LOCATION_END_DATE_TIME_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + OBSERVED_LOCATION_START_TIME_ENABLE: { + key: 'sumaris.observedLocation.startTime.enable', + label: 'PROGRAM.OPTIONS.OBSERVED_LOCATION_START_TIME_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + OBSERVED_LOCATION_LOCATION_LEVEL_IDS: { + key: 'sumaris.observedLocation.location.level.ids', + label: 'PROGRAM.OPTIONS.OBSERVED_LOCATION_LOCATION_LEVEL_IDS', + type: 'entities', + autocomplete: { + filter: { + entityName: 'LocationLevel', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + }, + attributes: ['name'] + }, + defaultValue: LocationLevelIds.PORT.toString() + }, + OBSERVED_LOCATION_OBSERVERS_ENABLE: { + key: 'sumaris.observedLocation.observers.enable', + label: 'PROGRAM.OPTIONS.OBSERVED_LOCATION_OBSERVERS_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + OBSERVED_LOCATION_AGGREGATED_LANDINGS_ENABLE: { + key: 'sumaris.observedLocation.aggregatedLandings.enable', + label: 'PROGRAM.OPTIONS.OBSERVED_LOCATION_AGGREGATED_LANDINGS_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + OBSERVED_LOCATION_AGGREGATED_LANDINGS_PROGRAM: { + key: 'sumaris.observedLocation.aggregatedLandings.program', + label: 'PROGRAM.OPTIONS.OBSERVED_LOCATION_AGGREGATED_LANDINGS_PROGRAM', + defaultValue: '', + type: 'string' + }, + OBSERVED_LOCATION_AGGREGATED_LANDINGS_START_DAY: { + key: 'sumaris.observedLocation.aggregatedLandings.startDay', + label: 'PROGRAM.OPTIONS.OBSERVED_LOCATION_AGGREGATED_LANDINGS_START_DAY', + defaultValue: '1', + type: 'integer' + }, + OBSERVED_LOCATION_AGGREGATED_LANDINGS_DAY_COUNT: { + key: 'sumaris.observedLocation.aggregatedLandings.dayCount', + label: 'PROGRAM.OPTIONS.OBSERVED_LOCATION_AGGREGATED_LANDINGS_DAY_COUNT', + defaultValue: '7', + type: 'integer' + }, + OBSERVED_LOCATION_CREATE_VESSEL_ENABLE: { + key: 'sumaris.observedLocation.createVessel.enable', + label: 'PROGRAM.OPTIONS.OBSERVED_LOCATION_CREATE_VESSEL_ENABLE', + defaultValue: 'true', + type: 'boolean' + }, + OBSERVED_LOCATION_SHOW_LANDINGS_HISTORY: { + key: 'sumaris.observedLocation.createLanding.history.enable', + label: 'PROGRAM.OPTIONS.OBSERVED_LOCATION_SHOW_LANDINGS_HISTORY', + defaultValue: 'true', + type: 'boolean' + }, + OBSERVED_LOCATION_REPORT_ENABLE: { + key: 'sumaris.observedLocation.report.enable', + label: 'PROGRAM.OPTIONS.OBSERVED_LOCATION_REPORT_ENABLE', + type: 'boolean', + defaultValue: 'false' + }, + OBSERVED_LOCATION_CONTROL_ENABLE: { + key: 'sumaris.observedLocation.control.enable', + label: 'PROGRAM.OPTIONS.OBSERVED_LOCATION_CONTROL_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + VESSEL_TYPE_ENABLE: { + key: 'sumaris.vessel.type.enable', + label: 'PROGRAM.OPTIONS.VESSEL_TYPE_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + // Landing + LANDING_EDITOR: { + key: 'sumaris.landing.editor', + label: 'PROGRAM.OPTIONS.LANDING_EDITOR', + type: 'enum', + values: [ + { + key: 'landing', + value: 'PROGRAM.OPTIONS.LANDING_EDITOR_LANDING' + }, + { + key: 'control', + value: 'PROGRAM.OPTIONS.LANDING_EDITOR_CONTROL' + }, + { + key: 'trip', + value: 'PROGRAM.OPTIONS.LANDING_EDITOR_TRIP' + }, + { + key: 'sampling', + value: 'PROGRAM.OPTIONS.LANDING_EDITOR_SAMPLING' + } + ], + defaultValue: 'landing' + }, + LANDING_DATE_TIME_ENABLE: { + key: 'sumaris.landing.dateTime.enable', + label: 'PROGRAM.OPTIONS.LANDING_DATE_TIME_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + LANDING_CREATION_DATE_ENABLE: { + key: 'sumaris.landing.creationDate.enable', + label: 'PROGRAM.OPTIONS.LANDING_CREATION_DATE_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + LANDING_RECORDER_PERSON_ENABLE: { + key: 'sumaris.landing.recorderPerson.enable', + label: 'PROGRAM.OPTIONS.LANDING_RECORDER_PERSON_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + LANDING_VESSEL_BASE_PORT_LOCATION_ENABLE: { + key: 'sumaris.landing.vesselBasePortLocation.enable', + label: 'PROGRAM.OPTIONS.LANDING_VESSEL_BASE_PORT_LOCATION_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + LANDING_LOCATION_ENABLE: { + key: 'sumaris.landing.location.enable', + label: 'PROGRAM.OPTIONS.LANDING_LOCATION_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + LANDING_OBSERVERS_ENABLE: { + key: 'sumaris.landing.observers.enable', + label: 'PROGRAM.OPTIONS.LANDING_OBSERVERS_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + LANDING_STRATEGY_ENABLE: { + key: 'sumaris.landing.strategy.enable', + label: 'PROGRAM.OPTIONS.LANDING_STRATEGY_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + LANDING_SAMPLES_COUNT_ENABLE: { + key: 'sumaris.landing.samplesCount.enable', + label: 'PROGRAM.OPTIONS.LANDING_SAMPLES_COUNT_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + LANDING_FISHING_AREA_LOCATION_LEVEL_IDS: { + key: 'sumaris.landing.fishingArea.locationLevel.ids', + label: 'PROGRAM.OPTIONS.LANDING_FISHING_AREA_LOCATION_LEVEL_IDS', + type: 'entities', + autocomplete: { + filter: { + entityName: 'LocationLevel', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + }, + attributes: ['name'] + }, + defaultValue: LocationLevelGroups.FISHING_AREA.toString() + }, + LANDING_SAMPLE_LABEL_ENABLE: { + key: 'sumaris.landing.sample.label.enable', + label: 'PROGRAM.OPTIONS.LANDING_SAMPLE_LABEL_ENABLE', + type: 'boolean', + defaultValue: 'false' + }, + LANDING_SAMPLE_WEIGHT_UNIT: { + key: 'sumaris.landing.samples.weightUnit', + label: 'PROGRAM.OPTIONS.LANDING_SAMPLE_WEIGHT_UNIT', + type: 'enum', + values: [ + { + key: UnitLabel.KG, + value: UnitLabel.KG + }, + { + key: UnitLabel.GRAM, + value: UnitLabel.GRAM + }, + { + key: UnitLabel.MG, + value: UnitLabel.MG + }, + { + key: UnitLabel.TON, + value: UnitLabel.TON + } + ], + // No default value (keep PMFM unit) + //defaultValue: UnitLabel.KG + }, + LANDING_COLUMNS_PMFM_IDS: { + key: 'sumaris.landing.columns.pmfmIds', + label: 'PROGRAM.OPTIONS.LANDING_COLUMNS_PMFM_IDS', + defaultValue: null, + type: 'entities', + autocomplete: { + filter: { + entityName: 'Pmfm', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + }, + attributes: ['id', 'label', 'name'], + columnSizes: [2, 4, 6] + }, + }, + /* -- Landed trip options -- */ + LANDED_TRIP_FISHING_AREA_LOCATION_LEVEL_IDS: { + key: 'sumaris.landedTrip.fishingArea.locationLevel.ids', + label: 'PROGRAM.OPTIONS.LANDED_TRIP_FISHING_AREA_LOCATION_LEVEL_IDS', + type: 'entities', + autocomplete: { + filter: { + entityName: 'LocationLevel', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + }, + attributes: ['name'] + }, + defaultValue: LocationLevelIds.RECTANGLE_ICES.toString() + }, + /* -- Extraction options -- */ + EXTRACTION_FORMATS: { + key: 'sumaris.extraction.formats', + label: 'PROGRAM.OPTIONS.EXTRACTION_FORMATS', + type: 'enums', + values: [ + { key: 'NA', value: 'COMMON.EMPTY_OPTION' }, + { key: 'RDB', value: 'EXTRACTION.FORMAT.RDB.NAME' }, + { key: 'SURVIVAL_TEST', value: 'EXTRACTION.FORMAT.SURVIVAL_TEST.NAME' }, + { key: 'COST', value: 'EXTRACTION.FORMAT.COST.NAME' }, + { key: 'FREE1', value: 'EXTRACTION.FORMAT.FREE1.NAME' }, + { key: 'FREE2', value: 'EXTRACTION.FORMAT.FREE2.NAME' }, + { key: 'PMFM_TRIP', value: 'EXTRACTION.FORMAT.PMFM_TRIP.NAME' }, + { key: 'STRAT', value: 'EXTRACTION.FORMAT.STRAT.NAME' }, + { key: 'APASE', value: 'EXTRACTION.FORMAT.APASE.NAME' }, + { key: 'VESSEL', value: 'EXTRACTION.FORMAT.VESSEL.NAME' }, + ], + autocomplete: { + columnNames: ['key', 'value'], + columnSizes: [4, 8], + displayWith: (p) => p === null || p === void 0 ? void 0 : p.key + }, + defaultValue: null // = All + }, + /* -- Program / Strategy options -- */ + STRATEGY_EDITOR_PREDOC_ENABLE: { + key: 'sumaris.program.strategy.predoc.enable', + label: 'PROGRAM.OPTIONS.STRATEGY_EDITOR_PREDOC_ENABLE', + type: 'boolean', + defaultValue: 'false' + }, + STRATEGY_EDITOR_PREDOC_FETCH_SIZE: { + key: 'sumaris.program.strategy.predoc.fetchSize', + label: 'PROGRAM.OPTIONS.STRATEGY_EDITOR_PREDOC_FETCH_SIZE', + type: 'integer', + defaultValue: '100' + }, + STRATEGY_EDITOR: { + key: 'sumaris.program.strategy.editor', + label: 'PROGRAM.OPTIONS.STRATEGY_EDITOR', + type: 'enum', + values: [ + { + key: 'legacy', + value: 'PROGRAM.OPTIONS.STRATEGY_EDITOR_ENUM.LEGACY' + }, + { + key: 'sampling', + value: 'PROGRAM.OPTIONS.STRATEGY_EDITOR_ENUM.SAMPLING' + } + ], + defaultValue: 'legacy' + }, + STRATEGY_EDITOR_LOCATION_LEVEL_IDS: { + key: 'sumaris.program.strategy.location.level.ids', + label: 'PROGRAM.OPTIONS.STRATEGY_EDITOR_LOCATION_LEVEL_IDS', + type: 'entities', + autocomplete: { + filter: { + entityName: 'LocationLevel', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + }, + attributes: ['name'] + }, + defaultValue: LocationLevelIds.DIVISION_ICES.toString() + }, + STRATEGY_DEPARTMENT_ENABLE: { + key: 'sumaris.program.strategy.department.enable', + label: 'PROGRAM.OPTIONS.STRATEGY_DEPARTMENT_ENABLE', + defaultValue: 'false', + type: 'boolean' + }, + I18N_SUFFIX: { + key: 'sumaris.i18nSuffix', + label: 'PROGRAM.OPTIONS.I18N_SUFFIX', + type: 'enum', + values: [ + { + key: 'legacy', + value: 'PROGRAM.OPTIONS.I18N_SUFFIX_LEGACY' + }, + { + key: 'SAMPLING.', + value: 'PROGRAM.OPTIONS.I18N_SUFFIX_SAMPLING' + }, + { + key: 'SURVIVAL_TEST.', + value: 'PROGRAM.OPTIONS.I18N_SUFFIX_SURVIVAL_TEST' + }, + { + key: 'ACCIDENTAL_CATCH.', + value: 'PROGRAM.OPTIONS.I18N_SUFFIX_ACCIDENTAL_CATCH' + }, + { + key: 'AUCTION_CONTROL.', + value: 'PROGRAM.OPTIONS.I18N_SUFFIX_AUCTION_CONTROL' + }, + { + key: 'TRAWL_SELECTIVITY.', + value: 'PROGRAM.OPTIONS.I18N_SUFFIX_TRAWL_SELECTIVITY' + } + ], + defaultValue: 'legacy' + }, + /* -- Qualitative value options -- */ + MEASUREMENTS_MAX_VISIBLE_BUTTONS: { + key: 'sumaris.measurements.maxVisibleButtons', + label: 'PROGRAM.OPTIONS.MEASUREMENTS_MAX_VISIBLE_BUTTONS', + type: 'integer', + defaultValue: 4 // Use -1 for all + }, + MEASUREMENTS_MAX_ITEM_COUNT_FOR_BUTTONS: { + key: 'sumaris.measurements.maxItemCountForButtons', + label: 'PROGRAM.OPTIONS.MEASUREMENTS_MAX_ITEM_COUNT_FOR_BUTTONS', + type: 'integer', + defaultValue: 12 // Use -1 for all + }, +}); +export class ProgramPropertiesUtils { + /** + * Refresh default values, (e.g. after enumeration has been update) + */ + static refreshDefaultValues() { + console.info('[program-properties] Refreshing ProgramProperties default values...'); + ProgramProperties.STRATEGY_EDITOR_LOCATION_LEVEL_IDS.defaultValue = LocationLevelIds.DIVISION_ICES.toString(); + ProgramProperties.TRIP_LOCATION_LEVEL_IDS.defaultValue = LocationLevelIds.PORT.toString(); + ProgramProperties.TRIP_OPERATION_FISHING_AREA_LOCATION_LEVEL_IDS.defaultValue = LocationLevelIds.RECTANGLE_ICES.toString(); + ProgramProperties.TRIP_OPERATION_METIER_TAXON_GROUP_TYPE_IDS.defaultValue = TaxonGroupTypeIds.METIER_DCF_5.toString(); + ProgramProperties.OBSERVED_LOCATION_LOCATION_LEVEL_IDS.defaultValue = LocationLevelIds.PORT.toString(); + ProgramProperties.LANDED_TRIP_FISHING_AREA_LOCATION_LEVEL_IDS.defaultValue = LocationLevelIds.RECTANGLE_ICES.toString(); + ProgramProperties.LANDING_FISHING_AREA_LOCATION_LEVEL_IDS.defaultValue = LocationLevelGroups.FISHING_AREA.toString(); + ProgramProperties.TRIP_BATCH_ROUND_WEIGHT_CONVERSION_COUNTRY_ID.autocomplete.filter.levelId = LocationLevelIds.COUNTRY; + } + static getPropertiesByType(type) { + if (Array.isArray(type)) { + return Object.getOwnPropertyNames(ProgramProperties).map(key => ProgramProperties[key]) + .filter(def => type.includes(def.type)); + } + return Object.getOwnPropertyNames(ProgramProperties).map(key => ProgramProperties[key]) + .filter(def => type === def.type); + } + static getPropertiesByEntityName(entityName) { + return this.getPropertiesByType(['entity', 'entities']) + .filter(def => { var _a; return ((_a = def.autocomplete) === null || _a === void 0 ? void 0 : _a.filter) && def.autocomplete.filter.entityName === entityName; }); + } + static getPropertyAsNumbersByEntityName(program, entityName) { + if (!program || isNilOrBlank(entityName)) + throw new Error('Invalid argument. Missing program or entityName'); + const ids = this.getPropertiesByEntityName(entityName) + .flatMap(property => program.getPropertyAsNumbers(property)); + return removeDuplicatesFromArray(ids); + } +} +//# sourceMappingURL=program.config.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/config/program.config.js.map b/out-tsc/app/app/referential/services/config/program.config.js.map new file mode 100644 index 000000000..6f62ab176 --- /dev/null +++ b/out-tsc/app/app/referential/services/config/program.config.js.map @@ -0,0 +1 @@ +{"version":3,"file":"program.config.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/config/program.config.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/config/referential.config.js b/out-tsc/app/app/referential/services/config/referential.config.js new file mode 100644 index 000000000..77d2c902e --- /dev/null +++ b/out-tsc/app/app/referential/services/config/referential.config.js @@ -0,0 +1,772 @@ +import { changeCaseToUnderscore, StatusIds } from '@sumaris-net/ngx-components'; +import { AcquisitionLevelCodes, FractionIdGroups, LocationLevelGroups, LocationLevelIds, MatrixIds, MethodIds, ParameterGroupIds, ParameterLabelGroups, PmfmIds, ProgramLabel, QualitativeValueIds, QualityFlagIds, TaxonGroupTypeIds, TaxonomicLevelIds, UnitIds, VesselTypeIds } from '../model/model.enum'; +// Keep existing cache object, when incoming is minified (without entityName) +const mergeNotMinified = (existing, incoming) => { var _a; return (((_a = incoming === null || incoming === void 0 ? void 0 : incoming.__ref) === null || _a === void 0 ? void 0 : _a.includes('"entityName":null')) ? existing : incoming); }; +export const REFERENTIAL_GRAPHQL_TYPE_POLICIES = { + MetierVO: { + keyFields: ['entityName', 'id'], + merge: mergeNotMinified + }, + PmfmVO: { + keyFields: ['entityName', 'id'], + merge: mergeNotMinified + }, + TaxonGroupVO: { + keyFields: ['entityName', 'id'], + merge: mergeNotMinified + }, + TaxonNameVO: { + keyFields: ['entityName', 'id'], + merge: mergeNotMinified + }, + LocationVO: { + keyFields: ['entityName', 'id'], + merge: mergeNotMinified + }, + ReferentialVO: { + keyFields: ['entityName', 'id'], + merge: mergeNotMinified + }, + TaxonGroupStrategyVO: { + keyFields: ['__typename', 'strategyId', 'taxonGroup', ['entityName', 'id']] + }, + TaxonNameStrategyVO: { + keyFields: ['__typename', 'strategyId', 'taxonName', ['entityName', 'id']] + }, + DenormalizedPmfmStrategyVO: { + keyFields: ['__typename', 'strategyId', 'acquisitionLevel', 'id'] + }, +}; +const LocationLevelAutocompleteConfig = { + attributes: ['id', 'name'], + filter: { + entityName: 'LocationLevel', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } +}; +const PmfmAutocompleteConfig = { + attributes: ['id', 'label'], + columnSizes: [3, 'auto'], + filter: { + entityName: 'Pmfm', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } +}; +const QualitativeValueAutocompleteConfig = { + attributes: ['id', 'label', 'name'], + columnSizes: [3, 3, 'auto'], + filter: { + entityName: 'QualitativeValue', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } +}; +export const REFERENTIAL_CONFIG_OPTIONS = Object.freeze({ + REFERENTIAL_VESSEL_ENABLE: { + key: 'sumaris.referential.vessel.enable', + label: 'REFERENTIAL.OPTIONS.VESSELS_ENABLE', + type: 'boolean', + defaultValue: 'false' + }, + ANALYTIC_REFERENCES_ENABLE: { + key: 'sumaris.analyticReferences.enable', + label: 'CONFIGURATION.OPTIONS.ANALYTIC_REFERENCES_ENABLE', + type: 'boolean', + defaultValue: 'false' + }, + PROGRAM_SIH_LABEL: { + key: 'sumaris.enumeration.Program.SIH.label', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PROGRAM_SIH_LABEL', + type: 'string', + defaultValue: ProgramLabel.SIH + }, + /* -- Acquisition levels -- */ + ACQUISITION_LEVEL_TRIP_LABEL: { + key: 'sumaris.enumeration.AcquisitionLevel.TRIP.label', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.ACQUISITION_LEVEL_TRIP_LABEL', + type: 'string', + defaultValue: AcquisitionLevelCodes.TRIP + }, + ACQUISITION_LEVEL_PHYSICAL_GEAR_LABEL: { + key: 'sumaris.enumeration.AcquisitionLevel.PHYSICAL_GEAR.label', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.ACQUISITION_LEVEL_PHYSICAL_GEAR_LABEL', + type: 'string', + defaultValue: AcquisitionLevelCodes.PHYSICAL_GEAR + }, + ACQUISITION_LEVEL_OPERATION_LABEL: { + key: 'sumaris.enumeration.AcquisitionLevel.OPERATION.label', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.ACQUISITION_LEVEL_OPERATION_LABEL', + type: 'string', + defaultValue: AcquisitionLevelCodes.OPERATION + }, + /* -- Location levels -- */ + LOCATION_LEVEL_COUNTRY_ID: { + key: 'sumaris.enumeration.LocationLevel.COUNTRY.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.LOCATION_LEVEL_COUNTRY_ID', + type: 'entity', + autocomplete: LocationLevelAutocompleteConfig, + defaultValue: LocationLevelIds.COUNTRY + }, + LOCATION_LEVEL_PORT_ID: { + key: 'sumaris.enumeration.LocationLevel.HARBOUR.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.LOCATION_LEVEL_PORT_ID', + type: 'entity', + autocomplete: LocationLevelAutocompleteConfig, + defaultValue: LocationLevelIds.PORT + }, + LOCATION_LEVEL_AUCTION_ID: { + key: 'sumaris.enumeration.LocationLevel.AUCTION.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.LOCATION_LEVEL_AUCTION_ID', + type: 'entity', + autocomplete: LocationLevelAutocompleteConfig, + defaultValue: LocationLevelIds.AUCTION + }, + // CIEM/ICES levels + LOCATION_LEVEL_SUB_AREA_ICES_ID: { + key: 'sumaris.enumeration.LocationLevel.SUB_AREA_ICES.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.LOCATION_LEVEL_SUB_AREA_ICES_ID', + type: 'entity', + autocomplete: LocationLevelAutocompleteConfig, + defaultValue: LocationLevelIds.SUB_AREA_ICES + }, + LOCATION_LEVEL_DIVISION_ICES_ID: { + key: 'sumaris.enumeration.LocationLevel.DIVISION_ICES.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.LOCATION_LEVEL_DIVISION_ICES_ID', + type: 'entity', + autocomplete: LocationLevelAutocompleteConfig, + defaultValue: LocationLevelIds.DIVISION_ICES + }, + LOCATION_LEVEL_SUB_DIVISION_ICES_ID: { + key: 'sumaris.enumeration.LocationLevel.SUB_DIVISION_ICES.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.LOCATION_LEVEL_SUB_DIVISION_ICES_ID', + type: 'entity', + autocomplete: LocationLevelAutocompleteConfig, + defaultValue: LocationLevelIds.SUB_DIVISION_ICES + }, + LOCATION_LEVEL_RECTANGLE_ICES_ID: { + key: 'sumaris.enumeration.LocationLevel.RECTANGLE_ICES.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.LOCATION_LEVEL_RECTANGLE_ICES_ID', + type: 'entity', + autocomplete: LocationLevelAutocompleteConfig, + defaultValue: LocationLevelIds.RECTANGLE_ICES + }, + // CGPM/GFCM levels + LOCATION_LEVEL_SUB_AREA_GFCM_ID: { + key: 'sumaris.enumeration.LocationLevel.SUB_AREA_GFCM.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.LOCATION_LEVEL_SUB_AREA_GFCM_ID', + type: 'entity', + autocomplete: LocationLevelAutocompleteConfig, + defaultValue: LocationLevelIds.SUB_AREA_GFCM + }, + LOCATION_LEVEL_DIVISION_GFCM_ID: { + key: 'sumaris.enumeration.LocationLevel.DIVISION_GFCM.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.LOCATION_LEVEL_DIVISION_GFCM_ID', + type: 'entity', + autocomplete: LocationLevelAutocompleteConfig, + defaultValue: LocationLevelIds.DIVISION_GFCM + }, + LOCATION_LEVEL_SUB_DIVISION_GFCM_ID: { + key: 'sumaris.enumeration.LocationLevel.SUB_DIVISION_GFCM.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.LOCATION_LEVEL_SUB_DIVISION_GFCM_ID', + type: 'entity', + autocomplete: LocationLevelAutocompleteConfig, + defaultValue: LocationLevelIds.SUB_DIVISION_GFCM + }, + LOCATION_LEVEL_RECTANGLE_GFCM_ID: { + key: 'sumaris.enumeration.LocationLevel.RECTANGLE_GFCM.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.LOCATION_LEVEL_RECTANGLE_GFCM_ID', + type: 'entity', + autocomplete: LocationLevelAutocompleteConfig, + defaultValue: LocationLevelIds.RECTANGLE_GFCM + }, + // Fishing Areas + LOCATION_LEVEL_LOCATIONS_AREA_IDS: { + key: 'sumaris.enumeration.LocationLevel.LOCATIONS_AREA.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.LOCATION_LEVEL_LOCATIONS_AREA_IDS', + type: 'string', + defaultValue: LocationLevelGroups.FISHING_AREA.join(',') + }, + WEIGHT_LENGTH_CONVERSION_AREA_IDS: { + key: 'sumaris.enumeration.LocationLevel.WEIGHT_LENGTH_CONVERSION_AREA.ids', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.WEIGHT_LENGTH_CONVERSION_AREA_IDS', + type: 'string', + defaultValue: LocationLevelGroups.WEIGHT_LENGTH_CONVERSION_AREA.join(',') + }, + ROUND_WEIGHT_CONVERSION_DEFAULT_COUNTRY_ID: { + key: 'sumaris.enumeration.Location.ROUND_WEIGHT_CONVERSION_DEFAULT_COUNTRY.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.ROUND_WEIGHT_CONVERSION_DEFAULT_COUNTRY_ID', + type: 'integer' + }, + TAXONOMIC_LEVEL_FAMILY_ID: { + key: 'sumaris.enumeration.TaxonomicLevel.FAMILY.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.TAXONOMIC_LEVEL_FAMILY_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'TaxonomicLevel', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: TaxonomicLevelIds.FAMILY + }, + TAXONOMIC_LEVEL_GENUS_ID: { + key: 'sumaris.enumeration.TaxonomicLevel.GENUS.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.TAXONOMIC_LEVEL_GENUS_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'TaxonomicLevel', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: TaxonomicLevelIds.GENUS + }, + TAXONOMIC_LEVEL_SPECIES_ID: { + key: 'sumaris.enumeration.TaxonomicLevel.SPECIES.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.TAXONOMIC_LEVEL_SPECIES_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'TaxonomicLevel', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: TaxonomicLevelIds.SPECIES + }, + TAXONOMIC_LEVEL_SUBSPECIES_ID: { + key: 'sumaris.enumeration.TaxonomicLevel.SUBSPECIES.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.TAXONOMIC_LEVEL_SUBSPECIES_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'TaxonomicLevel', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: TaxonomicLevelIds.SUBSPECIES + }, + PMFM_TRIP_PROGRESS: { + key: 'sumaris.enumeration.Pmfm.TRIP_PROGRESS.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_TRIP_PROGRESS', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.TRIP_PROGRESS + }, + PMFM_STRATEGY_LABEL_ID: { + key: 'sumaris.enumeration.Pmfm.STRATEGY_LABEL.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_STRATEGY_LABEL_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.STRATEGY_LABEL + }, + PMFM_TAG_ID: { + key: 'sumaris.enumeration.Pmfm.TAG_ID.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_TAG_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.TAG_ID + }, + PMFM_DRESSING: { + key: 'sumaris.enumeration.Pmfm.DRESSING.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_DRESSING', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.DRESSING + }, + PMFM_PRESERVATION: { + key: 'sumaris.enumeration.Pmfm.PRESERVATION.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_PRESERVATION', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.PRESERVATION + }, + PMFM_TRAWL_SIZE_CAT_ID: { + key: 'sumaris.enumeration.Pmfm.TRAWL_SIZE_CAT.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_TRAWL_SIZE_CAT', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.TRAWL_SIZE_CAT + }, + PMFM_AGE_ID: { + key: 'sumaris.enumeration.Pmfm.AGE.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_AGE_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.AGE + }, + PMFM_SEX_ID: { + key: 'sumaris.enumeration.Pmfm.SEX.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_SEX_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.SEX + }, + PMFM_PACKAGING_ID: { + key: 'sumaris.enumeration.Pmfm.PACKAGING.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_PACKAGING_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.PACKAGING + }, + PMFM_SIZE_CATEGORY_ID: { + key: 'sumaris.enumeration.Pmfm.SIZE_CATEGORY.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_SIZE_CATEGORY_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.SIZE_CATEGORY + }, + PMFM_SALE_RANK_ORDER_ID: { + key: 'sumaris.enumeration.Pmfm.SALE_RANK_ORDER.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_SALE_RANK_ORDER_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.SALE_RANK_ORDER + }, + PMFM_SALE_ESTIMATED_RATIO_ID: { + key: 'sumaris.enumeration.Pmfm.SALE_ESTIMATED_RATIO.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_SALE_ESTIMATED_RATIO_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.SALE_ESTIMATED_RATIO + }, + PMFM_AVERAGE_WEIGHT_PRICE_ID: { + key: 'sumaris.enumeration.Pmfm.AVERAGE_WEIGHT_PRICE.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_AVERAGE_WEIGHT_PRICE_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.AVERAGE_WEIGHT_PRICE + }, + PMFM_AVERAGE_PACKAGING_PRICE_ID: { + key: 'sumaris.enumeration.Pmfm.AVERAGE_PACKAGING_PRICE.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_AVERAGE_PACKAGING_PRICE_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.AVERAGE_PACKAGING_PRICE + }, + PMFM_TOTAL_PRICE_ID: { + key: 'sumaris.enumeration.Pmfm.TOTAL_PRICE.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_TOTAL_PRICE_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.TOTAL_PRICE + }, + PMFM_REFUSED_SURVEY_ID: { + key: 'sumaris.enumeration.Pmfm.REFUSED_SURVEY.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_REFUSED_SURVEY_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.REFUSED_SURVEY + }, + PMFM_GEAR_LABEL_ID: { + key: 'sumaris.enumeration.Pmfm.GEAR_LABEL.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_GEAR_LABEL_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.GEAR_LABEL + }, + PMFM_CHILD_GEAR_ID: { + key: 'sumaris.enumeration.Pmfm.CHILD_GEAR.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_CHILD_GEAR_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.CHILD_GEAR + }, + PMFM_CATCH_WEIGHT_ID: { + key: 'sumaris.enumeration.Pmfm.CATCH_WEIGHT.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_CATCH_WEIGHT_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.CATCH_WEIGHT + }, + PMFM_DISCARD_WEIGHT_ID: { + key: 'sumaris.enumeration.Pmfm.DISCARD_WEIGHT.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_DISCARD_WEIGHT_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.DISCARD_WEIGHT + }, + PMFM_HAS_ACCIDENTAL_CATCHES_ID: { + key: 'sumaris.enumeration.Pmfm.HAS_ACCIDENTAL_CATCHES.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_HAS_ACCIDENTAL_CATCHES_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.HAS_ACCIDENTAL_CATCHES + }, + PMFM_BATCH_CALCULATED_WEIGHT_LENGTH_ID: { + key: 'sumaris.enumeration.Pmfm.BATCH_CALCULATED_WEIGHT_LENGTH.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_BATCH_CALCULATED_WEIGHT_LENGTH_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.BATCH_CALCULATED_WEIGHT_LENGTH + }, + PMFM_BATCH_CALCULATED_WEIGHT_LENGTH_SUM_ID: { + key: 'sumaris.enumeration.Pmfm.BATCH_CALCULATED_WEIGHT_LENGTH_SUM.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_BATCH_CALCULATED_WEIGHT_LENGTH_SUM_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.BATCH_CALCULATED_WEIGHT_LENGTH_SUM + }, + PMFM_BATCH_SORTING_ID: { + key: 'sumaris.enumeration.Pmfm.PMFM_BATCH_SORTING.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_BATCH_SORTING_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.BATCH_SORTING + }, + PMFM_HULL_MATERIAL_ID: { + key: 'sumaris.enumeration.Pmfm.HULL_MATERIAL.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_HULL_MATERIAL_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.HULL_MATERIAL + }, + PMFM_SELECTIVITY_DEVICE_ID: { + key: 'sumaris.enumeration.Pmfm.SELECTIVITY_DEVICE.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PMFM_SELECTIVITY_DEVICE_ID', + type: 'entity', + autocomplete: PmfmAutocompleteConfig, + defaultValue: PmfmIds.SELECTIVITY_DEVICE + }, + PARAMETER_GROUP_SURVEY_ID: { + key: 'sumaris.enumeration.ParameterGroup.SURVEY.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PARAMETER_GROUP_SURVEY_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'ParameterGroup', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: ParameterGroupIds.SURVEY + }, + METHOD_MEASURED_BY_OBSERVER_ID: { + key: 'sumaris.enumeration.Method.MEASURED_BY_OBSERVER.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.METHOD_MEASURED_BY_OBSERVER_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'Method', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: MethodIds.MEASURED_BY_OBSERVER + }, + METHOD_OBSERVED_BY_OBSERVER_ID: { + key: 'sumaris.enumeration.Method.OBSERVED_BY_OBSERVER.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.METHOD_OBSERVED_BY_OBSERVER_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'Method', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: MethodIds.OBSERVED_BY_OBSERVER + }, + METHOD_ESTIMATED_BY_OBSERVER_ID: { + key: 'sumaris.enumeration.Method.ESTIMATED_BY_OBSERVER.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.METHOD_ESTIMATED_BY_OBSERVER_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'Method', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: MethodIds.ESTIMATED_BY_OBSERVER + }, + METHOD_CALCULATED_ID: { + key: 'sumaris.enumeration.Method.CALCULATED.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.METHOD_CALCULATED_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'Method', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: MethodIds.CALCULATED + }, + METHOD_CALCULATED_WEIGHT_LENGTH_ID: { + key: 'sumaris.enumeration.Method.CALCULATED_WEIGHT_LENGTH.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.METHOD_CALCULATED_WEIGHT_LENGTH_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'Method', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: MethodIds.CALCULATED_WEIGHT_LENGTH + }, + METHOD_CALCULATED_WEIGHT_LENGTH_SUM_ID: { + key: 'sumaris.enumeration.Method.CALCULATED_WEIGHT_LENGTH_SUM.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.METHOD_CALCULATED_WEIGHT_LENGTH_SUM_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'Method', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: MethodIds.CALCULATED_WEIGHT_LENGTH_SUM + }, + METHOD_UNKNOWN_ID: { + key: 'sumaris.enumeration.Method.UNKNOWN.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.METHOD_UNKNOWN_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'Method', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: MethodIds.UNKNOWN + }, + FRACTION_INDIVIDUAL_ID: { + key: 'sumaris.enumeration.Fraction.INDIVIDUAL.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.FRACTION_INDIVIDUAL_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'Matrix', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: MatrixIds.INDIVIDUAL + }, + PARAMETER_GROUP_TAG_ID_LABELS: { + key: 'sumaris.list.parameter.tagId.labels', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PARAMETER_GROUP_TAG_ID_LABELS', + type: 'string', + defaultValue: ParameterLabelGroups.TAG_ID.join(',') + }, + PARAMETER_GROUP_AGE_LABELS: { + key: 'sumaris.list.parameter.age.labels', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PARAMETER_GROUP_AGE_LABELS', + type: 'string', + defaultValue: ParameterLabelGroups.AGE.join(',') + }, + PARAMETER_GROUP_SEX_LABELS: { + key: 'sumaris.list.parameter.sex.labels', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PARAMETER_GROUP_SEX_LABELS', + type: 'string', + defaultValue: ParameterLabelGroups.SEX.join(',') + }, + PARAMETER_GROUP_WEIGHT_LABELS: { + key: 'sumaris.list.parameter.weight.labels', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PARAMETER_GROUP_WEIGHT_LABELS', + type: 'string', + defaultValue: ParameterLabelGroups.WEIGHT.join(',') + }, + PARAMETER_GROUP_LENGTH_LABELS: { + key: 'sumaris.list.parameter.length.labels', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PARAMETER_GROUP_LENGTH_LABELS', + type: 'string', + defaultValue: ParameterLabelGroups.LENGTH.join(',') + }, + PARAMETER_GROUP_MATURITY_LABELS: { + key: 'sumaris.list.parameter.maturity.labels', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.PARAMETER_GROUP_MATURITY_LABELS', + type: 'string', + defaultValue: ParameterLabelGroups.MATURITY.join(',') + }, + FRACTION_GROUP_CALCIFIED_STRUCTURE_IDS: { + key: 'sumaris.list.fraction.calcifiedStructure.ids', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.FRACTION_GROUP_CALCIFIED_STRUCTURE_IDS', + type: 'string', + defaultValue: FractionIdGroups.CALCIFIED_STRUCTURE.join(',') + }, + UNIT_NONE_ID: { + key: 'sumaris.enumeration.Unit.NONE.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.UNIT_NONE_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'Unit', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: UnitIds.NONE + }, + QUALITATIVE_VALUE_LANDING_ID: { + key: 'sumaris.enumeration.QualitativeValue.LANDING.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.QUALITATIVE_VALUE_LANDING_ID', + type: 'entity', + autocomplete: QualitativeValueAutocompleteConfig, + defaultValue: QualitativeValueIds.DISCARD_OR_LANDING.LANDING + }, + QUALITATIVE_VALUE_DISCARD_ID: { + key: 'sumaris.enumeration.QualitativeValue.DISCARD.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.QUALITATIVE_VALUE_DISCARD_ID', + type: 'entity', + autocomplete: QualitativeValueAutocompleteConfig, + defaultValue: QualitativeValueIds.DISCARD_OR_LANDING.DISCARD + }, + QUALITATIVE_VALUE_DRESSING_WHOLE_ID: { + key: 'sumaris.enumeration.QualitativeValue.DRESSING_WHOLE.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.QUALITATIVE_VALUE_DRESSING_WHOLE_ID', + type: 'entity', + autocomplete: QualitativeValueAutocompleteConfig, + defaultValue: QualitativeValueIds.DRESSING.WHOLE + }, + QUALITATIVE_VALUE_PRESERVATION_FRESH_ID: { + key: 'sumaris.enumeration.QualitativeValue.PRESERVATION_FRESH.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.QUALITATIVE_VALUE_PRESERVATION_FRESH_ID', + type: 'entity', + autocomplete: QualitativeValueAutocompleteConfig, + defaultValue: QualitativeValueIds.PRESERVATION.FRESH + }, + QUALITATIVE_VALUE_SIZE_UNLI_CAT_NONE_ID: { + key: 'sumaris.enumeration.QualitativeValue.SIZE_UNLI_CAT_NONE.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.QUALITATIVE_VALUE_SIZE_UNLI_CAT_NONE_ID', + type: 'entity', + autocomplete: QualitativeValueAutocompleteConfig, + defaultValue: QualitativeValueIds.SIZE_UNLI_CAT.NONE + }, + QUALITATIVE_VALUE_SORTING_BULK_ID: { + key: 'sumaris.enumeration.QualitativeValue.SORTING_BULK.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.QUALITATIVE_VALUE_SORTING_BULK_ID', + type: 'entity', + autocomplete: QualitativeValueAutocompleteConfig, + defaultValue: QualitativeValueIds.BATCH_SORTING.BULK + }, + QUALITATIVE_VALUE_SORTING_NON_BULK_ID: { + key: 'sumaris.enumeration.QualitativeValue.SORTING_NON_BULK.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.QUALITATIVE_VALUE_SORTING_NON_BULK_ID', + type: 'entity', + autocomplete: QualitativeValueAutocompleteConfig, + defaultValue: QualitativeValueIds.BATCH_SORTING.NON_BULK + }, + QUALITATIVE_VALUE_SEX_UNSEXED_ID: { + key: 'sumaris.enumeration.QualitativeValue.SEX_UNSEXED.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.QUALITATIVE_VALUE_SEX_UNSEXED_ID', + type: 'entity', + autocomplete: QualitativeValueAutocompleteConfig, + defaultValue: QualitativeValueIds.SEX.UNSEXED + }, + QUALITY_FLAG_NOT_COMPLETED_ID: { + key: 'sumaris.enumeration.QualityFlag.NOT_COMPLETED.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.QUALITY_FLAG_NOT_COMPLETED_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'QualityFlag', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: QualityFlagIds.NOT_COMPLETED + }, + QUALITY_FLAG_MISSING_ID: { + key: 'sumaris.enumeration.QualityFlag.MISSING.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.QUALITY_FLAG_MISSING_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'QualityFlag', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: QualityFlagIds.MISSING + }, + TAXON_GROUP_TYPE_FAO_ID: { + key: 'sumaris.enumeration.TaxonGroupType.FAO.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.TAXON_GROUP_TYPE_FAO_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'TaxonGroupType', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: TaxonGroupTypeIds.FAO.toString() + }, + TAXON_GROUP_TYPE_NATIONAL_METIER_ID: { + key: 'sumaris.enumeration.TaxonGroupType.NATIONAL.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.TAXON_GROUP_TYPE_NATIONAL_METIER_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'TaxonGroupType', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: TaxonGroupTypeIds.NATIONAL_METIER.toString() + }, + TAXON_GROUP_TYPE_DCF_METIER_LVL_5_ID: { + key: 'sumaris.enumeration.TaxonGroupType.DCF_METIER_LVL_5.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.TAXON_GROUP_TYPE_DCF_METIER_LVL_5_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'TaxonGroupType', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: TaxonGroupTypeIds.DCF_METIER_LVL_5.toString() + }, + VESSEL_TYPE_FISHING_VESSEL: { + key: 'sumaris.enumeration.VesselType.FISHING_VESSEL.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.VESSEL_TYPE_FISHING_VESSEL_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'VesselType', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: VesselTypeIds.FISHING_VESSEL.toString() + }, + VESSEL_TYPE_SCIENTIFIC_RESEARCH_VESSEL: { + key: 'sumaris.enumeration.VesselType.SCIENTIFIC_RESEARCH_VESSEL.id', + label: 'CONFIGURATION.OPTIONS.ENUMERATION.VESSEL_TYPE_SCIENTIFIC_RESEARCH_VESSEL_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { + entityName: 'VesselType', + statusIds: [StatusIds.DISABLE, StatusIds.ENABLE] + } + }, + defaultValue: VesselTypeIds.SCIENTIFIC_RESEARCH_VESSEL.toString() + } +}); +export const REFERENTIAL_LOCAL_SETTINGS_OPTIONS = Object.freeze( +// Display attributes for referential useful entities +['department', 'location', 'fishingAreaLocation', 'qualitativeValue', 'taxonGroup', 'taxonName', 'gear', 'fraction'] + // Allow user to choose how to display field (by code+label, code, etc) + .reduce((res, fieldName) => { + const i18nFieldName = changeCaseToUnderscore(fieldName).toUpperCase(); // e.g. transform 'taxonGroup' into 'TAXON_GROUP' + res[`FIELD_${i18nFieldName}_ATTRIBUTES`] = { + key: `sumaris.field.${fieldName}.attributes`, + label: `SETTINGS.FIELDS.${i18nFieldName}`, + type: 'enum', + values: [ + { key: 'label,name', value: 'SETTINGS.FIELDS.ATTRIBUTES.LABEL_NAME' }, + { key: 'name', value: 'SETTINGS.FIELDS.ATTRIBUTES.NAME' }, + { key: 'name,label', value: 'SETTINGS.FIELDS.ATTRIBUTES.NAME_LABEL' }, + { key: 'label', value: 'SETTINGS.FIELDS.ATTRIBUTES.LABEL' } + ] + }; + return res; +}, {})); +//# sourceMappingURL=referential.config.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/config/referential.config.js.map b/out-tsc/app/app/referential/services/config/referential.config.js.map new file mode 100644 index 000000000..ab6d22bab --- /dev/null +++ b/out-tsc/app/app/referential/services/config/referential.config.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential.config.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/config/referential.config.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/errors.js b/out-tsc/app/app/referential/services/errors.js new file mode 100644 index 000000000..92f00f411 --- /dev/null +++ b/out-tsc/app/app/referential/services/errors.js @@ -0,0 +1,25 @@ +export const ErrorCodes = { + LOAD_REFERENTIAL_ERROR: 10, + SAVE_REFERENTIAL_ERROR: 11, + DELETE_REFERENTIAL_ERROR: 12, + SUBSCRIBE_REFERENTIAL_ERROR: 13, + LOAD_REFERENTIAL_LEVELS_ERROR: 16, + LOAD_PROGRAM_PMFMS_ERROR: 17, + LOAD_PROGRAM_GEARS_ERROR: 18, + LOAD_PROGRAM_TAXON_GROUPS_ERROR: 19, + LOAD_VESSELS_ERROR: 301, + LOAD_PROGRAM_ERROR: 400, + LOAD_PROGRAMS_ERROR: 401, + SAVE_PROGRAM_ERROR: 402, + SAVE_PROGRAMS_ERROR: 402, + LOAD_STRATEGY_ANALYTIC_REFERENCES_ERROR: 403, + SUBSCRIBE_AUTHORIZED_PROGRAMS_ERROR: 404, + IMPORT_REFERENTIAL_ERROR: 500, + TOO_MANY_REFERENCE_FOUND: 501, + LOAD_SOFTWARE_ERROR: 600, + SAVE_SOFTWARE_ERROR: 602, + LOAD_STRATEGY_ERROR: 700, + LOAD_STRATEGIES_ERROR: 701, + SAVE_STRATEGY_ERROR: 702 +}; +//# sourceMappingURL=errors.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/errors.js.map b/out-tsc/app/app/referential/services/errors.js.map new file mode 100644 index 000000000..c6ed57a62 --- /dev/null +++ b/out-tsc/app/app/referential/services/errors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/errors.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,UAAU,GAAG;IAExB,sBAAsB,EAAE,EAAE;IAC1B,sBAAsB,EAAE,EAAE;IAC1B,wBAAwB,EAAE,EAAE;IAC5B,2BAA2B,EAAE,EAAE;IAE/B,6BAA6B,EAAE,EAAE;IAEjC,wBAAwB,EAAE,EAAE;IAC5B,wBAAwB,EAAE,EAAE;IAC5B,+BAA+B,EAAE,EAAE;IAEnC,kBAAkB,EAAE,GAAG;IAEvB,kBAAkB,EAAE,GAAG;IACvB,mBAAmB,EAAE,GAAG;IACxB,kBAAkB,EAAE,GAAG;IACvB,mBAAmB,EAAE,GAAG;IACxB,uCAAuC,EAAE,GAAG;IAC5C,mCAAmC,EAAE,GAAG;IAExC,wBAAwB,EAAE,GAAG;IAC7B,wBAAwB,EAAE,GAAG;IAE7B,mBAAmB,EAAE,GAAG;IACxB,mBAAmB,EAAE,GAAG;IAExB,mBAAmB,EAAE,GAAG;IACxB,qBAAqB,EAAE,GAAG;IAC1B,mBAAmB,EAAE,GAAG;CAEzB,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/metier.filter.js b/out-tsc/app/app/referential/services/filter/metier.filter.js new file mode 100644 index 000000000..654aad836 --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/metier.filter.js @@ -0,0 +1,47 @@ +import { __decorate, __metadata } from "tslib"; +import { EntityClass } from '@sumaris-net/ngx-components'; +import { ReferentialRefFilter } from './referential-ref.filter'; +import { fromDateISOString, toDateISOString } from '@sumaris-net/ngx-components'; +import { Metier } from '@app/referential/metier/metier.model'; +let MetierFilter = class MetierFilter extends ReferentialRefFilter { + constructor() { + super(); + // Add predoc properties + this.programLabel = null; + this.startDate = null; + this.endDate = null; + this.vesselId = null; + this.excludedTripId = null; + this.gearIds = null; + this.taxonGroupTypeIds = null; + this.entityName = Metier.ENTITY_NAME; + } + fromObject(source) { + super.fromObject(source); + this.entityName = source.entityName || Metier.ENTITY_NAME; + this.programLabel = source.programLabel; + this.startDate = fromDateISOString(source.startDate); + this.endDate = fromDateISOString(source.endDate); + this.vesselId = source.vesselId; + this.excludedTripId = source.excludedTripId; + this.gearIds = source.gearIds; + this.taxonGroupTypeIds = source.taxonGroupTypeIds; + } + asObject(opts) { + const target = super.asObject(opts); + target.programLabel = this.programLabel; + target.startDate = toDateISOString(this.startDate); + target.endDate = toDateISOString(this.endDate); + target.vesselId = this.vesselId; + target.excludedTripId = this.excludedTripId; + target.gearIds = this.gearIds; + target.taxonGroupTypeIds = this.taxonGroupTypeIds; + return target; + } +}; +MetierFilter = __decorate([ + EntityClass({ typename: 'MetierFilterVO' }), + __metadata("design:paramtypes", []) +], MetierFilter); +export { MetierFilter }; +//# sourceMappingURL=metier.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/metier.filter.js.map b/out-tsc/app/app/referential/services/filter/metier.filter.js.map new file mode 100644 index 000000000..6a0c9d2ea --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/metier.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"metier.filter.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/filter/metier.filter.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,WAAW,EAAC,MAAO,6BAA6B,CAAC;AACzD,OAAO,EAAC,oBAAoB,EAAC,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAC,iBAAiB,EAAE,eAAe,EAAC,MAAM,6BAA6B,CAAC;AAE/E,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAGvD,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,oBAAoB;IAIpD;QACI,KAAK,EAAE,CAAC;QAIZ,wBAAwB;QACxB,iBAAY,GAAW,IAAI,CAAC;QAC5B,cAAS,GAAW,IAAI,CAAC;QACzB,YAAO,GAAW,IAAI,CAAC;QACvB,aAAQ,GAAW,IAAI,CAAC;QACxB,mBAAc,GAAW,IAAI,CAAC;QAC9B,YAAO,GAAa,IAAI,CAAC;QACzB,sBAAiB,GAAa,IAAI,CAAC;QAV/B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;IACzC,CAAC;IAWD,UAAU,CAAC,MAAW;QACpB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,WAAW,CAAC;QAC1D,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC5C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACpD,CAAC;IAED,QAAQ,CAAC,IAA4B;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACxC,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC5C,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9B,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAElD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAA;AA1CY,YAAY;IADxB,WAAW,CAAC,EAAC,QAAQ,EAAE,gBAAgB,EAAC,CAAC;;GAC7B,YAAY,CA0CxB;SA1CY,YAAY"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/pmfm-strategy.filter.js b/out-tsc/app/app/referential/services/filter/pmfm-strategy.filter.js new file mode 100644 index 000000000..75e4e4427 --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/pmfm-strategy.filter.js @@ -0,0 +1,88 @@ +import { __decorate } from "tslib"; +import { EntityClass, EntityFilter, EntityUtils, isEmptyArray, isNotEmptyArray, isNotNil } from '@sumaris-net/ngx-components'; +let PmfmStrategyFilter = class PmfmStrategyFilter extends EntityFilter { + buildFilter() { + const filterFns = super.buildFilter(); + // Acquisition Level + if (this.acquisitionLevel) { + const acquisitionLevel = this.acquisitionLevel; + filterFns.push(t => ((EntityUtils.isNotEmpty(t.acquisitionLevel, 'label') ? t.acquisitionLevel['label'] : t.acquisitionLevel) === acquisitionLevel)); + } + // Gears + if (isNotEmptyArray(this.gearIds)) { + const gearIds = this.gearIds; + filterFns.push(t => t.gearIds && t.gearIds.findIndex(id => gearIds.includes(id)) !== -1); + } + // Taxon groups + if (isNotEmptyArray(this.taxonGroupIds)) { + const taxonGroupIds = this.taxonGroupIds; + filterFns.push(t => t.taxonGroupIds && t.taxonGroupIds.findIndex(id => taxonGroupIds.includes(id)) !== -1); + } + // Taxon names + if (isNotEmptyArray(this.referenceTaxonIds)) { + const referenceTaxonIds = this.referenceTaxonIds; + filterFns.push(t => t.referenceTaxonIds && t.referenceTaxonIds.findIndex(id => referenceTaxonIds.includes(id)) !== -1); + } + return filterFns; + } +}; +PmfmStrategyFilter = __decorate([ + EntityClass({ typename: 'PmfmStrategyFilterVO' }) +], PmfmStrategyFilter); +export { PmfmStrategyFilter }; +let DenormalizedPmfmStrategyFilter = class DenormalizedPmfmStrategyFilter extends EntityFilter { + fromObject(source) { + super.fromObject(source); + this.strategyId = source.strategyId; + this.acquisitionLevel = source.acquisitionLevel; + this.acquisitionLevels = source.acquisitionLevels; + this.gearIds = source.gearId ? [source.gearId] : source.gearIds; + this.taxonGroupIds = source.taxonGroupId ? [source.taxonGroupId] : source.taxonGroupIds; + this.referenceTaxonIds = source.referenceTaxonId ? [source.referenceTaxonId] : source.referenceTaxonIds; + this.fractionIdByMatrixId = source.fractionIdByMatrixId || {}; + } + buildFilter() { + const filterFns = super.buildFilter(); + // Acquisition Level + if (this.acquisitionLevel) { + const acquisitionLevel = this.acquisitionLevel; + filterFns.push(t => t.acquisitionLevel === acquisitionLevel); + } + else if (isNotEmptyArray(this.acquisitionLevels)) { + const acquisitionLevels = this.acquisitionLevels; + filterFns.push(t => acquisitionLevels.includes(t.acquisitionLevel)); + } + // Gears + if (isNotEmptyArray(this.gearIds)) { + const gearIds = this.gearIds; + filterFns.push(t => isEmptyArray(t.gearIds) || t.gearIds.findIndex(id => gearIds.includes(id)) !== -1); + } + // Taxon groups + if (isNotEmptyArray(this.taxonGroupIds)) { + const taxonGroupIds = this.taxonGroupIds; + filterFns.push(t => isEmptyArray(t.taxonGroupIds) || t.taxonGroupIds.findIndex(id => taxonGroupIds.includes(id)) !== -1); + } + // Taxon names + if (isNotEmptyArray(this.referenceTaxonIds)) { + const referenceTaxonIds = this.referenceTaxonIds; + filterFns.push(t => isEmptyArray(t.referenceTaxonIds) || t.referenceTaxonIds.findIndex(id => referenceTaxonIds.includes(id)) !== -1); + } + // Filter on fraction, by matrix + if (this.fractionIdByMatrixId) { + Object.keys(this.fractionIdByMatrixId) + .map(parseInt) + .forEach(matrixId => { + const fractionId = this.fractionIdByMatrixId[matrixId]; + if (isNotNil(fractionId)) { + filterFns.push(t => t.matrixId !== matrixId || t.fractionId === fractionId); + } + }); + } + return filterFns; + } +}; +DenormalizedPmfmStrategyFilter = __decorate([ + EntityClass({ typename: 'DenormalizedPmfmStrategyFilterVO' }) +], DenormalizedPmfmStrategyFilter); +export { DenormalizedPmfmStrategyFilter }; +//# sourceMappingURL=pmfm-strategy.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/pmfm-strategy.filter.js.map b/out-tsc/app/app/referential/services/filter/pmfm-strategy.filter.js.map new file mode 100644 index 000000000..cb4193265 --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/pmfm-strategy.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfm-strategy.filter.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/filter/pmfm-strategy.filter.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAY,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAIjI,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,YAA8C;IAWpF,WAAW;QACT,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtC,oBAAoB;QACpB,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAC/C,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAuB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC;SAC7J;QAED,QAAQ;QACR,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC1F;QAED,eAAe;QACf,IAAI,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;YACvC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YACzC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC5G;QAED,cAAc;QACd,IAAI,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;YAC3C,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACjD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACxH;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CAEF,CAAA;AAzCY,kBAAkB;IAD9B,WAAW,CAAC,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CAAC;GACrC,kBAAkB,CAyC9B;SAzCY,kBAAkB;AA6CxB,IAAM,8BAA8B,GAApC,MAAM,8BAA+B,SAAQ,YAAsE;IAYxH,UAAU,CAAC,MAAW;QACpB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAChD,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAClD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAChE,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QACxF,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;QACxG,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,IAAI,EAAE,CAAC;IAChE,CAAC;IAED,WAAW;QACT,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtC,oBAAoB;QACpB,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAC/C,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,KAAK,gBAAgB,CAAC,CAAC;SAC9D;aACI,IAAI,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;YAChD,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACjD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;SACrE;QAED,QAAQ;QACR,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACxG;QAED,eAAe;QACf,IAAI,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;YACvC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YACzC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC1H;QAED,cAAc;QACd,IAAI,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;YAC3C,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACjD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACtI;QAED,gCAAgC;QAChC,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC;iBACnC,GAAG,CAAC,QAAQ,CAAC;iBACb,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAClB,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;gBACvD,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE;oBACxB,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;iBAC7E;YACH,CAAC,CAAC,CAAC;SACN;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CAEF,CAAA;AArEY,8BAA8B;IAD1C,WAAW,CAAC,EAAE,QAAQ,EAAE,kCAAkC,EAAE,CAAC;GACjD,8BAA8B,CAqE1C;SArEY,8BAA8B"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/pmfm.filter.js b/out-tsc/app/app/referential/services/filter/pmfm.filter.js new file mode 100644 index 000000000..447739cbd --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/pmfm.filter.js @@ -0,0 +1,59 @@ +import { __decorate } from "tslib"; +import { EntityClass, EntityFilter, isEmptyArray, isNotEmptyArray, isNotNil, toNumber } from '@sumaris-net/ngx-components'; +import { BaseReferentialFilter } from '@app/referential/services/filter/referential.filter'; +let PmfmFilter = class PmfmFilter extends BaseReferentialFilter { +}; +PmfmFilter = __decorate([ + EntityClass({ typename: 'PmfmFilterVO' }) +], PmfmFilter); +export { PmfmFilter }; +let DenormalizedPmfmFilter = class DenormalizedPmfmFilter extends EntityFilter { + fromObject(source) { + super.fromObject(source); + this.strategyId = source.strategyId; + this.acquisitionLevel = source.acquisitionLevel; + this.gearIds = source.gearId ? [source.gearId] : source.gearIds; + this.taxonGroupIds = source.taxonGroupId ? [source.taxonGroupId] : source.taxonGroupIds; + this.referenceTaxonIds = source.referenceTaxonId ? [source.referenceTaxonId] : source.referenceTaxonIds; + this.fractionIdByMatrixId = source.fractionIdByMatrixId || {}; + } + buildFilter() { + const filterFns = super.buildFilter(); + // Acquisition Level + if (this.acquisitionLevel) { + const acquisitionLevel = this.acquisitionLevel; + filterFns.push(t => t.acquisitionLevel === acquisitionLevel); + } + // Gears + if (isNotEmptyArray(this.gearIds)) { + const gearIds = this.gearIds; + filterFns.push(t => isEmptyArray(t.gearIds) || t.gearIds.findIndex(id => gearIds.includes(id)) !== -1); + } + // Taxon groups + if (isNotEmptyArray(this.taxonGroupIds)) { + const taxonGroupIds = this.taxonGroupIds; + filterFns.push(t => isEmptyArray(t.taxonGroupIds) || t.taxonGroupIds.findIndex(id => taxonGroupIds.includes(id)) !== -1); + } + // Taxon names + if (isNotEmptyArray(this.referenceTaxonIds)) { + const referenceTaxonIds = this.referenceTaxonIds; + filterFns.push(t => isEmptyArray(t.referenceTaxonIds) || t.referenceTaxonIds.findIndex(id => referenceTaxonIds.includes(id)) !== -1); + } + // Filter on fraction, by matrix + if (this.fractionIdByMatrixId) { + Object.keys(this.fractionIdByMatrixId) + .forEach(matrixId => { + const fractionId = toNumber(this.fractionIdByMatrixId[matrixId]); + if (isNotNil(fractionId)) { + filterFns.push(t => t.matrixId !== +matrixId || t.fractionId === fractionId); + } + }); + } + return filterFns; + } +}; +DenormalizedPmfmFilter = __decorate([ + EntityClass({ typename: 'DenormalizedPmfmFilterVO' }) +], DenormalizedPmfmFilter); +export { DenormalizedPmfmFilter }; +//# sourceMappingURL=pmfm.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/pmfm.filter.js.map b/out-tsc/app/app/referential/services/filter/pmfm.filter.js.map new file mode 100644 index 000000000..a15ca25b9 --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/pmfm.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfm.filter.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/filter/pmfm.filter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/program.filter.js b/out-tsc/app/app/referential/services/filter/program.filter.js new file mode 100644 index 000000000..ce5ba06cd --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/program.filter.js @@ -0,0 +1,56 @@ +import { __decorate, __metadata } from "tslib"; +import { BaseReferentialFilter } from './referential.filter'; +import { Program } from '../model/program.model'; +import { EntityClass, EntityUtils, fromDateISOString, isNotEmptyArray, toDateISOString } from '@sumaris-net/ngx-components'; +let ProgramFilter = class ProgramFilter extends BaseReferentialFilter { + constructor() { + super(); + this.searchAttributes = null; + this.entityName = Program.ENTITY_NAME; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.entityName = source.entityName || Program.ENTITY_NAME; + this.searchAttributes = source.searchAttributes; + this.withProperty = source.withProperty; + this.minUpdateDate = fromDateISOString(source.minUpdateDate); + this.acquisitionLevelLabels = source.acquisitionLevelLabels; + } + asObject(opts) { + const target = super.asObject(opts); + target.minUpdateDate = toDateISOString(this.minUpdateDate); + if (opts && opts.minify) { + // Init searchAttribute, only when NOT searching on 'label' AND 'name' (not need to pass it to POD) + if (!target.searchAttribute && isNotEmptyArray(this.searchAttributes) + && (this.searchAttributes.length !== 2 + || !(this.searchAttributes.includes('label') && this.searchAttributes.includes('name')))) { + target.searchAttribute = this.searchAttributes[0] || undefined; + } + // In all case, delete this attributes (not exists in the pod) + delete target.searchAttributes; + delete target.strategyIds; + } + return target; + } + buildFilter() { + const filterFns = super.buildFilter() || []; + // Search on many attributes + if (!this.searchAttribute) { + const searchTextFilter = EntityUtils.searchTextFilter(this.searchAttributes || ['label', 'name'], this.searchText); + if (searchTextFilter) + filterFns.push(searchTextFilter); + } + // Filter on acquisition levels + if (isNotEmptyArray(this.acquisitionLevelLabels)) { + filterFns.push((entity) => (entity.acquisitionLevelLabels || []).some(label => this.acquisitionLevelLabels.includes(label))); + } + return filterFns; + } +}; +ProgramFilter.ENTITY_NAME = 'Program'; +ProgramFilter = __decorate([ + EntityClass({ typename: 'ProgramFilterVO' }), + __metadata("design:paramtypes", []) +], ProgramFilter); +export { ProgramFilter }; +//# sourceMappingURL=program.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/program.filter.js.map b/out-tsc/app/app/referential/services/filter/program.filter.js.map new file mode 100644 index 000000000..309b7a6f0 --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/program.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"program.filter.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/filter/program.filter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/referential-ref.filter.js b/out-tsc/app/app/referential/services/filter/referential-ref.filter.js new file mode 100644 index 000000000..87ed4dd64 --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/referential-ref.filter.js @@ -0,0 +1,44 @@ +import { __decorate } from "tslib"; +import { EntityUtils } from '@sumaris-net/ngx-components'; +import { BaseReferentialFilter } from './referential.filter'; +import { isNotEmptyArray } from '@sumaris-net/ngx-components'; +import { EntityClass } from '@sumaris-net/ngx-components'; +let ReferentialRefFilter = class ReferentialRefFilter extends BaseReferentialFilter { + constructor() { + super(...arguments); + this.searchAttributes = null; + } + asObject(opts) { + const target = super.asObject(opts); + if (opts && opts.minify) { + // Init searchAttribute, only when NOT searching on 'label' AND 'name' (not need to pass it to POD) + if (!target.searchAttribute && isNotEmptyArray(this.searchAttributes) + && (this.searchAttributes.length !== 2 + || !(this.searchAttributes.includes('label') && this.searchAttributes.includes('name')))) { + target.searchAttribute = this.searchAttributes[0] || undefined; + } + // In all case, delete this attributes (not exists in the pod) + delete target.searchAttributes; + } + return target; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.searchAttributes = source.searchAttributes; + } + buildFilter() { + const filterFns = super.buildFilter(); + // Search on many attributes + if (!this.searchAttribute) { + const searchTextFilter = EntityUtils.searchTextFilter(this.searchAttributes || ['label', 'name'], this.searchText); + if (searchTextFilter) + filterFns.push(searchTextFilter); + } + return filterFns; + } +}; +ReferentialRefFilter = __decorate([ + EntityClass({ typename: 'ReferentialFilterVO' }) +], ReferentialRefFilter); +export { ReferentialRefFilter }; +//# sourceMappingURL=referential-ref.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/referential-ref.filter.js.map b/out-tsc/app/app/referential/services/filter/referential-ref.filter.js.map new file mode 100644 index 000000000..fbff483e5 --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/referential-ref.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential-ref.filter.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/filter/referential-ref.filter.ts"],"names":[],"mappings":";AAAA,OAAO,EAAwB,WAAW,EAAC,MAAO,6BAA6B,CAAC;AAChF,OAAO,EAAC,qBAAqB,EAAC,MAAM,sBAAsB,CAAC;AAG3D,OAAO,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAC,WAAW,EAAC,MAAO,6BAA6B,CAAC;AAIlD,IAAM,oBAAoB,GAA1B,MAAM,oBACT,SAAQ,qBAA2D;IADhE;;QAKL,qBAAgB,GAAa,IAAI,CAAC;IAoCpC,CAAC;IAjCC,QAAQ,CAAC,IAA4B;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YACvB,mGAAmG;YACnG,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC;mBAChE,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC;uBACjC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAC1F;gBACA,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;aAChE;YACD,8DAA8D;YAC9D,OAAO,MAAM,CAAC,gBAAgB,CAAC;SAChC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,MAAW,EAAE,IAAU;QAChC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAE/B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAClD,CAAC;IAES,WAAW;QACnB,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtC,4BAA4B;QAC5B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,MAAM,gBAAgB,GAAG,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACnH,IAAI,gBAAgB;gBAAE,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;SACxD;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAA;AAzCY,oBAAoB;IADhC,WAAW,CAAC,EAAC,QAAQ,EAAE,qBAAqB,EAAC,CAAC;GAClC,oBAAoB,CAyChC;SAzCY,oBAAoB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/referential.filter.js b/out-tsc/app/app/referential/services/filter/referential.filter.js new file mode 100644 index 000000000..0e5603b7b --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/referential.filter.js @@ -0,0 +1,108 @@ +var ReferentialFilter_1; +import { __decorate, __metadata } from "tslib"; +import { EntityClass, EntityFilter, EntityUtils, getPropertyByPath, isNil, isNotEmptyArray, isNotNil, ReferentialRef, StatusIds, toDateISOString, uncapitalizeFirstLetter, } from '@sumaris-net/ngx-components'; +export class BaseReferentialFilter extends EntityFilter { + constructor(__typename) { + super(__typename); + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.entityName = source.entityName || this.entityName; + this.label = source.label; + this.name = source.name; + this.statusId = source.statusId; + this.statusIds = source.statusIds; + this.levelId = source.levelId; + this.levelIds = source.levelIds; + this.levelLabel = source.levelLabel; + this.levelLabels = source.levelLabels; + this.searchJoin = source.searchJoin; + this.searchJoinLevelIds = source.searchJoinLevelIds; + this.searchText = source.searchText; + this.searchAttribute = source.searchAttribute; + this.includedIds = source.includedIds; + this.excludedIds = source.excludedIds; + } + asObject(opts) { + const target = super.asObject(opts); + target.updateDate = toDateISOString(this.updateDate); + target.levelIds = isNotNil(this.levelId) ? [this.levelId] : this.levelIds; + target.levelLabels = isNotNil(this.levelLabel) ? [this.levelLabel] : this.levelLabels; + target.statusIds = isNotNil(this.statusId) ? [this.statusId] : (this.statusIds || [StatusIds.ENABLE]); + if (opts && opts.minify) { + // do NOT include entityName + delete target.entityName; + delete target.levelId; + delete target.levelLabel; + delete target.statusId; + } + return target; + } + countNotEmptyCriteria() { + const nbDefaults = isNil(this.statusId) && isNil(this.statusIds) ? 1 : 0; + return super.countNotEmptyCriteria() - nbDefaults; + } + buildFilter() { + const filterFns = super.buildFilter() || []; + // Filter by label + if (isNotNil(this.label)) { + filterFns.push(entity => entity.label === this.label); + } + // Filter by status + const statusIds = this.statusIds || (isNotNil(this.statusId) && [this.statusId]) || undefined; + if (statusIds) { + filterFns.push((entity) => statusIds.includes(entity.statusId)); + } + // Filter on levels + const levelIds = this.levelIds || (isNotNil(this.levelId) && [this.levelId]) || undefined; + if (levelIds) { + filterFns.push((entity) => levelIds.includes(entity.levelId)); + } + // Filter included/excluded ids + if (isNotEmptyArray(this.includedIds)) { + filterFns.push((entity) => isNotNil(entity.id) && this.includedIds.includes(entity.id)); + } + if (isNotEmptyArray(this.excludedIds)) { + filterFns.push((entity) => isNil(entity.id) || !this.excludedIds.includes(entity.id)); + } + const searchTextFilter = EntityUtils.searchTextFilter(this.searchAttribute, this.searchText); + if (searchTextFilter) + filterFns.push(searchTextFilter); + if (this.searchJoin && isNotEmptyArray(this.searchJoinLevelIds)) { + const searchJoinLevelPath = uncapitalizeFirstLetter(this.searchJoin) + '.levelId'; + filterFns.push((entity) => { + const levelId = getPropertyByPath(entity, searchJoinLevelPath); + if (isNil(levelId)) { + console.warn('[referential-filter] Unable to filter entities, because missing the attribute: ' + searchJoinLevelPath); + return true; // Keep the item, when missing levelId + } + return this.searchJoinLevelIds.includes(levelId); + }); + } + return filterFns; + } +} +let ReferentialFilter = ReferentialFilter_1 = class ReferentialFilter extends BaseReferentialFilter { + constructor() { + super(ReferentialFilter_1.TYPENAME); + } + asObject(opts) { + const target = super.asObject(opts); + target.levelIds = target.levelIds || this.level && isNotNil(this.level.id) && [this.level.id] || undefined; + if (opts && opts.minify) { + delete target.level; + } + return target; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.level = source.level && ReferentialRef.fromObject(source.level); + } +}; +ReferentialFilter.TYPENAME = 'ReferentialVO'; +ReferentialFilter = ReferentialFilter_1 = __decorate([ + EntityClass({ typename: 'ReferentialFilterVO' }), + __metadata("design:paramtypes", []) +], ReferentialFilter); +export { ReferentialFilter }; +//# sourceMappingURL=referential.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/referential.filter.js.map b/out-tsc/app/app/referential/services/filter/referential.filter.js.map new file mode 100644 index 000000000..6c4448a5b --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/referential.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential.filter.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/filter/referential.filter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/strategy.filter.js b/out-tsc/app/app/referential/services/filter/strategy.filter.js new file mode 100644 index 000000000..8c9b75a64 --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/strategy.filter.js @@ -0,0 +1,111 @@ +import { __decorate } from "tslib"; +import { EntityClass, EntityUtils, fromDateISOString, isNotEmptyArray, isNotNil, ReferentialRef, ReferentialUtils, toDateISOString, toNumber, } from '@sumaris-net/ngx-components'; +import { BaseReferentialFilter } from '@app/referential/services/filter/referential.filter'; +import { TaxonNameRef } from '@app/referential/services/model/taxon-name.model'; +let StrategyFilter = class StrategyFilter extends BaseReferentialFilter { + fromObject(source) { + super.fromObject(source); + this.levelId = toNumber(this.levelId, source.programId); + this.startDate = fromDateISOString(source.startDate); + this.endDate = fromDateISOString(source.endDate); + this.department = (source.department && ReferentialRef.fromObject(source.department)) || undefined; + this.location = (source.location && ReferentialRef.fromObject(source.location)) || undefined; + this.taxonName = (source.taxonName && TaxonNameRef.fromObject(source.taxonName)) || undefined; + this.analyticReference = (source.analyticReference && ReferentialRef.fromObject(source.analyticReference)) || undefined; + this.parameterIds = source.parameterIds; + this.periods = source.periods; + this.acquisitionLevel = source.acquisitionLevel; + this.acquisitionLevels = source.acquisitionLevels; + } + asObject(opts) { + const target = super.asObject(opts); + target.startDate = toDateISOString(this.startDate); + target.endDate = toDateISOString(this.endDate); + target.acquisitionLevels = target.acquisitionLevel ? [target.acquisitionLevel] : target.acquisitionLevels; + if (opts && opts.minify) { + target.departmentIds = ReferentialUtils.isNotEmpty(this.department) ? [this.department.id] : undefined; + target.locationIds = ReferentialUtils.isNotEmpty(this.location) ? [this.location.id] : undefined; + target.referenceTaxonIds = EntityUtils.isNotEmpty(this.taxonName, 'referenceTaxonId') ? [this.taxonName.referenceTaxonId] : undefined; + target.analyticReferences = EntityUtils.isNotEmpty(this.analyticReference, 'label') ? [this.analyticReference.label] : undefined; + delete target.department; + delete target.location; + delete target.taxonName; + delete target.analyticReference; + delete target.programId; + delete target.acquisitionLevel; + } + else { + target.department = this.department && this.department.asObject(opts); + target.location = this.location && this.location.asObject(opts); + target.taxonName = this.taxonName && this.taxonName.asObject(opts); + target.analyticReference = this.analyticReference && this.analyticReference.asObject(opts); + } + return target; + } + buildFilter() { + var _a, _b, _c, _d; + const levelId = this.levelId; + const levelIds = this.levelIds; + const programIds = isNotNil(levelId) ? [levelId] : levelIds; + // Remove, to avoid filter on LevelId and levelIds + this.levelId = null; + this.levelIds = null; + const filterFns = super.buildFilter(); + // Restore values + this.levelId = levelId; + this.levelIds = levelIds; + // Filter on program (= level) + if (isNotEmptyArray(programIds)) { + filterFns.push((t) => programIds.includes(toNumber(t.programId, t.levelId))); + } + // Reference taxon + const referenceTaxonId = (_a = this.taxonName) === null || _a === void 0 ? void 0 : _a.referenceTaxonId; + if (isNotNil(referenceTaxonId)) { + filterFns.push((t) => t.taxonNames && t.taxonNames.some((tns) => { var _a; return ((_a = tns.taxonName) === null || _a === void 0 ? void 0 : _a.referenceTaxonId) === referenceTaxonId; })); + } + // Department + const departmentId = (_b = this.department) === null || _b === void 0 ? void 0 : _b.id; + if (isNotNil(departmentId)) { + filterFns.push((t) => t.departments && t.departments.some((d) => d.id === departmentId)); + } + // Location + const locationId = (_c = this.location) === null || _c === void 0 ? void 0 : _c.id; + if (isNotNil(locationId)) { + filterFns.push((t) => t.appliedStrategies && t.appliedStrategies.some((as) => { var _a; return ((_a = as.location) === null || _a === void 0 ? void 0 : _a.id) === locationId; })); + } + // Analytic reference + const analyticReference = (_d = this.analyticReference) === null || _d === void 0 ? void 0 : _d.label; + if (isNotNil(analyticReference)) { + filterFns.push((t) => t.analyticReference === analyticReference); + } + // Start/end period + if (this.startDate || this.endDate) { + const startDate = this.startDate && this.startDate.clone(); + const endDate = this.endDate && this.endDate.clone().add(1, 'day').startOf('day'); + const appliedPeriodTest = (ap) => (!startDate || startDate.isSameOrBefore(ap.endDate)) && (!endDate || endDate.isAfter(ap.startDate)); + filterFns.push((t) => t.appliedStrategies && t.appliedStrategies.some((as) => as.appliedPeriods && as.appliedPeriods.some(appliedPeriodTest))); + } + // Acquisition levels + const acquisitionLevels = this.acquisitionLevel ? [this.acquisitionLevel] : this.acquisitionLevels; + if (isNotEmptyArray(acquisitionLevels)) { + filterFns.push((t) => (t.denormalizedPmfms || t.pmfms || []).some((p) => { + var _a; + const acquisitionLevel = typeof p.acquisitionLevel === 'string' ? p.acquisitionLevel : (_a = p.acquisitionLevel) === null || _a === void 0 ? void 0 : _a.label; + return acquisitionLevels.includes(acquisitionLevel); + })); + } + // TODO: filter on parameters + return filterFns; + } + get programId() { + return this.levelId; + } + set programId(value) { + this.levelId = value; + } +}; +StrategyFilter = __decorate([ + EntityClass({ typename: 'StrategyFilterVO' }) +], StrategyFilter); +export { StrategyFilter }; +//# sourceMappingURL=strategy.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/strategy.filter.js.map b/out-tsc/app/app/referential/services/filter/strategy.filter.js.map new file mode 100644 index 000000000..076467325 --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/strategy.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"strategy.filter.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/filter/strategy.filter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/taxon-name-ref.filter.js b/out-tsc/app/app/referential/services/filter/taxon-name-ref.filter.js new file mode 100644 index 000000000..e38df183d --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/taxon-name-ref.filter.js @@ -0,0 +1,51 @@ +import { __decorate, __metadata } from "tslib"; +import { BaseReferentialFilter } from './referential.filter'; +import { isNotEmptyArray, isNotNil } from '@sumaris-net/ngx-components'; +import { EntityClass } from '@sumaris-net/ngx-components'; +import { TaxonNameRef } from '@app/referential/services/model/taxon-name.model'; +let TaxonNameRefFilter = class TaxonNameRefFilter extends BaseReferentialFilter { + constructor() { + super(); + this.entityName = TaxonNameRef.ENTITY_NAME; + } + fromObject(source, opts) { + super.fromObject(source); + this.taxonGroupIds = source.taxonGroupIds; + this.taxonGroupId = source.taxonGroupId; + } + asObject(opts) { + const target = super.asObject(opts); + if (opts && opts.minify) { + target.taxonGroupIds = isNotNil(this.taxonGroupId) ? [this.taxonGroupId] : this.taxonGroupIds; + delete target.taxonGroupId; + } + else { + target.taxonGroupId = this.taxonGroupId; + target.taxonGroupIds = this.taxonGroupIds; + } + return target; + } + asFilterFn() { + const filterFns = []; + const inheritedFn = super.asFilterFn(); + if (inheritedFn) + filterFns.push(inheritedFn); + // Filter by taxon group id, or list of id + if (isNotNil(this.taxonGroupId)) { + filterFns.push(entity => entity.taxonGroupIds && entity.taxonGroupIds.includes(this.taxonGroupId)); + } + else if (isNotEmptyArray(this.taxonGroupIds)) { + const taxonGroupIds = this.taxonGroupIds; + filterFns.push(entity => entity.taxonGroupIds && entity.taxonGroupIds.findIndex(id => taxonGroupIds.includes(id)) !== -1); + } + if (!filterFns.length) + return undefined; + return entity => !filterFns.find(fn => !fn(entity)); + } +}; +TaxonNameRefFilter = __decorate([ + EntityClass({ typename: 'TaxonNameFilterVO' }), + __metadata("design:paramtypes", []) +], TaxonNameRefFilter); +export { TaxonNameRefFilter }; +//# sourceMappingURL=taxon-name-ref.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/taxon-name-ref.filter.js.map b/out-tsc/app/app/referential/services/filter/taxon-name-ref.filter.js.map new file mode 100644 index 000000000..1bad7fed2 --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/taxon-name-ref.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"taxon-name-ref.filter.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/filter/taxon-name-ref.filter.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,sBAAsB,CAAC;AAG3D,OAAO,EAAC,eAAe,EAAE,QAAQ,EAAC,MAAM,6BAA6B,CAAC;AAEtE,OAAO,EAAC,WAAW,EAAC,MAAO,6BAA6B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AAGzE,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,qBAAuD;IAO3F;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,WAAW,CAAC;IAC7C,CAAC;IAED,UAAU,CAAC,MAAW,EAAE,IAAU;QAC9B,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC5C,CAAC;IAED,QAAQ,CAAC,IAA4B;QACjC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YACrB,MAAM,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;YAC9F,OAAO,MAAM,CAAC,YAAY,CAAC;SAC9B;aAAM;YACH,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACxC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;SAC7C;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,UAAU;QACN,MAAM,SAAS,GAAkB,EAAE,CAAC;QAEpC,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;QACvC,IAAI,WAAW;YAAE,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE7C,0CAA0C;QAC1C,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YAC7B,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;SACtG;aAAM,IAAI,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;YAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YACzC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC7H;QAED,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAExC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;CACJ,CAAA;AAhDY,kBAAkB;IAD9B,WAAW,CAAC,EAAC,QAAQ,EAAE,mBAAmB,EAAC,CAAC;;GAChC,kBAAkB,CAgD9B;SAhDY,kBAAkB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/taxon-name.filter.js b/out-tsc/app/app/referential/services/filter/taxon-name.filter.js new file mode 100644 index 000000000..9635396a4 --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/taxon-name.filter.js @@ -0,0 +1,26 @@ +import { __decorate } from "tslib"; +import { EntityClass } from '@sumaris-net/ngx-components'; +import { BaseReferentialFilter } from '@app/referential/services/filter/referential.filter'; +let TaxonNameFilter = class TaxonNameFilter extends BaseReferentialFilter { + constructor() { + super(...arguments); + this.withSynonyms = null; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.withSynonyms = source.withSynonyms; + } + buildFilter() { + const filterFns = super.buildFilter(); + // Filter by spatial + if (this.withSynonyms === false) { + filterFns.push(entity => entity.isReferent); + } + return filterFns; + } +}; +TaxonNameFilter = __decorate([ + EntityClass({ typename: 'TaxonNameFilterVO' }) +], TaxonNameFilter); +export { TaxonNameFilter }; +//# sourceMappingURL=taxon-name.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/taxon-name.filter.js.map b/out-tsc/app/app/referential/services/filter/taxon-name.filter.js.map new file mode 100644 index 000000000..25d6dcfca --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/taxon-name.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"taxon-name.filter.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/filter/taxon-name.filter.ts"],"names":[],"mappings":";AAAA,OAAO,EAAyB,WAAW,EAAY,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAIrF,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,qBAAiD;IAA/E;;QAGL,iBAAY,GAAY,IAAI,CAAC;IAiB/B,CAAC;IAfC,UAAU,CAAC,MAAW,EAAE,IAA4B;QAClD,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC1C,CAAC;IAES,WAAW;QACnB,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtC,oBAAoB;QACpB,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,EAAE;YAC/B,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;SAC7C;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAA;AApBY,eAAe;IAD3B,WAAW,CAAC,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC;GAClC,eAAe,CAoB3B;SApBY,eAAe"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/vessel.filter.js b/out-tsc/app/app/referential/services/filter/vessel.filter.js new file mode 100644 index 000000000..e86f37906 --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/vessel.filter.js @@ -0,0 +1,123 @@ +var VesselSnapshotFilter_1; +import { __decorate } from "tslib"; +import { EntityClass, EntityFilter, EntityUtils, fromDateISOString, isNotNil, isNotNilOrBlank, ReferentialRef, toDateISOString, toNumber, } from '@sumaris-net/ngx-components'; +let VesselSnapshotFilter = VesselSnapshotFilter_1 = class VesselSnapshotFilter extends EntityFilter { + static fromVesselFilter(filter) { + if (!filter) + return undefined; + return this.fromObject(filter); + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.program = + ReferentialRef.fromObject(source.program) || + (isNotNilOrBlank(source.programLabel) && ReferentialRef.fromObject({ label: source.programLabel })) || + undefined; + this.date = fromDateISOString(source.date); + this.vesselId = source.vesselId; + this.searchText = source.searchText; + this.searchAttributes = source.searchAttributes; + this.statusId = source.statusId; + this.statusIds = source.statusIds; + this.synchronizationStatus = source.synchronizationStatus; + this.registrationLocation = + ReferentialRef.fromObject(source.registrationLocation) || + (isNotNilOrBlank(source.registrationLocationId) && ReferentialRef.fromObject({ id: source.registrationLocationId })) || + undefined; + this.basePortLocation = + ReferentialRef.fromObject(source.basePortLocation) || + (isNotNilOrBlank(source.basePortLocationId) && ReferentialRef.fromObject({ id: source.basePortLocationId })) || + undefined; + this.vesselTypeId = source.vesselTypeId; + this.vesselType = + ReferentialRef.fromObject(source.vesselType) || + (isNotNilOrBlank(source.vesselTypeId) && ReferentialRef.fromObject({ id: source.vesselTypeId })) || + undefined; + } + asObject(opts) { + var _a, _b, _c, _d, _e, _f, _g; + const target = super.asObject(opts); + if (opts === null || opts === void 0 ? void 0 : opts.minify) { + target.programLabel = this.program && this.program.label; + delete target.program; + // NOT in pod + delete target.synchronizationStatus; + target.registrationLocationId = (_a = this.registrationLocation) === null || _a === void 0 ? void 0 : _a.id; + delete target.registrationLocation; + target.basePortLocationId = (_b = this.basePortLocation) === null || _b === void 0 ? void 0 : _b.id; + delete target.basePortLocation; + target.vesselTypeId = toNumber(this.vesselTypeId, (_c = this.vesselType) === null || _c === void 0 ? void 0 : _c.id); + delete target.vesselType; + } + else { + target.program = (_d = this.program) === null || _d === void 0 ? void 0 : _d.asObject(opts); + target.registrationLocation = (_e = this.registrationLocation) === null || _e === void 0 ? void 0 : _e.asObject(opts); + target.basePortLocation = (_f = this.basePortLocation) === null || _f === void 0 ? void 0 : _f.asObject(opts); + target.vesselType = (_g = this.vesselType) === null || _g === void 0 ? void 0 : _g.asObject(opts); + } + target.date = toDateISOString(this.date); + target.statusIds = isNotNil(this.statusId) ? [this.statusId] : this.statusIds; + delete target.statusId; + return target; + } + buildFilter() { + var _a, _b, _c; + const filterFns = super.buildFilter(); + // Program + if (this.program) { + const programId = this.program.id; + const programLabel = this.program.label; + if (isNotNil(programId)) { + filterFns.push((t) => t.program && t.program.id === programId); + } + else if (isNotNilOrBlank(programLabel)) { + filterFns.push((t) => t.program && t.program.label === programLabel); + } + } + // Vessel id + if (isNotNil(this.vesselId)) { + const vesselId = this.vesselId; + filterFns.push((t) => t.id === vesselId); + } + // Status + const statusIds = isNotNil(this.statusId) ? [this.statusId] : this.statusIds; + if (statusIds) { + filterFns.push((t) => statusIds.includes(t.vesselStatusId)); + } + // registration location + const registrationLocationId = (_a = this.registrationLocation) === null || _a === void 0 ? void 0 : _a.id; + if (isNotNil(registrationLocationId)) { + filterFns.push((t) => { var _a; return ((_a = t.registrationLocation) === null || _a === void 0 ? void 0 : _a.id) === registrationLocationId; }); + } + // base port location + const basePortLocationId = (_b = this.basePortLocation) === null || _b === void 0 ? void 0 : _b.id; + if (isNotNil(basePortLocationId)) { + filterFns.push((t) => { var _a; return ((_a = t.basePortLocation) === null || _a === void 0 ? void 0 : _a.id) === basePortLocationId; }); + } + // Vessel type + const vesselTypeId = (_c = this.vesselType) === null || _c === void 0 ? void 0 : _c.id; + if (isNotNil(vesselTypeId)) { + filterFns.push((t) => { var _a; return ((_a = t.vesselType) === null || _a === void 0 ? void 0 : _a.id) === vesselTypeId; }); + } + // Search text + const searchTextFilter = EntityUtils.searchTextFilter(this.searchAttributes || VesselSnapshotFilter_1.DEFAULT_SEARCH_ATTRIBUTES, this.searchText); + if (searchTextFilter) + filterFns.push(searchTextFilter); + // Synchronization status + if (this.synchronizationStatus) { + if (this.synchronizationStatus === 'SYNC') { + filterFns.push(EntityUtils.isRemote); + } + else { + filterFns.push(EntityUtils.isLocal); + } + } + return filterFns; + } +}; +VesselSnapshotFilter.DEFAULT_SEARCH_ATTRIBUTES = ['exteriorMarking', 'name']; +VesselSnapshotFilter = VesselSnapshotFilter_1 = __decorate([ + EntityClass({ typename: 'VesselFilterVO' }) +], VesselSnapshotFilter); +export { VesselSnapshotFilter }; +//# sourceMappingURL=vessel.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/vessel.filter.js.map b/out-tsc/app/app/referential/services/filter/vessel.filter.js.map new file mode 100644 index 000000000..7c3156535 --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/vessel.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel.filter.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/filter/vessel.filter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/weight-length-conversion.filter.js b/out-tsc/app/app/referential/services/filter/weight-length-conversion.filter.js new file mode 100644 index 000000000..4fc7a0051 --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/weight-length-conversion.filter.js @@ -0,0 +1,105 @@ +import { __decorate } from "tslib"; +import { EntityClass, EntityFilter, isNotEmptyArray, isNotNil } from '@sumaris-net/ngx-components'; +let WeightLengthConversionFilter = class WeightLengthConversionFilter extends EntityFilter { + constructor() { + super(...arguments); + this.month = null; + this.year = null; + this.referenceTaxonId = null; + this.locationId = null; + this.sexId = null; + this.lengthParameterId = null; + this.lengthUnitId = null; + this.lengthPmfmId = null; + this.rectangleLabel = null; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.month = source.month; + this.year = source.year; + this.statusIds = source.statusIds; + this.referenceTaxonId = source.referenceTaxonId; + this.referenceTaxonIds = source.referenceTaxonIds; + this.locationId = source.locationId; + this.locationIds = source.locationIds; + this.lengthParameterId = source.lengthParameterId; + this.lengthParameterIds = source.lengthParameterIds; + this.lengthUnitId = source.lengthUnitId; + this.lengthUnitIds = source.lengthUnitIds; + this.lengthPmfmId = source.lengthPmfmId; + this.lengthPmfmIds = source.lengthPmfmIds; + this.rectangleLabel = source.rectangleLabel; + this.rectangleLabels = source.rectangleLabels; + this.sexId = source.sexId; + this.sexIds = source.sexIds; + } + asObject(opts) { + const target = super.asObject(opts); + if (opts && opts.minify) { + target.referenceTaxonIds = isNotNil(this.referenceTaxonId) ? [this.referenceTaxonId] : this.referenceTaxonIds; + delete target.referenceTaxonId; + target.locationIds = isNotNil(this.locationId) ? [this.locationId] : this.locationIds; + delete target.locationId; + target.sexIds = isNotNil(this.sexId) ? [this.sexId] : this.sexIds; + delete target.sexId; + target.lengthParameterIds = isNotNil(this.lengthParameterId) ? [this.lengthParameterId] : this.lengthParameterIds; + delete target.lengthParameterId; + target.lengthUnitIds = isNotNil(this.lengthUnitId) ? [this.lengthUnitId] : this.lengthUnitIds; + delete target.lengthUnitId; + target.lengthPmfmIds = isNotNil(this.lengthPmfmId) ? [this.lengthPmfmId] : this.lengthPmfmIds; + delete target.lengthPmfmId; + target.rectangleLabels = isNotNil(this.rectangleLabel) ? [this.rectangleLabel] : this.rectangleLabels; + delete target.rectangleLabel; + } + return target; + } + buildFilter() { + const filterFns = super.buildFilter(); + // Year + const year = this.year; + if (isNotNil(year)) { + filterFns.push(t => t.year === year); + } + // Month + const month = this.month; + if (isNotNil(month)) { + filterFns.push(t => (t.startMonth <= month) && (month <= t.endMonth)); + } + // Status + const statusIds = this.statusIds; + if (isNotEmptyArray(statusIds)) { + filterFns.push(t => statusIds.includes(t.statusId)); + } + // Location + const locationId = this.locationId; + if (isNotNil(locationId)) { + filterFns.push(t => (t.locationId === locationId)); + } + // Reference Taxon + const referenceTaxonId = this.referenceTaxonId; + if (isNotNil(referenceTaxonId)) { + filterFns.push(t => (t.referenceTaxonId === referenceTaxonId)); + } + // Rectangle + const rectangleLabel = this.rectangleLabel; + if (isNotNil(rectangleLabel)) { + filterFns.push(t => { var _a; return ((_a = t.rectangleLabels) === null || _a === void 0 ? void 0 : _a.includes(rectangleLabel)); }); + } + // Length Pmfm + const lengthPmfmId = this.lengthPmfmId; + if (isNotNil(lengthPmfmId)) { + filterFns.push(t => { var _a; return ((_a = t.lengthPmfmIds) === null || _a === void 0 ? void 0 : _a.includes(lengthPmfmId)); }); + } + // Sex + const sexId = this.sexId; + if (isNotNil(sexId)) { + filterFns.push(t => t.id === sexId); + } + return filterFns; + } +}; +WeightLengthConversionFilter = __decorate([ + EntityClass({ typename: 'WeightLengthConversionFilterVO' }) +], WeightLengthConversionFilter); +export { WeightLengthConversionFilter }; +//# sourceMappingURL=weight-length-conversion.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/filter/weight-length-conversion.filter.js.map b/out-tsc/app/app/referential/services/filter/weight-length-conversion.filter.js.map new file mode 100644 index 000000000..c185c8992 --- /dev/null +++ b/out-tsc/app/app/referential/services/filter/weight-length-conversion.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"weight-length-conversion.filter.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/filter/weight-length-conversion.filter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/metier.service.js b/out-tsc/app/app/referential/services/metier.service.js new file mode 100644 index 000000000..9e9ad76a0 --- /dev/null +++ b/out-tsc/app/app/referential/services/metier.service.js @@ -0,0 +1,141 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { ErrorCodes } from './errors'; +import { AccountService, BaseGraphqlService, EntitiesStorage, GraphqlService, isNil, NetworkService, ReferentialUtils, StatusIds } from '@sumaris-net/ngx-components'; +import { ReferentialFragments } from './referential.fragments'; +import { environment } from '@environments/environment'; +import { MetierFilter } from './filter/metier.filter'; +import { Metier } from '@app/referential/metier/metier.model'; +export const METIER_DEFAULT_FILTER = Object.freeze(MetierFilter.fromObject({ + entityName: 'Metier', + statusId: StatusIds.ENABLE +})); +const MetierQueries = { + loadAll: gql `query Metiers($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: MetierFilterVOInput){ + data: metiers(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...LightMetierFragment + } + } + ${ReferentialFragments.lightMetier}`, + loadAllWithTotal: gql `query Metiers($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: MetierFilterVOInput){ + data: metiers(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...LightMetierFragment + } + total: metiersCount(filter: $filter) + } + ${ReferentialFragments.lightMetier}`, + load: gql `query Metier($id: Int!){ + metier(id: $id){ + ...MetierFragment + } + } + ${ReferentialFragments.metier}` +}; +let MetierService = class MetierService extends BaseGraphqlService { + constructor(graphql, accountService, network, entities) { + super(graphql, environment); + this.graphql = graphql; + this.accountService = accountService; + this.network = network; + this.entities = entities; + // -- For DEV only + this._debug = !environment.production; + } + load(id, options) { + return __awaiter(this, void 0, void 0, function* () { + if (isNil(id)) + throw new Error('Missing argument \'id\''); + const now = this._debug && Date.now(); + if (this._debug) + console.debug(`[metier-ref-service] Loading Metier #${id}...`); + const data = yield this.graphql.query({ + query: MetierQueries.load, + variables: { id }, + fetchPolicy: options && options.fetchPolicy || undefined + }); + if (data && data.metier) { + const metier = Metier.fromObject(data.metier, { useChildAttributes: false }); + if (metier && this._debug) + console.debug(`[metier-ref-service] Metier #${id} loaded in ${Date.now() - now}ms`, metier); + return metier; + } + return null; + }); + } + loadAll(offset, size, sortBy, sortDirection, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + filter = this.asFilter(filter); + if (!filter) { + console.error('[metier-ref-service] Missing filter'); + throw { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }; + } + const entityName = filter.entityName || 'Metier'; + const variables = { + offset: offset || 0, + size: size || 100, + sortBy: sortBy || filter.searchAttribute || 'label', + sortDirection: sortDirection || 'asc' + }; + const debug = this._debug && (!opts || opts.debug !== false); + const now = debug && Date.now(); + if (debug) + console.debug(`[metier-ref-service] Loading Metier items...`, variables, filter); + const withTotal = (!opts || opts.withTotal !== false); + // Offline mode: read from the entities storage + let res; + const offline = this.network.offline && (!opts || opts.fetchPolicy !== 'network-only'); + if (offline) { + const typename = entityName + 'VO'; + res = yield this.entities.loadAll(typename, Object.assign(Object.assign({}, variables), { filter: filter && filter.asFilterFn() })); + } + // Online mode: use graphQL + else { + const query = withTotal ? MetierQueries.loadAllWithTotal : MetierQueries.loadAll; + res = yield this.graphql.query({ + query, + variables: Object.assign(Object.assign({}, variables), { filter: filter && filter.asPodObject() }), + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || 'cache-first' + }); + } + const entities = (!opts || opts.toEntity !== false) ? + ((res === null || res === void 0 ? void 0 : res.data) || []).map(value => Metier.fromObject(value, { useChildAttributes: false })) : + ((res === null || res === void 0 ? void 0 : res.data) || []); + res = { + data: entities, + total: res.total || entities.length + }; + // Add fetch more capability, if total was fetched + if (withTotal) { + const nextOffset = offset + entities.length; + if (nextOffset < res.total) { + res.fetchMore = () => this.loadAll(nextOffset, size, sortBy, sortDirection, filter, opts); + } + } + if (debug) + console.debug(`[metier-ref-service] Metiers loaded in ${Date.now() - now}ms`); + return res; + }); + } + suggest(value, filter) { + return __awaiter(this, void 0, void 0, function* () { + if (ReferentialUtils.isNotEmpty(value)) + return { data: [value] }; + value = (typeof value === 'string' && value !== '*') && value || undefined; + return this.loadAll(0, !value ? 30 : 10, undefined, undefined, Object.assign(Object.assign({}, filter), { searchText: value }), { withTotal: true /* used by autocomplete */ }); + }); + } + asFilter(source) { + return MetierFilter.fromObject(source); + } +}; +MetierService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [GraphqlService, + AccountService, + NetworkService, + EntitiesStorage]) +], MetierService); +export { MetierService }; +//# sourceMappingURL=metier.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/metier.service.js.map b/out-tsc/app/app/referential/services/metier.service.js.map new file mode 100644 index 000000000..ecdd8fe20 --- /dev/null +++ b/out-tsc/app/app/referential/services/metier.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"metier.service.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/metier.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/model.enum.js b/out-tsc/app/app/referential/services/model/model.enum.js new file mode 100644 index 000000000..db7f81f0b --- /dev/null +++ b/out-tsc/app/app/referential/services/model/model.enum.js @@ -0,0 +1,391 @@ +import { changeCaseToUnderscore } from '@sumaris-net/ngx-components'; +export const ProgramLabel = { + SIH: 'SIH', // Used for vessel's filter +}; +// LP 17/08/2020 : Location level are overridden in ConfigService.overrideEnums +export const LocationLevelIds = { + // Lands + COUNTRY: 1, + PORT: 2, + AUCTION: 3, + // At sea + SUB_AREA_ICES: 110, + RECTANGLE_ICES: 4, + RECTANGLE_GFCM: 5, + DIVISION_ICES: 111, + SUB_DIVISION_ICES: 112, + SUB_AREA_GFCM: 140, + DIVISION_GFCM: 141, + SUB_DIVISION_GFCM: 142 +}; +export class LocationLevels { + static getFishingAreaLevelIds() { + return [LocationLevelIds.RECTANGLE_ICES, LocationLevelIds.RECTANGLE_GFCM, LocationLevelIds.DIVISION_ICES]; + } + static getWeightLengthConversionAreaLevelIds() { + return [LocationLevelIds.SUB_AREA_ICES, LocationLevelIds.DIVISION_ICES]; + } + static getStatisticalRectangleLevelIds() { + return [LocationLevelIds.RECTANGLE_ICES, LocationLevelIds.RECTANGLE_GFCM]; + } +} +export const LocationLevelGroups = { + FISHING_AREA: LocationLevels.getFishingAreaLevelIds(), + WEIGHT_LENGTH_CONVERSION_AREA: LocationLevels.getWeightLengthConversionAreaLevelIds(), + STATISTICAL_RECTANGLE: LocationLevels.getStatisticalRectangleLevelIds() +}; +export const GearLevelIds = { + FAO: 1 +}; +export const VesselTypeIds = { + FISHING_VESSEL: 1, + SCIENTIFIC_RESEARCH_VESSEL: 2 +}; +export const TaxonGroupTypeIds = { + FAO: 2, + DCF_METIER_LVL_5: 3, + NATIONAL_METIER: 4 +}; +export const TaxonomicLevelIds = { + ORDO: 13, + FAMILY: 17, + GENUS: 26, + SUBGENUS: 27, + SPECIES: 28, + SUBSPECIES: 29 +}; +export const PmfmIds = { + GEAR_SPEED: 9, + SEA_STATE: 33, + TRIP_PROGRESS: 34, + SURVIVAL_SAMPLING_TYPE: 35, + TAG_ID: 82, + DISCARD_OR_LANDING: 90, + IS_DEAD: 94, + DISCARD_REASON: 95, + DEATH_TIME: 101, + VERTEBRAL_COLUMN_ANALYSIS: 102, + DRESSING: 151, + PRESERVATION: 150, + BATCH_MEASURED_WEIGHT: 91, + BATCH_ESTIMATED_WEIGHT: 92, + BATCH_CALCULATED_WEIGHT: 93, + BATCH_CALCULATED_WEIGHT_LENGTH: 122, + BATCH_CALCULATED_WEIGHT_LENGTH_SUM: 123, + MEASURE_TIME: 103, + RELEASE_LATITUDE: 110, + RELEASE_LONGITUDE: 111, + SELECTIVITY_DEVICE: 4, + SELECTIVITY_DEVICE_APASE: 435, + /* ADAP pmfms */ + LENGTH_TOTAL_CM: 81, + SELF_SAMPLING_PROGRAM: 28, + HAS_INDIVIDUAL_MEASURES: 121, + CONTROLLED_SPECIES: 134, + SAMPLE_MEASURED_WEIGHT: 140, + SAMPLE_INDIV_COUNT: 153, + OUT_OF_SIZE_WEIGHT: 142, + OUT_OF_SIZE_PCT: 143, + OUT_OF_SIZE_INDIV_COUNT: 152, + CONTROL_CORRECTIVE_ACTION: 146, + PRODUCT_DESTINATION: 147, + COMPLIANT_PRODUCT: 148, + PARASITIZED_INDIV_COUNT: 155, + PARASITIZED_INDIV_PCT: 156, + DIRTY_INDIV_COUNT: 157, + DIRTY_INDIV_PCT: 158, + AUCTION_SIZE_CAT: 141, + VIVACITY: 144, + INDIVIDUALS_DENSITY_PER_KG: 160, + AUCTION_DENSITY_CATEGORY: 161, + /* PARAMBIO pmfms */ + STRATEGY_LABEL: 359, + AGE: 350, + SEX: 80, + /* OBSDEB pmfms */ + PACKAGING: 177, + SIZE_CATEGORY: 174, + TOTAL_PRICE: 270, + AVERAGE_PACKAGING_PRICE: 271, + AVERAGE_WEIGHT_PRICE: 272, + SALE_ESTIMATED_RATIO: 278, + SALE_RANK_ORDER: 279, + REFUSED_SURVEY: 266, + /* PIFIL pmfms */ + HAS_ACCIDENTAL_CATCHES: 390, + INDIVIDUAL_ON_DECK: 397, + GEAR_LABEL: 120, + /* PIFIL + LOGBOOK-SEA-CUCUMBER (SFA)*/ + GPS_USED: 188, + /* APASE */ + CHILD_GEAR: 400, + BATCH_GEAR_POSITION: 411, + TRAWL_SIZE_CAT: 418, + BATCH_SORTING: 176, + DISCARD_WEIGHT: 56, + CATCH_WEIGHT: 57, + HULL_MATERIAL: 433 +}; +export const QualitativeLabels = { + DISCARD_OR_LANDING: { + LANDING: 'LAN', + DISCARD: 'DIS' + }, + SURVIVAL_SAMPLING_TYPE: { + SURVIVAL: 'S', + CATCH_HAUL: 'C', + UNSAMPLED: 'N' + }, + VIVACITY: { + DEAD: 'MOR' + } +}; +export const QualitativeValueIds = { + DISCARD_OR_LANDING: { + LANDING: 190, + DISCARD: 191 + }, + DRESSING: { + WHOLE: 381 + }, + PRESERVATION: { + FRESH: 332 + }, + SIZE_UNLI_CAT: { + NONE: 319 + }, + BATCH_GEAR_POSITION: { + PORT: 473, + STARBOARD: 474 // Tribord + }, + BATCH_SORTING: { + BULK: 390, + NON_BULK: 391 // Hors Vrac + }, + SEX: { + UNSEXED: 188 // Non sexe + } +}; +export const MethodIds = { + UNKNOWN: 0, + MEASURED_BY_OBSERVER: 1, + OBSERVED_BY_OBSERVER: 2, + ESTIMATED_BY_OBSERVER: 3, + CALCULATED: 4, + CALCULATED_WEIGHT_LENGTH: 47, + CALCULATED_WEIGHT_LENGTH_SUM: 283 +}; +export class Methods { + static getCalculatedIds() { + return [MethodIds.CALCULATED, MethodIds.CALCULATED_WEIGHT_LENGTH, MethodIds.CALCULATED_WEIGHT_LENGTH_SUM]; + } +} +export const MethodIdGroups = { + CALCULATED: Methods.getCalculatedIds() +}; +export const MatrixIds = { + BATCH: 1, + INDIVIDUAL: 2, + GEAR: 3 +}; +export const ParameterGroupIds = { + UNKNOWN: 0, + SURVEY: 1 +}; +export const autoCompleteFractions = { + 1362: 'Otholite', 1452: 'Otholite', 1644: 'Ecaille', 1956: 'Otholite', 2049: 'Illicium', 2050: 'Illicium', 1960: 'Otholite', 1693: 'Ecaille', + 1549: 'Otholite', 1990: 'Otholite', 1921: 'Otholite', 1912: 'Otholite', 1349: 'Otholite', 1555: 'Otholite', 1556: 'Otholite', 1986: 'Otholite', + 1988: 'Otholite', 1567: 'Otholite', 1566: 'Otholite', 1681: 'Otholite', 1772: 'Otholite', 1551: 'Otholite', 1540: 'Otholite', 1543: 'Otholite', + 1573: 'Otholite', 1980: 'Otholite', 1978: 'Otholite', 1690: 'Otholite', 1689: 'Otholite', 1351: 'Otholite', 1996: 'Otholite', 1356: 'Otholite', + 1560: 'Otholite', 1559: 'Otholite' +}; +export const ParameterLabelGroups = { + TAG_ID: ['TAG_ID', 'SAMPLE_ID' /* SAMPLE_ID parameter label is required for specific Oracle TAG_ID (SAMPLE_ID whith Pmfm id = 1435. */, + 'DRESSING', + 'PRESERVATION' + ], + LENGTH: ['LENGTH_PECTORAL_FORK', 'LENGTH_CLEITHRUM_KEEL_CURVE', 'LENGTH_PREPELVIC', 'LENGTH_FRONT_EYE_PREPELVIC', 'LENGTH_LM_FORK', 'LENGTH_PRE_SUPRA_CAUDAL', 'LENGTH_CLEITHRUM_KEEL', 'LENGTH_LM_FORK_CURVE', 'LENGTH_PECTORAL_FORK_CURVE', 'LENGTH_FORK_CURVE', 'STD_STRAIGTH_LENGTH', 'STD_CURVE_LENGTH', 'SEGMENT_LENGTH', 'LENGTH_MINIMUM_ALLOWED', 'LENGTH', 'LENGTH_TOTAL', 'LENGTH_STANDARD', 'LENGTH_PREANAL', 'LENGTH_PELVIC', 'LENGTH_CARAPACE', 'LENGTH_FORK', 'LENGTH_MANTLE'], + WEIGHT: ['WEIGHT'], + SEX: ['SEX'], + MATURITY: ['MATURITY_STAGE_3_VISUAL', 'MATURITY_STAGE_4_VISUAL', 'MATURITY_STAGE_5_VISUAL', 'MATURITY_STAGE_6_VISUAL', 'MATURITY_STAGE_7_VISUAL', 'MATURITY_STAGE_9_VISUAL'], + AGE: ['AGE'], + DRESSING: ['DRESSING'], + PRESERVATION: ['PRESERVATION'] +}; +export class Parameters { + // Remove duplication in label + static getSampleParameterLabelGroups(opts) { + return Parameters.getParameterLabelGroups(Object.assign({ + // Exclude special groups 'DRESSING' and 'PRESERVATION', used by round weight conversion + excludedGroups: ['DRESSING', 'PRESERVATION'] }, opts)); + } + static getParameterLabelGroups(opts) { + opts = opts || {}; + return Object.keys(ParameterLabelGroups) + // Keep not excluded groups + .filter(group => { var _a; return !((_a = opts.excludedGroups) === null || _a === void 0 ? void 0 : _a.includes(group)); }) + .reduce((res, key) => { + const labels = ParameterLabelGroups[key] + // Remove duplication in label + // Exclude label already in another previous group + .filter(label => { + var _a; + return !Object.values(res).some((previousLabels) => previousLabels.includes(label)) + // Keep not excluded label + && !((_a = opts.excludedParameterLabels) === null || _a === void 0 ? void 0 : _a.includes(label)); + }); + // Add to result, only if not empty + if (labels.length) + res[key] = labels; + return res; + }, {}); + } +} +export const FractionIdGroups = { + CALCIFIED_STRUCTURE: [10, 11, 12, 13] // Pièces calcifiées (need by SIH-OBSBIO) +}; +export const FractionId = { + ALL: 1 +}; +export const ParameterGroups = Object.freeze(Object.keys(ParameterLabelGroups)); +export const PmfmLabelPatterns = { + BATCH_WEIGHT: /^BATCH_(.+)_WEIGHT$/i, + LATITUDE: /^LATITUDE$/i, + LONGITUDE: /^LONGITUDE$/i, + LENGTH: /LENGTH/i, + WEIGHT: /WEIGHT$/i, + DRESSING: /^DRESSING/i, + SELECTIVITY_DEVICE: /^SELECTIVITY_DEVICE/i, + TAG_ID: /^TAG_ID/i +}; +export const UnitIds = { + NONE: 0 +}; +export const GearIds = { +//OTT: 7 // Not used - WARN id=21 in the SIH database +}; +// TODO Override by config properties ? +export const UnitLabel = { + DECIMAL_HOURS: 'h dec.', + DATE_TIME: 'Date & Time', + MINUTES: 'min', + // Weight units + TON: 't', + KG: 'kg', + GRAM: 'g', + MG: 'mg', + // Length units + KM: 'km', + M: 'm', + DM: 'dm', + CM: 'cm', + MM: 'mm' +}; +export const WeightKgConversion = Object.freeze({ + t: 1000, + kg: 1, + g: 1 / 1000, + mg: 1 / 1000 / 1000 +}); +export const LengthMeterConversion = Object.freeze({ + km: 1000, + m: 1, + dm: 1 / 10, + cm: 1 / 100, + mm: 1 / 1000 +}); +export const UnitLabelPatterns = { + DATE_TIME: /^Date[ &]+Time$/, + DECIMAL_HOURS: /^(h[. ]+dec[.]?|hours)$/, +}; +export const UnitLabelGroups = { + WEIGHT: Object.keys(WeightKgConversion), + LENGTH: Object.keys(LengthMeterConversion) +}; +export const QualityFlagIds = { + NOT_QUALIFIED: 0, + GOOD: 1, + OUT_STATS: 2, + DOUBTFUL: 3, + BAD: 4, + FIXED: 5, + NOT_COMPLETED: 8, + MISSING: 9 +}; +export const QualityFlags = Object.entries(QualityFlagIds).map(([label, id]) => ({ + id, + label +})); +export const AcquisitionLevelCodes = { + TRIP: 'TRIP', + PHYSICAL_GEAR: 'PHYSICAL_GEAR', + CHILD_PHYSICAL_GEAR: 'CHILD_PHYSICAL_GEAR', + OPERATION: 'OPERATION', + CATCH_BATCH: 'CATCH_BATCH', + SORTING_BATCH: 'SORTING_BATCH', + SORTING_BATCH_INDIVIDUAL: 'SORTING_BATCH_INDIVIDUAL', + SAMPLE: 'SAMPLE', + SURVIVAL_TEST: 'SURVIVAL_TEST', + INDIVIDUAL_MONITORING: 'INDIVIDUAL_MONITORING', + INDIVIDUAL_RELEASE: 'INDIVIDUAL_RELEASE', + LANDING: 'LANDING', + SALE: 'SALE', + OBSERVED_LOCATION: 'OBSERVED_LOCATION', + OBSERVED_VESSEL: 'OBSERVED_VESSEL', + PRODUCT: 'PRODUCT', + PRODUCT_SALE: 'PRODUCT_SALE', + PACKET_SALE: 'PACKET_SALE', + EXPENSE: 'EXPENSE', + BAIT_EXPENSE: 'BAIT_EXPENSE', + ICE_EXPENSE: 'ICE_EXPENSE', + CHILD_OPERATION: 'CHILD_OPERATION' +}; +export const SaleTypeIds = { + AUCTION: 1, + DIRECT: 2, + EXPORT: 3, + OTHER: 4 +}; +export const ProgramPrivilegeEnum = Object.freeze({ + MANAGER: 'MANAGER', + OBSERVER: 'OBSERVER', + VIEWER: 'VIEWER', + VALIDATOR: 'VALIDATOR', + QUALIFIER: 'QUALIFIER', +}); +export const ProgramPrivilegeIds = { + MANAGER: 1, + OBSERVER: 2, + VIEWER: 3, + VALIDATOR: 4, + QUALIFIER: 5 +}; +export const ProgramPrivilegeHierarchy = Object.freeze({ + MANAGER: ['MANAGER', 'OBSERVER', 'VALIDATOR', 'VIEWER', 'QUALIFIER'], + VALIDATOR: ['VALIDATOR', 'OBSERVER', 'VIEWER'], + OBSERVER: ['OBSERVER', 'VIEWER'], + QUALIFIER: ['QUALIFIER', 'VIEWER'], + VIEWER: ['VIEWER'], +}); +export const ObjectTypeLabels = { + TRIP: 'FISHING_TRIP', + OBSERVED_LOCATION: 'OBSERVED_LOCATION', +}; +export class ModelEnumUtils { + static refreshDefaultValues() { + MethodIdGroups.CALCULATED = Methods.getCalculatedIds(); + LocationLevelGroups.FISHING_AREA = LocationLevels.getFishingAreaLevelIds(); + LocationLevelGroups.WEIGHT_LENGTH_CONVERSION_AREA = LocationLevels.getWeightLengthConversionAreaLevelIds(); + LocationLevelGroups.STATISTICAL_RECTANGLE = LocationLevels.getStatisticalRectangleLevelIds(); + } + static getObjectTypeByEntityName(entityName) { + if (!entityName) + throw new Error('Missing argument \'entityName\''); + const label = changeCaseToUnderscore(entityName).toUpperCase(); + const value = ObjectTypeLabels[label]; + if (value) + return value; + throw new Error('Missing an ObjectType for entityName: ' + entityName); + } +} +//# sourceMappingURL=model.enum.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/model.enum.js.map b/out-tsc/app/app/referential/services/model/model.enum.js.map new file mode 100644 index 000000000..a28484f01 --- /dev/null +++ b/out-tsc/app/app/referential/services/model/model.enum.js.map @@ -0,0 +1 @@ +{"version":3,"file":"model.enum.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/model/model.enum.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/model.utils.js b/out-tsc/app/app/referential/services/model/model.utils.js new file mode 100644 index 000000000..199f8d72a --- /dev/null +++ b/out-tsc/app/app/referential/services/model/model.utils.js @@ -0,0 +1,53 @@ +import { isNil, isNotNil } from '@sumaris-net/ngx-components'; +import { ProgramPrivilegeHierarchy, UnitLabelGroups, WeightKgConversion } from '@app/referential/services/model/model.enum'; +import { roundHalfUp } from '@app/shared/functions'; +export function isLengthUnitSymbol(label) { + return label && UnitLabelGroups.LENGTH.includes(label); +} +export function isWeightUnitSymbol(label) { + return label && UnitLabelGroups.WEIGHT.includes(label); +} +export class WeightUtils { + /** + * Apply a conversion; fromUnit -> toUnit + * + * @param value + * @param fromUnit + * @param toUnit + **/ + static convert(value, fromUnit, toUnit) { + toUnit = toUnit || 'kg'; + if (fromUnit === toUnit) + return +value; + const fromConversion = WeightKgConversion[fromUnit]; + const toConversion = WeightKgConversion[toUnit]; + if (isNil(fromConversion)) + throw new Error(`Unknown weight unit '${fromUnit}'`); + if (isNil(toConversion)) + throw new Error(`Unknown weight unit '${toUnit}'`); + return +value * fromConversion / toConversion; + } + static format(value, opts) { + if (isNil(value)) + return ''; + const withUnit = opts && opts.withUnit !== false && opts.unit; + if (isNotNil(opts === null || opts === void 0 ? void 0 : opts.maxDecimals)) { + value = roundHalfUp(value, opts.maxDecimals); + return withUnit ? `${value.toFixed(opts.maxDecimals)} ${opts.unit}` : value.toFixed(opts.maxDecimals); + } + return withUnit ? `${value} ${opts.unit}` : value.toString(); + } +} +export class ProgramPrivilegeUtils { + static hasExactPrivilege(actualPrivileges, expectedPrivilege) { + if (!expectedPrivilege) + return false; + return (actualPrivileges === null || actualPrivileges === void 0 ? void 0 : actualPrivileges.includes(expectedPrivilege)) || false; + } + static hasUpperOrEqualsPrivilege(actualPrivileges, expectedPrivilege) { + if (!expectedPrivilege) + return false; + return (actualPrivileges === null || actualPrivileges === void 0 ? void 0 : actualPrivileges.some(p => { var _a; return (_a = ProgramPrivilegeHierarchy[p]) === null || _a === void 0 ? void 0 : _a.includes(expectedPrivilege); })) || false; + } +} +//# sourceMappingURL=model.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/model.utils.js.map b/out-tsc/app/app/referential/services/model/model.utils.js.map new file mode 100644 index 000000000..afaac1795 --- /dev/null +++ b/out-tsc/app/app/referential/services/model/model.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"model.utils.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/model/model.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAqC,yBAAyB,EAAwB,eAAe,EAAE,kBAAkB,EAAmB,MAAM,4CAA4C,CAAC;AACtM,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,UAAU,kBAAkB,CAAC,KAAU;IAC3C,OAAO,KAAK,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AACD,MAAM,UAAU,kBAAkB,CAAC,KAAU;IAC3C,OAAO,KAAK,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,OAAO,WAAW;IAEtB;;;;;;QAMI;IACJ,MAAM,CAAC,OAAO,CAAC,KAAoB,EAAE,QAA0B,EAAE,MAAyB;QACxF,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC;QACxB,IAAI,QAAQ,KAAK,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC;QACvC,MAAM,cAAc,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,KAAK,CAAC,cAAc,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,GAAG,CAAC,CAAC;QAChF,IAAI,KAAK,CAAC,YAAY,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,GAAG,CAAC,CAAC;QAE5E,OAAO,CAAC,KAAK,GAAG,cAAc,GAAG,YAAY,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,KAAoB,EAAE,IAAgF;QAClH,IAAI,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC;QAC9D,IAAI,QAAQ,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,CAAC,EAAE;YAC/B,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7C,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACvG;QACD,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/D,CAAC;CACF;AAED,MAAM,OAAO,qBAAqB;IAEhC,MAAM,CAAC,iBAAiB,CAAC,gBAAoC,EAAE,iBAAmC;QAChG,IAAI,CAAC,iBAAiB;YAAE,OAAO,KAAK,CAAC;QACrC,OAAO,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,QAAQ,CAAC,iBAAiB,CAAC,KAAI,KAAK,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,yBAAyB,CAAC,gBAAoC,EAAE,iBAAmC;QACxG,IAAI,CAAC,iBAAiB;YAAE,OAAO,KAAK,CAAC;QACrC,OAAO,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,WAAC,OAAA,MAAA,yBAAyB,CAAC,CAAC,CAAC,0CAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA,EAAA,CAAC,KAAI,KAAK,CAAC;IACzG,CAAC;CACF"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/parameter.model.js b/out-tsc/app/app/referential/services/model/parameter.model.js new file mode 100644 index 000000000..ffaa60687 --- /dev/null +++ b/out-tsc/app/app/referential/services/model/parameter.model.js @@ -0,0 +1,41 @@ +var Parameter_1; +import { __decorate, __metadata } from "tslib"; +import { BaseReferential, EntityClass, isNotNil, Referential } from '@sumaris-net/ngx-components'; +let Parameter = Parameter_1 = class Parameter extends BaseReferential { + constructor() { + super(Parameter_1.TYPENAME); + this.entityName = Parameter_1.ENTITY_NAME; + } + // TODO : Check if clone is needed + clone() { + const target = new Parameter_1(); + target.fromObject(this); + target.qualitativeValues = this.qualitativeValues && this.qualitativeValues.map(qv => qv.clone()) || undefined; + return target; + } + asObject(options) { + const target = super.asObject(options); + target.qualitativeValues = this.qualitativeValues && this.qualitativeValues.map(qv => qv.asObject(options)) || undefined; + return target; + } + fromObject(source) { + super.fromObject(source); + this.entityName = source.entityName || Parameter_1.ENTITY_NAME; + this.type = source.type; + this.qualitativeValues = source.qualitativeValues && source.qualitativeValues.map(Referential.fromObject) || []; + return this; + } + get isNumeric() { + return isNotNil(this.type) && (this.type === 'double'); + } + get isQualitative() { + return isNotNil(this.type) && (this.type === 'qualitative_value'); + } +}; +Parameter.ENTITY_NAME = 'Parameter'; +Parameter = Parameter_1 = __decorate([ + EntityClass({ typename: 'ParameterVO' }), + __metadata("design:paramtypes", []) +], Parameter); +export { Parameter }; +//# sourceMappingURL=parameter.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/parameter.model.js.map b/out-tsc/app/app/referential/services/model/parameter.model.js.map new file mode 100644 index 000000000..2f09e3637 --- /dev/null +++ b/out-tsc/app/app/referential/services/model/parameter.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parameter.model.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/model/parameter.model.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,eAAe,EAAyB,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAKlH,IAAM,SAAS,iBAAf,MAAM,SAAU,SAAQ,eAA0B;IAQvD;QACE,KAAK,CAAC,WAAS,CAAC,QAAQ,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,WAAS,CAAC,WAAW,CAAC;IAC1C,CAAC;IAEH,kCAAkC;IAChC,KAAK;QACH,MAAM,MAAM,GAAG,IAAI,WAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,SAAS,CAAC;QAC/G,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,QAAQ,CAAC,OAA+B;QACtC,MAAM,MAAM,GAAQ,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,SAAS,CAAC;QACzH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,MAAW;QACpB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,WAAS,CAAC,WAAW,CAAC;QAC7D,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAChH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,SAAS;QACX,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,aAAa;QACf,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC;IACpE,CAAC;;AAvCM,qBAAW,GAAG,WAAW,CAAC;AAFtB,SAAS;IADrB,WAAW,CAAC,EAAC,QAAQ,EAAE,aAAa,EAAC,CAAC;;GAC1B,SAAS,CA0CrB;SA1CY,SAAS"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/pmfm-strategy.model.js b/out-tsc/app/app/referential/services/model/pmfm-strategy.model.js new file mode 100644 index 000000000..f22c9a322 --- /dev/null +++ b/out-tsc/app/app/referential/services/model/pmfm-strategy.model.js @@ -0,0 +1,357 @@ +var PmfmStrategy_1, DenormalizedPmfmStrategy_1; +import { __decorate, __metadata } from "tslib"; +import { Entity, EntityClass, EntityUtils, isNil, isNotEmptyArray, isNotNil, ReferentialRef, ReferentialUtils, removeDuplicatesFromArray, toNumber, } from '@sumaris-net/ngx-components'; +import { Pmfm, PmfmUtils, UnitConversion } from './pmfm.model'; +import { PmfmValueUtils } from './pmfm-value.model'; +import { MethodIds, UnitIds } from './model.enum'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +import { arrayEquals } from '@app/shared/functions'; +let PmfmStrategy = PmfmStrategy_1 = class PmfmStrategy extends Entity { + constructor() { + super(PmfmStrategy_1.TYPENAME); + } + clone(opts) { + const target = super.clone(opts); + // Keep acquisitionLevel as object + target.acquisitionLevel = EntityUtils.isEntity(this.acquisitionLevel) + ? this.acquisitionLevel.clone() + : this.acquisitionLevel; + return target; + } + asObject(opts) { + var _a, _b; + const target = super.asObject(opts); + target.acquisitionLevel = PmfmStrategy_1.getAcquisitionLevelLabel(target); + target.pmfmId = PmfmStrategy_1.getPmfmId(this); + target.pmfm = this.pmfm && this.pmfm.asObject(Object.assign(Object.assign({}, NOT_MINIFY_OPTIONS), opts)); + target.parameter = this.parameter && this.parameter.asObject(Object.assign(Object.assign({}, NOT_MINIFY_OPTIONS), opts)); + target.matrix = this.matrix && this.matrix.asObject(Object.assign(Object.assign({}, NOT_MINIFY_OPTIONS), opts)); + target.fraction = this.fraction && this.fraction.asObject(Object.assign(Object.assign({}, NOT_MINIFY_OPTIONS), opts)); + target.method = this.method && this.method.asObject(Object.assign(Object.assign({}, NOT_MINIFY_OPTIONS), opts)); + // Serialize default value (into a number - because of the DB column's type) + target.defaultValue = PmfmValueUtils.toModelValueAsNumber(this.defaultValue, this.pmfm); + if (isNil(target.defaultValue) || this.isComputed) { + delete target.defaultValue; // Delete if computed PMFM, or nil + } + // Delete min/value if NOT numeric + if (!this.isNumeric) { + delete target.minValue; + delete target.maxValue; + } + // CLean remote id + if (opts && opts.keepRemoteId === false) { + delete target.id; + delete target.updateDate; + delete target.strategyId; + delete target.pmfmId; + if (EntityUtils.isRemote(target.pmfm)) { + delete target.pmfm.id; + delete target.pmfm.updateDate; + delete target.pmfm.creationDate; + (_a = target.pmfm.qualitativeValues) === null || _a === void 0 ? void 0 : _a.filter(EntityUtils.isRemote).forEach((qv) => { + delete qv.id; + delete qv.updateDate; + delete qv.creationDate; + }); + if (EntityUtils.isRemote(target.pmfm.parameter)) { + delete target.pmfm.parameter.id; + delete target.pmfm.parameter.updateDate; + delete target.pmfm.parameter.creationDate; + (_b = target.pmfm.parameter.qualitativeValues) === null || _b === void 0 ? void 0 : _b.filter(EntityUtils.isRemote).forEach((qv) => { + delete qv.id; + delete qv.updateDate; + delete qv.creationDate; + }); + } + } + if (EntityUtils.isRemote(target.parameter)) + delete target.parameter.id; + if (EntityUtils.isRemote(target.matrix)) + delete target.matrix.id; + if (EntityUtils.isRemote(target.fraction)) + delete target.fraction.id; + if (EntityUtils.isRemote(target.method)) + delete target.method.id; + if (EntityUtils.isRemote(target.defaultValue)) + delete target.defaultValue.id; + // Warn: do not replace gearIds, taxonGroupIds, referenceTaxonIds + // to avoid losing some data. Should be done by caller + } + return target; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.pmfm = source.pmfm && Pmfm.fromObject(source.pmfm); + this.pmfmId = toNumber(source.pmfmId, source.pmfm && source.pmfm.id); + this.parameter = source.parameter && ReferentialRef.fromObject(source.parameter); + this.matrix = source.matrix && ReferentialRef.fromObject(source.matrix); + this.fraction = source.fraction && ReferentialRef.fromObject(source.fraction); + this.method = source.method && ReferentialRef.fromObject(source.method); + this.minValue = source.minValue; + this.maxValue = source.maxValue; + this.defaultValue = source.defaultValue; + this.acquisitionNumber = source.acquisitionNumber; + this.isMandatory = source.isMandatory; + this.rankOrder = source.rankOrder; + this.acquisitionLevel = source.acquisitionLevel; + this.gearIds = (source.gearIds && [...source.gearIds]) || undefined; + this.taxonGroupIds = (source.taxonGroupIds && [...source.taxonGroupIds]) || undefined; + this.referenceTaxonIds = (source.referenceTaxonIds && [...source.referenceTaxonIds]) || undefined; + this.strategyId = source.strategyId; + } + get required() { + return this.isMandatory; + } + set required(value) { + this.isMandatory = value; + } + get type() { + return this.pmfm && this.pmfm.type; + } + get isNumeric() { + return this.type === 'integer' || this.type === 'double'; + } + get isAlphanumeric() { + return this.type === 'string'; + } + get isDate() { + return this.type === 'date'; + } + get isComputed() { + return this.method && this.method.id === MethodIds.CALCULATED; + } + get isQualitative() { + return this.type === 'qualitative_value'; + } + get isBoolean() { + return this.type === 'boolean'; + } + equals(other) { + return PmfmStrategy_1.equals(this, other); + } +}; +PmfmStrategy.isEmpty = (o) => !o || (!o.pmfm && !o.parameter && !o.matrix && !o.fraction && !o.method); +PmfmStrategy.isNotEmpty = (o) => !PmfmStrategy_1.isEmpty(o); +PmfmStrategy.getAcquisitionLevelLabel = (source) => source && ((typeof source.acquisitionLevel === 'object' && source.acquisitionLevel.label) || source.acquisitionLevel); +PmfmStrategy.getPmfmId = (source) => { var _a; return source && toNumber(source.pmfmId, (_a = source.pmfm) === null || _a === void 0 ? void 0 : _a.id); }; +PmfmStrategy.equals = (o1, o2) => (isNil(o1) && isNil(o2)) || + // Same ID + (o1 && + o2 && + // Same ID + ((isNotNil(o1.id) && o1.id === o2.id) || + // Or same strategy, rankOrder and acquisitionLevel, etc. + (o1.strategyId === o2.strategyId && + o1.rankOrder === o2.rankOrder && + PmfmStrategy_1.getAcquisitionLevelLabel(o1) === PmfmStrategy_1.getAcquisitionLevelLabel(o2) && + // And same Pmfm + (PmfmStrategy_1.getPmfmId(o1) === PmfmStrategy_1.getPmfmId(o2) || + // or same Pmfm parts (parameter/matrix/fraction/method) + (ReferentialUtils.equals(o1.parameter, o2.parameter) && + ReferentialUtils.equals(o1.matrix, o2.matrix) && + ReferentialUtils.equals(o1.fraction, o2.fraction) && + ReferentialUtils.equals(o1.method, o2.method))) && + // And same gears + arrayEquals(o1.gearIds, o2.gearIds) && + // And same taxon groups + arrayEquals(o1.taxonGroupIds, o2.taxonGroupIds) && + // And same taxon names + arrayEquals(o1.referenceTaxonIds, o2.referenceTaxonIds)))); +PmfmStrategy = PmfmStrategy_1 = __decorate([ + EntityClass({ typename: 'PmfmStrategyVO' }), + __metadata("design:paramtypes", []) +], PmfmStrategy); +export { PmfmStrategy }; +let DenormalizedPmfmStrategy = DenormalizedPmfmStrategy_1 = class DenormalizedPmfmStrategy extends Entity { + constructor(init) { + super(DenormalizedPmfmStrategy_1.TYPENAME); + if (init) + this.fromObject(init); + } + static fromObjects(sources, opts) { + return (sources || []).map(this.fromObject); + } + static fromFullPmfm(source, opts) { + var _a; + if (!source) + return undefined; + const target = new DenormalizedPmfmStrategy_1(); + target.fromObject({ + id: source.id, + label: source.label, + name: source.name, + type: source.type, + completeName: PmfmUtils.getPmfmName(source, { withDetails: true, withUnit: ((_a = source.unit) === null || _a === void 0 ? void 0 : _a.id) !== UnitIds.NONE }), + minValue: source.minValue, + maxValue: source.maxValue, + defaultValue: source.defaultValue, + maximumNumberDecimals: source.maximumNumberDecimals, + signifFiguresNumber: source.signifFiguresNumber, + detectionThreshold: source.detectionThreshold, + precision: source.precision, + parameterId: source.parameter.id, + matrixId: source.matrixId, + fractionId: source.fractionId, + methodId: source.methodId, + unitLabel: source.unitLabel, + isComputed: PmfmUtils.isComputed(source), + qualitativeValues: isNotEmptyArray(source.qualitativeValues) + ? source.qualitativeValues.map(ReferentialRef.fromObject) + : isNotEmptyArray(source.parameter.qualitativeValues) + ? source.parameter.qualitativeValues.map(ReferentialRef.fromObject) + : undefined, + displayConversion: source.displayConversion + }); + return target; + } + ; + /** + * Allow to merge, using the children property + * + * @param other + */ + static merge(pmfm, other) { + if (!pmfm || !other || pmfm.id !== other.id) + throw new Error('Cannot only merge pmfm with same id'); + let result; + // Clone current (if not already clone) + if (isNil(pmfm.children)) { + result = this.fromObject(pmfm).asObject(); // Clone + result.children = [pmfm, other]; + } + else { + result = pmfm; // Already clone + result.children.push(other); + } + // rankOrder + result.rankOrder = Math.min(result.rankOrder || 1, other.rankOrder || 1); + // Min value + if (isNotNil(result.minValue) && isNotNil(other.minValue)) { + result.minValue = Math.min(result.minValue, other.minValue); + } + else { + result.minValue = null; + } + // Max value + if (isNotNil(result.maxValue) && isNotNil(other.maxValue)) { + result.maxValue = Math.max(result.maxValue, other.maxValue); + } + else { + result.maxValue = null; + } + // Merge gears + if (isNotEmptyArray(result.gearIds) && isNotEmptyArray(other.gearIds)) { + result.gearIds = removeDuplicatesFromArray([...result.gearIds, ...other.gearIds]); + } + else { + result.gearIds = null; + } + // Merge taxonGroupIds + if (isNotEmptyArray(result.taxonGroupIds) && isNotEmptyArray(other.taxonGroupIds)) { + result.taxonGroupIds = removeDuplicatesFromArray([...result.taxonGroupIds, ...other.taxonGroupIds]); + } + else { + result.taxonGroupIds = null; + } + // Merge referenceTaxonIds + if (isNotEmptyArray(result.referenceTaxonIds) && isNotEmptyArray(other.referenceTaxonIds)) { + result.referenceTaxonIds = removeDuplicatesFromArray([...result.referenceTaxonIds, ...other.referenceTaxonIds]); + } + else { + result.referenceTaxonIds = null; + } + // Remove strategyId + delete result.strategyId; + return result; + } + asObject(options) { + var _a; + const target = super.asObject(options); + target.displayConversion = (_a = this.displayConversion) === null || _a === void 0 ? void 0 : _a.asObject(options); + target.defaultValue = PmfmValueUtils.toModelValue(this.defaultValue, this, { applyConversion: false }); + target.qualitativeValues = this.qualitativeValues && this.qualitativeValues.map(qv => qv.asObject(options)) || undefined; + target.children = this.children && this.children.map(c => c.asObject(options)) || undefined; + // Revert conversion (if any) + if (this.displayConversion) + PmfmUtils.applyConversion(target, this.displayConversion.clone().reverse(), { markAsConverted: false }); + return target; + } + fromObject(source, opts) { + var _a, _b; + super.fromObject(source, opts); + this.parameterId = toNumber(source.parameterId, (_a = source.parameter) === null || _a === void 0 ? void 0 : _a.id); + this.matrixId = source.matrixId; + this.fractionId = source.fractionId; + this.methodId = source.methodId; + this.label = source.label; + this.name = source.name; + this.completeName = source.completeName; + this.unitLabel = source.unitLabel || ((_b = source.unit) === null || _b === void 0 ? void 0 : _b.label); + this.type = source.type; + this.minValue = source.minValue; + this.maxValue = source.maxValue; + this.acquisitionNumber = source.acquisitionNumber; + this.displayConversion = UnitConversion.fromObject(source.displayConversion); + this.defaultValue = source.defaultValue; + this.maximumNumberDecimals = source.maximumNumberDecimals; + this.signifFiguresNumber = source.signifFiguresNumber; + this.detectionThreshold = source.detectionThreshold; + this.precision = source.precision; + this.isMandatory = source.isMandatory; + this.isComputed = source.isComputed; + this.rankOrder = source.rankOrder; + this.acquisitionLevel = source.acquisitionLevel; + this.gearIds = source.gearIds && [...source.gearIds] || undefined; + this.taxonGroupIds = source.taxonGroupIds && [...source.taxonGroupIds] || undefined; + this.referenceTaxonIds = source.referenceTaxonIds && [...source.referenceTaxonIds] || undefined; + this.qualitativeValues = source.qualitativeValues && source.qualitativeValues.map(ReferentialRef.fromObject); + this.strategyId = source.strategyId; + this.children = source.children && source.children.map(child => new DenormalizedPmfmStrategy_1(child)) || undefined; + if (this.displayConversion) + PmfmUtils.applyConversion(this, this.displayConversion); + } + get required() { + return this.isMandatory; + } + set required(value) { + this.isMandatory = value; + } + get isNumeric() { + return this.type === 'integer' || this.type === 'double'; + } + get isAlphanumeric() { + return this.type === 'string'; + } + get isDate() { + return this.type === 'date'; + } + get isQualitative() { + return this.type === 'qualitative_value'; + } + get hasUnit() { + return this.unitLabel && this.isNumeric; + } + get isWeight() { + return PmfmUtils.isWeight(this); + } + get isMultiple() { + return (this.acquisitionNumber || 1) > 1; + } + /** + * @deprecated Use id instead + */ + get pmfmId() { + return this.id; + } + equals(other) { + return other && ((isNotNil(this.id) && this.id === other.id) + // Same strategy, acquisitionLevel, pmfmId + || (this.strategyId === other.strategyId && this.acquisitionLevel === other.acquisitionLevel)); + } +}; +DenormalizedPmfmStrategy = DenormalizedPmfmStrategy_1 = __decorate([ + EntityClass({ typename: 'DenormalizedPmfmStrategyVO' }), + __metadata("design:paramtypes", [Object]) +], DenormalizedPmfmStrategy); +export { DenormalizedPmfmStrategy }; +//# sourceMappingURL=pmfm-strategy.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/pmfm-strategy.model.js.map b/out-tsc/app/app/referential/services/model/pmfm-strategy.model.js.map new file mode 100644 index 000000000..4b7f2fb1d --- /dev/null +++ b/out-tsc/app/app/referential/services/model/pmfm-strategy.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfm-strategy.model.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/model/pmfm-strategy.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/pmfm-value.model.js b/out-tsc/app/app/referential/services/model/pmfm-value.model.js new file mode 100644 index 000000000..8cd55288a --- /dev/null +++ b/out-tsc/app/app/referential/services/model/pmfm-value.model.js @@ -0,0 +1,232 @@ +import { isMoment } from 'moment/moment'; +import { DateUtils, fromDateISOString, isNil, isNilOrBlank, isNotNil, isNotNilOrBlank, isNotNilOrNaN, joinPropertiesPath, notNilOrDefault, referentialToString, ReferentialUtils, toDateISOString, toNumber, } from '@sumaris-net/ngx-components'; +import { PmfmUtils } from './pmfm.model'; +import { isNilOrNaN } from '@app/shared/functions'; +import { LengthMeterConversion } from '@app/referential/services/model/model.enum'; +import { MathUtils } from '@app/shared/math.utils'; +export const PMFM_VALUE_SEPARATOR = '|'; +export class PmfmValueUtils { + static isConvertedNumber(value) { + return (value instanceof Number) && isNotNilOrNaN(value[PmfmValueUtils.CONVERSION_COEFFICIENT_PROPERTY]); + } + static isEmpty(value) { + return isNilOrBlank(value) || ReferentialUtils.isEmpty(value); + } + static isNotEmpty(value) { + return isNotNilOrBlank(value) || ReferentialUtils.isNotEmpty(value); + } + static equals(pv1, pv2) { + // Exact match + if ((isNil(pv1) && isNil(pv2)) || (pv1 === pv2)) + return true; + // Dates + if (isMoment(pv1) || isMoment(pv2)) { + return DateUtils.equals(pv1, pv2); + } + // Integer can be serialized as '1.0' or '1' (from javascript or java code) + if (!isNaN(+pv1) && +pv1 === +pv2) + return true; + // Serialize ReferentialRef to id + const v1 = typeof pv1 === 'object' && isNotNil(pv1.id) ? pv1.id : pv1; + const v2 = typeof pv2 === 'object' && isNotNil(pv2.id) ? pv2.id : pv2; + // Test match + // WARN: use '==' a NOT '===' because number can be serialized as string + // eslint-disable-next-line eqeqeq + return v1 == v2; + } + static toModelValue(value, pmfm, opts = { applyConversion: true }) { + if (isNil(value) || !pmfm) + return undefined; + if (Array.isArray(value)) { + return value.map(v => this.toModelValue(v, pmfm)).join(PMFM_VALUE_SEPARATOR); + } + switch (pmfm.type) { + case 'qualitative_value': + return value && isNotNil(value.id) && value.id.toString() || value || undefined; + case 'integer': + case 'double': + if (isNil(value) && !isNaN(+value)) + return undefined; + // Apply conversion + if (pmfm.displayConversion && opts.applyConversion && isNotNilOrNaN(pmfm.displayConversion.conversionCoefficient)) { + value = this.applyConversion(value, 1 / pmfm.displayConversion.conversionCoefficient, { markAsConverted: false }); + } + return value; + case 'string': + return value; + case 'boolean': + return (value === true || value === 'true') ? 'true' : ((value === false || value === 'false') ? 'false' : undefined); + case 'date': + return toDateISOString(value); + default: + throw new Error('Unknown pmfm\'s type: ' + pmfm.type); + } + } + static toModelValueAsNumber(value, pmfm) { + if (!pmfm || isNil(value)) + return value; + switch (pmfm.type) { + case 'double': + case 'integer': + case 'qualitative_value': + return +(PmfmValueUtils.toModelValue(value, pmfm)); + case 'boolean': + const trueFalse = PmfmValueUtils.toModelValue(value, pmfm); + return trueFalse === 'true' ? 1 : 0; + default: + return undefined; // Cannot convert to a number (alphanumerical,date,etc.) + } + } + static asObject(value) { + if (isNil(value)) + return undefined; + // Multiple values (e.g. selective device, on a physical gear) + if (Array.isArray(value)) { + return value.map(v => this.asObject(v)).join(PMFM_VALUE_SEPARATOR); + } + // If moment object, then convert to ISO string - fix #157 + if (isMoment(value)) { + return toDateISOString(value); + } + // If date, convert to ISO string + if (value instanceof Date) { + return toDateISOString(DateUtils.moment(value)); + } + // Number with conversion + else if (this.isConvertedNumber(value)) { + // DEBUG + //console.debug(`[pmfm-value] Apply inverse conversion: ${value} * ${value.__conversionCoefficient}`); + return (+value / value.__conversionCoefficient).toString(); + } + // Qualitative value, String or number + else { + value = notNilOrDefault(value.id, value); + return '' + value; + } + } + static fromModelValue(value, pmfm, opts) { + var _a; + if (!pmfm) + return value; + // If empty, apply the pmfm default value + if (isNil(value) && isNotNil(pmfm.defaultValue)) + value = pmfm.defaultValue; + // If many values + if (typeof value === 'string' && !(opts === null || opts === void 0 ? void 0 : opts.doNotSplitValue) && (pmfm.isMultiple || value.indexOf(PMFM_VALUE_SEPARATOR) !== -1)) { + value = value.split(PMFM_VALUE_SEPARATOR); + } + if (Array.isArray(value)) { + return value.map(v => this.fromModelValue(v, pmfm, { doNotSplitValue: true })); + } + // Simple value + switch (pmfm.type) { + case 'qualitative_value': + if (isNotNil(value)) { + const qvId = (typeof value === 'object') ? value.id : parseInt(value); + return (pmfm.qualitativeValues || (PmfmUtils.isFullPmfm(pmfm) && ((_a = pmfm.parameter) === null || _a === void 0 ? void 0 : _a.qualitativeValues)) || []) + .find(qv => qv.id === qvId) || null; + } + return null; + case 'integer': + if (isNilOrNaN(value)) + return null; + // Apply conversion excepted for displaying the value + if (pmfm.displayConversion) { + // DEBUG + //console.debug(`[pmfm-value] Pmfm '${pmfm.label}' will apply conversion: ${value} * ${pmfm.displayConversion.conversionCoefficient}`); + value = PmfmValueUtils.applyConversion(value, pmfm.displayConversion.conversionCoefficient); + } + else { + value = parseInt(value); + } + return value; + case 'double': + if (isNilOrNaN(value)) + return null; + // Apply conversion excepted for displaying the value + if (pmfm.displayConversion) { + // DEBUG + //console.debug(`[pmfm-value] Pmfm '${pmfm.label}' will apply conversion: ${value} * ${pmfm.displayConversion.conversionCoefficient}`); + value = PmfmValueUtils.applyConversion(value, pmfm.displayConversion.conversionCoefficient); + } + else { + value = parseFloat(value); + } + return value; + case 'string': + return value || null; + case 'boolean': + return (value === 'true' || value === true || value === 1) ? true : ((value === 'false' || value === false || value === 0) ? false : null); + case 'date': + return fromDateISOString(value) || null; + default: + throw new Error('Unknown pmfm type: ' + pmfm.type); + } + } + static valueToString(value, opts) { + var _a; + if (isNil(value) || !(opts === null || opts === void 0 ? void 0 : opts.pmfm)) + return null; + switch (opts.pmfm.type) { + case 'qualitative_value': + if (value && typeof value !== 'object') { + const qvId = parseInt(value); + value = opts.pmfm && (opts.pmfm.qualitativeValues || (PmfmUtils.isFullPmfm(opts.pmfm) && opts.pmfm.parameter && opts.pmfm.parameter.qualitativeValues) || []) + .find(qv => qv.id === qvId) || null; + } + // eslint-disable-next-line eqeqeq + if (opts.hideIfDefaultValue && value.id == opts.pmfm.defaultValue) { + return null; + } + let result = value && ((opts.propertyNames && joinPropertiesPath(value, opts.propertyNames)) || value.name || value.label) || null; + if (result && ((_a = opts.showLabelForPmfmIds) === null || _a === void 0 ? void 0 : _a.includes(opts.pmfm.id))) { + result = referentialToString(opts.pmfm, ['name']) + ': ' + result; + } + return result; + case 'integer': + case 'double': + return isNotNil(value) ? value : null; + case 'string': + return value || null; + case 'date': + return value || null; + case 'boolean': + return (value === 'true' || value === true || value === 1) ? '✔' /*checkmark*/ : + ((value === 'false' || value === false || value === 0) ? '✘' : null); /*empty*/ + default: + throw new Error('Unknown pmfm\'s type: ' + opts.pmfm.type); + } + } + static applyConversion(value, conversionCoefficient, opts) { + if (isNil(value) || isNil(conversionCoefficient)) + return value; + // SKip (already converted) + if (this.isConvertedNumber(value) && value.__conversionCoefficient === conversionCoefficient) { + if ((opts === null || opts === void 0 ? void 0 : opts.markAsConverted) === false) { + return +value; // Remove property __conversionCoefficient + } + return value; + } + // DEBUG + console.debug(`[pmfm-value] Applying conversion: ${value} * ${conversionCoefficient}`); + // Workaround because of float, in javascript (see issue #458) + const target = new Number(MathUtils.multiply(parseFloat(value), conversionCoefficient)); + // Storage conversion coefficient (need by inverse conversion) + if (!opts || opts.markAsConverted !== false) { + target.__conversionCoefficient = conversionCoefficient; + } + return target; + } + static convertLengthValue(sourceValue, sourceUnit, targetUnit, targetPrecision) { + const unitConversionCoefficient = sourceUnit === targetUnit ? 1 + // source -> meter (pivot) -> target + : LengthMeterConversion[sourceUnit] / LengthMeterConversion[targetUnit]; + targetPrecision = toNumber(targetPrecision, 0.000001); // Precision of 6 decimals by default + const precisionCoefficient = 1 / targetPrecision; + // Convert to the expected unit, and round to expected precision + const result = Math.round(precisionCoefficient * unitConversionCoefficient * sourceValue) / precisionCoefficient; + return result; + } +} +PmfmValueUtils.CONVERSION_COEFFICIENT_PROPERTY = '__conversionCoefficient'; +//# sourceMappingURL=pmfm-value.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/pmfm-value.model.js.map b/out-tsc/app/app/referential/services/model/pmfm-value.model.js.map new file mode 100644 index 000000000..4b58e2fa7 --- /dev/null +++ b/out-tsc/app/app/referential/services/model/pmfm-value.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfm-value.model.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/model/pmfm-value.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/pmfm.model.js b/out-tsc/app/app/referential/services/model/pmfm.model.js new file mode 100644 index 000000000..14c82ff35 --- /dev/null +++ b/out-tsc/app/app/referential/services/model/pmfm.model.js @@ -0,0 +1,468 @@ +var UnitConversion_1, Pmfm_1; +import { __decorate, __metadata } from "tslib"; +import { DateUtils, EntityClass, fromDateISOString, isNil, isNotNil, isNotNilOrBlank, ReferentialRef, toNumber } from '@sumaris-net/ngx-components'; +import { MethodIdGroups, PmfmIds, PmfmLabelPatterns, UnitLabel, UnitLabelGroups, UnitLabelPatterns, WeightKgConversion } from './model.enum'; +import { Parameter } from './parameter.model'; +import { PmfmValueUtils } from './pmfm-value.model'; +import { FullReferential } from '@app/referential/services/model/referential.model'; +export const PMFM_ID_REGEXP = /\d+/; +export const PMFM_NAME_ENDS_WITH_PARENTHESIS_REGEXP = new RegExp(/^\s*([^\/(]+)(?:(\s*\/\s+[^/]+)|(\s*\([^\)]+\s*\)))+$/); +let UnitConversion = UnitConversion_1 = class UnitConversion { + constructor() { + } + clone(opts) { + const target = new UnitConversion_1(); + this.copy(target, opts); + return target; + } + copy(target, opts) { + target.fromObject(this.asObject(opts), opts); + } + asObject(opts) { + var _a, _b; + return { + fromUnit: (_a = this.fromUnit) === null || _a === void 0 ? void 0 : _a.asObject(opts), + toUnit: (_b = this.toUnit) === null || _b === void 0 ? void 0 : _b.asObject(opts), + conversionCoefficient: this.conversionCoefficient, + updateDate: DateUtils.toDateISOString(this.updateDate), + }; + } + fromObject(source, opts) { + this.fromUnit = source.fromUnit && ReferentialRef.fromObject(source.fromUnit); + this.toUnit = source.toUnit && ReferentialRef.fromObject(source.toUnit); + this.conversionCoefficient = source.conversionCoefficient; + this.updateDate = fromDateISOString(source.updateDate); + } + /** + * Invert fromUnit and toUnit. Set the conversionCoefficient to its inverse. + * + * @return self This object itself. + */ + reverse() { + const currentFromUnit = this.fromUnit; + const currentToUnit = this.toUnit; + this.fromUnit = currentToUnit; + this.toUnit = currentFromUnit; + this.conversionCoefficient = 1 / this.conversionCoefficient; + return this; + } +}; +UnitConversion = UnitConversion_1 = __decorate([ + EntityClass({ typename: 'UnitConversionVO' }), + __metadata("design:paramtypes", []) +], UnitConversion); +export { UnitConversion }; +let Pmfm = Pmfm_1 = class Pmfm extends FullReferential { + constructor() { + super(Pmfm_1.TYPENAME); + this.entityName = Pmfm_1.ENTITY_NAME; + } + asObject(opts) { + var _a; + const target = super.asObject(Object.assign(Object.assign({}, opts), { minify: false // Do NOT minify itself + })); + if (opts && opts.minify) { + target.parameterId = toNumber(this.parameter && this.parameter.id, null); + target.matrixId = toNumber(this.matrix && this.matrix.id, null); + target.fractionId = toNumber(this.fraction && this.fraction.id, null); + target.methodId = toNumber(this.method && this.method.id, null); + target.unitId = toNumber(this.unit && this.unit.id, null); + delete target.parameter; + delete target.matrix; + delete target.fraction; + delete target.method; + delete target.unit; + delete target.displayConversion; + } + else { + target.parameter = this.parameter && this.parameter.asObject(opts); + target.matrix = this.matrix && this.matrix.asObject(opts); + target.fraction = this.fraction && this.fraction.asObject(opts); + target.method = this.method && this.method.asObject(opts); + target.unit = this.unit && this.unit.asObject(opts); + target.displayConversion = (_a = this.displayConversion) === null || _a === void 0 ? void 0 : _a.asObject(opts); + } + target.qualitativeValues = this.qualitativeValues && this.qualitativeValues.map(qv => qv.asObject(opts)) || undefined; + target.defaultValue = PmfmValueUtils.toModelValue(this.defaultValue, this, { applyConversion: false }); + // Revert conversion (if any) + if (this.displayConversion) + PmfmUtils.applyConversion(target, this.displayConversion.clone().reverse(), { markAsConverted: false }); + return target; + } + fromObject(source) { + var _a; + super.fromObject(source); + this.entityName = source.entityName || Pmfm_1.ENTITY_NAME; + this.type = source.type || ((_a = source.parameter) === null || _a === void 0 ? void 0 : _a.type); + this.minValue = source.minValue; + this.maxValue = source.maxValue; + this.defaultValue = source.defaultValue; + this.maximumNumberDecimals = source.maximumNumberDecimals; + this.signifFiguresNumber = source.signifFiguresNumber; + this.detectionThreshold = source.detectionThreshold; + this.precision = source.precision; + this.parameter = source.parameter && Parameter.fromObject(source.parameter); + this.matrix = source.matrix && ReferentialRef.fromObject(source.matrix); + this.fraction = source.fraction && ReferentialRef.fromObject(source.fraction); + this.method = source.method && ReferentialRef.fromObject(source.method); + this.unit = source.unit && ReferentialRef.fromObject(source.unit); + this.qualitativeValues = source.qualitativeValues && source.qualitativeValues.map(ReferentialRef.fromObject) || undefined; + this.completeName = source.completeName; + return this; + } + get isQualitative() { + return this.type === 'qualitative_value'; + } + get matrixId() { + return this.matrix && this.matrix.id; + } + get fractionId() { + return this.fraction && this.fraction.id; + } + get methodId() { + return this.method && this.method.id; + } + get unitLabel() { + return this.unit && this.unit.label; + } + get isComputed() { + return PmfmUtils.isComputed(this); + } + get isMultiple() { + return false; // Default value + } +}; +Pmfm.ENTITY_NAME = 'Pmfm'; +Pmfm = Pmfm_1 = __decorate([ + EntityClass({ typename: 'PmfmVO' }), + __metadata("design:paramtypes", []) +], Pmfm); +export { Pmfm }; +export class PmfmUtils { + static getExtendedType(pmfm) { + if (!pmfm || !pmfm.type) + return; // Unknown + if (pmfm.type === 'double') { + if (PmfmLabelPatterns.LATITUDE.test(pmfm.label)) { + return 'latitude'; + } + if (PmfmLabelPatterns.LONGITUDE.test(pmfm.label)) { + return 'longitude'; + } + if (pmfm.unitLabel === UnitLabel.DECIMAL_HOURS || UnitLabelPatterns.DECIMAL_HOURS.test(pmfm.unitLabel)) { + return 'duration'; + } + } + else if (pmfm.type === 'date') { + if (pmfm.unitLabel === UnitLabel.DATE_TIME || UnitLabelPatterns.DATE_TIME.test(pmfm.unitLabel)) { + return 'dateTime'; + } + } + return pmfm.type; + } + static filterPmfms(pmfms, opts) { + return pmfms.filter(p => { + var _a; + return p + // Exclude hidden pmfms + && (!opts || !opts.excludeHidden || !p.hidden) + // Exclude some pmfm by ids + && (!opts || !((_a = opts.excludePmfmIds) === null || _a === void 0 ? void 0 : _a.length) || !opts.excludePmfmIds.includes(p.id)); + }); + } + static getFirstQualitativePmfm(pmfms, opts = { + minQvCount: 1 // Should have at least 2 values (by default) + }) { + // exclude hidden pmfm (see batch modal) + const qvPmfm = this.filterPmfms(pmfms, opts) + .find((p, index) => p.type === 'qualitative_value' + && p.qualitativeValues + // Exclude if no enough qualitative values + && p.qualitativeValues.length >= opts.minQvCount + // Exclude if too many qualitative values + && (!opts.maxQvCount || p.qualitativeValues.length <= opts.maxQvCount) + // Apply the first function, if any + && (!opts.filterFn || opts.filterFn(p, index))); + return qvPmfm; + } + static isNumeric(pmfm) { + return pmfm.type === 'integer' || pmfm.type === 'double'; + } + static isAlphanumeric(pmfm) { + return pmfm.type === 'string'; + } + static isDate(pmfm) { + return pmfm.type === 'date'; + } + static isQualitative(pmfm) { + return pmfm.type === 'qualitative_value'; + } + /** + * Check if individual weight (e.g. for batches, products) + * + * @param pmfm + */ + static isWeight(pmfm) { + var _a; + return UnitLabelGroups.WEIGHT.includes(pmfm.unitLabel) + || PmfmLabelPatterns.WEIGHT.test(pmfm.label) + || (pmfm instanceof Pmfm && PmfmLabelPatterns.WEIGHT.test((_a = pmfm.parameter) === null || _a === void 0 ? void 0 : _a.label)); + } + /** + * Check if dressing pmfms (by id or by label like 'DRESSING_%') + * + * @param pmfm + */ + static isDressing(pmfm) { + var _a; + return pmfm.id === PmfmIds.DRESSING + || PmfmLabelPatterns.DRESSING.test(pmfm.label) + || (pmfm instanceof Pmfm && PmfmLabelPatterns.DRESSING.test((_a = pmfm.parameter) === null || _a === void 0 ? void 0 : _a.label)); + } + /** + * Check if individual length (e.g. for batches, products) + * + * @param pmfm + */ + static isLength(pmfm) { + var _a, _b; + return pmfm && ((UnitLabelGroups.LENGTH.includes(pmfm.unitLabel) && (PmfmLabelPatterns.LENGTH.test(pmfm.label))) + || (pmfm instanceof Pmfm + && UnitLabelGroups.LENGTH.includes((_a = pmfm.unit) === null || _a === void 0 ? void 0 : _a.label) + && PmfmLabelPatterns.LENGTH.test((_b = pmfm.parameter) === null || _b === void 0 ? void 0 : _b.label))); + } + /** + * Check if pmfm is a selectivity device + * + * @param pmfm + */ + static isSelectivityDevice(pmfm) { + var _a; + return pmfm && (PmfmLabelPatterns.SELECTIVITY_DEVICE.test(pmfm.label) + || (pmfm instanceof Pmfm && PmfmLabelPatterns.SELECTIVITY_DEVICE.test((_a = pmfm.parameter) === null || _a === void 0 ? void 0 : _a.label))); + } + /** + * Check if pmfm is a tag id + * + * @param pmfm + */ + static isTagId(pmfm) { + return pmfm && (pmfm.id === PmfmIds.TAG_ID + //|| PmfmLabelPatterns.TAG_ID.test(pmfm.label) + //|| (pmfm instanceof Pmfm && PmfmLabelPatterns.TAG_ID.test(pmfm.parameter?.label)) + ); + } + static hasParameterLabelIncludes(pmfm, labels) { + return pmfm && labels.includes(pmfm.parameter.label); + } + static isComputed(pmfm) { + var _a; + return (isNotNil(pmfm.methodId) && MethodIdGroups.CALCULATED.includes(pmfm.methodId)) + || (pmfm instanceof Pmfm && MethodIdGroups.CALCULATED.includes((_a = pmfm.method) === null || _a === void 0 ? void 0 : _a.id)); + } + static isDenormalizedPmfm(pmfm) { + return (pmfm['completeName'] || pmfm['name']) && true; + } + static isFullPmfm(pmfm) { + return pmfm['parameter'] && true; + } + static isNotHidden(pmfm) { + return !pmfm.hidden; + } + /** + * Compute a PMFM.NAME, with the last part of the name + * + * @param pmfm + * @param opts + */ + static getPmfmName(pmfm, opts) { + var _a; + if (!pmfm) + return undefined; + let name; + let details; + if (PmfmUtils.isDenormalizedPmfm(pmfm)) { + // If withDetails = true, use complete name if exists + if ((opts === null || opts === void 0 ? void 0 : opts.withDetails) && pmfm.completeName) { + // extract secondary elements (matrix, fraction, method, etc.) + const index = pmfm.completeName.indexOf(' - '); + if (index !== -1) { + name = pmfm.completeName.substring(0, index); + details = pmfm.completeName.substring(index + 3); + } + else { + name = pmfm.completeName; + } + } + else { + name = pmfm.name; + } + } + else if (PmfmUtils.isFullPmfm(pmfm)) { + name = (_a = pmfm.parameter) === null || _a === void 0 ? void 0 : _a.name; + if (opts === null || opts === void 0 ? void 0 : opts.withDetails) { + details = [ + pmfm.matrix && pmfm.matrix.name, + pmfm.fraction && pmfm.fraction.name, + pmfm.method && pmfm.method.name + ].filter(isNotNil).join(' - '); + } + } + name = this.sanitizeName(name, pmfm, opts); + if (isNotNilOrBlank(details)) { + if (opts === null || opts === void 0 ? void 0 : opts.html) { + return `${name}
${details}
`; + } + else { + return `${name} - ${details}`; + } + } + return name; + } + static sanitizeName(name, pmfm, opts) { + // Compact mode + if (!opts || opts.compact !== false) { + // Remove parenthesis content (=synonym), if any + // e.g. + // - 'Longueur totale (LT)' should becomes 'Longueur totale' + // - 'D1 / Open wounds' should becomes 'D1' + const matches = PMFM_NAME_ENDS_WITH_PARENTHESIS_REGEXP.exec(name || ''); + name = (matches === null || matches === void 0 ? void 0 : matches[1]) || name; + } + // Append unit + if ((!opts || opts.withUnit !== false) && (pmfm.type === 'integer' || pmfm.type === 'double') && pmfm.unitLabel && pmfm.unitLabel !== '°') { + if (opts === null || opts === void 0 ? void 0 : opts.html) { + if (opts === null || opts === void 0 ? void 0 : opts.withDetails) { + name += ` (${pmfm.unitLabel})`; + } + else { + name += `
(${pmfm.unitLabel})
`; + } + } + else { + name += ` (${pmfm.unitLabel})`; + } + } + return name; + } + /** + * Add weight conversion to a list of pmfms + * + * @param pmfms + * @param expectedWeightSymbol + * @param opts + */ + static setWeightUnitConversions(pmfms, expectedWeightSymbol, opts = { clone: true }) { + (pmfms || []).forEach((pmfm, i) => { + pmfms[i] = this.setWeightUnitConversion(pmfm, expectedWeightSymbol, opts) || pmfm; + }); + return pmfms; + } + static setWeightUnitConversion(source, expectedWeightSymbol, opts = { clone: true }) { + var _a; + if (!this.isWeight(source)) + return source; // SKip if not a weight pmfm + const actualWeightUnit = ((_a = source.unitLabel) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || UnitLabel.KG; + if (actualWeightUnit === expectedWeightSymbol) { + return source; // Conversion not need + } + // actual -> kg (pivot) -> expected + const conversionCoefficient = WeightKgConversion[actualWeightUnit] / WeightKgConversion[expectedWeightSymbol]; + const conversion = UnitConversion.fromObject({ conversionCoefficient, + fromUnit: { label: source.unitLabel }, + toUnit: { label: expectedWeightSymbol } + }); + // Clone to keep existing pmfm unchanged + const target = (!opts || opts.clone !== false) ? source.clone() : source; + target.displayConversion = conversion; + return this.applyConversion(target, conversion); + } + static applyConversion(target, conversion, opts) { + var _a; + const expectedUnitSymbol = ((_a = conversion.toUnit) === null || _a === void 0 ? void 0 : _a.label) || ''; + const conversionCoefficient = toNumber(conversion.conversionCoefficient, 1); + // Must be done before updating maximumNumberDecimals (result depends of its value) + const precision = PmfmUtils.getOrComputePrecision(target); + if (this.isDenormalizedPmfm(target)) { + target.unitLabel = expectedUnitSymbol; + // Update the complete name (the unit part), if exists + const matches = target.completeName && this.NAME_WITH_WEIGHT_UNIT_REGEXP.exec(target.completeName); + if (matches) { + target.completeName = `${matches[1]}(${expectedUnitSymbol})${matches[3] || ''}`; + } + } + else if (target instanceof Pmfm) { + if (target.unit) { + // Update the complete name (the unit part), if exists + const matches = target.name && this.NAME_WITH_WEIGHT_UNIT_REGEXP.exec(target.name); + if (matches) { + target.name = `${matches[1]}(${expectedUnitSymbol})${matches[3] || ''}`; + } + target.unit.label = expectedUnitSymbol; + target.unit.name = expectedUnitSymbol; + } + } + // Convert max number decimals + if (isNotNil(target.maximumNumberDecimals)) { + const convertedMaximumNumberDecimals = Math.log10(conversionCoefficient); + target.maximumNumberDecimals = Math.max(0, target.maximumNumberDecimals - convertedMaximumNumberDecimals); + // DEBUG + //console.debug(`[pmfm-utils] PMFM '${target.label}' Changing maximumNumberDecimals to ${target.maximumNumberDecimals}`); + } + // DEBUG + //else console.debug(`[pmfm-utils] PMFM '${target.label}' without maximumNumberDecimals`, target); + // Convert min value + if (isNotNil(target.minValue)) { + target.minValue = PmfmValueUtils.applyConversion(target.minValue, conversionCoefficient); + // DEBUG + // console.debug(`[pmfm-utils] PMFM '${target.label}' Changing minValue to ${target.minValue}`); + } + // DEBUG + // else console.debug(`[pmfm-utils] PMFM '${target.label}' without minValue`, target); + // Convert max value + if (isNotNil(target.maxValue)) { + target.maxValue = PmfmValueUtils.applyConversion(target.maxValue, conversionCoefficient); + // DEBUG + // console.debug(`[pmfm-utils] PMFM '${target.label}' Changing maxValue to ${target.maxValue}`); + } + // DEBUG + // else console.debug(`[pmfm-utils] PMFM '${target.label}' without maxValue`, target); + // Convert precision + if (precision > 0) { + target.precision = precision * conversionCoefficient; + // DEBUG + // console.debug(`[pmfm-utils] PMFM '${target.label}' Changing precision from ${precision} to ${target.precision}`); + } + // Convert default value + if (isNotNil(target.defaultValue) && (!isNaN(Number(target.defaultValue)))) { + target.defaultValue = PmfmValueUtils.applyConversion(target.defaultValue, conversionCoefficient); + // DEBUG + console.debug(`[pmfm-utils] PMFM '${target.label}' Changing defaultValue from to ${target.defaultValue}`); + } + // Convert type + if (target.type === 'double' && target.maximumNumberDecimals === 0) { + target.type = 'integer'; + // DEBUG + console.debug(`[pmfm-utils] PMFM '${target.label}' Changing type to '${target.type}'`); + } + return target; + } + /** + * Get or compute the precision, for a numerical pmfm (double or integer). Will use the defined precision, or compute it from maximumNumberDecimals. + * Example: + * - if maximumNumberDecimals=null and precision=null, then precision = defaultPrecision + * - if maximumNumberDecimals=1 and precision=0.5, then precision=0.5 + * - if maximumNumberDecimals=1 and precision=null, then precision=0.1 + * + * @param pmfm + */ + static getOrComputePrecision(pmfm, defaultPrecision) { + if (pmfm.precision > 0) + return pmfm.precision; + if (isNil(pmfm.maximumNumberDecimals)) + return defaultPrecision; + return Math.pow(10, -1 * pmfm.maximumNumberDecimals); + } +} +PmfmUtils.NAME_WITH_WEIGHT_UNIT_REGEXP = /^(.* )\((t|kg|g|mg)\)( - .*)?$/; +//# sourceMappingURL=pmfm.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/pmfm.model.js.map b/out-tsc/app/app/referential/services/model/pmfm.model.js.map new file mode 100644 index 000000000..b6468c211 --- /dev/null +++ b/out-tsc/app/app/referential/services/model/pmfm.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfm.model.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/model/pmfm.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/program.model.js b/out-tsc/app/app/referential/services/model/program.model.js new file mode 100644 index 000000000..82362e706 --- /dev/null +++ b/out-tsc/app/app/referential/services/model/program.model.js @@ -0,0 +1,178 @@ +var Program_1, ProgramDepartment_1, ProgramPerson_1; +import { __decorate, __metadata } from "tslib"; +import { BaseReferential, Entity, EntityClass, EntityUtils, isNotEmptyArray, isNotNil, Person, ReferentialRef, ReferentialUtils, removeDuplicatesFromArray } from '@sumaris-net/ngx-components'; +import { Strategy } from './strategy.model'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +import { ProgramPropertiesUtils } from '@app/referential/services/config/program.config'; +import { DenormalizedPmfmStrategy, PmfmStrategy } from '@app/referential/services/model/pmfm-strategy.model'; +let Program = Program_1 = class Program extends BaseReferential { + constructor() { + super(Program_1.TYPENAME); + this.properties = {}; + this.gearClassification = null; + this.taxonGroupType = null; + this.locationClassifications = null; + this.locations = null; + this.departments = null; + this.persons = null; + this.privileges = null; + this.strategies = null; + } + fromObject(source) { + super.fromObject(source); + if (source.properties && source.properties instanceof Array) { + this.properties = EntityUtils.getPropertyArrayAsObject(source.properties); + } + else { + this.properties = Object.assign({}, source.properties); + } + this.gearClassification = source.gearClassification && ReferentialRef.fromObject(source.gearClassification); + this.taxonGroupType = (source.taxonGroupType && ReferentialRef.fromObject(source.taxonGroupType)) || + (isNotNil(source.taxonGroupTypeId) ? ReferentialRef.fromObject({ id: source.taxonGroupTypeId }) : undefined); + this.locationClassifications = source.locationClassifications && source.locationClassifications.map(ReferentialRef.fromObject) || []; + this.locations = source.locations && source.locations.map(ReferentialRef.fromObject) || []; + this.departments = source.departments && source.departments.map(ProgramDepartment.fromObject) || []; + this.persons = source.persons && source.persons.map(ProgramPerson.fromObject) || []; + this.acquisitionLevelLabels = source.acquisitionLevelLabels || []; + this.privileges = source.privileges || []; + this.strategies = source.strategies && source.strategies.map(Strategy.fromObject) || []; + } + asObject(opts) { + if (opts && opts.minify) { + return { + id: this.id, + __typename: opts.keepTypename && this.__typename || undefined + }; + } + const target = super.asObject(opts); + target.properties = Object.assign({}, this.properties); + target.gearClassification = this.gearClassification && this.gearClassification.asObject(opts); + target.taxonGroupType = this.taxonGroupType && this.taxonGroupType.asObject(opts); + target.locationClassifications = this.locationClassifications && this.locationClassifications.map(item => item.asObject(opts)) || []; + target.locations = this.locations && this.locations.map(item => item.asObject(opts)) || []; + target.departments = this.departments && this.departments.map(s => s.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))); + target.persons = this.persons && this.persons.map(s => s.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))); + target.privileges = this.privileges; + target.strategies = this.strategies && this.strategies.map(s => s.asObject(opts)); + return target; + } + equals(other) { + return (super.equals(other) && isNotNil(this.id)) + || (other && this.label === other.label); + } + getPropertyAsBoolean(definition) { + const value = this.getProperty(definition); + return isNotNil(value) ? (value && value !== 'false') : undefined; + } + getPropertyAsInt(definition) { + const value = this.getProperty(definition); + return isNotNil(value) ? parseInt(value) : undefined; + } + getPropertyAsNumbers(definition) { + const value = this.getProperty(definition); + if (typeof value === 'string') + return value.split(',').map(parseFloat) || undefined; + return isNotNil(value) ? [parseFloat(value)] : undefined; + } + getPropertyAsStrings(definition) { + const value = this.getProperty(definition); + return value && value.split(',') || undefined; + } + getProperty(definition) { + if (!definition) + throw new Error('Missing \'definition\' argument'); + return isNotNil(this.properties[definition.key]) ? this.properties[definition.key] : definition.defaultValue; + } +}; +Program.ENTITY_NAME = 'Program'; +Program = Program_1 = __decorate([ + EntityClass({ typename: 'ProgramVO' }), + __metadata("design:paramtypes", []) +], Program); +export { Program }; +let ProgramDepartment = ProgramDepartment_1 = class ProgramDepartment extends Entity { + constructor() { + super(ProgramDepartment_1.TYPENAME); + } + asObject(opts) { + const target = super.asObject(opts); + target.location = this.location && this.location.asObject(opts) || undefined; + target.privilege = this.privilege && this.privilege.asObject(opts); + target.department = this.department && this.department.asObject(opts); + return target; + } + fromObject(source) { + super.fromObject(source); + this.programId = source.programId; + this.location = source.location && ReferentialRef.fromObject(source.location); + this.privilege = source.privilege && ReferentialRef.fromObject(source.privilege); + this.department = source.department && ReferentialRef.fromObject(source.department); + } +}; +ProgramDepartment = ProgramDepartment_1 = __decorate([ + EntityClass({ typename: 'ProgramDepartmentVO' }), + __metadata("design:paramtypes", []) +], ProgramDepartment); +export { ProgramDepartment }; +let ProgramPerson = ProgramPerson_1 = class ProgramPerson extends Entity { + constructor() { + super(ProgramPerson_1.TYPENAME); + } + asObject(opts) { + const target = super.asObject(opts); + target.location = this.location && this.location.asObject(opts) || undefined; + target.privilege = this.privilege && this.privilege.asObject(opts); + target.person = this.person && this.person.asObject(opts); + return target; + } + fromObject(source) { + super.fromObject(source); + this.programId = source.programId; + this.location = source.location && ReferentialRef.fromObject(source.location); + this.privilege = source.privilege && ReferentialRef.fromObject(source.privilege); + this.person = source.person && Person.fromObject(source.person); + } + equals(other) { + return ProgramPerson_1.equals(this, other); + } +}; +ProgramPerson.equals = (o1, o2) => EntityUtils.equals(o1, o2) + || (o1 && o2 + && ReferentialUtils.equals(o1.person, o2.person) + && ReferentialUtils.equals(o1.privilege, o2.privilege) + && ReferentialUtils.equals(o1.location, o2.location)); +ProgramPerson = ProgramPerson_1 = __decorate([ + EntityClass({ typename: 'ProgramPersonVO' }), + __metadata("design:paramtypes", []) +], ProgramPerson); +export { ProgramPerson }; +export class ProgramUtils { + static getAcquisitionLevels(program) { + // If has been filled directly in the program: use it + if (isNotEmptyArray(program.acquisitionLevelLabels)) + return program.acquisitionLevelLabels; + // No strategies (e.g. may be not fetched) - should never occur + if (isNotEmptyArray(program.strategies)) { + console.warn('[program-utils] Cannot get acquisition levels from the given program: missing attributes \'acquisitionLevelLabels\' or \'strategies\''); + return []; + } + // Or get list from strategie + const acquisitionLevelLabels = program.strategies + .flatMap(strategy => (strategy.denormalizedPmfms || strategy.pmfms || []) + .map(pmfm => { + var _a; + if (pmfm && pmfm instanceof PmfmStrategy) { + return (typeof pmfm.acquisitionLevel === 'string' ? pmfm.acquisitionLevel : (_a = pmfm.acquisitionLevel) === null || _a === void 0 ? void 0 : _a.label); + } + if (pmfm && pmfm instanceof DenormalizedPmfmStrategy) { + return pmfm.acquisitionLevel; + } + }) + .filter(isNotNil)); + return removeDuplicatesFromArray(acquisitionLevelLabels); + } + static getLocationLevelIds(program) { + return ProgramPropertiesUtils.getPropertyAsNumbersByEntityName(program, 'LocationLevel'); + } +} +//# sourceMappingURL=program.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/program.model.js.map b/out-tsc/app/app/referential/services/model/program.model.js.map new file mode 100644 index 000000000..407974daf --- /dev/null +++ b/out-tsc/app/app/referential/services/model/program.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"program.model.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/model/program.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/referential.model.js b/out-tsc/app/app/referential/services/model/referential.model.js new file mode 100644 index 000000000..e58e489d4 --- /dev/null +++ b/out-tsc/app/app/referential/services/model/referential.model.js @@ -0,0 +1,41 @@ +var FullReferential_1; +import { __decorate, __metadata } from "tslib"; +import { BaseReferential, EntityClass, isNotNil, ReferentialRef, ReferentialUtils } from '@sumaris-net/ngx-components'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +let FullReferential = FullReferential_1 = class FullReferential extends BaseReferential { + constructor(__typename) { + super(__typename || FullReferential_1.TYPENAME); + this.parent = null; + this.label = null; + this.name = null; + this.description = null; + this.comments = null; + this.creationDate = null; + this.statusId = null; + this.levelId = null; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.parent = source.parent && ReferentialRef.fromObject(source.parent) || isNotNil(source.parentId) && ReferentialRef.fromObject({ id: source.parentId }); + if (isNotNil(this.levelId) && ReferentialUtils.isNotEmpty(source.level)) { + this.levelId = source.level.id; + } + } + asObject(opts) { + const target = super.asObject(opts); + target.statusId = ReferentialUtils.isNotEmpty(target.statusId) ? target.statusId.id : target.statusId; + target.levelId = ReferentialUtils.isNotEmpty(target.levelId) ? target.levelId.id : target.levelId; + target.parent = this.parent && this.parent.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS)) || undefined; + if (opts && opts.minify) { + target.parentId = ReferentialUtils.isNotEmpty(target.parent) ? target.parent.id : target.parentId; + delete target.parent; + } + return target; + } +}; +FullReferential = FullReferential_1 = __decorate([ + EntityClass({ typename: 'ReferentialVO' }), + __metadata("design:paramtypes", [String]) +], FullReferential); +export { FullReferential }; +//# sourceMappingURL=referential.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/referential.model.js.map b/out-tsc/app/app/referential/services/model/referential.model.js.map new file mode 100644 index 000000000..a752e08ae --- /dev/null +++ b/out-tsc/app/app/referential/services/model/referential.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential.model.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/model/referential.model.ts"],"names":[],"mappings":";;AAAA,OAAO,EACL,eAAe,EACf,WAAW,EAEX,QAAQ,EAER,cAAc,EACd,gBAAgB,EACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAGzE,IAAM,eAAe,uBAArB,MAAM,eAIX,SAAQ,eAA8B;IAMtC,YAAY,UAAmB;QAC7B,KAAK,CAAC,UAAU,IAAI,iBAAe,CAAC,QAAQ,CAAC,CAAC;QAHhD,WAAM,GAAoB,IAAI,CAAC;QAI7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,UAAU,CAAC,MAAW,EAAE,IAAS;QAC/B,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3J,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACvE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;SAChC;IACH,CAAC;IAED,QAAQ,CAAC,IAAS;QAChB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtG,MAAM,CAAC,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAClG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,iCAAM,IAAI,GAAK,kBAAkB,EAAG,IAAI,SAAS,CAAC;QAErG,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YACvB,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;YAClG,OAAO,MAAM,CAAC,MAAM,CAAC;SACtB;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAA;AA1CY,eAAe;IAD3B,WAAW,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;;GAC9B,eAAe,CA0C3B;SA1CY,eAAe"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/rule.model.js b/out-tsc/app/app/referential/services/model/rule.model.js new file mode 100644 index 000000000..eece0055b --- /dev/null +++ b/out-tsc/app/app/referential/services/model/rule.model.js @@ -0,0 +1,231 @@ +var Rule_1; +import { __decorate, __metadata } from "tslib"; +import { BaseReferential, EntityClass, isEmptyArray, isNil, isNilOrBlank, isNotNil, isNotNilOrBlank, toBoolean, } from '@sumaris-net/ngx-components'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +export function inverseOperator(operator) { + switch (operator) { + case '=': + return '!='; + case '!=': + return '='; + case '<': + return '>='; + case '>': + return '<='; + case '>=': + return '<'; + case '<=': + return '>'; + case 'IN': + return 'NOT IN'; + case 'NOT IN': + return 'IN'; + case 'NULL': + return 'NOT NULL'; + case 'NOT NULL': + return 'NULL'; + default: + throw new Error('Operator not implemented yet: ' + operator); + } +} +function get(obj, props) { + return obj && props.reduce((result, prop) => result == null ? undefined : result[prop], obj); +} +let Rule = Rule_1 = class Rule extends BaseReferential { + constructor(__typename) { + super(__typename || Rule_1.TYPENAME); + this.operator = null; + this.bidirectional = null; + this.precondition = null; + this.blocking = null; + this.message = null; + this.value = null; + this.values = null; + this.parent = null; + this.children = null; + this.entityName = Rule_1.ENTITY_NAME; + } + static check(rule) { + // Check rule validity + if (rule.precondition) { + if (isEmptyArray(rule.children)) + throw new Error('Invalid rule precondition: missing some children rules'); + } + else { + if (isNilOrBlank(rule.label) || isNilOrBlank(rule.message)) + throw new Error('Invalid rule: \'label\' and \'message\' are required'); + } + if ((isNilOrBlank(rule.operator) || isNilOrBlank(rule.name)) && (typeof rule.filter !== 'function')) + throw new Error('Invalid rule: required an attribute \'operator\' or \'filter\''); + } + static asFilterFn(rule) { + // Check rule validity + if (rule.precondition) { + if (isEmptyArray(rule.children)) + throw new Error('Invalid rule precondition: missing some children rules'); + } + else { + if (isNilOrBlank(rule.label) || isNilOrBlank(rule.name) || isNilOrBlank(rule.message)) + throw new Error('Invalid rule: \'label\', \'name\' and \'message\' are required'); + if (isNilOrBlank(rule.operator) && (typeof rule.filter !== 'function')) + throw new Error('Invalid rule: required an attribute \'operator\' or \'filter\''); + } + const props = rule.name.split('.'); + const expectedValue = isNotNilOrBlank(rule.value) ? rule.value : rule.values; + switch (rule.operator) { + case '=': + if (Array.isArray(expectedValue)) { + return (source) => expectedValue.includes(get(source, props)); + } + // eslint-disable-next-line eqeqeq + return (source) => source == get(expectedValue, props); + case '!=': + if (Array.isArray(expectedValue)) { + return (source) => !expectedValue.includes(get(source, props)); + } + // eslint-disable-next-line eqeqeq + return (source) => expectedValue != get(source, props); + case 'IN': + if (Array.isArray(expectedValue)) { + return (source) => { + const value = get(source, props); + const values = Array.isArray(value) ? value : [value]; + return values.some(av => expectedValue.includes(av)); + }; + } + return (source) => { + const value = get(source, props); + const values = Array.isArray(value) ? value : [value]; + // eslint-disable-next-line eqeqeq + return values.some(v => v == expectedValue); + }; + case 'NULL': + return (source) => isNil(get(source, props)); + case 'NOT NULL': + return (source) => isNotNil(get(source, props)); + default: + throw new Error('Operator not implemented yet: ' + rule.operator); + } + } + static control(source, rule, opts = { debug: false }) { + const filter = rule.filter || this.asFilterFn(rule); + const indent = opts.debug && opts.indent || ''; + const logPrefix = opts.debug && `${indent}[rule] [${rule.label}] ` || ''; + // Test precondition + if (rule.precondition) { + // Do not apply: skip + if (!filter(source)) { + if (opts.debug) + console.debug(`${logPrefix}precondition KO`); + return; + } + // Precondition OK: Continue with children + if (opts.debug) + console.debug(`${logPrefix}precondition OK - value:`, source); + // Continue with children + const childrenOpts = opts.debug && { depth: (opts.depth || 0) + 1, indent: indent + ' ', debug: true } || { debug: false }; + const errors = (rule.children || []).map(child => this.control(source, child, childrenOpts)).filter(isNotNil); + if (isEmptyArray(errors)) + return undefined; // No error + // Concat errors + return errors.reduce((res, error) => (Object.assign(Object.assign({}, res), error)), {}); + } + // Standard rule + const match = filter(source); + if (match) { + if (opts.debug) + console.debug(`${logPrefix}OK`); + return; // Ok, pass + } + if (opts.debug) + console.debug(`${logPrefix}KO - ${rule.message}`); + // Error + return { + [rule.name]: { + [rule.label]: rule.message + } + }; + } + static not(rule) { + const target = rule.clone(); + if (target.operator) { + target.operator = inverseOperator(target.operator); + } + else { + const filter = Rule_1.asFilterFn(rule); + target.filter = (value) => !filter(value); + } + return target; + } + fromObject(source, opts) { + super.fromObject(source); + this.name = source.name || source.controlledAttribute; + this.operator = source.operator || '='; + this.bidirectional = toBoolean(source.bidirectional, false); + this.precondition = toBoolean(source.precondition, false); + this.blocking = toBoolean(source.blocking, false); + this.message = source.message; + this.value = source.value; + this.values = source.values; + this.parent = source.parent; + this.filter = (typeof source.filter === 'function') ? source.filter : undefined; + if (!opts || opts.withChildren !== false) { + this.children = source.children && source.children.map(child => Rule_1.fromObject(child, opts)) || undefined; + } + } + asObject(opts) { + const target = super.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS)); + if (opts === null || opts === void 0 ? void 0 : opts.minify) { + // Parent Id not need, as the tree batch will be used by pod + delete target.parent; + delete target.parentId; + // DEBUG properties + delete target.debug; + delete target._filterFn; + } + return target; + } + get controlledAttribute() { + return this.name; + } + set controlledAttribute(value) { + this.name = value; + } + get errorMessage() { + return this.message; + } + set errorMessage(value) { + this.message = value; + } + build() { + this.filter = Rule_1.asFilterFn(this); + } +}; +Rule.ENTITY_NAME = 'Rule'; +Rule = Rule_1 = __decorate([ + EntityClass({ typename: 'RuleVO' }), + __metadata("design:paramtypes", [String]) +], Rule); +export { Rule }; +export class RuleUtils { + static build(rules, force) { + (rules || []).forEach(rule => { + if (force || !rule.filter) + rule.build(); + }); + } + static valid(entity, rules, debug) { + return this.control(entity, rules, debug) === undefined /*no error*/; + } + static control(source, rules, debug) { + const errors = (rules || []).map(r => Rule.control(source, r, { debug })).filter(isNotNil); + if (isEmptyArray(errors)) + return undefined; // No error + // Concat errors + return errors.reduce((res, error) => (Object.assign(Object.assign({}, res), error)), {}); + } + static not(rules) { + return (rules || []).map(Rule.not); + } +} +//# sourceMappingURL=rule.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/rule.model.js.map b/out-tsc/app/app/referential/services/model/rule.model.js.map new file mode 100644 index 000000000..d74a3c760 --- /dev/null +++ b/out-tsc/app/app/referential/services/model/rule.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"rule.model.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/model/rule.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/sampling-strategy.model.js b/out-tsc/app/app/referential/services/model/sampling-strategy.model.js new file mode 100644 index 000000000..1892f53e0 --- /dev/null +++ b/out-tsc/app/app/referential/services/model/sampling-strategy.model.js @@ -0,0 +1,169 @@ +var SamplingStrategy_1; +import { __decorate, __metadata } from "tslib"; +import { Strategy } from './strategy.model'; +import { DateUtils, EntityClass, fromDateISOString, isNil, isNotEmptyArray, isNotNil, toDateISOString, toNumber, } from '@sumaris-net/ngx-components'; +import { PmfmStrategy } from '@app/referential/services/model/pmfm-strategy.model'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +let SamplingStrategy = SamplingStrategy_1 = class SamplingStrategy extends Strategy { + constructor() { + super(); + this.efforts = []; + this.effortByQuarter = {}; // Init, for easier use in UI + } + static clone(source) { + if (source instanceof SamplingStrategy_1) + return source.clone(); + const res = new SamplingStrategy_1(); + res.fromObject(source); + return res; + } + // TODO : Check if clone is needed + clone() { + const target = new SamplingStrategy_1(); + target.fromObject(this); + return target; + } + fromObject(source) { + const target = super.fromObject(source); + // Copy efforts. /!\ leave undefined is not set, to be able to detect if has been filled. See hasEffortFilled() + this.efforts = source.efforts && source.efforts.map(StrategyEffort.fromObject) || undefined; + if (!this.efforts && this.appliedStrategies) { + this.efforts = this.appliedStrategies.reduce((res, as) => res.concat((as.appliedPeriods || []).map(period => { + var _a; + const quarter = (_a = period.startDate) === null || _a === void 0 ? void 0 : _a.quarter(); + if (isNil(quarter) || isNil(period.acquisitionNumber)) + return null; + return StrategyEffort.fromObject({ + quarter, + startDate: period.startDate, + endDate: period.endDate, + expectedEffort: period.acquisitionNumber + }); + }).filter(isNotNil)), []); + } + this.effortByQuarter = source.effortByQuarter && Object.assign({}, source.effortByQuarter) || undefined; + if (!this.effortByQuarter && isNotEmptyArray(this.efforts)) { + this.effortByQuarter = {}; + this.efforts.forEach(effort => { + this.effortByQuarter[effort.quarter] = this.effortByQuarter[effort.quarter] || StrategyEffort.fromObject({ + quarter: effort.quarter, + startDate: effort.startDate, + endDate: effort.endDate, + expectedEffort: 0 + }); + this.effortByQuarter[effort.quarter].expectedEffort += effort.expectedEffort; + this.effortByQuarter[effort.quarter].startDate = DateUtils.min(this.effortByQuarter[effort.quarter].startDate, effort.startDate); + this.effortByQuarter[effort.quarter].endDate = DateUtils.max(this.effortByQuarter[effort.quarter].endDate, effort.endDate); + }); + } + this.parameterGroups = source.parameterGroups || undefined; + this.year = fromDateISOString(source.year); + this.age = source.age; + this.sex = source.sex; + this.lengthPmfms = source.lengthPmfms && source.lengthPmfms.map(PmfmStrategy.fromObject); + this.weightPmfms = source.weightPmfms && source.weightPmfms.map(PmfmStrategy.fromObject); + this.maturityPmfms = source.maturityPmfms && source.maturityPmfms.map(PmfmStrategy.fromObject); + this.fractionPmfms = source.fractionPmfms && source.fractionPmfms.map(PmfmStrategy.fromObject); + return target; + } + asObject(opts) { + const target = super.asObject(opts); + // Remove effort + if (!opts || opts.keepEffort !== true) { + delete target.efforts; + delete target.effortByQuarter; + delete target.parameterGroups; + delete target.year; + delete target.age; + delete target.sex; + delete target.lengthPmfms; + delete target.weightPmfms; + delete target.maturityPmfms; + delete target.fractionPmfms; + } + else { + target.year = toDateISOString(this.year); + target.efforts = this.efforts && this.efforts.map(e => e.asObject()) || undefined; + target.effortByQuarter = {}; + target.efforts.filter(e => e.quarter).forEach(e => target.effortByQuarter[e.quarter] = e); + target.parameterGroups = this.parameterGroups && this.parameterGroups.slice() || undefined; + target.lengthPmfms = this.lengthPmfms && this.lengthPmfms.map(ps => ps.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))); + target.weightPmfms = this.weightPmfms && this.weightPmfms.map(ps => ps.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))); + target.maturityPmfms = this.maturityPmfms && this.maturityPmfms.map(ps => ps.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))); + target.fractionPmfms = this.fractionPmfms && this.fractionPmfms.map(ps => ps.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))); + } + return target; + } + get hasRealizedEffort() { + return (this.efforts || []).findIndex(e => e.hasRealizedEffort) !== -1; + } + get hasExpectedEffort() { + return (this.efforts || []).findIndex(e => e.hasExpectedEffort) !== -1; + } +}; +SamplingStrategy = SamplingStrategy_1 = __decorate([ + EntityClass({ typename: 'SamplingStrategyVO' }), + __metadata("design:paramtypes", []) +], SamplingStrategy); +export { SamplingStrategy }; +export class StrategyEffort { + constructor() { + } + static fromObject(value) { + if (!value || value instanceof StrategyEffort) + return value; + const target = new StrategyEffort(); + target.fromObject(value); + return target; + } + static clone(value) { + if (!value) + return value; + const target = new StrategyEffort(); + target.fromObject(value); + return target; + } + // TODO : Check if clone is needed + clone() { + const target = new StrategyEffort(); + target.fromObject(this); + return target; + } + fromObject(source) { + if (!source) + return; + this.strategyLabel = source.strategy || source.strategyLabel; + this.startDate = fromDateISOString(source.startDate); + this.endDate = fromDateISOString(source.endDate); + this.expectedEffort = toNumber(source.expectedEffort); + this.realizedEffort = toNumber(source.realizedEffort); + // Compute quarter (if possible = is same between start/end date) + const startQuarter = this.startDate && this.startDate.quarter(); + const endQuarter = this.endDate && this.endDate.quarter(); + this.quarter = startQuarter === endQuarter ? startQuarter : undefined; + } + asObject(opts) { + const target = Object.assign({}, this); + target.startDate = toDateISOString(this.startDate); + target.endDate = toDateISOString(this.endDate); + return target; + } + get realized() { + return !this.expectedEffort || (this.realizedEffort || 0) >= this.expectedEffort; + } + get realizedMore() { + return (this.realizedEffort || 0) > (this.expectedEffort || 0); + } + get missingEffort() { + return isNil(this.expectedEffort) ? undefined : + // Avoid negative missing effort (when realized > expected) + Math.max(0, this.expectedEffort - (this.realizedEffort || 0)); + } + get hasRealizedEffort() { + return (this.realizedEffort || 0) > 0; + } + get hasExpectedEffort() { + return (this.expectedEffort || 0) > 0; + } +} +//# sourceMappingURL=sampling-strategy.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/sampling-strategy.model.js.map b/out-tsc/app/app/referential/services/model/sampling-strategy.model.js.map new file mode 100644 index 000000000..ed3225cca --- /dev/null +++ b/out-tsc/app/app/referential/services/model/sampling-strategy.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sampling-strategy.model.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/model/sampling-strategy.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/strategy.model.js b/out-tsc/app/app/referential/services/model/strategy.model.js new file mode 100644 index 000000000..2acd2cebf --- /dev/null +++ b/out-tsc/app/app/referential/services/model/strategy.model.js @@ -0,0 +1,230 @@ +var Strategy_1, StrategyDepartment_1; +import { __decorate, __metadata } from "tslib"; +import { BaseReferential, Entity, EntityClass, EntityUtils, fromDateISOString, isNotNil, ReferentialRef, toDateISOString } from '@sumaris-net/ngx-components'; +import { TaxonGroupRef } from './taxon-group.model'; +import { DenormalizedPmfmStrategy, PmfmStrategy } from './pmfm-strategy.model'; +import { TaxonNameRef } from '@app/referential/services/model/taxon-name.model'; +import { AppReferentialUtils, MINIFY_OPTIONS, NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +let Strategy = Strategy_1 = class Strategy extends BaseReferential { + constructor() { + super(); + this.analyticReference = null; + this.appliedStrategies = null; + this.pmfms = null; + this.denormalizedPmfms = null; + this.departments = null; + this.gears = null; + this.taxonGroups = null; + this.taxonNames = null; + this.programId = null; + this.__typename = Strategy_1.TYPENAME; + } + clone() { + const target = new Strategy_1(); + target.fromObject(this); + return target; + } + fromObject(source) { + super.fromObject(source); + this.analyticReference = source.analyticReference; + this.programId = source.programId; + this.appliedStrategies = source.appliedStrategies && source.appliedStrategies.map(AppliedStrategy.fromObject) || []; + this.pmfms = source.pmfms && source.pmfms.map(PmfmStrategy.fromObject) || []; + this.denormalizedPmfms = source.denormalizedPmfms && source.denormalizedPmfms.map(DenormalizedPmfmStrategy.fromObject) || []; + this.departments = source.departments && source.departments.map(StrategyDepartment.fromObject) || []; + this.gears = source.gears && source.gears.map(ReferentialRef.fromObject) || []; + // Taxon groups, sorted by priority level + this.taxonGroups = source.taxonGroups && source.taxonGroups.map(TaxonGroupStrategy.fromObject) || []; + this.taxonNames = source.taxonNames && source.taxonNames.map(TaxonNameStrategy.fromObject) || []; + } + asObject(opts) { + const target = super.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS)); + target.programId = this.programId; + target.appliedStrategies = this.appliedStrategies && this.appliedStrategies.map(s => s.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))); + target.pmfms = this.pmfms && this.pmfms.map(s => s.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))); + target.denormalizedPmfms = this.denormalizedPmfms && this.denormalizedPmfms.map(s => s.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))); + target.departments = this.departments && this.departments.map(s => s.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))); + target.gears = this.gears && this.gears.map(s => s.asObject(opts)); + target.taxonGroups = this.taxonGroups && this.taxonGroups.map(s => s.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))); + target.taxonNames = this.taxonNames && this.taxonNames.map(s => s.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))); + if (opts && opts.keepRemoteId === false) { + AppReferentialUtils.cleanIdAndDates(target, true, ['gears', 'taxonGroups', 'taxonNames']); + delete target.programId; + } + return target; + } + equals(other) { + return (super.equals(other) && isNotNil(this.id)) + // Or by functional attributes + || ( + // Same label + this.label === other.label + // Same program + && ((!this.programId && !other.programId) || this.programId === other.programId)); + } +}; +Strategy.ENTITY_NAME = 'Strategy'; +Strategy = Strategy_1 = __decorate([ + EntityClass({ typename: 'StrategyVO' }), + __metadata("design:paramtypes", []) +], Strategy); +export { Strategy }; +let StrategyDepartment = StrategyDepartment_1 = class StrategyDepartment extends Entity { + constructor() { + super(StrategyDepartment_1.TYPENAME); + } + clone() { + const target = new StrategyDepartment_1(); + target.fromObject(this); + return target; + } + asObject(opts) { + const target = super.asObject(opts); + target.location = this.location && this.location.asObject(opts) || undefined; + target.privilege = this.privilege && this.privilege.asObject(opts); + target.department = this.department && this.department.asObject(opts); + return target; + } + fromObject(source) { + super.fromObject(source); + this.strategyId = source.strategyId; + this.location = source.location && ReferentialRef.fromObject(source.location); + this.privilege = source.privilege && ReferentialRef.fromObject(source.privilege); + this.department = source.department && ReferentialRef.fromObject(source.department); + } +}; +StrategyDepartment = StrategyDepartment_1 = __decorate([ + EntityClass({ typename: 'StrategyDepartmentVO' }), + __metadata("design:paramtypes", []) +], StrategyDepartment); +export { StrategyDepartment }; +export class AppliedStrategy extends Entity { + constructor() { + super(); + this.__typename = AppliedStrategy.TYPENAME; + } + static fromObject(source) { + if (!source || source instanceof AppliedStrategy) + return source; + const res = new AppliedStrategy(); + res.fromObject(source); + return res; + } + clone() { + const target = new AppliedStrategy(); + target.fromObject(this); + return target; + } + asObject(opts) { + const target = super.asObject(opts); + target.location = this.location && this.location.asObject(opts); + target.appliedPeriods = this.appliedPeriods && this.appliedPeriods.map(p => p.asObject(opts)) || undefined; + // Clean remote id + if (opts && opts.keepRemoteId === false) { + delete target.id; + delete target.updateDate; // Make to sens to keep updateDate of a local entity to save + delete target.strategyId; + if (EntityUtils.isRemoteId(target.location.id)) + delete target.location.id; + } + return target; + } + fromObject(source) { + super.fromObject(source); + this.strategyId = source.strategyId; + this.location = source.location && ReferentialRef.fromObject(source.location); + this.appliedPeriods = source.appliedPeriods && source.appliedPeriods.map(AppliedPeriod.fromObject) || []; + } + equals(other) { + return (super.equals(other) && isNotNil(this.id)) + // Same strategyId and location + || (this.strategyId === other.strategyId + && ((!this.location && !other.location) || (this.location && other.location && this.location.id === other.location.id))); + } +} +AppliedStrategy.TYPENAME = 'AppliedStrategyVO'; +export class AppliedPeriod { + constructor() { + this.__typename = AppliedPeriod.TYPENAME; + } + static fromObject(source) { + if (!source || source instanceof AppliedPeriod) + return source; + const res = new AppliedPeriod(); + res.fromObject(source); + return res; + } + asObject(opts) { + const target = Object.assign({}, this); //= {...this}; + if (!opts || opts.keepTypename !== true) + delete target.__typename; + target.startDate = toDateISOString(this.startDate); + target.endDate = toDateISOString(this.endDate); + // Clean remote id + if (opts && opts.keepRemoteId === false && EntityUtils.isRemoteId(target.appliedStrategyId)) { + delete target.appliedStrategyId; + } + return target; + } + fromObject(source) { + this.appliedStrategyId = source.appliedStrategyId; + this.startDate = fromDateISOString(source.startDate); + this.endDate = fromDateISOString(source.endDate); + this.acquisitionNumber = source.acquisitionNumber; + } + // TODO : Check if clone is needed + clone() { + const target = new AppliedPeriod(); + target.fromObject(this.asObject()); + return target; + } +} +AppliedPeriod.TYPENAME = 'AppliedPeriodVO'; +export class TaxonGroupStrategy { + static fromObject(source) { + if (!source || source instanceof TaxonGroupStrategy) + return source; + const res = new TaxonGroupStrategy(); + res.fromObject(source); + return res; + } + asObject(opts) { + const target = Object.assign({}, this); //= {...this}; + if (!opts || opts.keepTypename !== true) + delete target.__typename; + target.taxonGroup = this.taxonGroup && this.taxonGroup.asObject(Object.assign(Object.assign({}, opts), MINIFY_OPTIONS)); + return target; + } + fromObject(source) { + this.strategyId = source.strategyId; + this.priorityLevel = source.priorityLevel; + this.taxonGroup = source.taxonGroup && TaxonGroupRef.fromObject(source.taxonGroup); + } +} +export class TaxonNameStrategy { + static fromObject(source) { + if (!source || source instanceof TaxonNameStrategy) + return source; + const res = new TaxonNameStrategy(); + res.fromObject(source); + return res; + } + // TODO : Check if clone is needed + clone() { + const target = new TaxonNameStrategy(); + target.fromObject(this); + return target; + } + asObject(opts) { + const target = Object.assign({}, this); //= {...this}; + if (!opts || opts.keepTypename !== true) + delete target.taxonName.__typename; + return target; + } + fromObject(source) { + this.strategyId = source.strategyId; + this.priorityLevel = source.priorityLevel; + this.taxonName = source.taxonName && TaxonNameRef.fromObject(source.taxonName); + } +} +//# sourceMappingURL=strategy.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/strategy.model.js.map b/out-tsc/app/app/referential/services/model/strategy.model.js.map new file mode 100644 index 000000000..c5c16c13a --- /dev/null +++ b/out-tsc/app/app/referential/services/model/strategy.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"strategy.model.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/model/strategy.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/taxon-group.model.js b/out-tsc/app/app/referential/services/model/taxon-group.model.js new file mode 100644 index 000000000..59a4af898 --- /dev/null +++ b/out-tsc/app/app/referential/services/model/taxon-group.model.js @@ -0,0 +1,48 @@ +var TaxonGroupRef_1; +import { __decorate, __metadata } from "tslib"; +import { Entity, EntityClass } from '@sumaris-net/ngx-components'; +import { TaxonNameRef } from '@app/referential/services/model/taxon-name.model'; +export const TaxonGroupTypeIds = { + FAO: 2, + METIER_DCF_5: 3, + METIER_NATIONAL: 4 +}; +export const TaxonGroupLabels = { + FISH: 'MZZ' +}; +let TaxonGroupRef = TaxonGroupRef_1 = class TaxonGroupRef extends Entity { + constructor() { + super(TaxonGroupRef_1.TYPENAME); + this.entityName = TaxonGroupRef_1.ENTITY_NAME; + } + asObject(options) { + if (options && options.minify) { + return { + id: this.id, + __typename: options.keepTypename && this.__typename || undefined + }; + } + const target = super.asObject(options); + if (options && options.keepEntityName !== true) + delete target.entityName; // delete by default + delete target.taxonNames; // Not need + delete target.priority; + return target; + } + fromObject(source) { + super.fromObject(source); + this.label = source.label; + this.name = source.name; + this.statusId = source.statusId; + this.entityName = source.entityName || TaxonGroupRef_1.ENTITY_NAME; + this.taxonNames = source.taxonNames && source.taxonNames.map(TaxonNameRef.fromObject) || []; + this.priority = source.priority; + } +}; +TaxonGroupRef.ENTITY_NAME = 'TaxonGroup'; +TaxonGroupRef = TaxonGroupRef_1 = __decorate([ + EntityClass({ typename: 'TaxonGroupVO' }), + __metadata("design:paramtypes", []) +], TaxonGroupRef); +export { TaxonGroupRef }; +//# sourceMappingURL=taxon-group.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/taxon-group.model.js.map b/out-tsc/app/app/referential/services/model/taxon-group.model.js.map new file mode 100644 index 000000000..15b51b85c --- /dev/null +++ b/out-tsc/app/app/referential/services/model/taxon-group.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"taxon-group.model.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/model/taxon-group.model.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAA+C,MAAM,6BAA6B,CAAC;AAC/G,OAAO,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AAGhF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,GAAG,EAAE,CAAC;IACN,YAAY,EAAE,CAAC;IACf,eAAe,EAAE,CAAC;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,KAAK;CACZ,CAAC;AAGK,IAAM,aAAa,qBAAnB,MAAM,aAAc,SAAQ,MAAyD;IAc1F;QACE,KAAK,CAAC,eAAa,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,eAAa,CAAC,WAAW,CAAC;IAC9C,CAAC;IAED,QAAQ,CAAC,OAAoC;QAC3C,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;YAC7B,OAAO;gBACL,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,UAAU,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,IAAI,SAAS;aACjE,CAAC;SACH;QACD,MAAM,MAAM,GAAQ,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,OAAO,IAAI,OAAO,CAAC,cAAc,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB;QAC9F,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW;QACrC,OAAO,MAAM,CAAC,QAAQ,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,MAAW;QACpB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,eAAa,CAAC,WAAW,CAAC;QACjE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC5F,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAClC,CAAC;;AAtCM,yBAAW,GAAG,YAAY,CAAC;AAHvB,aAAa;IADzB,WAAW,CAAC,EAAC,QAAQ,EAAE,cAAc,EAAC,CAAC;;GAC3B,aAAa,CA0CzB;SA1CY,aAAa"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/taxon-name.model.js b/out-tsc/app/app/referential/services/model/taxon-name.model.js new file mode 100644 index 000000000..b49ff3a84 --- /dev/null +++ b/out-tsc/app/app/referential/services/model/taxon-name.model.js @@ -0,0 +1,125 @@ +var TaxonName_1, TaxonNameRef_1; +import { __decorate, __metadata } from "tslib"; +import { BaseReferential, Entity, EntityClass, isNil, isNotNil, ReferentialRef, ReferentialUtils } from '@sumaris-net/ngx-components'; +let TaxonName = TaxonName_1 = class TaxonName extends BaseReferential { + constructor() { + super(TaxonName_1.TYPENAME); + this.entityName = TaxonName_1.ENTITY_NAME; + } + // TODO : Check if clone is needed + clone() { + const target = new TaxonName_1(); + target.fromObject(this); + return target; + } + asObject(options) { + const target = super.asObject(Object.assign(Object.assign({}, options), { minify: false // Do NOT minify itself + })); + if (options && options.minify) { + target.parentId = this.parentTaxonName && this.parentTaxonName.id; + target.taxonomicLevelId = this.taxonomicLevel && this.taxonomicLevel.id; + delete target.taxonomicLevel; + delete target.parentTaxonName; + delete target.useExistingReferenceTaxon; + } + else { + target.parentTaxonName = this.parentTaxonName && this.parentTaxonName.asObject(options); + } + return target; + } + fromObject(source) { + super.fromObject(source); + this.isReferent = source.isReferent; + this.isNaming = source.isNaming; + this.isVirtual = source.isVirtual; + this.referenceTaxonId = source.referenceTaxonId; + this.taxonomicLevel = source.taxonomicLevel && ReferentialRef.fromObject(source.taxonomicLevel); + this.taxonGroupIds = source.taxonGroupIds; + this.entityName = source.entityName || TaxonName_1.TYPENAME; + this.parentTaxonName = source.parentTaxonName && ReferentialRef.fromObject(source.parentTaxonName); + this.startDate = source.startDate; + this.endDate = source.endDate; + return this; + } + get taxonomicLevelId() { + return this.taxonomicLevel && this.taxonomicLevel.id; + } +}; +TaxonName.ENTITY_NAME = 'TaxonName'; +TaxonName = TaxonName_1 = __decorate([ + EntityClass({ typename: 'TaxonNameVO' }), + __metadata("design:paramtypes", []) +], TaxonName); +export { TaxonName }; +export const TaxonomicLevelIds = { + ORDO: 13, + FAMILY: 17, + GENUS: 26, + SUBGENUS: 27, + SPECIES: 28, + SUBSPECIES: 29 +}; +let TaxonNameRef = TaxonNameRef_1 = class TaxonNameRef extends Entity { + constructor() { + super(TaxonNameRef_1.TYPENAME); + this.entityName = TaxonNameRef_1.ENTITY_NAME; + } + static equalsOrSameReferenceTaxon(v1, v2) { + return ReferentialUtils.equals(v1, v2) || (v1 && v2 && isNotNil(v1.referenceTaxonId) && v1.referenceTaxonId === v2.referenceTaxonId); + } + asObject(options) { + if (options && options.minify) { + return { + id: this.id, + __typename: options.keepTypename && this.__typename || undefined + }; + } + const target = super.asObject(options); + if (options && options.keepEntityName !== true) + delete target.entityName; // delete by default + delete target.taxonGroupIds; // Not need by pod here (should be in TaxonGroupHistoryRecord) + return target; + } + fromObject(source) { + super.fromObject(source); + this.label = source.label; + this.name = source.name; + this.statusId = source.statusId; + this.entityName = source.entityName || TaxonNameRef_1.ENTITY_NAME; + this.levelId = source.levelId; + this.referenceTaxonId = source.referenceTaxonId; + this.taxonGroupIds = source.taxonGroupIds; + } +}; +TaxonNameRef.ENTITY_NAME = 'TaxonName'; +TaxonNameRef = TaxonNameRef_1 = __decorate([ + EntityClass({ typename: 'TaxonNameVO' }), + __metadata("design:paramtypes", []) +], TaxonNameRef); +export { TaxonNameRef }; +export class TaxonUtils { + static generateLabelFromName(taxonName) { + if (isNil(taxonName)) + return undefined; + const taxonNameWithoutStartParentheses = taxonName.replace(/\(/g, ''); + const taxonNameWithoutParentheses = taxonNameWithoutStartParentheses.replace(/\)/g, ''); + const genusWord = /^[a-zA-Z]{4,}$/; + const speciesWord = /^[a-zA-Z]{3,}$/; + // Rubin code for "Leucoraja circularis": LEUC CIR + const parts = taxonNameWithoutParentheses.split(' '); + if ((parts.length > 1) && parts[0].match(genusWord) && parts[1].match(speciesWord)) { + return parts[0].slice(0, 4).toUpperCase() + parts[1].slice(0, 3).toUpperCase(); + } + return undefined; + } + static generateNameSearchPatternFromLabel(label, optionalParenthese) { + if (!label || label.length !== 7) { + throw new Error('Invalid taxon name label (expected 7 characters)'); + } + if (optionalParenthese) { + return label.slice(0, 4) + '* (' + label.slice(4) + '*'; + } + return label.slice(0, 4) + '* ' + label.slice(4) + '*'; + } +} +//# sourceMappingURL=taxon-name.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/taxon-name.model.js.map b/out-tsc/app/app/referential/services/model/taxon-name.model.js.map new file mode 100644 index 000000000..543877939 --- /dev/null +++ b/out-tsc/app/app/referential/services/model/taxon-name.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"taxon-name.model.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/model/taxon-name.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/vessel-snapshot.model.js b/out-tsc/app/app/referential/services/model/vessel-snapshot.model.js new file mode 100644 index 000000000..6f440029a --- /dev/null +++ b/out-tsc/app/app/referential/services/model/vessel-snapshot.model.js @@ -0,0 +1,133 @@ +var VesselSnapshot_1; +import { __decorate, __metadata } from "tslib"; +import { Department, Entity, EntityClass, fromDateISOString, Person, ReferentialRef, toDateISOString } from '@sumaris-net/ngx-components'; +import { Vessel } from '@app/vessel/services/model/vessel.model'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +let VesselSnapshot = VesselSnapshot_1 = class VesselSnapshot extends Entity { + constructor() { + super(VesselSnapshot_1.TYPENAME); + this.vesselType = null; + this.basePortLocation = null; + this.registrationLocation = null; + this.recorderDepartment = null; + this.recorderPerson = null; + this.program = null; + } + static fromVessel(source) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; + if (!source) + return undefined; + const target = new VesselSnapshot_1(); + target.fromObject({ + id: source.id, + vesselType: source.vesselType, + vesselStatusId: source.statusId, + name: (_a = source.vesselFeatures) === null || _a === void 0 ? void 0 : _a.name, + creationDate: source.creationDate, + updateDate: source.updateDate, + startDate: (_b = source.vesselFeatures) === null || _b === void 0 ? void 0 : _b.startDate, + endDate: (_c = source.vesselFeatures) === null || _c === void 0 ? void 0 : _c.endDate, + exteriorMarking: (_d = source.vesselFeatures) === null || _d === void 0 ? void 0 : _d.exteriorMarking, + basePortLocation: (_e = source.vesselFeatures) === null || _e === void 0 ? void 0 : _e.basePortLocation, + grossTonnageGt: (_f = source.vesselFeatures) === null || _f === void 0 ? void 0 : _f.grossTonnageGt, + grossTonnageGrt: (_g = source.vesselFeatures) === null || _g === void 0 ? void 0 : _g.grossTonnageGrt, + lengthOverAll: (_h = source.vesselFeatures) === null || _h === void 0 ? void 0 : _h.lengthOverAll, + registrationId: (_j = source.vesselRegistrationPeriod) === null || _j === void 0 ? void 0 : _j.id, + registrationCode: (_k = source.vesselRegistrationPeriod) === null || _k === void 0 ? void 0 : _k.registrationCode, + intRegistrationCode: (_l = source.vesselRegistrationPeriod) === null || _l === void 0 ? void 0 : _l.intRegistrationCode, + registrationStartDate: (_m = source.vesselRegistrationPeriod) === null || _m === void 0 ? void 0 : _m.startDate, + registrationEndDate: (_o = source.vesselRegistrationPeriod) === null || _o === void 0 ? void 0 : _o.endDate, + registrationLocation: (_p = source.vesselRegistrationPeriod) === null || _p === void 0 ? void 0 : _p.registrationLocation, + }); + return target; + } + static toVessel(source) { + if (!source) + return undefined; + return Vessel.fromObject({ + id: source.id, + vesselType: source.vesselType, + statusId: source.vesselStatusId, + creationDate: source.creationDate, + updateDate: source.updateDate, + vesselFeatures: { + vesselId: source.id, + name: source.name, + startDate: source.startDate, + endDate: source.endDate, + exteriorMarking: source.exteriorMarking, + grossTonnageGt: source.grossTonnageGt, + grossTonnageGrt: source.grossTonnageGrt, + lengthOverAll: source.lengthOverAll, + basePortLocation: source.basePortLocation, + }, + vesselRegistrationPeriod: { + id: source.registrationId, + vesselId: source.id, + registrationCode: source.registrationCode, + intRegistrationCode: source.intRegistrationCode, + registrationStartDate: source.startDate, + registrationEndDate: source.endDate, + registrationLocation: source.registrationLocation + } + }); + } + // TODO: Check if clone is needed + clone() { + const target = new VesselSnapshot_1(); + target.fromObject(this); + target.program = this.program && this.program.clone() || undefined; + target.vesselType = this.vesselType && this.vesselType.clone() || undefined; + target.basePortLocation = this.basePortLocation && this.basePortLocation.clone() || undefined; + target.registrationLocation = this.registrationLocation && this.registrationLocation.clone() || undefined; + target.recorderDepartment = this.recorderDepartment && this.recorderDepartment.clone() || undefined; + target.recorderPerson = this.recorderPerson && this.recorderPerson.clone() || undefined; + return target; + } + asObject(options) { + const target = super.asObject(options); + target.program = this.program && this.program.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS /*always keep for table*/)) || undefined; + target.vesselType = this.vesselType && this.vesselType.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS)) || undefined; + target.basePortLocation = this.basePortLocation && this.basePortLocation.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS)) || undefined; + target.registrationLocation = this.registrationLocation && this.registrationLocation.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS)) || undefined; + target.startDate = toDateISOString(this.startDate); + target.endDate = toDateISOString(this.endDate); + target.registrationStartDate = !options || options.minify !== true ? toDateISOString(this.registrationStartDate) : undefined; + target.registrationEndDate = !options || options.minify !== true ? toDateISOString(this.registrationEndDate) : undefined; + target.creationDate = toDateISOString(this.creationDate); + target.recorderDepartment = this.recorderDepartment && this.recorderDepartment.asObject(options) || undefined; + target.recorderPerson = this.recorderPerson && this.recorderPerson.asObject(options) || undefined; + return target; + } + fromObject(source) { + super.fromObject(source); + this.exteriorMarking = source.exteriorMarking; + this.registrationCode = source.registrationCode; + this.intRegistrationCode = source.intRegistrationCode; + this.name = source.name; + this.comments = source.comments || undefined; + this.vesselStatusId = source.vesselStatusId; + this.startDate = fromDateISOString(source.startDate); + this.endDate = fromDateISOString(source.endDate); + this.registrationId = source.registrationId; + this.registrationStartDate = fromDateISOString(source.registrationStartDate); + this.registrationEndDate = fromDateISOString(source.registrationEndDate); + this.administrativePower = source.administrativePower || undefined; + this.lengthOverAll = source.lengthOverAll || undefined; + this.grossTonnageGt = source.grossTonnageGt || undefined; + this.grossTonnageGrt = source.grossTonnageGrt || undefined; + this.creationDate = fromDateISOString(source.creationDate); + this.vesselType = source.vesselType && ReferentialRef.fromObject(source.vesselType); + this.basePortLocation = source.basePortLocation && ReferentialRef.fromObject(source.basePortLocation); + this.registrationLocation = source.registrationLocation && ReferentialRef.fromObject(source.registrationLocation); + this.recorderDepartment = source.recorderDepartment && Department.fromObject(source.recorderDepartment); + this.recorderPerson = source.recorderPerson && Person.fromObject(source.recorderPerson); + this.program = source.program && ReferentialRef.fromObject(source.program); + } +}; +VesselSnapshot = VesselSnapshot_1 = __decorate([ + EntityClass({ typename: 'VesselSnapshotVO', fromObjectReuseStrategy: 'clone' }), + __metadata("design:paramtypes", []) +], VesselSnapshot); +export { VesselSnapshot }; +//# sourceMappingURL=vessel-snapshot.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/model/vessel-snapshot.model.js.map b/out-tsc/app/app/referential/services/model/vessel-snapshot.model.js.map new file mode 100644 index 000000000..d9339dd1d --- /dev/null +++ b/out-tsc/app/app/referential/services/model/vessel-snapshot.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel-snapshot.model.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/model/vessel-snapshot.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/parameter.service.js b/out-tsc/app/app/referential/services/parameter.service.js new file mode 100644 index 000000000..dc2a66370 --- /dev/null +++ b/out-tsc/app/app/referential/services/parameter.service.js @@ -0,0 +1,179 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { ErrorCodes } from './errors'; +import { AccountService, isEmptyArray, isNilOrBlank } from '@sumaris-net/ngx-components'; +import { GraphqlService } from '@sumaris-net/ngx-components'; +import { ReferentialService } from './referential.service'; +import { of } from 'rxjs'; +import { Parameter } from './model/parameter.model'; +import { ReferentialFragments } from './referential.fragments'; +import { isNil, isNotNil } from '@sumaris-net/ngx-components'; +import { BaseGraphqlService } from '@sumaris-net/ngx-components'; +import { environment } from '@environments/environment'; +import { StatusIds } from '@sumaris-net/ngx-components'; +import { EntityUtils } from '@sumaris-net/ngx-components'; +const SaveQuery = gql ` + mutation SaveParameter($parameter:ParameterVOInput){ + saveParameter(parameter: $parameter){ + ...ParameterFragment + } + } + ${ReferentialFragments.referential} + ${ReferentialFragments.parameter} +`; +const LoadQuery = gql ` + query Parameter($label: String, $id: Int){ + parameter(label: $label, id: $id){ + ...ParameterFragment + } + } + ${ReferentialFragments.referential} + ${ReferentialFragments.parameter} +`; +let ParameterService = class ParameterService extends BaseGraphqlService { + constructor(graphql, accountService, referentialService) { + super(graphql, environment); + this.graphql = graphql; + this.accountService = accountService; + this.referentialService = referentialService; + } + existsByLabel(label, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (isNil(label)) + return false; + return yield this.referentialService.existsByLabel(label, Object.assign(Object.assign({}, opts), { entityName: 'Parameter' })); + }); + } + load(id, options) { + return __awaiter(this, void 0, void 0, function* () { + if (this._debug) + console.debug(`[parameter-service] Loading parameter {${id}}...`); + const res = yield this.graphql.query({ + query: LoadQuery, + variables: { + id + }, + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' } + }); + const entity = res && Parameter.fromObject(res.parameter); + if (this._debug) + console.debug(`[pmfm-service] Parameter {${id}} loaded`, entity); + return entity; + }); + } + loadByLabel(label, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (this._debug) + console.debug(`[parameter-service] Loading parameter {${label}}...`); + const res = yield this.graphql.query({ + query: LoadQuery, + variables: { + label + }, + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || undefined + }); + const entity = (!opts || opts.toEntity !== false) + ? res && Parameter.fromObject(res.parameter) + : res && res.parameter; + if (this._debug) + console.debug(`[parameter-service] Parameter {${label}} loaded`, entity); + return entity; + }); + } + loadAllByLabels(labels, options) { + return __awaiter(this, void 0, void 0, function* () { + if (isEmptyArray(labels)) + throw new Error('Missing required argument \'labels\''); + const items = yield Promise.all(labels.map(label => this.loadByLabel(label, options) + .catch(err => { + if (err && err.code === ErrorCodes.LOAD_REFERENTIAL_ERROR) + return undefined; // Skip if not found + throw err; + }))); + return items.filter(isNotNil); + }); + } + canUserWrite(data, opts) { + return this.accountService.isAdmin(); + } + /** + * Save a parameter entity + * + * @param entity + */ + save(entity, options) { + return __awaiter(this, void 0, void 0, function* () { + if (isNilOrBlank(entity === null || entity === void 0 ? void 0 : entity.label)) + throw new Error('Missing a required label'); + this.fillDefaultProperties(entity); + // Transform into json + const json = entity.asObject(); + const now = Date.now(); + if (this._debug) + console.debug(`[parameter-service] Saving Parameter...`, json); + // Check label not exists (if new entity) + if (isNil(entity.id)) { + const exists = yield this.existsByLabel(entity.label); + if (exists) { + throw { code: ErrorCodes.SAVE_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LABEL_NOT_UNIQUE' }; + } + } + yield this.graphql.mutate({ + mutation: SaveQuery, + variables: { + parameter: json + }, + error: { code: ErrorCodes.SAVE_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.SAVE_REFERENTIAL_ERROR' }, + update: (proxy, { data }) => { + // Update entity + const savedEntity = data && data.saveParameter; + if (savedEntity) { + if (this._debug) + console.debug(`[parameter-service] Parameter saved in ${Date.now() - now}ms`, entity); + this.copyIdAndUpdateDate(savedEntity, entity); + } + } + }); + return entity; + }); + } + /** + * Delete parameter entities + */ + delete(entity, options) { + return __awaiter(this, void 0, void 0, function* () { + entity.entityName = 'Parameter'; + yield this.referentialService.delete(entity); + }); + } + listenChanges(id, options) { + // TODO + console.warn('TODO: implement listen changes on parameter'); + return of(); + } + /* -- protected methods -- */ + fillDefaultProperties(entity) { + entity.statusId = isNotNil(entity.statusId) ? entity.statusId : StatusIds.ENABLE; + } + copyIdAndUpdateDate(source, target) { + EntityUtils.copyIdAndUpdateDate(source, target); + // Update qualitative values + if (source.qualitativeValues && target.qualitativeValues) { + target.qualitativeValues.forEach(entity => { + entity.levelId = source.id; + const savedQualitativeValue = source.qualitativeValues.find(json => entity.equals(json)); + EntityUtils.copyIdAndUpdateDate(savedQualitativeValue, entity); + }); + } + } +}; +ParameterService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [GraphqlService, + AccountService, + ReferentialService]) +], ParameterService); +export { ParameterService }; +//# sourceMappingURL=parameter.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/parameter.service.js.map b/out-tsc/app/app/referential/services/parameter.service.js.map new file mode 100644 index 000000000..6d700d871 --- /dev/null +++ b/out-tsc/app/app/referential/services/parameter.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parameter.service.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/parameter.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/pmfm.service.js b/out-tsc/app/app/referential/services/pmfm.service.js new file mode 100644 index 000000000..d9ef33d36 --- /dev/null +++ b/out-tsc/app/app/referential/services/pmfm.service.js @@ -0,0 +1,402 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { ErrorCodes } from './errors'; +import { AccountService, BaseGraphqlService, CryptoService, EntityUtils, GraphqlService, isNil, isNilOrNaN, isNotNil, isNotNilOrBlank, MINIFY_ENTITY_FOR_POD, ReferentialUtils, StatusIds } from '@sumaris-net/ngx-components'; +import { environment } from '@environments/environment'; +import { ReferentialService } from './referential.service'; +import { Pmfm } from './model/pmfm.model'; +import { of } from 'rxjs'; +import { ReferentialFragments } from './referential.fragments'; +import { map } from 'rxjs/operators'; +import { ReferentialRefService } from './referential-ref.service'; +import { CacheService } from 'ionic-cache'; +import { ParameterLabelGroups } from '@app/referential/services/model/model.enum'; +import { arrayPluck } from '@app/shared/functions'; +import { PmfmFilter } from '@app/referential/services/filter/pmfm.filter'; +const LoadAllQuery = gql `query Pmfms($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: ReferentialFilterVOInput){ + data: pmfms(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + ...LightPmfmFragment + } +} +${ReferentialFragments.lightPmfm} +`; +const LoadAllWithPartsQuery = gql `query PmfmsWithParts($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: ReferentialFilterVOInput) { + data: pmfms(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection) { + ...LightPmfmFragment + parameter { + id + label + name + entityName + __typename + } + matrix { + ...LightReferentialFragment + } + fraction { + ...LightReferentialFragment + } + method { + ...LightReferentialFragment + } + unit { + ...LightReferentialFragment + } + } +} +${ReferentialFragments.lightPmfm} +${ReferentialFragments.lightReferential} +`; +const LoadAllWithPartsQueryWithTotal = gql `query PmfmsWithParts($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: ReferentialFilterVOInput) { + data: pmfms(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection) { + ...LightPmfmFragment + parameter { + id + label + name + entityName + __typename + } + matrix { + ...LightReferentialFragment + } + fraction { + ...LightReferentialFragment + } + method { + ...LightReferentialFragment + } + unit { + ...LightReferentialFragment + } + } + total: referentialsCount(entityName: "Pmfm", filter: $filter) +} +${ReferentialFragments.lightPmfm} +${ReferentialFragments.lightReferential} +`; +const LoadAllWithDetailsQuery = gql `query PmfmsWithDetails($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: ReferentialFilterVOInput){ + data: pmfms(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + ...PmfmFragment + } + total: referentialsCount(entityName: "Pmfm", filter: $filter) +} +${ReferentialFragments.pmfm} +${ReferentialFragments.lightReferential} +${ReferentialFragments.referential} +${ReferentialFragments.parameter} +`; +const LoadAllWithTotalQuery = gql `query PmfmsWithTotal($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: ReferentialFilterVOInput){ + data: pmfms(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + ...LightPmfmFragment + } + total: referentialsCount(entityName: "Pmfm", filter: $filter) +} +${ReferentialFragments.lightPmfm} +`; +const LoadAllIdsQuery = gql `query PmfmIds($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: ReferentialFilterVOInput){ + data: referentials(entityName: "Pmfm", filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + id + } +}`; +const LoadQuery = gql `query Pmfm($label: String, $id: Int){ + data: pmfm(label: $label, id: $id){ + ...PmfmFragment + } +} +${ReferentialFragments.pmfm} +${ReferentialFragments.lightReferential} +${ReferentialFragments.referential} +${ReferentialFragments.parameter}`; +const LoadPmfmFullQuery = gql `query Pmfm($label: String, $id: Int){ + data: pmfm(label: $label, id: $id){ + ...PmfmFullFragment + } +} +${ReferentialFragments.pmfmFull} +${ReferentialFragments.lightReferential} +${ReferentialFragments.referential} +${ReferentialFragments.parameter}`; +const SaveQuery = gql `mutation SavePmfm($data: PmfmVOInput!){ + data: savePmfm(pmfm: $data){ + ...PmfmFragment + } +} +${ReferentialFragments.pmfm} +${ReferentialFragments.lightReferential} +${ReferentialFragments.referential} +${ReferentialFragments.parameter}`; +const PmfmCacheKeys = { + CACHE_GROUP: 'pmfm', + PMFM_IDS_BY_PARAMETER_LABEL: 'pmfmIdsByParameter' +}; +// TODO BLA: étendre la class BaseReferentialService +let PmfmService = class PmfmService extends BaseGraphqlService { + constructor(graphql, accountService, referentialService, referentialRefService, cache) { + super(graphql, environment); + this.graphql = graphql; + this.accountService = accountService; + this.referentialService = referentialService; + this.referentialRefService = referentialRefService; + this.cache = cache; + } + existsByLabel(label, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (isNil(label)) + return false; + return yield this.referentialService.existsByLabel(label, Object.assign(Object.assign({}, opts), { entityName: 'Pmfm' })); + }); + } + load(id, options) { + return __awaiter(this, void 0, void 0, function* () { + if (this._debug) + console.debug(`[pmfm-service] Loading pmfm {${id}}...`); + const { data } = yield this.graphql.query({ + query: LoadQuery, + variables: { + id + }, + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' } + }); + const entity = data && Pmfm.fromObject(data); + if (this._debug) + console.debug(`[pmfm-service] Pmfm {${id}} loaded`, entity); + return entity; + }); + } + loadPmfmFull(id, options) { + return __awaiter(this, void 0, void 0, function* () { + if (isNilOrNaN(id)) + throw new Error('Missing required argument \'id\''); + if (this._debug) + console.debug(`[pmfm-service] Loading pmfm full {${id}}...`); + const { data } = yield this.graphql.query({ + query: LoadPmfmFullQuery, + variables: { + id + }, + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' } + }); + const entity = data && Pmfm.fromObject(data); + if (this._debug) + console.debug(`[pmfm-service] Pmfm full {${id}} loaded`, entity); + return entity; + }); + } + canUserWrite(entity, opts) { + return this.accountService.isAdmin(); + } + /** + * Save a pmfm entity + * + * @param entity + */ + save(entity, options) { + return __awaiter(this, void 0, void 0, function* () { + this.fillDefaultProperties(entity); + // Transform into json + const json = entity.asObject(MINIFY_ENTITY_FOR_POD); + const now = Date.now(); + if (this._debug) + console.debug(`[pmfm-service] Saving Pmfm...`, json); + // Check label not exists (if new entity) + if (isNil(entity.id) && isNotNilOrBlank(entity.label)) { + const exists = yield this.existsByLabel(entity.label); + if (exists) { + throw { code: ErrorCodes.SAVE_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LABEL_NOT_UNIQUE' }; + } + } + yield this.graphql.mutate({ + mutation: SaveQuery, + variables: { + data: json + }, + error: { code: ErrorCodes.SAVE_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.SAVE_REFERENTIAL_ERROR' }, + update: (proxy, { data }) => { + // Update entity + const savedEntity = data && data.data; + if (savedEntity) { + if (this._debug) + console.debug(`[pmfm-service] Pmfm saved in ${Date.now() - now}ms`, entity); + this.copyIdAndUpdateDate(savedEntity, entity); + } + } + }); + return entity; + }); + } + /** + * Delete pmfm entities + */ + delete(entity, options) { + return __awaiter(this, void 0, void 0, function* () { + entity.entityName = 'Pmfm'; + yield this.referentialService.deleteAll([entity]); + }); + } + listenChanges(id, options) { + // TODO + console.warn('TODO: implement listen changes on pmfm'); + return of(); + } + watchAll(offset, size, sortBy, sortDirection, filter, opts) { + filter = this.asFilter(filter); + opts = opts || {}; + const variables = { + offset: offset || 0, + size: size || 100, + sortBy: sortBy || 'label', + sortDirection: sortDirection || 'asc', + filter: filter && filter.asPodObject() + }; + const now = Date.now(); + if (this._debug) + console.debug('[pmfm-service] Watching pmfms using options:', variables); + const query = opts.query ? opts.query : (opts.withDetails ? LoadAllWithDetailsQuery : (opts.withTotal ? LoadAllWithTotalQuery : LoadAllQuery)); + return this.graphql.watchQuery({ + query, + variables, + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || undefined + }) + .pipe(map(({ data, total }) => { + const entities = (data || []).map(Pmfm.fromObject); + if (this._debug) + console.debug(`[pmfm-service] Pmfms loaded in ${Date.now() - now}ms`, entities); + return { + data: entities, + total + }; + })); + } + /** + * Load pmfms + * + * @param offset + * @param size + * @param sortBy + * @param sortDirection + * @param filter + * @param opts + */ + loadAll(offset, size, sortBy, sortDirection, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + opts = opts || {}; + filter = this.asFilter(filter); + const variables = { + offset: offset || 0, + size: size || 100, + sortBy: sortBy || filter.searchAttribute || 'label', + sortDirection: sortDirection || 'asc', + filter: filter && filter.asPodObject() + }; + const debug = this._debug && (opts.debug !== false); + const now = debug && Date.now(); + if (debug) + console.debug('[pmfm-service] Loading pmfms... using variables:', variables); + const query = opts.query ? opts.query : (opts.withDetails ? LoadAllWithDetailsQuery : (opts.withTotal ? LoadAllWithTotalQuery : LoadAllQuery)); + const { data, total } = yield this.graphql.query({ + query, + variables, + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }, + fetchPolicy: opts.fetchPolicy || undefined + }); + const entities = opts.toEntity !== false ? + (data || []).map(Pmfm.fromObject) : + (data || []); + const res = { + data: entities, + total + }; + // Add fetch more capability, if total was fetched + if (opts.withTotal) { + const nextOffset = offset + entities.length; + if (nextOffset < res.total) { + res.fetchMore = () => this.loadAll(nextOffset, size, sortBy, sortDirection, filter, opts); + } + } + if (debug) + console.debug(`[pmfm-service] Pmfms loaded in ${Date.now() - now}ms`); + return res; + }); + } + saveAll(data, options) { + return __awaiter(this, void 0, void 0, function* () { + if (!data) + return data; + return yield Promise.all(data.map(pmfm => this.save(pmfm, options))); + }); + } + deleteAll(data, options) { + throw new Error('Not implemented yet'); + } + suggest(value, filter, sortBy, sortDirection) { + return __awaiter(this, void 0, void 0, function* () { + if (ReferentialUtils.isNotEmpty(value)) + return { data: [value] }; + value = (typeof value === 'string' && value !== '*') && value || undefined; + return this.loadAll(0, !value ? 30 : 10, sortBy, sortDirection, Object.assign(Object.assign({}, filter), { searchText: value }), { + query: LoadAllWithPartsQueryWithTotal, + withTotal: true /*need for fetch more*/ + }); + }); + } + /** + * Get referential references, group by level labels + * + * @param parameterLabelsMap + * @param opts + */ + loadIdsGroupByParameterLabels(parameterLabelsMap, opts) { + return __awaiter(this, void 0, void 0, function* () { + // Make sure enumeration has been override by config + yield this.referentialRefService.ready(); + parameterLabelsMap = parameterLabelsMap || ParameterLabelGroups; + if (!opts || opts.cache !== false) { + const cacheKey = [ + PmfmCacheKeys.PMFM_IDS_BY_PARAMETER_LABEL, + CryptoService.sha256(JSON.stringify(parameterLabelsMap)).substring(0, 8) // Create a unique hash, from args + ].join('|'); + return this.cache.getOrSetItem(cacheKey, () => this.loadIdsGroupByParameterLabels(parameterLabelsMap, { cache: false }), PmfmCacheKeys.CACHE_GROUP); + } + // Load pmfms grouped by parameter labels + const groupedPmfms = yield this.referentialRefService.loadAllGroupByLevels({ + entityName: 'Pmfm', + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], + }, { levelLabels: parameterLabelsMap }, { toEntity: false, debug: this._debug }); + // Keep only id + return Object.keys(groupedPmfms).reduce((res, key) => { + res[key] = arrayPluck(groupedPmfms[key], 'id'); + return res; + }, {}); + }); + } + asFilter(filter) { + return PmfmFilter.fromObject(filter); + } + /* -- protected methods -- */ + fillDefaultProperties(entity) { + entity.statusId = isNotNil(entity.statusId) ? entity.statusId : StatusIds.ENABLE; + } + copyIdAndUpdateDate(source, target) { + EntityUtils.copyIdAndUpdateDate(source, target); + // Update Qualitative values + if (source.qualitativeValues && target.qualitativeValues) { + target.qualitativeValues.forEach(entity => { + const savedQualitativeValue = source.qualitativeValues.find(json => entity.equals(json)); + EntityUtils.copyIdAndUpdateDate(savedQualitativeValue, entity); + }); + } + } +}; +PmfmService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [GraphqlService, + AccountService, + ReferentialService, + ReferentialRefService, + CacheService]) +], PmfmService); +export { PmfmService }; +//# sourceMappingURL=pmfm.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/pmfm.service.js.map b/out-tsc/app/app/referential/services/pmfm.service.js.map new file mode 100644 index 000000000..8bf8c75dc --- /dev/null +++ b/out-tsc/app/app/referential/services/pmfm.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfm.service.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/pmfm.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/program-ref.service.js b/out-tsc/app/app/referential/services/program-ref.service.js new file mode 100644 index 000000000..c9655f80a --- /dev/null +++ b/out-tsc/app/app/referential/services/program-ref.service.js @@ -0,0 +1,842 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable, Injector } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { defer, merge, mergeMap, Subject, tap } from 'rxjs'; +import { distinctUntilChanged, filter, finalize, map } from 'rxjs/operators'; +import { ErrorCodes } from './errors'; +import { ReferentialFragments } from './referential.fragments'; +import { AccountService, arrayDistinct, ConfigService, EntitiesStorage, firstArrayValue, firstNotNilPromise, isNil, isNilOrBlank, isNotEmptyArray, isNotNil, JobUtils, NetworkService, PersonUtils, propertiesPathComparator, ReferentialRef, ReferentialUtils, StatusIds, suggestFromArray, Toasts, } from '@sumaris-net/ngx-components'; +import { TaxonGroupRef, TaxonGroupTypeIds } from './model/taxon-group.model'; +import { CacheService } from 'ionic-cache'; +import { ReferentialRefService } from './referential-ref.service'; +import { Program } from './model/program.model'; +import { DenormalizedPmfmStrategy } from './model/pmfm-strategy.model'; +import { StrategyFragments } from './strategy.fragments'; +import { ProgramFragments } from './program.fragments'; +import { PmfmService } from './pmfm.service'; +import { BaseReferentialService } from './base-referential-service.class'; +import { ProgramFilter } from './filter/program.filter'; +import { environment } from '@environments/environment'; +import { ToastController } from '@ionic/angular'; +import { TranslateService } from '@ngx-translate/core'; +import { StrategyRefService } from '@app/referential/services/strategy-ref.service'; +import { TaxonNameRefService } from '@app/referential/services/taxon-name-ref.service'; +import { DenormalizedPmfmStrategyFilter } from '@app/referential/services/filter/pmfm-strategy.filter'; +import { StrategyFilter } from '@app/referential/services/filter/strategy.filter'; +import { ProgramPrivilegeEnum } from '@app/referential/services/model/model.enum'; +import { ProgramPrivilegeUtils } from '@app/referential/services/model/model.utils'; +import { DataEntityUtils } from '@app/data/services/model/data-entity.model'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { DATA_CONFIG_OPTIONS } from '@app/data/data.config'; +export const ProgramRefQueries = { + // Load by id, with only properties + loadLight: gql ` + query ProgramRef($id: Int, $label: String) { + data: program(id: $id, label: $label) { + ...LightProgramFragment + } + } + ${ProgramFragments.lightProgram} + `, + // Load by id or label + load: gql ` + query ProgramRef($id: Int, $label: String) { + data: program(id: $id, label: $label) { + ...ProgramRefFragment + } + } + ${ProgramFragments.programRef} + `, + // Load by id or label, with strategies + loadWithStrategies: gql ` + query ProgramRef($id: Int, $label: String, $strategyFilter: StrategyFilterVOInput) { + data: program(id: $id, label: $label) { + ...ProgramRefFragment + strategies(filter: $strategyFilter) { + ...StrategyRefFragment + } + } + } + ${ProgramFragments.programRef} + ${StrategyFragments.strategyRef} + ${StrategyFragments.denormalizedPmfmStrategy} + ${StrategyFragments.taxonGroupStrategy} + ${StrategyFragments.taxonNameStrategy} + ${ReferentialFragments.lightReferential} + ${ReferentialFragments.taxonName} + `, + // Load all query + loadAll: gql ` + query Programs($filter: ProgramFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String) { + data: programs(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection) { + ...ProgramRefFragment + } + } + ${ProgramFragments.programRef} + `, + // Load all query (with total) + loadAllWithTotal: gql ` + query Programs($filter: ProgramFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String) { + data: programs(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection) { + ...ProgramRefFragment + } + total: programsCount(filter: $filter) + } + ${ProgramFragments.programRef} + `, + // Load all query with strategies + loadAllWithStrategies: gql ` + query Programs( + $filter: ProgramFilterVOInput! + $strategyFilter: StrategyFilterVOInput + $offset: Int + $size: Int + $sortBy: String + $sortDirection: String + ) { + data: programs(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection) { + ...ProgramRefFragment + strategies(filter: $strategyFilter) { + ...StrategyRefFragment + } + } + } + ${ProgramFragments.programRef} + ${StrategyFragments.strategyRef} + ${StrategyFragments.denormalizedPmfmStrategy} + ${StrategyFragments.taxonGroupStrategy} + ${StrategyFragments.taxonNameStrategy} + ${ReferentialFragments.lightReferential} + ${ReferentialFragments.taxonName} + `, + // Load all query (with total, and strategies) + loadAllWithStrategiesAndTotal: gql ` + query Programs( + $filter: ProgramFilterVOInput! + $strategyFilter: StrategyFilterVOInput + $offset: Int + $size: Int + $sortBy: String + $sortDirection: String + ) { + data: programs(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection) { + ...ProgramRefFragment + strategies(filter: $strategyFilter) { + ...StrategyRefFragment + } + } + total: programsCount(filter: $filter) + } + ${ProgramFragments.programRef} + ${StrategyFragments.strategyRef} + ${StrategyFragments.denormalizedPmfmStrategy} + ${StrategyFragments.taxonGroupStrategy} + ${StrategyFragments.taxonNameStrategy} + ${ReferentialFragments.lightReferential} + ${ReferentialFragments.taxonName} + `, +}; +const ProgramRefSubscriptions = { + listenChanges: gql `subscription UpdateProgram($id: Int!, $interval: Int){ + data: updateProgram(id: $id, interval: $interval) { + ...LightProgramFragment + } + } + ${ProgramFragments.lightProgram}`, + listenAuthorizedPrograms: gql `subscription UpdateAuthorizedPrograms($interval: Int){ + data: authorizedPrograms(interval: $interval) { + ...LightProgramFragment + } + } + ${ProgramFragments.lightProgram}` +}; +const ProgramRefCacheKeys = { + CACHE_GROUP: 'program', + PROGRAM_BY_ID: 'programById', + PROGRAM_BY_LABEL: 'programByLabel', + PMFMS: 'programPmfms', + GEARS: 'programGears', + TAXON_GROUPS: 'programTaxonGroups', + TAXON_GROUP_ENTITIES: 'programTaxonGroupEntities', + TAXON_NAME_BY_GROUP: 'programTaxonNameByGroup', + TAXON_NAMES: 'taxonNameByGroup' +}; +const noopFilter = (() => true); +let ProgramRefService = class ProgramRefService extends BaseReferentialService { + constructor(injector, network, accountService, cache, entities, configService, pmfmService, networkService, taxonNameRefService, referentialRefService, toastController, strategyRefService, translate) { + super(injector, Program, ProgramFilter, { + queries: ProgramRefQueries, + subscriptions: ProgramRefSubscriptions + }); + this.network = network; + this.accountService = accountService; + this.cache = cache; + this.entities = entities; + this.configService = configService; + this.pmfmService = pmfmService; + this.networkService = networkService; + this.taxonNameRefService = taxonNameRefService; + this.referentialRefService = referentialRefService; + this.toastController = toastController; + this.strategyRefService = strategyRefService; + this.translate = translate; + this._subscriptionCache = {}; + this._listenAuthorizedSubscription = null; + this._enableQualityProcess = false; + this._accessNotSelfDataDepartmentIds = []; + this._accessNotSelfDataMinProfile = 'ADMIN'; + this._debug = !environment.production; + this._logPrefix = '[program-ref-service] '; + this.configService.config.subscribe(config => this.onConfigChanged(config)); + this.start(); + } + get enableQualityProcess() { + return this._enableQualityProcess; + } + ngOnStart() { + const _super = Object.create(null, { + ngOnStart: { get: () => super.ngOnStart } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.ngOnStart.call(this); + this.registerSubscription(merge(this.networkService.onNetworkStatusChanges, this.accountService.onLogin, this.accountService.onLogout) + .pipe(map(_ => this.networkService.online + && this.accountService.isLogin() + // Skip if admin (can see all programs) + && !this.accountService.isAdmin()), distinctUntilChanged()) + .subscribe((onlineAndLogin) => { + if (onlineAndLogin) { + this.startListenAuthorizedProgram(); + } + else { + this.stopListenAuthorizedProgram(); + } + })); + }); + } + canUserWrite(data, opts) { + console.warn('Make no sense to write using the ProgramRefService. Please use the ProgramService instead.'); + return false; + } + canUserWriteEntity(entity, opts) { + var _a, _b; + if (!entity) + return false; + // Validator and Manager can write data + // (IMAGINE - issue #465) + if (this.hasUpperOrEqualPrivilege(opts === null || opts === void 0 ? void 0 : opts.program, ProgramPrivilegeEnum.VALIDATOR)) { + return true; + } + // If user has observer privileges and the option to allow observer to write data is enabled + // OBSERVER = User has write access to program + if (this.hasUpperOrEqualPrivilege(opts === null || opts === void 0 ? void 0 : opts.program, ProgramPrivilegeEnum.OBSERVER)) { + // If the user is the recorder: can write + if (entity.recorderPerson && ReferentialUtils.equals(this.accountService.person, entity.recorderPerson)) { + return true; + } + // Check if declared as observers (in data) + if (DataEntityUtils.isWithObservers(entity) + && ((_a = opts === null || opts === void 0 ? void 0 : opts.program) === null || _a === void 0 ? void 0 : _a.getPropertyAsBoolean(ProgramProperties.DATA_OBSERVERS_CAN_WRITE)) + && ((_b = entity.observers) === null || _b === void 0 ? void 0 : _b.some(o => ReferentialUtils.equals(o, this.accountService.person)))) { + return true; + } + // Check can write data's department + if (this.canUserWriteDataForDepartment(entity.recorderDepartment)) { + return true; + } + } + return false; + } + canUserWriteDataForDepartment(recorderDepartment) { + if (ReferentialUtils.isEmpty(recorderDepartment)) + return this.accountService.isAdmin(); + // Should be login, and status ENABLE + const account = this.accountService.account; + if ((account === null || account === void 0 ? void 0 : account.statusId) !== StatusIds.ENABLE) + return false; // Should never occur, because account if watched elsewhere + if (ReferentialUtils.isEmpty(account.department)) { + console.warn('User account has no department! Unable to check write right against recorderDepartment'); + return false; + } + // Should have min role to access not self data + if (!this.accountService.hasMinProfile(this._accessNotSelfDataMinProfile)) { + return false; + } + // Same recorder department: OK, user can write + if (account.department.id === recorderDepartment.id) { + return true; + } + // Not same department: should be inside a department that can access not self data + return this._accessNotSelfDataDepartmentIds.includes(account.department.id); + } + canUserValidate(program) { + if (!this._enableQualityProcess) + return false; // Quality process disabled + // Manager + if (this.hasExactPrivilege(program, ProgramPrivilegeEnum.MANAGER)) { + return true; + } + // Supervisor profile + Validator privilege + return this.accountService.isSupervisor() + && (!program || this.hasUpperOrEqualPrivilege(program, ProgramPrivilegeEnum.VALIDATOR)); + } + canUserQualify(program) { + if (!this._enableQualityProcess) + return false; // Quality process disabled + // Manager + if (this.hasExactPrivilege(program, ProgramPrivilegeEnum.MANAGER)) { + return true; + } + // Supervisor profile (TODO replace with a new Qualifier profile?) + // + Qualifier privilege + return this.accountService.isSupervisor() + && this.hasUpperOrEqualPrivilege(program, ProgramPrivilegeEnum.QUALIFIER); + } + loadAll(offset, size, sortBy, sortDirection, filter, opts) { + const _super = Object.create(null, { + loadAll: { get: () => super.loadAll } + }); + return __awaiter(this, void 0, void 0, function* () { + // Use search attribute as default sort, is set + sortBy = sortBy || (filter === null || filter === void 0 ? void 0 : filter.searchAttribute) + || (filter === null || filter === void 0 ? void 0 : filter.searchAttributes) && filter.searchAttributes.length && filter.searchAttributes[0] + || 'label'; + const offline = this.network.offline && (!opts || opts.fetchPolicy !== 'network-only'); + if (offline) { + return this.loadAllLocally(offset, size, sortBy, sortDirection, filter, opts); + } + // Call inherited function + return _super.loadAll.call(this, offset, size, sortBy, sortDirection, filter, opts); + }); + } + loadAllLocally(offset, size, sortBy, sortDirection, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + filter = this.asFilter(filter); + const variables = { + offset: offset || 0, + size: size || 100, + sortBy: sortBy || filter.searchAttribute + || filter.searchAttributes && filter.searchAttributes.length && filter.searchAttributes[0] + || 'label', + sortDirection: sortDirection || 'asc', + filter: filter.asFilterFn() + }; + const { data, total } = yield this.entities.loadAll(Program.TYPENAME, variables); + const entities = (!opts || opts.toEntity !== false) ? + (data || []).map(Program.fromObject) : + (data || []); + const res = { data: entities, total }; + // Add fetch more function + const nextOffset = (offset || 0) + entities.length; + if (nextOffset < total) { + res.fetchMore = () => this.loadAllLocally(nextOffset, size, sortBy, sortDirection, filter, opts); + } + return res; + }); + } + /** + * Watch program by label + * + * @param label + * @param opts + */ + watchByLabel(label, opts) { + const toEntity = ((opts === null || opts === void 0 ? void 0 : opts.toEntity) !== false) ? Program.fromObject : (data) => data; + // Use cache (enable by default, if no custom query) + if (!opts || (opts.cache !== false && !opts.query)) { + const cacheKey = [ProgramRefCacheKeys.PROGRAM_BY_LABEL, label, JSON.stringify({ withStrategies: opts === null || opts === void 0 ? void 0 : opts.withStrategies, strategyFilter: opts === null || opts === void 0 ? void 0 : opts.strategyFilter })].join('|'); + // FIXME - BLA - using loadFromDelayedObservable() as a workaround for offline mode+mobile, when cache is empty. Avoid to get an empty result + return this.cache.loadFromDelayedObservable(cacheKey, defer(() => this.watchByLabel(label, Object.assign(Object.assign({}, opts), { cache: false, toEntity: false }))), ProgramRefCacheKeys.CACHE_GROUP) + .pipe(map(toEntity)); + } + // Debug + const debug = this._debug && (!opts || opts.debug !== false); + let startTime = debug && Date.now(); + if (debug) + console.debug(`[program-ref-service] Watching program {${label}}...`); + let res; + const offline = this.network.offline && (!opts || opts.fetchPolicy !== 'network-only'); + if (offline) { + const strategyFilter = StrategyFilter.fromObject(opts === null || opts === void 0 ? void 0 : opts.strategyFilter); + res = this.entities.watchAll(Program.TYPENAME, { + size: 1, + filter: (p) => p.label === label + }).pipe(map(({ data }) => firstArrayValue(data)), map(program => { + const filterFn = strategyFilter === null || strategyFilter === void 0 ? void 0 : strategyFilter.asFilterFn(); + if (filterFn) { + // /!\ Make sure to clone the strategy, to keep cache object unchanged + program = Object.assign(Object.assign({}, program), { strategies: (program.strategies || []).filter(filterFn) }); + } + return program; + })); + } + else { + //const query = opts && opts.query || (opts?.withStrategies ? ProgramRefQueries.loadWithStrategies : ProgramRefQueries.load); + const query = opts && opts.query || ProgramRefQueries.load; + res = this.graphql.watchQuery({ + query, + variables: { + label, + //strategyFilter: opts?.withStrategies && strategyFilter?.asPodObject() + }, + // Important: do NOT using cache here, as default (= 'no-cache') + // because cache is manage by Ionic cache (easier to clean) + fetchPolicy: opts && opts.fetchPolicy || 'no-cache', + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' } + }).pipe(map(({ data }) => data), mergeMap((program) => __awaiter(this, void 0, void 0, function* () { + if (program && (opts === null || opts === void 0 ? void 0 : opts.withStrategies)) { + const strategy = yield this.strategyRefService.loadByFilter(Object.assign(Object.assign({}, opts === null || opts === void 0 ? void 0 : opts.strategyFilter), { programId: program.id }), { toEntity: false, cache: undefined, failIfMissing: false, fullLoad: true }); + // /!\ Make sure to clone the strategy, to keep cache object unchanged + program = Object.assign(Object.assign({}, program), { strategies: strategy && [strategy] || [] }); + } + return program; + }))); + } + return res.pipe(filter(isNotNil), map(toEntity), + // DEBUG + tap(_ => { + if (startTime) { + console.debug(`[program-ref-service] Watching program {${label}} [OK] in ${Date.now() - startTime}ms`); + startTime = undefined; + } + })); + } + existsByLabel(label) { + return __awaiter(this, void 0, void 0, function* () { + if (isNilOrBlank(label)) + return false; + const program = yield this.loadByLabel(label, { toEntity: false }); + return ReferentialUtils.isNotEmpty(program); + }); + } + loadByLabel(label, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (isNilOrBlank(label)) + throw new Error('Missing \'label\' argument'); + const cacheKey = [ProgramRefCacheKeys.PROGRAM_BY_LABEL, label].join('|'); + // Use cache (enable by default, if no custom query) + if (!opts || (!opts.query && opts.cache !== false && opts.fetchPolicy !== 'no-cache' && opts.fetchPolicy !== 'network-only')) { + return this.cache.getOrSetItem(cacheKey, () => this.loadByLabel(label, Object.assign(Object.assign({}, opts), { cache: false, toEntity: false })), ProgramRefCacheKeys.CACHE_GROUP) + .then(data => (!opts || opts.toEntity !== false) ? Program.fromObject(data) : data); + } + let data; + if (this._debug) + console.debug(`[program-ref-service] Loading program {${label}}...`); + // If offline mode + const offline = this.network.offline && (!opts || opts.fetchPolicy !== 'network-only'); + if (offline) { + data = yield this.entities.loadAll(Program.TYPENAME, { + offset: 0, size: 1, + filter: (p) => p.label === label + }).then(res => firstArrayValue(res && res.data)); + } + else { + const query = opts && opts.query || this.queries.load; + const res = yield this.graphql.query({ + query, + variables: { label }, + error: { code: ErrorCodes.LOAD_PROGRAM_ERROR, message: 'PROGRAM.ERROR.LOAD_PROGRAM_ERROR' } + }); + data = res && res.data; + } + // Convert to entity (if need) + const entity = (!opts || opts.toEntity !== false) + ? Program.fromObject(data) + : data; + if (this._debug) + console.debug(`[program-ref-service] Program loaded {${label}}`, entity); + return entity; + }); + } + loadAllByLabels(labels, opts) { + return Promise.all(arrayDistinct(labels).map(label => this.loadByLabel(label, opts))).then(programs => programs.filter(isNotNil)); + } + /** + * Watch program pmfms + */ + watchProgramPmfms(programLabel, opts, debug) { + // Use cache (enable by default) + if (!opts || opts.cache !== false) { + const cacheKey = [ProgramRefCacheKeys.PMFMS, programLabel, JSON.stringify(Object.assign(Object.assign({}, opts), { cache: undefined, toEntity: undefined }))].join('|'); + return this.cache.loadFromObservable(cacheKey, defer(() => this.watchProgramPmfms(programLabel, Object.assign(Object.assign({}, opts), { cache: false, toEntity: false }))), ProgramRefCacheKeys.CACHE_GROUP) + .pipe(map(data => (!opts || opts.toEntity !== false) + ? (data || []).map(DenormalizedPmfmStrategy.fromObject) + : (data || []))); + } + const acquisitionLevels = (opts === null || opts === void 0 ? void 0 : opts.acquisitionLevels) || ((opts === null || opts === void 0 ? void 0 : opts.acquisitionLevel) && [opts.acquisitionLevel]); + // DEBUG + //console.debug(`[program-ref-service] Watching '${programLabel}' pmfms...`, acquisitionLevels); + // Watch the program + return this.watchByLabel(programLabel, { toEntity: false, withStrategies: true, strategyFilter: opts && { + includedIds: isNotNil(opts.strategyId) ? [opts.strategyId] : undefined, + label: opts.strategyLabel, + acquisitionLevels + } }) + .pipe(map(program => program.strategies || []), + // Filter strategy's pmfms + map(strategies => { + const filterFn = DenormalizedPmfmStrategyFilter.fromObject(opts).asFilterFn(); + if (!filterFn) + throw new Error('Missing opts to filter pmfm (.e.g opts.acquisitionLevel)!'); + return strategies + .flatMap(strategy => ((strategy === null || strategy === void 0 ? void 0 : strategy.denormalizedPmfms) || []) + .filter(filterFn)); + }), + // Merge duplicated pmfms (make to a unique pmfm, by id) + map(pmfms => pmfms.reduce((res, p) => { + const index = res.findIndex(other => other.id === p.id); + if (index !== -1) { + console.debug('[program-ref-service] Merging duplicated pmfms:', res[index], p); + res[index] = DenormalizedPmfmStrategy.merge(res[index], p); + return res; + } + return res.concat(p); + }, [])), + // Sort on rank order (asc) + map(data => data.sort((p1, p2) => p1.rankOrder - p2.rankOrder)), map(data => { + if (debug) + console.debug(`[program-ref-service] PMFM for ${opts.acquisitionLevel} (filtered):`, data); + // Convert into entities + return (!opts || opts.toEntity !== false) + ? data.map(DenormalizedPmfmStrategy.fromObject) + : data; + })); + } + /** + * Load program pmfms + */ + loadProgramPmfms(programLabel, options, debug) { + // DEBUG + if (options) + console.debug(`[program-ref-service] Loading ${programLabel} PMFMs on ${options.acquisitionLevel}`); + return firstNotNilPromise(this.watchProgramPmfms(programLabel, options, debug)); + } + /** + * Watch program gears + */ + watchGears(programLabel, opts) { + // Use cache (enable by default) + if (!opts || opts.cache !== false) { + const cacheKey = [ProgramRefCacheKeys.GEARS, programLabel, JSON.stringify(Object.assign(Object.assign({}, opts), { cache: undefined, toEntity: undefined }))].join('|'); + return this.cache.loadFromObservable(cacheKey, defer(() => this.watchGears(programLabel, Object.assign(Object.assign({}, opts), { cache: false, toEntity: false }))), ProgramRefCacheKeys.CACHE_GROUP) + .pipe(map(data => (!opts || opts.toEntity !== false) + ? (data || []).map(ReferentialRef.fromObject) + : (data || []))); + } + // Load the program, with strategies + const acquisitionLevels = (opts === null || opts === void 0 ? void 0 : opts.acquisitionLevels) || ((opts === null || opts === void 0 ? void 0 : opts.acquisitionLevel) && [opts.acquisitionLevel]); + return this.watchByLabel(programLabel, { toEntity: false, withStrategies: true, strategyFilter: opts && { + includedIds: isNotNil(opts.strategyId) ? [opts.strategyId] : undefined, + label: opts.strategyLabel, + acquisitionLevels + } }) + .pipe(map(program => program.strategies || []), + // get all gears + map(strategies => arrayDistinct(strategies.flatMap(strategy => strategy.gears || []), 'id')), map(data => { + if (this._debug) + console.debug(`[program-ref-service] Found ${data.length} gears on program {${programLabel}}`); + // Convert into entities + return (!opts || opts.toEntity !== false) + ? data.map(ReferentialRef.fromObject) + : data; + })); + } + /** + * Load program gears + */ + loadGears(programLabel, opts) { + return firstNotNilPromise(this.watchGears(programLabel, opts)); + } + /** + * Watch program taxon groups + */ + watchTaxonGroups(programLabel, opts) { + // Use cache (enable by default) + if (!opts || opts.cache !== false) { + const cacheKey = [ProgramRefCacheKeys.TAXON_GROUPS, programLabel, JSON.stringify(Object.assign(Object.assign({}, opts), { cache: undefined, toEntity: undefined }))].join('|'); + return this.cache.loadFromObservable(cacheKey, defer(() => this.watchTaxonGroups(programLabel, Object.assign(Object.assign({}, opts), { cache: false, toEntity: false }))), ProgramRefCacheKeys.CACHE_GROUP) + .pipe(map(data => (!opts || opts.toEntity !== false) + ? (data || []).map(TaxonGroupRef.fromObject) + : (data || []))); + } + // Watch program + const acquisitionLevels = (opts === null || opts === void 0 ? void 0 : opts.acquisitionLevels) || ((opts === null || opts === void 0 ? void 0 : opts.acquisitionLevel) && [opts.acquisitionLevel]); + return this.watchByLabel(programLabel, { toEntity: false, withStrategies: true, strategyFilter: opts && { + includedIds: isNotNil(opts.strategyId) ? [opts.strategyId] : undefined, + label: opts.strategyLabel, + acquisitionLevels + } }) + .pipe( + // Get strategies + map(program => (program.strategies || [])), + // Get taxon groups strategies + map(strategies => arrayDistinct(strategies.flatMap(strategy => strategy.taxonGroups || []), ['priorityLevel', 'taxonGroup.id'])), + // Sort taxonGroupStrategies, on priorityLevel + map(data => data.sort(propertiesPathComparator(['priorityLevel', 'taxonGroup.label', 'taxonGroup.name'], + // Use default values, because priorityLevel can be null in the DB + [1, 'ZZZ', 'ZZZ'])) + // Merge priority into taxonGroup + .map(v => (Object.assign(Object.assign({}, v.taxonGroup), { priority: v.priorityLevel })))), map(data => { + if (this._debug) + console.debug(`[program-ref-service] Found ${data.length} taxon groups on program {${programLabel}}`); + // Convert into entities + return (!opts || opts.toEntity !== false) + ? data.map(TaxonGroupRef.fromObject) + : data; + })); + } + /** + * Load program taxon groups + */ + loadTaxonGroups(programLabel, opts) { + return firstNotNilPromise(this.watchTaxonGroups(programLabel, opts)); + } + /** + * Suggest program taxon groups + */ + suggestTaxonGroups(value, filter) { + return __awaiter(this, void 0, void 0, function* () { + // Search on program's taxon groups + if (filter && isNotNil(filter.program)) { + const programItems = yield this.loadTaxonGroups(filter.program, { toEntity: false }); + if (isNotEmptyArray(programItems)) { + return suggestFromArray(programItems, value, { + searchAttributes: filter.searchAttributes || ['priority', 'label', 'name'] + }); + } + } + // If nothing found in program, or species defined + return this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { entityName: 'TaxonGroup', levelId: TaxonGroupTypeIds.FAO })); + }); + } + /** + * Load program taxon groups + */ + suggestTaxonNames(value, opts) { + return __awaiter(this, void 0, void 0, function* () { + // Search on taxon group's taxon' + if (isNotNil(opts.programLabel) && isNotNil(opts.taxonGroupId)) { + // Get map from program + const taxonNamesByTaxonGroupId = yield this.loadTaxonNamesByTaxonGroupIdMap(opts.programLabel); + const values = taxonNamesByTaxonGroupId[opts.taxonGroupId]; + if (isNotEmptyArray(values)) { + // All values + if (isNilOrBlank(opts.searchAttribute)) + return { data: values }; + // Text search + return suggestFromArray(values, value, { + searchAttribute: opts.searchAttribute + }); + } + } + // If nothing found in program: search by taxonGroup + const res = yield this.taxonNameRefService.suggest(value, { + levelId: opts.levelId, + levelIds: opts.levelIds, + taxonGroupId: opts.taxonGroupId, + searchAttribute: opts.searchAttribute + }); + // If there result, use it + if (res && isNotEmptyArray(res.data) || res.total > 0) + return res; + // Then, retry in all taxon (without taxon groups - Is the link taxon<->taxonGroup missing ?) + if (isNotNil(opts.taxonGroupId)) { + return this.taxonNameRefService.suggest(value, { + levelId: opts.levelId, + levelIds: opts.levelIds, + searchAttribute: opts.searchAttribute + }); + } + // Nothing found + return { data: [] }; + }); + } + loadTaxonNamesByTaxonGroupIdMap(programLabel, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!opts || opts.cache !== false) { + const mapCacheKey = [ProgramRefCacheKeys.TAXON_NAME_BY_GROUP, programLabel].join('|'); + return this.cache.getOrSetItem(mapCacheKey, () => this.loadTaxonNamesByTaxonGroupIdMap(programLabel, Object.assign(Object.assign({}, opts), { cache: false, toEntity: false })), ProgramRefCacheKeys.CACHE_GROUP); + } + const taxonGroups = yield this.loadTaxonGroups(programLabel, opts); + return (taxonGroups || []).reduce((res, taxonGroup) => { + if (isNotEmptyArray(taxonGroup.taxonNames)) { + res[taxonGroup.id] = taxonGroup.taxonNames; + //empty = false; + } + return res; + }, {}); + }); + } + executeImport(filter, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const maxProgression = opts && opts.maxProgression || 100; + const now = this._debug && Date.now(); + console.info('[program-ref-service] Importing programs...'); + try { + // Clear cache + yield this.clearCache(); + // Create search filter + filter = Object.assign(Object.assign({}, filter), { acquisitionLevelLabels: opts === null || opts === void 0 ? void 0 : opts.acquisitionLevels, statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] }); + const strategyFilter = isNotEmptyArray(filter.strategyIds) ? StrategyFilter.fromObject({ includedIds: filter.strategyIds }) + // By default, all strategies of imported programs + : null; + // If strategy are filtered, import only ONE program - fix issue IMAGINE (avoid to import all DB programs) + if (strategyFilter) { + filter.label = filter.label || ((_a = opts === null || opts === void 0 ? void 0 : opts.program) === null || _a === void 0 ? void 0 : _a.label); + } + // Keep other programs, when ONLY ONE program is imported here + // (e.g. imported from another offline feature) + const resetLocalStorage = isNil(filter.label); + // Step 1. load all programs, with strategies + const importedProgramLabels = []; + const { data } = yield JobUtils.fetchAllPages((offset, size) => this.loadAll(offset, size, 'id', 'asc', filter, { + query: (offset === 0) ? ProgramRefQueries.loadAllWithStrategiesAndTotal : ProgramRefQueries.loadAllWithStrategies, + variables: { + strategyFilter: strategyFilter === null || strategyFilter === void 0 ? void 0 : strategyFilter.asPodObject() + }, + fetchPolicy: 'no-cache', + toEntity: false + }), { + progression: opts === null || opts === void 0 ? void 0 : opts.progression, + maxProgression: maxProgression * 0.9, + onPageLoaded: ({ data }) => { + const labels = (data || []).map(p => p.label); + importedProgramLabels.push(...labels); + }, + logPrefix: '[program-ref-service]', + fetchSize: 5 /* limit to 5 program, because a program graph it can be huge ! */ + }); + // Step 2. Saving locally + yield this.entities.saveAll(data || [], { + entityName: Program.TYPENAME, + reset: resetLocalStorage + }); + if (this._debug) + console.debug(`[program-ref-service] Importing programs [OK] in ${Date.now() - now}ms`, data); + } + catch (err) { + console.error('[program-ref-service] Error during programs importation', err); + throw err; + } + }); + } + listenChanges(id, opts) { + const cacheKey = [ProgramRefCacheKeys.PROGRAM_BY_ID, id].join('|'); + let cache = this._subscriptionCache[cacheKey]; + if (!cache) { + // DEBUG + //console.debug(`[program-ref-service] Starting program {${id}} changes`); + const subject = new Subject(); + cache = { + subject, + subscription: super.listenChanges(id, opts).subscribe(subject) + }; + this._subscriptionCache[cacheKey] = cache; + } + return cache.subject.asObservable() + .pipe(finalize(() => { + // DEBUG + //console.debug(`[program-ref-service] Finalize program {${id}} changes (${cache.subject.observers.length} observers)`); + // Wait 100ms (to avoid to recreate if new subscription comes less than 100ms after) + setTimeout(() => { + var _a; + if (((_a = cache.subject.observers) === null || _a === void 0 ? void 0 : _a.length) > 0) + return; // Skip if has observers + // DEBUG + //console.debug(`[program-ref-service] Closing program {${id}} changes listener`); + this._subscriptionCache[cacheKey] = undefined; + cache.subject.complete(); + cache.subject.unsubscribe(); + cache.subscription.unsubscribe(); + }, 100); + })); + } + clearCache() { + return __awaiter(this, void 0, void 0, function* () { + console.info('[program-ref-service] Clearing program cache...'); + yield this.cache.clearGroup(ProgramRefCacheKeys.CACHE_GROUP); + }); + } + hasExactPrivilege(program, privilege) { + // Lookup on person's privileges + return ProgramPrivilegeUtils.hasExactPrivilege(program === null || program === void 0 ? void 0 : program.privileges, privilege); + // TODO check program department privileges ? Or fill privileges on POD, with Program2Department + } + hasUpperOrEqualPrivilege(program, privilege) { + // Lookup on person's privileges + return ProgramPrivilegeUtils.hasUpperOrEqualsPrivilege(program === null || program === void 0 ? void 0 : program.privileges, privilege); + // TODO check program department privileges ? Or fill privileges on POD, with Program2Department + } + /* -- protected methods -- */ + onConfigChanged(config) { + var _a; + // const dbTimeZone = config.getProperty(CORE_CONFIG_OPTIONS.DB_TIMEZONE); + this._enableQualityProcess = config.getPropertyAsBoolean(DATA_CONFIG_OPTIONS.QUALITY_PROCESS_ENABLE); + this._accessNotSelfDataDepartmentIds = config.getPropertyAsNumbers(DATA_CONFIG_OPTIONS.ACCESS_NOT_SELF_DATA_DEPARTMENT_IDS) || []; + this._accessNotSelfDataMinProfile = PersonUtils.roleToProfile((_a = config.getProperty(DATA_CONFIG_OPTIONS.ACCESS_NOT_SELF_DATA_ROLE)) === null || _a === void 0 ? void 0 : _a.replace(/^ROLE_/, ''), 'ADMIN'); + } + startListenAuthorizedProgram(opts) { + var _a; + if (this._listenAuthorizedSubscription) + this.stopListenAuthorizedProgram(); + console.debug(`${this._logPrefix}Watching authorized programs...`); + const variables = { + interval: Math.max(10, (opts === null || opts === void 0 ? void 0 : opts.intervalInSeconds) || ((_a = environment['program']) === null || _a === void 0 ? void 0 : _a.listenIntervalInSeconds) || 10) + }; + this._listenAuthorizedSubscription = this.graphql.subscribe({ + query: ProgramRefSubscriptions.listenAuthorizedPrograms, + variables, + error: { + code: ErrorCodes.SUBSCRIBE_AUTHORIZED_PROGRAMS_ERROR, + message: 'PROGRAM.ERROR.SUBSCRIBE_AUTHORIZED_PROGRAMS' + } + }) + .pipe( + //takeUntil(this.accountService.onLogout), + // Map to sorted labels + map(({ data }) => (data || []).map(p => p === null || p === void 0 ? void 0 : p.label).sort().join(',')), distinctUntilChanged()) + .subscribe((programLabels) => __awaiter(this, void 0, void 0, function* () { + console.info(`${this._logPrefix}Authorized programs changed to: ${programLabels}`); + yield Promise.all([ + // Clear all program/strategies cache + this.graphql.clearCache(), + this.strategyRefService.clearCache(), + // Clear cache (e.g. used by autocomplete fields) + this.clearCache() + ]); + this.showToast({ message: 'PROGRAM.INFO.AUTHORIZED_PROGRAMS_UPDATED', type: 'info' }); + })); + this._listenAuthorizedSubscription.add(() => console.debug(`${this._logPrefix}Stop watching authorized programs`)); + this.registerSubscription(this._listenAuthorizedSubscription); + return this._listenAuthorizedSubscription; + } + stopListenAuthorizedProgram() { + if (this._listenAuthorizedSubscription) { + this.unregisterSubscription(this._listenAuthorizedSubscription); + this._listenAuthorizedSubscription.unsubscribe(); + this._listenAuthorizedSubscription = null; + } + } + showToast(opts) { + return Toasts.show(this.toastController, this.translate, opts); + } +}; +ProgramRefService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [Injector, + NetworkService, + AccountService, + CacheService, + EntitiesStorage, + ConfigService, + PmfmService, + NetworkService, + TaxonNameRefService, + ReferentialRefService, + ToastController, + StrategyRefService, + TranslateService]) +], ProgramRefService); +export { ProgramRefService }; +//# sourceMappingURL=program-ref.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/program-ref.service.js.map b/out-tsc/app/app/referential/services/program-ref.service.js.map new file mode 100644 index 000000000..f0bb9a7a3 --- /dev/null +++ b/out-tsc/app/app/referential/services/program-ref.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"program-ref.service.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/program-ref.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/program.fragments.js b/out-tsc/app/app/referential/services/program.fragments.js new file mode 100644 index 000000000..fa593bc72 --- /dev/null +++ b/out-tsc/app/app/referential/services/program.fragments.js @@ -0,0 +1,70 @@ +import { gql } from '@apollo/client/core'; +export const ProgramFragments = { + lightProgram: gql ` + fragment LightProgramFragment on ProgramVO { + id + label + name + description + comments + updateDate + creationDate + statusId + properties + }`, + programRef: gql ` + fragment ProgramRefFragment on ProgramVO { + id + label + name + description + comments + updateDate + creationDate + statusId + properties + taxonGroupTypeId + gearClassificationId + locationClassificationIds + locationIds + acquisitionLevelLabels + privileges + }`, + program: gql ` + fragment ProgramFragment on ProgramVO { + id + label + name + description + comments + updateDate + creationDate + statusId + properties + taxonGroupType { + ...LightReferentialFragment + } + gearClassification { + ...LightReferentialFragment + } + locationClassifications { + ...LightReferentialFragment + } + locations { + ...LightReferentialFragment + } + persons { + id + location { + ...LightReferentialFragment + } + privilege { + ...LightReferentialFragment + } + person { + ...LightPersonFragment + } + } + }` +}; +//# sourceMappingURL=program.fragments.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/program.fragments.js.map b/out-tsc/app/app/referential/services/program.fragments.js.map new file mode 100644 index 000000000..9ea3ee487 --- /dev/null +++ b/out-tsc/app/app/referential/services/program.fragments.js.map @@ -0,0 +1 @@ +{"version":3,"file":"program.fragments.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/program.fragments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,qBAAqB,CAAC;AAExC,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,YAAY,EAAE,GAAG,CAAA;;;;;;;;;;;MAWb;IACJ,UAAU,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;MAiBX;IACJ,OAAO,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmCR;CACL,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/program.service.js b/out-tsc/app/app/referential/services/program.service.js new file mode 100644 index 000000000..7424300db --- /dev/null +++ b/out-tsc/app/app/referential/services/program.service.js @@ -0,0 +1,313 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable, Injector } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { map, mergeMap } from 'rxjs/operators'; +import { ErrorCodes } from './errors'; +import { ReferentialFragments } from './referential.fragments'; +import { AccountService, EntitiesStorage, EntityUtils, isNil, isNotNil, NetworkService, StatusIds, } from '@sumaris-net/ngx-components'; +import { CacheService } from 'ionic-cache'; +import { ReferentialRefService } from './referential-ref.service'; +import { Program, ProgramPerson } from './model/program.model'; +import { ReferentialService } from './referential.service'; +import { ProgramFragments } from './program.fragments'; +import { ProgramRefService } from './program-ref.service'; +import { BaseReferentialService } from './base-referential-service.class'; +import { StrategyRefService } from './strategy-ref.service'; +import { ProgramFilter } from './filter/program.filter'; +import { ProgramPrivilegeIds } from '@app/referential/services/model/model.enum'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +const ProgramQueries = { + // Load by id + load: gql `query Program($id: Int, $label: String){ + data: program(id: $id, label: $label){ + ...ProgramFragment + } + } + ${ProgramFragments.program} + ${ReferentialFragments.lightReferential} + ${ReferentialFragments.lightPerson}`, + // Load all query + loadAll: gql `query Programs($filter: ProgramFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String){ + data: programs(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + ...LightProgramFragment + } + } + ${ProgramFragments.lightProgram}`, + // Load all query (with total) + loadAllWithTotal: gql `query ProgramsWithTotal($filter: ProgramFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String){ + data: programs(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + ...LightProgramFragment + } + total: programsCount(filter: $filter) + } + ${ProgramFragments.lightProgram}` +}; +const ProgramMutations = { + save: gql `mutation SaveProgram($data: ProgramVOInput!, $options: ProgramSaveOptionsInput!){ + data: saveProgram(program: $data, options: $options){ + ...ProgramFragment + } + } + ${ProgramFragments.program} + ${ReferentialFragments.lightReferential} + ${ReferentialFragments.lightPerson}`, + delete: gql `mutation DeletePrograms($ids:[Int]){ + deleteReferentials(entityName: "Program", ids: $ids) + }` +}; +let ProgramService = class ProgramService extends BaseReferentialService { + constructor(injector, network, accountService, referentialService, referentialRefService, programRefService, strategyRefService, cache, entities) { + super(injector, Program, ProgramFilter, { + queries: ProgramQueries, + mutations: ProgramMutations + }); + this.network = network; + this.accountService = accountService; + this.referentialService = referentialService; + this.referentialRefService = referentialRefService; + this.programRefService = programRefService; + this.strategyRefService = strategyRefService; + this.cache = cache; + this.entities = entities; + if (this._debug) + console.debug('[program-service] Creating service'); + } + /** + * Load programs + * + * @param offset + * @param size + * @param sortBy + * @param sortDirection + * @param dataFilter + * @param opts + */ + watchAll(offset, size, sortBy, sortDirection, dataFilter, opts) { + const variables = { + offset: offset || 0, + size: size || 100, + sortBy: sortBy || 'label', + sortDirection: sortDirection || 'asc', + filter: dataFilter + }; + const now = Date.now(); + if (this._debug) + console.debug('[program-service] Watching programs using options:', variables); + const withTotal = (!opts || opts.withTotal !== false); + const query = withTotal ? ProgramQueries.loadAllWithTotal : ProgramQueries.loadAll; + return this.mutableWatchQuery({ + queryName: withTotal ? 'LoadAllWithTotal' : 'LoadAll', + arrayFieldName: 'data', + totalFieldName: withTotal ? 'total' : undefined, + query, + variables, + error: { code: ErrorCodes.LOAD_PROGRAMS_ERROR, message: 'PROGRAM.ERROR.LOAD_PROGRAMS_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || undefined + }) + .pipe(map(({ data, total }) => { + const entities = (data || []).map(Program.fromObject); + if (this._debug) + console.debug(`[program-service] Programs loaded in ${Date.now() - now}ms`, entities); + return { + data: entities, + total + }; + })); + } + /** + * Load programs + * + * @param offset + * @param size + * @param sortBy + * @param sortDirection + * @param dataFilter + * @param opts + */ + loadAll(offset, size, sortBy, sortDirection, dataFilter, opts) { + return __awaiter(this, void 0, void 0, function* () { + dataFilter = this.asFilter(dataFilter); + const variables = { + offset: offset || 0, + size: size || 100, + sortBy: sortBy || 'label', + sortDirection: sortDirection || 'asc' + }; + const debug = this._debug && (!opts || opts.debug !== false); + const now = debug && Date.now(); + if (debug) + console.debug('[program-service] Loading programs... using options:', variables); + let res; + // Offline mode + const offline = this.network.offline && (!opts || opts.fetchPolicy !== 'network-only'); + if (offline) { + console.warn('[program-service] Remove this local entities call. Use ProgramRefService instead !'); + res = yield this.entities.loadAll(Program.TYPENAME, Object.assign(Object.assign({}, variables), { filter: dataFilter && dataFilter.asFilterFn() })); + } + // Online mode + else { + const query = opts && opts.query + || opts && opts.withTotal && ProgramQueries.loadAllWithTotal + || ProgramQueries.loadAll; + res = yield this.graphql.query({ + query, + variables: Object.assign(Object.assign({}, variables), { filter: dataFilter && dataFilter.asPodObject() }), + error: { code: ErrorCodes.LOAD_PROGRAMS_ERROR, message: 'PROGRAM.ERROR.LOAD_PROGRAMS_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || undefined + }); + } + const entities = (!opts || opts.toEntity !== false) ? + (res && res.data || []).map(Program.fromObject) : + (res && res.data || []); + if (debug) + console.debug(`[program-service] Programs loaded in ${Date.now() - now}ms`, entities); + return { + data: entities, + total: res && res.total + }; + }); + } + existsByLabel(label, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (isNil(label)) + return false; + return yield this.referentialRefService.existsByLabel(label, Object.assign(Object.assign({}, filter), { entityName: 'Program' }), opts); + }); + } + save(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + opts = Object.assign({ withStrategies: false }, opts); + const options = { + awaitRefetchQueries: opts.awaitRefetchQueries, + refetchQueries: opts.refetchQueries, + update: opts.update + }; + if (!this.mutations.save) { + if (!this.mutations.saveAll) + throw new Error('Not implemented'); + const data = yield this.saveAll([entity], options); + return data && data[0]; + } + // Fill default properties + this.fillDefaultProperties(entity); + // Transform into json + const json = this.asObject(entity); + const isNew = this.isNewFn(json); + const now = Date.now(); + if (this._debug) + console.debug(this._logPrefix + `Saving ${this._logTypeName}...`, json); + yield this.graphql.mutate({ + mutation: this.mutations.save, + refetchQueries: this.getRefetchQueriesForMutation(options), + awaitRefetchQueries: options && options.awaitRefetchQueries, + variables: { + data: json, + options: { + withStrategies: opts.withStrategies, + withDepartmentsAndPersons: opts.withDepartmentsAndPersons + } + }, + error: { code: ErrorCodes.SAVE_PROGRAM_ERROR, message: 'ERROR.SAVE_PROGRAM_ERROR' }, + update: (cache, { data }) => { + // Update entity + const savedEntity = data && data.data; + this.copyIdAndUpdateDate(savedEntity, entity); + // Insert into the cache + if (isNew && this.watchQueriesUpdatePolicy === 'update-cache') { + this.insertIntoMutableCachedQueries(cache, { + queries: this.getLoadQueries(), + data: savedEntity + }); + } + if (options && options.update) { + options.update(cache, { data }); + } + if (this._debug) + console.debug(this._logPrefix + `${entity.__typename} saved in ${Date.now() - now}ms`, entity); + } + }); + return entity; + }); + } + clearCache() { + return __awaiter(this, void 0, void 0, function* () { + // Make sure to clean all strategy references (.e.g Pmfm cache, etc) + yield Promise.all([ + this.programRefService.clearCache(), + this.strategyRefService.clearCache() + ]); + }); + } + deleteAll(entities, options) { + return __awaiter(this, void 0, void 0, function* () { + // Avoid any deletion (need more control, to check if there is linked data, etc.) + throw new Error('Not implemented yet!'); + }); + } + canUserWrite(entity, opts) { + return this.accountService.isAdmin() + // Check program managers (if entity exists) + || (isNotNil(entity.id) && this.hasPrivilege(entity, this.accountService.person, ProgramPrivilegeIds.MANAGER)); + } + listenChanges(id, opts) { + return this.referentialService.listenChanges(id, Object.assign(Object.assign({}, opts), { entityName: Program.ENTITY_NAME })) + .pipe(mergeMap(data => this.load(id, Object.assign(Object.assign({}, opts), { fetchPolicy: 'network-only' })))); + } + copyIdAndUpdateDate(source, target) { + EntityUtils.copyIdAndUpdateDate(source, target); + // Update persons + if (target.persons && source.persons) { + target.persons.forEach(targetPerson => { + targetPerson.programId = source.id; + const sourcePerson = source.persons.find(p => ProgramPerson.equals(p, targetPerson)); + EntityUtils.copyIdAndUpdateDate(sourcePerson, targetPerson); + }); + } + // Update strategies + if (target.strategies && source.strategies) { + target.strategies.forEach(entity => { + // Make sure tp copy programId (need by equals) + entity.programId = source.id; + }); + } + } + /* -- protected methods -- */ + asObject(source, opts) { + return source.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS)); + } + fillDefaultProperties(program) { + program.statusId = isNotNil(program.statusId) ? program.statusId : StatusIds.ENABLE; + // Update strategies + (program.strategies || []).forEach(strategy => { + strategy.statusId = isNotNil(strategy.statusId) ? strategy.statusId : StatusIds.ENABLE; + // Force a valid programId + // (because a bad copy can leave an old value) + strategy.programId = isNotNil(program.id) ? program.id : undefined; + }); + } + hasPrivilege(program, person, privilegeId) { + var _a; + if (!program || !person || isNil(person.id) || isNil(privilegeId)) + return false; // Skip + // Lookup on person's privileges + return (program.persons || []) + .some(p => p.person.id === person.id && p.privilege.id === privilegeId) + // Lookup on department's privileges + || (isNotNil((_a = person.department) === null || _a === void 0 ? void 0 : _a.id) && (program.departments || []) + .some(d => d.department.id === person.department.id && d.privilege.id === privilegeId)); + } +}; +ProgramService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [Injector, + NetworkService, + AccountService, + ReferentialService, + ReferentialRefService, + ProgramRefService, + StrategyRefService, + CacheService, + EntitiesStorage]) +], ProgramService); +export { ProgramService }; +//# sourceMappingURL=program.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/program.service.js.map b/out-tsc/app/app/referential/services/program.service.js.map new file mode 100644 index 000000000..ea026f297 --- /dev/null +++ b/out-tsc/app/app/referential/services/program.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"program.service.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/program.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAe,GAAG,EAAyB,MAAM,qBAAqB,CAAC;AAE9E,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EACL,cAAc,EAGd,eAAe,EAEf,WAAW,EAGX,KAAK,EACL,QAAQ,EAER,cAAc,EAGd,SAAS,GACV,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAOhF,MAAM,cAAc,GAA6B;IAC/C,aAAa;IACb,IAAI,EAAE,GAAG,CAAA;;;;;IAKP,gBAAgB,CAAC,OAAO;IACxB,oBAAoB,CAAC,gBAAgB;IACrC,oBAAoB,CAAC,WAAW,EAAE;IAEpC,iBAAiB;IACjB,OAAO,EAAE,GAAG,CAAA;;;;;IAKV,gBAAgB,CAAC,YAAY,EAAE;IAEjC,8BAA8B;IAC9B,gBAAgB,EAAE,GAAG,CAAA;;;;;;IAMnB,gBAAgB,CAAC,YAAY,EAAE;CAClC,CAAC;AAEF,MAAM,gBAAgB,GAA+B;IACnD,IAAI,EAAE,GAAG,CAAA;;;;;IAKP,gBAAgB,CAAC,OAAO;IACxB,oBAAoB,CAAC,gBAAgB;IACrC,oBAAoB,CAAC,WAAW,EAAE;IAEpC,MAAM,EAAE,GAAG,CAAA;;IAET;CACH,CAAC;AAGK,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,sBAA8C;IAIhF,YACE,QAAkB,EACR,OAAuB,EACvB,cAA8B,EAC9B,kBAAsC,EACtC,qBAA4C,EAC5C,iBAAoC,EACpC,kBAAsC,EACtC,KAAmB,EACnB,QAAyB;QAEnC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE;YACtC,OAAO,EAAE,cAAc;YACvB,SAAS,EAAE,gBAAgB;SAC5B,CAAC,CAAC;QAZO,YAAO,GAAP,OAAO,CAAgB;QACvB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,UAAK,GAAL,KAAK,CAAc;QACnB,aAAQ,GAAR,QAAQ,CAAiB;QAMnC,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;;;;OASG;IACH,QAAQ,CAAC,MAAc,EACd,IAAY,EACZ,MAAe,EACf,aAA6B,EAC7B,UAA0B,EAC1B,IAGC;QAER,MAAM,SAAS,GAAQ;YACrB,MAAM,EAAE,MAAM,IAAI,CAAC;YACnB,IAAI,EAAE,IAAI,IAAI,GAAG;YACjB,MAAM,EAAE,MAAM,IAAI,OAAO;YACzB,aAAa,EAAE,aAAa,IAAI,KAAK;YACrC,MAAM,EAAE,UAAU;SACnB,CAAC;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE,SAAS,CAAC,CAAC;QAEhG,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;QACnF,OAAO,IAAI,CAAC,iBAAiB,CAAkB;YAC7C,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;YACrD,cAAc,EAAE,MAAM;YACtB,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YAC/C,KAAK;YACL,SAAS;YACT,KAAK,EAAE,EAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,OAAO,EAAE,mCAAmC,EAAC;YAC3F,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS;SACnD,CAAC;aACC,IAAI,CACH,GAAG,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAC,EAAE,EAAE;YAClB,MAAM,QAAQ,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACtD,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,KAAK,CAAC,wCAAwC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC;YACvG,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,KAAK;aACN,CAAC;QACJ,CAAC,CACF,CACF,CAAC;IACN,CAAC;IAED;;;;;;;;;OASG;IACG,OAAO,CAAC,MAAc,EACnB,IAAY,EACZ,MAAe,EACf,aAA6B,EAC7B,UAAmC,EACnC,IAMC;;YAER,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAEvC,MAAM,SAAS,GAAQ;gBACrB,MAAM,EAAE,MAAM,IAAI,CAAC;gBACnB,IAAI,EAAE,IAAI,IAAI,GAAG;gBACjB,MAAM,EAAE,MAAM,IAAI,OAAO;gBACzB,aAAa,EAAE,aAAa,IAAI,KAAK;aACtC,CAAC;YACF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;YAC7D,MAAM,GAAG,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,IAAI,KAAK;gBAAE,OAAO,CAAC,KAAK,CAAC,sDAAsD,EAAE,SAAS,CAAC,CAAC;YAE5F,IAAI,GAAoB,CAAC;YAEzB,eAAe;YACf,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,cAAc,CAAC,CAAC;YACvF,IAAI,OAAO,EAAE;gBACX,OAAO,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC;gBACnG,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,kCAE3C,SAAS,KACZ,MAAM,EAAE,UAAU,IAAI,UAAU,CAAC,UAAU,EAAE,IAEhD,CAAC;aACH;YAED,cAAc;iBACT;gBACH,MAAM,KAAK,GAAG,IAAI,IAAI,IAAI,CAAC,KAAK;uBAC3B,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,cAAc,CAAC,gBAAgB;uBACzD,cAAc,CAAC,OAAO,CAAC;gBAC5B,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAkB;oBAC9C,KAAK;oBACL,SAAS,kCACJ,SAAS,KACZ,MAAM,EAAE,UAAU,IAAI,UAAU,CAAC,WAAW,EAAE,GAC/C;oBACD,KAAK,EAAE,EAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,OAAO,EAAE,mCAAmC,EAAC;oBAC3F,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS;iBACnD,CAAC,CAAC;aACJ;YAED,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC;gBACnD,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;gBACjD,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAc,CAAC;YACvC,IAAI,KAAK;gBAAE,OAAO,CAAC,KAAK,CAAC,wCAAwC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC;YACjG,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,GAAG,IAAI,GAAG,CAAC,KAAK;aACxB,CAAC;QACJ,CAAC;KAAA;IAGK,aAAa,CAAC,KAAa,EAAE,MAAkC,EAAE,IAEtE;;YACC,IAAI,KAAK,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC/B,OAAO,MAAM,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,KAAK,kCAAM,MAAM,KAAE,UAAU,EAAE,SAAS,KAAG,IAAI,CAAC,CAAC;QACzG,CAAC;KAAA;IAEK,IAAI,CAAC,MAAe,EAAE,IAAyB;;YAEnD,IAAI,mBACF,cAAc,EAAE,KAAK,IAClB,IAAI,CACR,CAAC;YAEF,MAAM,OAAO,GAAsB;gBACjC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;gBAC7C,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC;YAEF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;gBACxB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBAEhE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;gBACnD,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;aACxB;YAED,0BAA0B;YAC1B,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAEnC,sBAAsB;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAEnC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,CAAC,YAAY,KAAK,EAAE,IAAI,CAAC,CAAC;YAEzF,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAgB;gBACvC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;gBAC7B,cAAc,EAAE,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC;gBAC1D,mBAAmB,EAAE,OAAO,IAAI,OAAO,CAAC,mBAAmB;gBAC3D,SAAS,EAAE;oBACT,IAAI,EAAE,IAAI;oBACV,OAAO,EAAE;wBACP,cAAc,EAAE,IAAI,CAAC,cAAc;wBACnC,yBAAyB,EAAE,IAAI,CAAC,yBAAyB;qBAC1D;iBACF;gBACD,KAAK,EAAE,EAAC,IAAI,EAAE,UAAU,CAAC,kBAAkB,EAAE,OAAO,EAAE,0BAA0B,EAAC;gBACjF,MAAM,EAAE,CAAC,KAAK,EAAE,EAAC,IAAI,EAAC,EAAE,EAAE;oBACxB,gBAAgB;oBAChB,MAAM,WAAW,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;oBACtC,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;oBAE9C,wBAAwB;oBACxB,IAAI,KAAK,IAAI,IAAI,CAAC,wBAAwB,KAAK,cAAc,EAAE;wBAC7D,IAAI,CAAC,8BAA8B,CAAC,KAAK,EAAE;4BACzC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE;4BAC9B,IAAI,EAAE,WAAW;yBAClB,CAAC,CAAC;qBACJ;oBAED,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;wBAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAC,IAAI,EAAC,CAAC,CAAC;qBAC/B;oBAED,IAAI,IAAI,CAAC,MAAM;wBAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,MAAM,CAAC,UAAU,aAAa,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;gBAClH,CAAC;aACF,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;KAAA;IAEK,UAAU;;YACd,oEAAoE;YACpE,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE;gBACnC,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE;aACrC,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,SAAS,CAAC,QAAmB,EAAE,OAAa;;YAChD,iFAAiF;YACjF,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;KAAA;IAED,YAAY,CAAC,MAAe,EAAE,IAAU;QACtC,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;YAClC,4CAA4C;eACzC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;IACnH,CAAC;IAED,aAAa,CAAC,EAAU,EAAE,IAA8E;QACtG,OAAO,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,EAAE,kCAAM,IAAI,KAAE,UAAU,EAAE,OAAO,CAAC,WAAW,IAAE;aACzF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,kCAAM,IAAI,KAAE,WAAW,EAAE,cAAc,IAAE,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,mBAAmB,CAAC,MAAe,EAAE,MAAe;QAClD,WAAW,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEhD,iBAAiB;QACjB,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE;YACpC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;gBACpC,YAAY,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC;gBACnC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;gBACrF,WAAW,CAAC,mBAAmB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;SACJ;QAED,oBAAoB;QACpB,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,EAAE;YAC1C,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBAEjC,+CAA+C;gBAC/C,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC;YAE/B,CAAC,CAAC,CAAC;SACJ;IAGH,CAAC;IAED,6BAA6B;IAEnB,QAAQ,CAAC,MAAe,EAAE,IAAiC;QACnE,OAAO,MAAM,CAAC,QAAQ,CACpB,gCACK,IAAI,GACJ,kBAAkB,CACtB,CAAC,CAAC;IACP,CAAC;IAES,qBAAqB,CAAC,OAAgB;QAC9C,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;QAEpF,oBAAoB;QACpB,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAE5C,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;YAEvF,0BAA0B;YAC1B,8CAA8C;YAC9C,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,CAAC,CAAC,CAAC;IACL,CAAC;IAES,YAAY,CAAC,OAAgB,EAAE,MAAc,EAAE,WAAmB;;QAC1E,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,OAAO;QACxF,gCAAgC;QAChC,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;aACzB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,WAAW,CAAC;YACzE,oCAAoC;eACjC,CAAC,QAAQ,CAAC,MAAA,MAAM,CAAC,UAAU,0CAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;iBAC/D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,KAAK,MAAM,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC,CAC1F;IACH,CAAC;CACF,CAAA;AArTY,cAAc;IAD1B,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAMnB,QAAQ;QACC,cAAc;QACP,cAAc;QACV,kBAAkB;QACf,qBAAqB;QACzB,iBAAiB;QAChB,kBAAkB;QAC/B,YAAY;QACT,eAAe;GAb1B,cAAc,CAqT1B;SArTY,cAAc"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/referential-ref.service.js b/out-tsc/app/app/referential/services/referential-ref.service.js new file mode 100644 index 000000000..7acc18e34 --- /dev/null +++ b/out-tsc/app/app/referential/services/referential-ref.service.js @@ -0,0 +1,670 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { map } from 'rxjs/operators'; +import { ErrorCodes } from './errors'; +import { AccountService, BaseGraphqlService, chainPromises, ConfigService, EntitiesStorage, firstNotNilPromise, fromDateISOString, GraphqlService, isEmptyArray, isNotNil, JobUtils, NetworkService, ReferentialRef, ReferentialUtils, StatusIds, } from '@sumaris-net/ngx-components'; +import { ReferentialService } from './referential.service'; +import { AcquisitionLevelCodes, FractionIdGroups, LocationLevelGroups, LocationLevelIds, MatrixIds, MethodIds, ModelEnumUtils, ParameterGroupIds, ParameterLabelGroups, PmfmIds, ProgramLabel, QualitativeValueIds, QualityFlagIds, TaxonGroupTypeIds, TaxonomicLevelIds, UnitIds, VesselTypeIds, } from './model/model.enum'; +import { ReferentialFragments } from './referential.fragments'; +import { environment } from '@environments/environment'; +import { ReferentialRefFilter } from './filter/referential-ref.filter'; +import { REFERENTIAL_CONFIG_OPTIONS } from './config/referential.config'; +import { MetierService } from '@app/referential/services/metier.service'; +import { WeightLengthConversionRefService } from '@app/referential/taxon-name/weight-length-conversion/weight-length-conversion-ref.service'; +import { ProgramPropertiesUtils } from '@app/referential/services/config/program.config'; +import { TEXT_SEARCH_IGNORE_CHARS_REGEXP } from '@app/referential/services/base-referential-service.class'; +import { RoundWeightConversionRefService } from '@app/referential/taxon-group/round-weight-conversion/round-weight-conversion-ref.service'; +import { TaxonNameRefService } from '@app/referential/services/taxon-name-ref.service'; +import { TaxonGroupRefService } from '@app/referential/services/taxon-group-ref.service'; +import { translateQualityFlag } from '@app/data/services/model/model.utils'; +const ReferentialRefQueries = { + lastUpdateDate: gql ` + query LastUpdateDate { + lastUpdateDate + } + `, + loadAll: gql ` + query ReferentialRefs($entityName: String, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: ReferentialFilterVOInput) { + data: referentials(entityName: $entityName, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter) { + ...LightReferentialFragment + } + } + ${ReferentialFragments.lightReferential} + `, + loadAllWithTotal: gql ` + query ReferentialRefsWithTotal( + $entityName: String + $offset: Int + $size: Int + $sortBy: String + $sortDirection: String + $filter: ReferentialFilterVOInput + ) { + data: referentials(entityName: $entityName, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter) { + ...LightReferentialFragment + } + total: referentialsCount(entityName: $entityName, filter: $filter) + } + ${ReferentialFragments.lightReferential} + `, + loadLevels: gql ` + query ReferentialLevels($entityName: String) { + data: referentialLevels(entityName: $entityName) { + ...LightReferentialFragment + } + } + ${ReferentialFragments.lightReferential} + `, + countAll: gql ` + query ReferentialRefCount($entityName: String, $filter: ReferentialFilterVOInput) { + total: referentialsCount(entityName: $entityName, filter: $filter) + } + `, +}; +export const IMPORT_REFERENTIAL_ENTITIES = ['Location', 'Gear', 'Metier', 'MetierTaxonGroup', 'TaxonGroup', 'TaxonName', 'Department', 'QualityFlag', 'SaleType', 'VesselType']; +export const WEIGHT_CONVERSION_ENTITIES = ['WeightLengthConversion', 'RoundWeightConversion']; +let ReferentialRefService = class ReferentialRefService extends BaseGraphqlService { + constructor(graphql, referentialService, metierService, taxonNameRefService, taxonGroupRefService, weightLengthConversionRefService, roundWeightConversionRefService, accountService, configService, network, entities) { + super(graphql, environment); + this.graphql = graphql; + this.referentialService = referentialService; + this.metierService = metierService; + this.taxonNameRefService = taxonNameRefService; + this.taxonGroupRefService = taxonGroupRefService; + this.weightLengthConversionRefService = weightLengthConversionRefService; + this.roundWeightConversionRefService = roundWeightConversionRefService; + this.accountService = accountService; + this.configService = configService; + this.network = network; + this.entities = entities; + this.queries = ReferentialRefQueries; + this.start(); + } + ngOnStart() { + const _super = Object.create(null, { + ngOnStart: { get: () => super.ngOnStart } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.ngOnStart.call(this); + const config = yield firstNotNilPromise(this.configService.config); + this.updateModelEnumerations(config); + }); + } + /** + * @param offset + * @param size + * @param sortBy + * @param sortDirection + * @param filter + * @param opts + */ + watchAll(offset, size, sortBy, sortDirection, filter, opts) { + if (!filter || !filter.entityName) { + console.error('[referential-ref-service] Missing filter.entityName'); + throw { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }; + } + const entityName = filter.entityName; + filter = this.asFilter(filter); + const variables = { + entityName, + offset: offset || 0, + size: size || 100, + sortBy: sortBy || filter.searchAttribute || 'label', + sortDirection: sortDirection || 'asc' + }; + let now = this._debug && Date.now(); + if (this._debug) + console.debug(`[referential-ref-service] Watching ${entityName} items...`, variables); + let res; + if (this.network.offline) { + res = this.entities.watchAll(entityName, Object.assign(Object.assign({}, variables), { filter: filter && filter.asFilterFn() })); + } + else { + const withTotal = (!opts || opts.withTotal !== false); + const query = withTotal ? this.queries.loadAllWithTotal : this.queries.loadAll; + res = this.graphql.watchQuery({ + query, + variables: Object.assign(Object.assign({}, variables), { filter: filter && filter.asPodObject() }), + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || 'cache-first' + }); + } + return res + .pipe(map(({ data, total }) => { + const entities = (!opts || opts.toEntity !== false) + ? (data || []).map(ReferentialRef.fromObject) + : (data || []); + if (now) { + console.debug(`[referential-ref-service] References on ${entityName} loaded in ${Date.now() - now}ms`); + now = undefined; + } + return { + data: entities, + total: total || entities.length + }; + })); + } + loadAll(offset, size, sortBy, sortDirection, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + const offline = this.network.offline && (!opts || opts.fetchPolicy !== 'network-only'); + if (offline) { + return this.loadAllLocally(offset, size, sortBy, sortDirection, filter, opts); + } + const entityName = filter && filter.entityName; + if (!entityName) { + console.error('[referential-ref-service] Missing filter.entityName'); + throw { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }; + } + filter = this.asFilter(filter); + const uniqueEntityName = entityName + (filter.searchJoin || ''); + const debug = this._debug && (!opts || opts.debug !== false); + const variables = { + entityName, + offset: offset || 0, + size: size || 100, + sortBy: (sortBy || filter.searchAttribute || (filter.searchAttributes && filter.searchAttributes[0]) || 'label'), + sortDirection: sortDirection || 'asc', + filter: filter.asPodObject() + }; + const now = debug && Date.now(); + if (debug) + console.debug(`[referential-ref-service] Loading ${uniqueEntityName} items (ref)...`, variables); + // Online mode: use graphQL + const withTotal = !opts || opts.withTotal !== false; // default to true + const query = withTotal ? this.queries.loadAllWithTotal : this.queries.loadAll; + const { data, total } = yield this.graphql.query({ + query, + variables, + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || 'cache-first' + }); + const entities = (!opts || opts.toEntity !== false) ? + (data || []).map(ReferentialRef.fromObject) : + (data || []); + // Force entity name (if searchJoin) + if (filter.entityName !== uniqueEntityName) { + entities.forEach(item => item.entityName = uniqueEntityName); + } + const res = { + data: entities, + total + }; + // Add fetch more capability, if total was fetched + if (withTotal) { + const nextOffset = (offset || 0) + entities.length; + if (nextOffset < total) { + res.fetchMore = () => this.loadAll(nextOffset, size, sortBy, sortDirection, filter, opts); + } + } + if (debug) + console.debug(`[referential-ref-service] Loading ${uniqueEntityName} items (ref) [OK] ${entities.length} items, in ${Date.now() - now}ms`); + return res; + }); + } + loadAllLocally(offset, size, sortBy, sortDirection, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!filter || !filter.entityName) { + console.error('[referential-ref-service] Missing argument \'filter.entityName\''); + throw { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }; + } + const uniqueEntityName = filter.entityName + (filter.searchJoin || ''); + filter = this.asFilter(filter); + const variables = { + entityName: filter.entityName, + offset: offset || 0, + size: size || 100, + sortBy: sortBy || filter.searchAttribute + || filter.searchAttributes && filter.searchAttributes.length && filter.searchAttributes[0] + || 'label', + sortDirection: sortDirection || 'asc', + filter: filter.asFilterFn() + }; + const { data, total } = yield this.entities.loadAll(uniqueEntityName + 'VO', variables); + const entities = (!opts || opts.toEntity !== false) ? + (data || []).map(ReferentialRef.fromObject) : + (data || []); + // Force entity name (if searchJoin) + if (filter.entityName !== uniqueEntityName) { + entities.forEach(item => item.entityName = uniqueEntityName); + } + const res = { data: entities, total }; + // Add fetch more function + const nextOffset = (offset || 0) + entities.length; + if (nextOffset < total) { + res.fetchMore = () => this.loadAll(nextOffset, size, sortBy, sortDirection, filter, opts); + } + return res; + }); + } + countAll(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!(filter === null || filter === void 0 ? void 0 : filter.entityName)) { + console.error('[referential-ref-service] Missing \'filter.entityName\''); + throw { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }; + } + const offline = this.network.offline && (!opts || opts.fetchPolicy !== 'network-only'); + if (offline) { + return this.countLocally(filter, opts); + } + filter = this.asFilter(filter); + const { total } = yield this.graphql.query({ + query: this.queries.countAll, + variables: { + entityName: filter.entityName, + filter: filter.asPodObject() + }, + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || 'network-only' + }); + return total; + }); + } + countLocally(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!(filter === null || filter === void 0 ? void 0 : filter.entityName)) { + console.error('[referential-ref-service] Missing \'filter.entityName\''); + throw { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }; + } + const uniqueEntityName = filter.entityName + (filter.searchJoin || ''); + filter = this.asFilter(filter); + const variables = { + entityName: filter.entityName, + offset: 0, + size: 0, + filter: filter.asFilterFn() + }; + const { total } = yield this.entities.loadAll(uniqueEntityName + 'VO', variables, { fullLoad: false }); + return total; + }); + } + existsByLabel(label, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!label) { + console.error('[referential-service] Missing \'label\''); + throw { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }; + } + const total = yield this.countAll(Object.assign(Object.assign({}, filter), { label }), opts); + return total > 0; + }); + } + loadById(id, entityName, opts) { + return __awaiter(this, void 0, void 0, function* () { + const { data } = yield this.loadAll(0, 1, null, null, { includedIds: [id], entityName }, Object.assign(Object.assign({}, opts), { withTotal: false /*not need total*/ })); + return (data === null || data === void 0 ? void 0 : data.length) ? data[0] : undefined; + }); + } + loadByLabel(label, entityName, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + const { data } = yield this.loadAll(0, 1, null, null, { label, entityName }, Object.assign(Object.assign({}, opts), { withTotal: false /*not need total*/ })); + return (data === null || data === void 0 ? void 0 : data.length) ? data[0] : undefined; + }); + } + loadAllByLabels(labels, entityName, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + const items = yield Promise.all(labels.map(label => this.loadByLabel(label, entityName, filter, opts) + .catch(err => { + if (err && err.code === ErrorCodes.LOAD_REFERENTIAL_ERROR) + return undefined; // Skip if not found + throw err; + }))); + return items.filter(isNotNil); + }); + } + loadAllByIds(ids, entityName, sortBy, sortDirection, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (isEmptyArray(ids)) + return []; + const { data } = yield this.loadAll(0, ids.length, sortBy, sortDirection, Object.assign(Object.assign({}, filter), { entityName, includedIds: ids }), Object.assign(Object.assign({}, opts), { withTotal: false })); + return data; + }); + } + suggest(value, filter, sortBy, sortDirection, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (ReferentialUtils.isNotEmpty(value)) + return { data: [value] }; + // Replace '*' character by undefined + if (!value || value === '*') { + value = undefined; + } + // trim search text, and ignore some characters + else if (value && typeof value === 'string') { + value = value.trim().replace(TEXT_SEARCH_IGNORE_CHARS_REGEXP, '*'); + } + return this.loadAll(0, !value ? 30 : 10, sortBy, sortDirection, Object.assign(Object.assign({}, filter), { searchText: value }), Object.assign({ withTotal: true /* Used by autocomplete */ }, opts)); + }); + } + /** + * Load entity levels + */ + loadLevels(entityName, options) { + return __awaiter(this, void 0, void 0, function* () { + const now = Date.now(); + if (this._debug) + console.debug(`[referential-ref-service] Loading levels for ${entityName}...`); + const { data } = yield this.graphql.query({ + query: this.queries.loadLevels, + variables: { + entityName + }, + error: { code: ErrorCodes.LOAD_REFERENTIAL_LEVELS_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_LEVELS_ERROR' }, + fetchPolicy: options && options.fetchPolicy || 'cache-first' + }); + const entities = (data || []).map(ReferentialRef.fromObject); + if (this._debug) + console.debug(`[referential-ref-service] Levels for ${entityName} loading in ${Date.now() - now}`, entities); + return entities; + }); + } + saveAll(data, options) { + throw new Error('Not implemented yet'); + } + deleteAll(data, options) { + throw new Error('Not implemented yet'); + } + lastUpdateDate(opts) { + return __awaiter(this, void 0, void 0, function* () { + try { + const { lastUpdateDate } = yield this.graphql.query({ + query: this.queries.lastUpdateDate, + variables: {}, + fetchPolicy: opts && opts.fetchPolicy || 'network-only' + }); + return fromDateISOString(lastUpdateDate); + } + catch (err) { + console.error('[referential-ref] Cannot get remote lastUpdateDate: ' + (err && err.message || err), err); + return undefined; + } + }); + } + /** + * Get referential references, group by level + * + * @param filter + * @param groupBy + * @param opts + */ + loadAllGroupByLevels(filter, groupBy, opts) { + return __awaiter(this, void 0, void 0, function* () { + const entityName = filter && filter.entityName; + const groupKeys = Object.keys(groupBy.levelIds || groupBy.levelLabels); // AGE, SEX, MATURITY, etc + // Check arguments + if (!entityName) + throw new Error('Missing \'filter.entityName\' argument'); + if (isEmptyArray(groupKeys)) + throw new Error('Missing \'levelLabelsMap\' argument'); + if ((groupBy.levelIds && groupBy.levelLabels) || (!groupBy.levelIds && !groupBy.levelLabels)) { + throw new Error('Invalid groupBy value: one (and only one) required: \'levelIds\' or \'levelLabels\''); + } + const debug = this._debug || (opts && opts.debug); + const now = debug && Date.now(); + if (debug) + console.debug(`[referential-ref-service] Loading grouped ${entityName}...`); + const result = {}; + yield Promise.all(groupKeys.map(key => this.loadAll(0, 1000, 'id', 'asc', Object.assign(Object.assign({}, filter), { levelIds: groupBy.levelIds && groupBy.levelIds[key], levelLabels: groupBy.levelLabels && groupBy.levelLabels[key] }), Object.assign({ withTotal: false }, opts)) + .then(({ data }) => { + result[key] = data || []; + }))); + if (debug) + console.debug(`[referential-ref-service] Grouped ${entityName} loaded in ${Date.now() - now}ms`, result); + return result; + }); + } + executeImport(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + const entityNames = (opts === null || opts === void 0 ? void 0 : opts.entityNames) || IMPORT_REFERENTIAL_ENTITIES; + const maxProgression = opts && opts.maxProgression || 100; + const entityCount = entityNames.length; + const entityMaxProgression = Math.round((maxProgression / entityNames.length) * 10000 - 0.5) / 10000; + const now = Date.now(); + console.info(`[referential-ref-service] Starting importation of ${entityNames.length} referential...`); + if (this._debug) + console.debug(`[referential-ref-service] - with : {entityMaxProgression=${entityMaxProgression}, entityCount=${entityCount}, maxProgression=${maxProgression}`); + const importedEntityNames = []; + yield chainPromises(entityNames.map(entityName => () => this.executeImportEntity(Object.assign(Object.assign({}, filter), { entityName }), Object.assign(Object.assign({}, opts), { maxProgression: entityMaxProgression })) + .then(() => importedEntityNames.push(entityName)))); + // Not all entity imported: error + if (importedEntityNames.length < entityNames.length) { + console.error(`[referential-ref-service] Importation failed in ${Date.now() - now}ms`); + if (opts === null || opts === void 0 ? void 0 : opts.progression) + opts.progression.error({ code: ErrorCodes.IMPORT_REFERENTIAL_ERROR, message: 'ERROR.IMPORT_REFERENTIAL_ERROR' }); + } + else { + // Success + console.info(`[referential-ref-service] Successfully import ${entityNames.length} referential in ${Date.now() - now}ms`); + } + }); + } + executeImportEntity(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + const entityName = filter === null || filter === void 0 ? void 0 : filter.entityName; + if (!entityName) + throw new Error('Missing \'filter.entityName\''); + const progression = opts === null || opts === void 0 ? void 0 : opts.progression; + const maxProgression = (opts === null || opts === void 0 ? void 0 : opts.maxProgression) || 100; + const logPrefix = this._debug && `[referential-ref-service] [${entityName}]`; + const statusIds = (filter === null || filter === void 0 ? void 0 : filter.statusIds) || [StatusIds.ENABLE, StatusIds.TEMPORARY]; + try { + const getLoadOptions = (offset) => ({ + fetchPolicy: 'no-cache', + toEntity: false, + withTotal: offset === 0 + }); + let loadPageFn; + switch (entityName) { + // Taxon name + case 'TaxonName': + loadPageFn = (offset, size) => this.taxonNameRefService + .loadAll(offset, size, 'id', null, { + statusIds: [StatusIds.ENABLE], + levelIds: [TaxonomicLevelIds.SPECIES, TaxonomicLevelIds.SUBSPECIES] + }, getLoadOptions(offset)); + break; + // Taxon group + case 'TaxonGroup': + loadPageFn = (offset, size) => this.taxonGroupRefService + .loadAll(offset, size, 'id', null, Object.assign(Object.assign({}, filter), { statusIds, levelIds: [TaxonGroupTypeIds.FAO] }), getLoadOptions(offset)); + break; + // Metier + case 'MetierTaxonGroup': + loadPageFn = (offset, size) => this.metierService.loadAll(offset, size, 'id', null, { entityName: 'Metier', statusIds, searchJoin: 'TaxonGroup' }, getLoadOptions(offset)); + break; + // Locations + case 'Location': + filter = Object.assign(Object.assign({}, filter), { statusIds, + //boundingBox: opts?.boundingBox, + levelIds: (opts === null || opts === void 0 ? void 0 : opts.locationLevelIds) || Object.keys(LocationLevelIds).reduce((res, item) => res.concat(LocationLevelIds[item]), []) }); + break; + // WeightLengthConversion (RTP) + case 'WeightLengthConversion': + // TODO limit to program locationIds ? (if location class = SEA) and referenceTaxon from program (taxon groups) + referenceTaxons ? + loadPageFn = (offset, size) => this.weightLengthConversionRefService + .loadAll(offset, size, 'id', 'asc', { statusIds }, getLoadOptions(offset)); + break; + // RoundWeightConversion + case 'RoundWeightConversion': + loadPageFn = (offset, size) => this.roundWeightConversionRefService + .loadAll(offset, size, 'id', 'asc', { statusIds, + // Limit to country from program (see trip service) + locationIds: opts === null || opts === void 0 ? void 0 : opts.countryIds + }, getLoadOptions(offset)); + break; + // Other entities + default: + filter = Object.assign(Object.assign({}, filter), { statusIds }); + break; + } + // Fallback load function + if (!loadPageFn) { + loadPageFn = (offset, size) => this.referentialService.loadAll(offset, size, 'id', 'asc', filter, getLoadOptions(offset)); + } + // Fetch all pages + const { data } = yield JobUtils.fetchAllPages(loadPageFn, { progression, maxProgression, logPrefix }); + // Save locally + yield this.entities.saveAll(data, { + entityName: entityName + 'VO', + reset: true + }); + } + catch (err) { + const detailMessage = err && err.details && (err.details.message || err.details) || undefined; + console.error(`[referential-ref-service] Failed to import ${entityName}: ${detailMessage || err && err.message || err}`); + throw err; + } + }); + } + asFilter(filter) { + return ReferentialRefFilter.fromObject(filter); + } + loadQualityFlags() { + return __awaiter(this, void 0, void 0, function* () { + const { data: items } = yield this.loadAll(0, 100, 'id', 'asc', { + entityName: 'QualityFlag', + statusId: StatusIds.ENABLE + }, { + fetchPolicy: 'cache-first' + }); + // Try to get i18n key instead of label + items === null || items === void 0 ? void 0 : items.forEach(flag => flag.label = translateQualityFlag(flag.id) || flag.label); + return items; + }); + } + updateModelEnumerations(config) { + if (!config.properties) { + console.warn('[referential-ref] No properties found in pod config! Skip model enumerations update'); + return; + } + console.info('[referential-ref] Updating model enumerations...'); + // Program + ProgramLabel.SIH = config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PROGRAM_SIH_LABEL); + // Program privilege + /* TODO add enumeration options + ProgramPrivilegeIds.MANAGER = ... + ProgramPrivilegeIds.OBSERVER = ... + */ + // Acquisition levels + AcquisitionLevelCodes.TRIP = config.getProperty(REFERENTIAL_CONFIG_OPTIONS.ACQUISITION_LEVEL_TRIP_LABEL); + AcquisitionLevelCodes.PHYSICAL_GEAR = config.getProperty(REFERENTIAL_CONFIG_OPTIONS.ACQUISITION_LEVEL_PHYSICAL_GEAR_LABEL); + AcquisitionLevelCodes.OPERATION = config.getProperty(REFERENTIAL_CONFIG_OPTIONS.ACQUISITION_LEVEL_OPERATION_LABEL); + // Location Levels + LocationLevelIds.COUNTRY = config.getPropertyAsInt(REFERENTIAL_CONFIG_OPTIONS.LOCATION_LEVEL_COUNTRY_ID); + LocationLevelIds.PORT = config.getPropertyAsInt(REFERENTIAL_CONFIG_OPTIONS.LOCATION_LEVEL_PORT_ID); + LocationLevelIds.AUCTION = config.getPropertyAsInt(REFERENTIAL_CONFIG_OPTIONS.LOCATION_LEVEL_AUCTION_ID); + // Location Levels > ICES + LocationLevelIds.SUB_AREA_ICES = config.getPropertyAsInt(REFERENTIAL_CONFIG_OPTIONS.LOCATION_LEVEL_SUB_AREA_ICES_ID); + LocationLevelIds.DIVISION_ICES = config.getPropertyAsInt(REFERENTIAL_CONFIG_OPTIONS.LOCATION_LEVEL_DIVISION_ICES_ID); + LocationLevelIds.SUB_DIVISION_ICES = config.getPropertyAsInt(REFERENTIAL_CONFIG_OPTIONS.LOCATION_LEVEL_SUB_DIVISION_ICES_ID); + LocationLevelIds.RECTANGLE_ICES = config.getPropertyAsInt(REFERENTIAL_CONFIG_OPTIONS.LOCATION_LEVEL_RECTANGLE_ICES_ID); + // Location Levels > GFCM + LocationLevelIds.SUB_AREA_GFCM = config.getPropertyAsInt(REFERENTIAL_CONFIG_OPTIONS.LOCATION_LEVEL_SUB_AREA_GFCM_ID); + LocationLevelIds.DIVISION_GFCM = config.getPropertyAsInt(REFERENTIAL_CONFIG_OPTIONS.LOCATION_LEVEL_DIVISION_GFCM_ID); + LocationLevelIds.SUB_DIVISION_GFCM = config.getPropertyAsInt(REFERENTIAL_CONFIG_OPTIONS.LOCATION_LEVEL_SUB_DIVISION_GFCM_ID); + LocationLevelIds.RECTANGLE_GFCM = config.getPropertyAsInt(REFERENTIAL_CONFIG_OPTIONS.LOCATION_LEVEL_RECTANGLE_GFCM_ID); + // Taxonomic Levels + TaxonomicLevelIds.FAMILY = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.TAXONOMIC_LEVEL_FAMILY_ID); + TaxonomicLevelIds.GENUS = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.TAXONOMIC_LEVEL_GENUS_ID); + TaxonomicLevelIds.SPECIES = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.TAXONOMIC_LEVEL_SPECIES_ID); + TaxonomicLevelIds.SUBSPECIES = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.TAXONOMIC_LEVEL_SUBSPECIES_ID); + // Parameters Groups + ParameterLabelGroups.TAG_ID = config.getPropertyAsStrings(REFERENTIAL_CONFIG_OPTIONS.PARAMETER_GROUP_TAG_ID_LABELS); + ParameterLabelGroups.AGE = config.getPropertyAsStrings(REFERENTIAL_CONFIG_OPTIONS.PARAMETER_GROUP_AGE_LABELS); + ParameterLabelGroups.SEX = config.getPropertyAsStrings(REFERENTIAL_CONFIG_OPTIONS.PARAMETER_GROUP_SEX_LABELS); + ParameterLabelGroups.WEIGHT = config.getPropertyAsStrings(REFERENTIAL_CONFIG_OPTIONS.PARAMETER_GROUP_WEIGHT_LABELS); + ParameterLabelGroups.LENGTH = config.getPropertyAsStrings(REFERENTIAL_CONFIG_OPTIONS.PARAMETER_GROUP_LENGTH_LABELS); + ParameterLabelGroups.MATURITY = config.getPropertyAsStrings(REFERENTIAL_CONFIG_OPTIONS.PARAMETER_GROUP_MATURITY_LABELS); + // Fractions Groups + FractionIdGroups.CALCIFIED_STRUCTURE = config.getPropertyAsNumbers(REFERENTIAL_CONFIG_OPTIONS.FRACTION_GROUP_CALCIFIED_STRUCTURE_IDS); + // PMFM + // TODO generefy this, using Object.keys(PmfmIds) iteration + PmfmIds.TRIP_PROGRESS = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_TRIP_PROGRESS); + PmfmIds.TAG_ID = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_TAG_ID); + PmfmIds.DRESSING = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_DRESSING); + PmfmIds.PRESERVATION = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_PRESERVATION); + PmfmIds.TRAWL_SIZE_CAT = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_TRAWL_SIZE_CAT_ID); + PmfmIds.STRATEGY_LABEL = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_STRATEGY_LABEL_ID); + PmfmIds.AGE = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_AGE_ID); + PmfmIds.SEX = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_SEX_ID); + PmfmIds.PACKAGING = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_PACKAGING_ID); + PmfmIds.SIZE_CATEGORY = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_SIZE_CATEGORY_ID); + PmfmIds.TOTAL_PRICE = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_TOTAL_PRICE_ID); + PmfmIds.AVERAGE_PACKAGING_PRICE = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_AVERAGE_PACKAGING_PRICE_ID); + PmfmIds.AVERAGE_WEIGHT_PRICE = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_AVERAGE_WEIGHT_PRICE_ID); + PmfmIds.SALE_ESTIMATED_RATIO = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_SALE_ESTIMATED_RATIO_ID); + PmfmIds.SALE_RANK_ORDER = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_SALE_RANK_ORDER_ID); + PmfmIds.REFUSED_SURVEY = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_REFUSED_SURVEY_ID); + PmfmIds.GEAR_LABEL = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_GEAR_LABEL_ID); + PmfmIds.HAS_ACCIDENTAL_CATCHES = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_HAS_ACCIDENTAL_CATCHES_ID); + PmfmIds.BATCH_CALCULATED_WEIGHT_LENGTH = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_BATCH_CALCULATED_WEIGHT_LENGTH_ID); + PmfmIds.BATCH_CALCULATED_WEIGHT_LENGTH_SUM = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_BATCH_CALCULATED_WEIGHT_LENGTH_SUM_ID); + PmfmIds.BATCH_SORTING = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_BATCH_SORTING_ID); + PmfmIds.DISCARD_WEIGHT = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_DISCARD_WEIGHT_ID); + PmfmIds.CATCH_WEIGHT = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_CATCH_WEIGHT_ID); + PmfmIds.CHILD_GEAR = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_CHILD_GEAR_ID); + PmfmIds.HULL_MATERIAL = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_HULL_MATERIAL_ID); + PmfmIds.SELECTIVITY_DEVICE = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PMFM_SELECTIVITY_DEVICE_ID); + // Methods + MethodIds.UNKNOWN = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.METHOD_UNKNOWN_ID); + MethodIds.MEASURED_BY_OBSERVER = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.METHOD_MEASURED_BY_OBSERVER_ID); + MethodIds.OBSERVED_BY_OBSERVER = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.METHOD_OBSERVED_BY_OBSERVER_ID); + MethodIds.ESTIMATED_BY_OBSERVER = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.METHOD_ESTIMATED_BY_OBSERVER_ID); + MethodIds.CALCULATED = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.METHOD_CALCULATED_ID); + MethodIds.CALCULATED_WEIGHT_LENGTH = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.METHOD_CALCULATED_WEIGHT_LENGTH_ID); + MethodIds.CALCULATED_WEIGHT_LENGTH_SUM = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.METHOD_CALCULATED_WEIGHT_LENGTH_SUM_ID); + // Matrix + MatrixIds.INDIVIDUAL = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.FRACTION_INDIVIDUAL_ID); + // Units + UnitIds.NONE = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.UNIT_NONE_ID); + // QualityFlag + QualityFlagIds.NOT_COMPLETED = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.QUALITY_FLAG_NOT_COMPLETED_ID); + QualityFlagIds.MISSING = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.QUALITY_FLAG_MISSING_ID); + // ParameterGroups + ParameterGroupIds.SURVEY = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.PARAMETER_GROUP_SURVEY_ID); + // Qualitative value + QualitativeValueIds.DISCARD_OR_LANDING.LANDING = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.QUALITATIVE_VALUE_LANDING_ID); + QualitativeValueIds.DISCARD_OR_LANDING.DISCARD = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.QUALITATIVE_VALUE_DISCARD_ID); + QualitativeValueIds.DRESSING.WHOLE = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.QUALITATIVE_VALUE_DRESSING_WHOLE_ID); + QualitativeValueIds.PRESERVATION.FRESH = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.QUALITATIVE_VALUE_PRESERVATION_FRESH_ID); + QualitativeValueIds.SIZE_UNLI_CAT.NONE = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.QUALITATIVE_VALUE_SIZE_UNLI_CAT_NONE_ID); + QualitativeValueIds.BATCH_SORTING.BULK = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.QUALITATIVE_VALUE_SORTING_BULK_ID); + QualitativeValueIds.BATCH_SORTING.NON_BULK = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.QUALITATIVE_VALUE_SORTING_NON_BULK_ID); + QualitativeValueIds.SEX.UNSEXED = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.QUALITATIVE_VALUE_SEX_UNSEXED_ID); + // Taxon group type + TaxonGroupTypeIds.FAO = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.TAXON_GROUP_TYPE_FAO_ID); + TaxonGroupTypeIds.NATIONAL_METIER = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.TAXON_GROUP_TYPE_NATIONAL_METIER_ID); + TaxonGroupTypeIds.DCF_METIER_LVL_5 = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.TAXON_GROUP_TYPE_DCF_METIER_LVL_5_ID); + // Vessel types + VesselTypeIds.FISHING_VESSEL = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.VESSEL_TYPE_FISHING_VESSEL); + VesselTypeIds.SCIENTIFIC_RESEARCH_VESSEL = +config.getProperty(REFERENTIAL_CONFIG_OPTIONS.VESSEL_TYPE_SCIENTIFIC_RESEARCH_VESSEL); + // TODO: add other enumerations + // Force an update default values (e.g. when using LocationLevelId) + ModelEnumUtils.refreshDefaultValues(); + // Location level groups + // /!\ should be call AFTER ModelEnumUtils.refreshDefaultValues() + if (config.hasProperty(REFERENTIAL_CONFIG_OPTIONS.LOCATION_LEVEL_LOCATIONS_AREA_IDS)) { + LocationLevelGroups.FISHING_AREA = config.getPropertyAsNumbers(REFERENTIAL_CONFIG_OPTIONS.LOCATION_LEVEL_LOCATIONS_AREA_IDS); + } + if (config.hasProperty(REFERENTIAL_CONFIG_OPTIONS.WEIGHT_LENGTH_CONVERSION_AREA_IDS)) { + LocationLevelGroups.WEIGHT_LENGTH_CONVERSION_AREA = config.getPropertyAsNumbers(REFERENTIAL_CONFIG_OPTIONS.WEIGHT_LENGTH_CONVERSION_AREA_IDS); + } + // Force update ProgramProperties default + // /!\ should be call AFTER overrides from config (e.g. in case an option use LocationLevelGroups.FISHING_AREA) + ProgramPropertiesUtils.refreshDefaultValues(); + } +}; +ReferentialRefService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [GraphqlService, + ReferentialService, + MetierService, + TaxonNameRefService, + TaxonGroupRefService, + WeightLengthConversionRefService, + RoundWeightConversionRefService, + AccountService, + ConfigService, + NetworkService, + EntitiesStorage]) +], ReferentialRefService); +export { ReferentialRefService }; +//# sourceMappingURL=referential-ref.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/referential-ref.service.js.map b/out-tsc/app/app/referential/services/referential-ref.service.js.map new file mode 100644 index 000000000..65413a3a1 --- /dev/null +++ b/out-tsc/app/app/referential/services/referential-ref.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential-ref.service.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/referential-ref.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/referential.fragments.js b/out-tsc/app/app/referential/services/referential.fragments.js new file mode 100644 index 000000000..ab656a086 --- /dev/null +++ b/out-tsc/app/app/referential/services/referential.fragments.js @@ -0,0 +1,319 @@ +import { gql } from '@apollo/client/core'; +export const ReferentialFragments = { + lightReferential: gql `fragment LightReferentialFragment on ReferentialVO { + id + label + name + rankOrder + statusId + entityName + __typename + }`, + referential: gql `fragment ReferentialFragment on ReferentialVO { + id + label + name + description + comments + updateDate + creationDate + statusId + validityStatusId + levelId + parentId + parent { + id + label + name + entityName + __typename + } + rankOrder + entityName + __typename + }`, + fullReferential: gql `fragment FullReferentialFragment on ReferentialVO { + id + label + name + description + comments + updateDate + creationDate + statusId + validityStatusId + levelId + parentId + parent { + id + label + name + entityName + __typename + } + rankOrder + entityName + properties + __typename + }`, + department: gql `fragment DepartmentFragment on DepartmentVO { + id + label + name + logo + __typename + }`, + lightDepartment: gql `fragment LightDepartmentFragment on DepartmentVO { + id + label + name + logo + __typename + }`, + lightPerson: gql `fragment LightPersonFragment on PersonVO { + id + firstName + lastName + avatar + department { + id + label + name + __typename + } + __typename + }`, + location: gql `fragment LocationFragment on LocationVO { + id + label + name + entityName + __typename + }`, + taxonName: gql `fragment TaxonNameFragment on TaxonNameVO { + id + label + name + statusId + levelId + referenceTaxonId + entityName + isReferent + __typename + }`, + fullTaxonName: gql `fragment FullTaxonNameFragment on TaxonNameVO { + id + label + name + statusId + levelId + description + comments + updateDate + creationDate + referenceTaxonId + parentTaxonName { + id + label + name + entityName + __typename + } + entityName + isReferent + isNaming + isVirtual + taxonomicLevel { + id + label + name + entityName + __typename + } + startDate + endDate + __typename + }`, + lightTaxonName: gql `fragment LightTaxonNameFragment on TaxonNameVO { + id + label + name + statusId + levelId + description + comments + updateDate + creationDate + referenceTaxonId + parentId + entityName + isReferent + isNaming + isVirtual + taxonomicLevelId + taxonGroupIds + startDate + endDate + __typename + }`, + taxonGroup: gql `fragment TaxonGroupFragment on TaxonGroupVO { + id + label + name + entityName + taxonNames { + ...TaxonNameFragment + } + __typename + }`, + lightMetier: gql `fragment LightMetierFragment on MetierVO { + id + label + name + statusId + validityStatusId + levelId + entityName + taxonGroup { + id + label + name + levelId + entityName + __typename + } + __typename + }`, + metier: gql `fragment MetierFragment on MetierVO { + id + label + name + entityName + taxonGroup { + id + label + name + entityName + __typename + } + gear { + id + label + name + entityName + __typename + } + __typename + }`, + lightPmfm: gql `fragment LightPmfmFragment on PmfmVO { + id + label + name + type + minValue + maxValue + unitLabel + defaultValue + maximumNumberDecimals + signifFiguresNumber + detectionThreshold + precision + unitId + parameterId + matrixId + fractionId + methodId + levelId: parameterId + entityName + __typename + }`, + pmfm: gql `fragment PmfmFragment on PmfmVO { + id + label + name + statusId + updateDate + creationDate + entityName + type + minValue + maxValue + defaultValue + maximumNumberDecimals + signifFiguresNumber + detectionThreshold + precision + parameter { + ...ParameterFragment + } + matrix { + ...LightReferentialFragment + } + fraction { + ...LightReferentialFragment + } + method { + ...LightReferentialFragment + } + unit { + ...LightReferentialFragment + } + qualitativeValues { + ...ReferentialFragment + } + __typename + }`, + pmfmFull: gql `fragment PmfmFullFragment on PmfmVO { + id + label + name + completeName + unitLabel + statusId + updateDate + creationDate + entityName + type + minValue + maxValue + defaultValue + maximumNumberDecimals + signifFiguresNumber + detectionThreshold + precision + parameter { + ...ParameterFragment + } + matrix { + ...LightReferentialFragment + } + fraction { + ...LightReferentialFragment + } + method { + ...LightReferentialFragment + } + unit { + ...LightReferentialFragment + } + qualitativeValues { + ...ReferentialFragment + } + __typename + }`, + parameter: gql `fragment ParameterFragment on ParameterVO { + id + label + name + type + statusId + creationDate + updateDate + entityName + qualitativeValues { + ...ReferentialFragment + } + __typename + }`, +}; +//# sourceMappingURL=referential.fragments.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/referential.fragments.js.map b/out-tsc/app/app/referential/services/referential.fragments.js.map new file mode 100644 index 000000000..9835995f7 --- /dev/null +++ b/out-tsc/app/app/referential/services/referential.fragments.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential.fragments.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/referential.fragments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,qBAAqB,CAAC;AAExC,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,gBAAgB,EAAE,GAAG,CAAA;;;;;;;;IAQnB;IACF,WAAW,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;IAsBd;IACF,eAAe,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;IAuBlB;IACF,UAAU,EAAE,GAAG,CAAA;;;;;;IAMb;IACF,eAAe,EAAE,GAAG,CAAA;;;;;;IAMlB;IACF,WAAW,EAAE,GAAG,CAAA;;;;;;;;;;;;IAYd;IACF,QAAQ,EAAE,GAAG,CAAA;;;;;;IAMX;IACF,SAAS,EAAE,GAAG,CAAA;;;;;;;;;;IAUZ;IACF,aAAa,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgChB;IACF,cAAc,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;IAqBjB;IACF,UAAU,EAAE,GAAG,CAAA;;;;;;;;;IASb;IACF,WAAW,EAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;IAiBf;IACF,MAAM,EAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;IAoBV;IACF,SAAS,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;IAqBZ;IACF,IAAI,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmCP;IACF,QAAQ,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqCX;IACF,SAAS,EAAE,GAAG,CAAA;;;;;;;;;;;;;IAaZ;CACH,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/referential.service.js b/out-tsc/app/app/referential/services/referential.service.js new file mode 100644 index 000000000..4bca3a3a2 --- /dev/null +++ b/out-tsc/app/app/referential/services/referential.service.js @@ -0,0 +1,432 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { Inject, Injectable, InjectionToken, Optional } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { map } from 'rxjs/operators'; +import { ErrorCodes } from './errors'; +import { AccountService, BaseGraphqlService, EntityUtils, GraphqlService, isNil, isNotNil, LocalSettingsService, StatusIds, toNumber, } from '@sumaris-net/ngx-components'; +import { ReferentialFragments } from './referential.fragments'; +import { environment } from '@environments/environment'; +import { ReferentialFilter } from './filter/referential.filter'; +import { FullReferential } from '@app/referential/services/model/referential.model'; +export const ReferentialQueries = { + // Load + load: gql `query Referential($entityName: String, $id: Int){ + data: referential(entityName: $entityName, id: $id){ + ...FullReferentialFragment + } + } + ${ReferentialFragments.fullReferential}`, + // Load all full + loadAllFull: gql `query FullReferentials($entityName: String, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: ReferentialFilterVOInput){ + data: referentials(entityName: $entityName, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...FullReferentialFragment + } + } + ${ReferentialFragments.fullReferential}`, + // Load all + loadAll: gql `query Referentials($entityName: String, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: ReferentialFilterVOInput){ + data: referentials(entityName: $entityName, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...ReferentialFragment + } + } + ${ReferentialFragments.referential}`, + // Load all with total + loadAllWithTotal: gql `query ReferentialsWithTotal($entityName: String, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: ReferentialFilterVOInput){ + data: referentials(entityName: $entityName, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...ReferentialFragment + } + total: referentialsCount(entityName: $entityName, filter: $filter) + } + ${ReferentialFragments.referential}`, + countAll: gql `query ReferentialsCount($entityName: String, $filter: ReferentialFilterVOInput){ + total: referentialsCount(entityName: $entityName, filter: $filter) + }`, + loadTypes: gql `query ReferentialTypes{ + data: referentialTypes { + id + level + __typename + } + }` +}; +const ReferentialMutations = { + saveAll: gql `mutation SaveReferentials($data:[ReferentialVOInput]){ + data: saveReferentials(referentials: $data){ + ...ReferentialFragment + } + } + ${ReferentialFragments.referential}`, + deleteAll: gql ` + mutation deleteReferentials($entityName: String!, $ids:[Int]){ + deleteReferentials(entityName: $entityName, ids: $ids) + }` +}; +const ReferentialSubscriptions = { + listenChanges: gql `subscription UpdateReferential($entityName: String!, $id: Int!, $interval: Int){ + data: updateReferential(entityName: $entityName, id: $id, interval: $interval) { + ...ReferentialFragment + } + } + ${ReferentialFragments.referential}`, +}; +export const DATA_TYPE = new InjectionToken('dataType'); +let ReferentialService = class ReferentialService extends BaseGraphqlService { + constructor(graphql, accountService, settings, dataType) { + super(graphql, environment); + this.graphql = graphql; + this.accountService = accountService; + this.settings = settings; + this.queries = ReferentialQueries; + this.mutations = ReferentialMutations; + this.dataType = dataType || FullReferential; + this.settings.ready().then(() => { + // No limit for updatable watch queries, if desktop. Limit to 3 when mobile + this._mutableWatchQueriesMaxCount = this.settings.mobile ? 3 : -1; + }); + // For DEV only + this._debug = !environment.production; + } + watchAll(offset, size, sortBy, sortDirection, filter, opts) { + if (!filter || !filter.entityName) { + console.error('[referential-service] Missing filter.entityName'); + // eslint-disable-next-line no-throw-literal + throw { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }; + } + filter = this.asFilter(filter); + const entityName = filter.entityName; + const uniqueEntityName = filter.entityName + (filter.searchJoin || ''); + const variables = { + entityName, + offset: offset || 0, + size: size || 100, + sortBy: sortBy || 'label', + sortDirection: sortDirection || 'asc', + filter: filter && filter.asPodObject() + }; + let now = this._debug && Date.now(); + if (this._debug) + console.debug(`[referential-service] Loading ${uniqueEntityName}...`, variables); + const withTotal = (!opts || opts.withTotal !== false); + const query = withTotal ? this.queries.loadAllWithTotal : this.queries.loadAll; + return this.mutableWatchQuery({ + queryName: withTotal ? 'LoadAllWithTotal' : 'LoadAll', + query, + arrayFieldName: 'data', + totalFieldName: withTotal ? 'total' : undefined, + insertFilterFn: (d) => d.entityName === entityName, + variables, + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || 'network-only' + }) + .pipe(map(({ data, total }) => { + const entities = (data || []).map(json => this.fromObject(json)); + entities.forEach(r => r.entityName = uniqueEntityName); + if (now) { + console.debug(`[referential-service] ${uniqueEntityName} loaded in ${Date.now() - now}ms`, entities); + now = null; + } + return { + data: entities, + total + }; + })); + } + loadAll(offset, size, sortBy, sortDirection, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!filter || !filter.entityName) { + console.error('[referential-service] Missing filter.entityName'); + // eslint-disable-next-line no-throw-literal + throw { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }; + } + filter = this.asFilter(filter); + const entityName = filter.entityName; + const uniqueEntityName = filter.entityName + (filter.searchJoin || ''); + const debug = this._debug && (!opts || opts.debug !== false); + const variables = { + entityName, + offset: offset || 0, + size: size || 100, + sortBy: sortBy || filter.searchAttribute || 'label', + sortDirection: sortDirection || 'asc', + filter: filter && filter.asPodObject() + }; + const now = Date.now(); + if (debug) + console.debug(`[referential-service] Loading ${uniqueEntityName} items...`, variables); + const withTotal = (!opts || opts.withTotal !== false); + const query = withTotal ? this.queries.loadAllWithTotal : this.queries.loadAll; + const res = yield this.graphql.query({ + query, + variables, + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || 'network-only' + }); + let data = (res && res.data || []); + // Always use unique entityName, if need + if (filter.entityName !== uniqueEntityName) { + data = data.map(r => (Object.assign(Object.assign({}, r), { entityName: uniqueEntityName }))); + } + // Convert to entities + const entities = (!opts || opts.toEntity !== false) + ? data.map(json => this.fromObject(json)) + : data; + if (debug) + console.debug(`[referential-service] ${uniqueEntityName} items loaded in ${Date.now() - now}ms`); + return { + data: entities, + total: res.total + }; + }); + } + saveAll(entities, options) { + return __awaiter(this, void 0, void 0, function* () { + if (!entities) + return entities; + // Nothing to save: skip + if (!entities.length) + return; + const entityName = entities[0].entityName; + if (!entityName) { + console.error('[referential-service] Could not save referential: missing entityName'); + throw { code: ErrorCodes.SAVE_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.SAVE_REFERENTIAL_ERROR' }; + } + if (entities.length !== entities.filter(e => e.entityName === entityName).length) { + console.error('[referential-service] Could not save referential: more than one entityName found in the array to save!'); + throw { code: ErrorCodes.SAVE_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.SAVE_REFERENTIAL_ERROR' }; + } + const json = entities.map(entity => this.asObject(entity)); + const now = Date.now(); + if (this._debug) + console.debug(`[referential-service] Saving all ${entityName}...`, json); + yield this.graphql.mutate({ + mutation: this.mutations.saveAll, + variables: { + data: json + }, + error: { code: ErrorCodes.SAVE_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.SAVE_REFERENTIAL_ERROR' }, + update: (cache, { data }) => { + const savedEntities = data === null || data === void 0 ? void 0 : data.data; + if (savedEntities) { + // Update entities (id and update date) + entities.forEach(entity => { + const savedEntity = savedEntities.find(e => (e.id === entity.id || e.label === entity.label)); + if (savedEntity !== entity) { + EntityUtils.copyIdAndUpdateDate(savedEntity, entity); + } + }); + // Update the cache + this.insertIntoMutableCachedQueries(cache, { + queries: this.getLoadQueries(), + data: savedEntities + }); + } + if (this._debug) + console.debug(`[referential-service] ${entityName} saved in ${Date.now() - now}ms`, entities); + } + }); + return entities; + }); + } + load(id, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!opts || !opts.entityName) { + console.error('[referential-service] Missing opts.entityName'); + // eslint-disable-next-line no-throw-literal + throw { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }; + } + const { data } = yield this.graphql.query({ + query: ReferentialQueries.load, + variables: { + entityName: opts.entityName, + id + }, + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' } + }); + const target = this.fromObject(data); + return target; + }); + } + delete(data, opts) { + return this.deleteAll([data], opts); + } + canUserWrite(data, opts) { + return this.accountService.isAdmin(); + } + listenChanges(id, opts) { + if (isNil(id)) + throw Error('Missing argument \'id\' '); + if (isNil(opts.entityName)) + throw Error('Missing argument \'opts.entityName\' '); + const variables = Object.assign({ id, entityName: opts.entityName, interval: toNumber(opts && opts.interval, 0) }, opts === null || opts === void 0 ? void 0 : opts.variables); + if (this._debug) + console.debug(this._logPrefix + `[WS] Listening for changes on ${opts.entityName}#${id}...`); + return this.graphql.subscribe({ + query: ReferentialSubscriptions.listenChanges, + variables, + error: { + code: ErrorCodes.SUBSCRIBE_REFERENTIAL_ERROR, + message: 'ERROR.SUBSCRIBE_REFERENTIAL_ERROR' + } + }) + .pipe(map(({ data }) => { + const entity = (!opts || opts.toEntity !== false) ? data && this.fromObject(data) : data; + if (entity && this._debug) + console.debug(this._logPrefix + `[WS] Received changes on ${opts.entityName}#${id}`, entity); + // TODO: missing = deleted ? + if (!entity) + console.warn(this._logPrefix + `[WS] Received deletion on ${opts.entityName}#${id} - TODO check implementation`); + return entity; + })); + } + existsByLabel(label, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!filter || !filter.entityName || !label) { + console.error('[referential-service] Missing \'filter.entityName\' or \'label\''); + throw { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }; + } + filter = this.asFilter(filter); + filter.label = label; + const { total } = yield this.graphql.query({ + query: this.queries.countAll, + variables: { + entityName: filter.entityName, + filter: filter.asPodObject() + }, + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || 'network-only' + }); + return total > 0; + }); + } + /** + * Save a referential entity + * + * @param entity + * @param options + */ + save(entity, options) { + return __awaiter(this, void 0, void 0, function* () { + if (!entity.entityName) { + console.error('[referential-service] Missing entityName'); + throw { code: ErrorCodes.SAVE_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.SAVE_REFERENTIAL_ERROR' }; + } + // Transform into json + const json = this.asObject(entity); + const isNew = isNil(json.id); + const now = Date.now(); + if (this._debug) + console.debug(`[referential-service] Saving ${entity.entityName}...`, json); + yield this.graphql.mutate({ + mutation: this.mutations.saveAll, + variables: { + data: [json] + }, + error: { code: ErrorCodes.SAVE_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.SAVE_REFERENTIAL_ERROR' }, + update: (cache, { data }) => { + // Update entity + const savedEntity = data && data.data && data.data[0]; + if (savedEntity !== entity) { + if (this._debug) + console.debug(`[referential-service] ${entity.entityName} saved in ${Date.now() - now}ms`, entity); + EntityUtils.copyIdAndUpdateDate(savedEntity, entity); + } + // Update the cache + if (isNew) { + this.insertIntoMutableCachedQueries(cache, { + queries: this.getLoadQueries(), + data: savedEntity + }); + } + if (options === null || options === void 0 ? void 0 : options.update) { + options.update(cache, { data }); + } + } + }); + return entity; + }); + } + /** + * Delete referential entities + */ + deleteAll(entities, options) { + return __awaiter(this, void 0, void 0, function* () { + // Filter saved entities + entities = entities && entities + .filter(e => !!e.id && !!e.entityName) || []; + // Nothing to save: skip + if (!entities.length) + return; + const entityName = entities[0].entityName; + const ids = entities.filter(e => e.entityName === entityName).map(t => t.id); + // Check that all entities have the same entityName + if (entities.length > ids.length) { + console.error('[referential-service] Could not delete referentials: only one entityName is allowed'); + throw { code: ErrorCodes.DELETE_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.DELETE_REFERENTIAL_ERROR' }; + } + const now = new Date(); + if (this._debug) + console.debug(`[referential-service] Deleting ${entityName}...`, ids); + yield this.graphql.mutate({ + mutation: this.mutations.deleteAll, + variables: { + entityName, + ids + }, + error: { code: ErrorCodes.DELETE_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.DELETE_REFERENTIAL_ERROR' }, + update: (proxy) => { + // Remove from cache + this.removeFromMutableCachedQueriesByIds(proxy, { + queries: this.getLoadQueries(), + ids + }); + if (options && options.update) { + options.update(proxy); + } + if (this._debug) + console.debug(`[referential-service] ${entityName} deleted in ${new Date().getTime() - now.getTime()}ms`); + } + }); + }); + } + /** + * Load referential types + */ + watchTypes() { + if (this._debug) + console.debug('[referential-service] Loading referential types...'); + return this.graphql.watchQuery({ + query: this.queries.loadTypes, + variables: null, + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' } + }) + .pipe(map(({ data }) => (data || []))); + } + asFilter(filter) { + return ReferentialFilter.fromObject(filter); + } + /* -- protected methods -- */ + fromObject(source, opts) { + const target = new this.dataType(); + target.fromObject(source, opts); + return target; + } + asObject(source, opts) { + return source.asObject(opts); + } + fillDefaultProperties(entity) { + entity.statusId = isNotNil(entity.statusId) ? entity.statusId : StatusIds.ENABLE; + } + getLoadQueries() { + return [this.queries.loadAll, this.queries.loadAllWithTotal].filter(isNotNil); + } +}; +ReferentialService = __decorate([ + Injectable({ providedIn: 'root' }), + __param(3, Optional()), + __param(3, Inject(DATA_TYPE)), + __metadata("design:paramtypes", [GraphqlService, + AccountService, + LocalSettingsService, Function]) +], ReferentialService); +export { ReferentialService }; +//# sourceMappingURL=referential.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/referential.service.js.map b/out-tsc/app/app/referential/services/referential.service.js.map new file mode 100644 index 000000000..786dcb33b --- /dev/null +++ b/out-tsc/app/app/referential/services/referential.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential.service.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/referential.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/sampling-strategy.service.js b/out-tsc/app/app/referential/services/sampling-strategy.service.js new file mode 100644 index 000000000..639529bc2 --- /dev/null +++ b/out-tsc/app/app/referential/services/sampling-strategy.service.js @@ -0,0 +1,348 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable, Injector } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { ReferentialFragments } from './referential.fragments'; +import { AccountService, ConfigService, DateUtils, EntitiesStorage, firstArrayValue, isEmptyArray, isNil, isNilOrBlank, isNilOrNaN, isNotNil, NetworkService, ReferentialRef, } from '@sumaris-net/ngx-components'; +import { CacheService } from 'ionic-cache'; +import { StrategyFragments } from './strategy.fragments'; +import { StrategyService } from './strategy.service'; +import { timer } from 'rxjs'; +import { map, mergeMap, startWith, switchMap } from 'rxjs/operators'; +import { Parameters } from './model/model.enum'; +import { PmfmService } from './pmfm.service'; +import { ReferentialRefService } from './referential-ref.service'; +import { SamplingStrategy, StrategyEffort } from './model/sampling-strategy.model'; +import { BaseReferentialService } from './base-referential-service.class'; +import { StrategyFilter } from '@app/referential/services/filter/strategy.filter'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +const SamplingStrategyQueries = { + loadAll: gql ` + query DenormalizedStrategies($filter: StrategyFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String) { + data: strategies(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection) { + ...SamplingStrategyRefFragment + } + total: strategiesCount(filter: $filter) + } + ${StrategyFragments.samplingStrategyRef} + ${StrategyFragments.appliedStrategy} + ${StrategyFragments.appliedPeriod} + ${StrategyFragments.lightPmfmStrategy} + ${StrategyFragments.strategyDepartment} + ${StrategyFragments.taxonNameStrategy} + ${ReferentialFragments.lightPmfm} + ${ReferentialFragments.lightReferential} + ${ReferentialFragments.taxonName} + `, + loadAllWithTotal: gql ` + query DenormalizedStrategiesWithTotal($filter: StrategyFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String) { + data: strategies(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection) { + ...SamplingStrategyRefFragment + } + total: strategiesCount(filter: $filter) + } + ${StrategyFragments.samplingStrategyRef} + ${StrategyFragments.appliedStrategy} + ${StrategyFragments.appliedPeriod} + ${StrategyFragments.lightPmfmStrategy} + ${StrategyFragments.strategyDepartment} + ${StrategyFragments.taxonNameStrategy} + ${ReferentialFragments.lightPmfm} + ${ReferentialFragments.lightReferential} + ${ReferentialFragments.taxonName} + `, + loadEffort: gql ` + query StrategyEffort($ids: [String!]!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $cacheDuration: String) { + data: extraction( + type: { format: "strat" } + offset: $offset + size: $size + sortBy: $sortBy + sortDirection: $sortDirection + cacheDuration: $cacheDuration + filter: { sheetName: "SM", criteria: [{ sheetName: "ST", name: "strategy_id", operator: "IN", values: $ids }] } + ) + } + `, +}; +let SamplingStrategyService = class SamplingStrategyService extends BaseReferentialService { + constructor(injector, network, accountService, cache, entities, configService, strategyService, pmfmService, referentialRefService) { + super(injector, SamplingStrategy, StrategyFilter, { + queries: SamplingStrategyQueries + }); + this.network = network; + this.accountService = accountService; + this.cache = cache; + this.entities = entities; + this.configService = configService; + this.strategyService = strategyService; + this.pmfmService = pmfmService; + this.referentialRefService = referentialRefService; + } + watchAll(offset, size, sortBy, sortDirection, filter, opts) { + // Call normal watch all + return super.watchAll(offset, size, sortBy, sortDirection, filter, Object.assign({ fetchPolicy: 'network-only' }, opts)) + .pipe( + // Then fill parameter groups + mergeMap(res => this.fillParameterGroups(res.data).then(_ => res)), + // Then fill efforts (but NOT wait end, before return a value - using startWith) + switchMap(res => timer(100) + .pipe(map(_ => res)) + .pipe( + // DEBUG + //tap(_ => console.debug('[sampling-strategy-service] timer reach !')), + mergeMap((_) => this.fillEfforts(res.data).then(() => res)), startWith(res)))); + } + loadAll(offset, size, sortBy, sortDirection, filter, opts) { + const _super = Object.create(null, { + loadAll: { get: () => super.loadAll } + }); + return __awaiter(this, void 0, void 0, function* () { + const res = yield _super.loadAll.call(this, offset, size, sortBy, sortDirection, filter, opts); + // Fill entities (parameter groups, effort, etc) + return this.fillEntities(res, opts); + }); + } + deleteAll(entities, options) { + return __awaiter(this, void 0, void 0, function* () { + return this.strategyService.deleteAll(entities, options); + }); + } + load(id, opts) { + return __awaiter(this, void 0, void 0, function* () { + const data = yield this.strategyService.load(id, Object.assign(Object.assign({}, opts), { toEntity: false })); + const entity = (!opts || opts.toEntity !== false) ? SamplingStrategy.fromObject(data) : data; + yield this.fillEntities({ data: [entity] }, Object.assign({ withEffort: true, withParameterGroups: false }, opts)); + return entity; + }); + } + computeNextSampleTagId(strategyLabel, separator, nbDigit) { + return __awaiter(this, void 0, void 0, function* () { + return this.strategyService.computeNextSampleTagId(strategyLabel, separator, nbDigit); + }); + } + loadAnalyticReferenceByLabel(label) { + return __awaiter(this, void 0, void 0, function* () { + if (isNilOrBlank(label)) + return undefined; + try { + const res = yield this.strategyService.loadAllAnalyticReferences(0, 1, 'label', 'desc', { label }); + return firstArrayValue(res && res.data || []); + } + catch (err) { + console.error('Error while loading analyticReference by label', err); + return ReferentialRef.fromObject({ label }); + } + }); + } + canUserWrite(data, opts) { + return this.strategyService.canUserWrite(data, opts); + } + save(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + const isNew = isNil(entity.id); + console.debug('[sampling-strategy-service] Saving sampling strategy...'); + yield this.strategyService.save(entity, Object.assign(Object.assign({}, opts), { update: (cache, { data }) => { + const savedEntity = data && data.data; + // Copy id + this.copyIdAndUpdateDate(savedEntity, entity); + // Update query cache + if (isNew && this.watchQueriesUpdatePolicy === 'update-cache') { + this.insertIntoMutableCachedQueries(cache, { + queries: this.getLoadQueries(), + data: entity.asObject(Object.assign(Object.assign({}, NOT_MINIFY_OPTIONS), { keepEffort: true })) + }); + } + } })); + // Update entity effort + if (!isNew) { + yield this.fillEntities({ data: [entity] }, opts); + } + return entity; + }); + } + duplicateAllToYear(sources, year) { + return __awaiter(this, void 0, void 0, function* () { + if (isEmptyArray(sources)) + return []; + if (isNilOrNaN(year) || typeof year !== 'number' || year < 1970) + throw Error('Missing or invalid year argument (should be YYYY format)'); + // CLear cache (only once) + yield this.strategyService.clearCache(); + const savedEntities = []; + // WARN: do not use a Promise.all, because parallel execution not working (label computation need series execution) + for (const source of sources) { + const newLabelPrefix = year.toString().substring(2) + source.label.substring(2, 9); + const newLabel = yield this.strategyService.computeNextLabel(source.programId, newLabelPrefix, 3); + const target = yield this.strategyService.cloneToYear(source, year, newLabel); + const targetAsSampling = SamplingStrategy.fromObject(target.asObject()); + const savedEntity = yield this.save(targetAsSampling, { clearCache: false /*already done once*/ }); + savedEntities.push(savedEntity); + } + return savedEntities; + }); + } + /* -- protected -- */ + watchPmfmIdsByParameterLabels(parameterLabels) { + return this.referentialRefService.watchAll(0, 1000, 'id', 'asc', { + entityName: 'Pmfm', + levelLabels: parameterLabels + }, { + withTotal: false + }).pipe(map((res) => (res.data || []).map(p => p.id))); + } + loadStrategyEffortByDate(programLabel, strategyLabel, date, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!programLabel || !strategyLabel || !date) + throw new Error('Missing a required argument'); + const { data } = yield this.loadAll(0, 1, 'label', 'asc', { + label: strategyLabel, + levelLabel: programLabel + }, { + withEffort: opts === null || opts === void 0 ? void 0 : opts.withRealized, + withTotal: false, + withParameterGroups: false, + fetchPolicy: 'cache-first' + }); + const strategy = firstArrayValue(data); + if (strategy && strategy.effortByQuarter) { + const effortByQuarter = strategy.effortByQuarter[date === null || date === void 0 ? void 0 : date.quarter()]; + // Check same year + if (effortByQuarter && ((_a = effortByQuarter.startDate) === null || _a === void 0 ? void 0 : _a.year()) === (date === null || date === void 0 ? void 0 : date.year())) { + return effortByQuarter; + } + } + return undefined; // No effort at this date + }); + } + fillEntities(res, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!res || isEmptyArray(res.data)) + return res; + const jobs = []; + // Fill parameters groups + if (!opts || opts.withParameterGroups !== false) { + jobs.push(this.fillParameterGroups(res.data)); + } + // Fill strategy efforts + if (!opts || opts.withEffort !== false) { + jobs.push(this.fillEfforts(res.data, opts) + .catch(err => { + console.error('Error while computing effort: ' + err && err.message || err, err); + res.errors = (res.errors || []).concat(err); + })); + } + // Wait jobs end + if (jobs.length) + yield Promise.all(jobs); + return res; + }); + } + /** + * Fill parameterGroups attribute, on each denormalized strategy + * + * @param entities + */ + fillParameterGroups(entities) { + return __awaiter(this, void 0, void 0, function* () { + // DEBUG + //console.debug('[sampling-strategy-service] Fill parameters groups...'); + const parameterLabelGroups = Parameters.getSampleParameterLabelGroups({ + excludedGroups: ['TAG_ID', 'DRESSING', 'PRESERVATION'] + }); + const groupKeys = Object.keys(parameterLabelGroups); + const pmfmIdsMap = yield this.pmfmService.loadIdsGroupByParameterLabels(parameterLabelGroups); + entities.forEach(s => { + const pmfms = s.pmfms; + s.parameterGroups = (pmfms && groupKeys || []).reduce((res, groupKey) => pmfms.some(p => { var _a; return pmfmIdsMap[groupKey].includes(p.pmfmId) || (((_a = p.parameter) === null || _a === void 0 ? void 0 : _a.label) && p.parameter.label.includes(groupKey)); }) ? res.concat(groupKey) : res, []); + }); + }); + } + fillEfforts(entities, opts) { + return __awaiter(this, void 0, void 0, function* () { + const withCache = (!opts || opts.cache !== false); + const cacheDuration = withCache ? (opts && opts.cacheDuration || 'default') : undefined; + const now = Date.now(); + console.debug(`[sampling-strategy-service] Fill efforts on ${entities.length} strategies... {cache: ${withCache}${withCache ? ', cacheDuration: \'' + cacheDuration + '\'' : ''}}`); + const ids = (entities || []) + .filter(s => isNotNil(s.id) && (!withCache || !s.hasRealizedEffort)) // Remove new, or existing efforts + .map(s => s.id.toString()); + if (isEmptyArray(ids)) { + console.debug(`[sampling-strategy-service] No effort to load: Skip`); + return; // Skip is empty + } + const variables = { + ids, + offset: 0, + size: 1000, + sortBy: 'start_date', + sortDirection: 'asc', + cacheDuration + }; + console.debug('[sampling-strategy-service] Fill efforts using variables:', variables); + const { data } = yield this.graphql.query({ + query: SamplingStrategyQueries.loadEffort, + variables, + fetchPolicy: opts && opts.fetchPolicy || 'no-cache' + }); + entities.forEach(s => { + // Clean existing efforts + s.efforts = undefined; + // Clean realized efforts + // /!\ BUT keep expected effort (comes from strategies table) + if (s.effortByQuarter) { + [1, 2, 3, 4].map(quarter => s.effortByQuarter[quarter]) + .filter(isNotNil) + .forEach(effort => { + effort.realizedEffort = 0; + }); + } + }); + // Add effort to entities + (data || []) + .map(StrategyEffort.fromObject) + .forEach(effort => { + const strategy = entities.find(s => s.label === effort.strategyLabel); + if (strategy) { + strategy.efforts = strategy.efforts || []; + if (isNotNil(effort.quarter)) { + strategy.effortByQuarter = strategy.effortByQuarter || {}; + const existingEffort = strategy.effortByQuarter[effort.quarter]; + // Set the quarter's effort + if (!existingEffort) { + // Do a copy, to be able to increment if more than one effort by quarter + //strategy.effortByQuarter[effort.quarter] = effort.clone(); => Code disable since it keeps strategy efforts for deleted applied period efforts + } + // More than one effort, on this quarter + else { + effort.expectedEffort = existingEffort.expectedEffort; // Update efforts expected effort with last value from effortByQuarter. + strategy.efforts.push(effort); // moved here from global loop in order to prevent copy of obsolete deleted efforts. + // Merge properties + existingEffort.startDate = DateUtils.min(existingEffort.startDate, effort.startDate); + existingEffort.endDate = DateUtils.max(existingEffort.endDate, effort.endDate); + existingEffort.realizedEffort += effort.realizedEffort; + } + } + } + else { + console.warn(`[sampling-strategy-service] An effort has unknown strategy '${effort.strategyLabel}'. Skipping. Please check GraphQL query 'extraction' of type 'strat'.`); + } + }); + console.debug(`[sampling-strategy-service] Efforts filled in ${Date.now() - now}ms`); + }); + } +}; +SamplingStrategyService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [Injector, + NetworkService, + AccountService, + CacheService, + EntitiesStorage, + ConfigService, + StrategyService, + PmfmService, + ReferentialRefService]) +], SamplingStrategyService); +export { SamplingStrategyService }; +//# sourceMappingURL=sampling-strategy.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/sampling-strategy.service.js.map b/out-tsc/app/app/referential/services/sampling-strategy.service.js.map new file mode 100644 index 000000000..877736882 --- /dev/null +++ b/out-tsc/app/app/referential/services/sampling-strategy.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sampling-strategy.service.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/sampling-strategy.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/software.service.js b/out-tsc/app/app/referential/services/software.service.js new file mode 100644 index 000000000..eeae3b5c4 --- /dev/null +++ b/out-tsc/app/app/referential/services/software.service.js @@ -0,0 +1,135 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { of } from 'rxjs'; +import { ErrorCodes } from './errors'; +import { AccountService, BaseGraphqlService, GraphqlService, isNotNil, ServerErrorCodes, Software } from '@sumaris-net/ngx-components'; +import { environment } from '@environments/environment'; +/* ------------------------------------ + * GraphQL queries + * ------------------------------------*/ +export const Fragments = { + software: gql ` + fragment SoftwareFragment on SoftwareVO { + id + label + name + description + comments + properties + updateDate + creationDate + statusId + __typename + } + ` +}; +const LoadQuery = gql ` +query Software($id: Int, $label: String) { + software(id: $id, label: $label){ + ...SoftwareFragment + } +} + ${Fragments.software} +`; +// Save (create or update) mutation +const SaveMutation = gql ` + mutation SaveConfiguration($software:SoftwareVOInput){ + saveSoftware(software: $software){ + ...SoftwareFragment + } + } + ${Fragments.software} +`; +let SoftwareService = class SoftwareService extends BaseGraphqlService { + constructor(graphql, accountService) { + super(graphql, { production: environment.production }); + this.graphql = graphql; + this.accountService = accountService; + if (this._debug) + console.debug('[software-service] Creating service'); + } + load(id, opts) { + return __awaiter(this, void 0, void 0, function* () { + return this.loadQuery(LoadQuery, { id }, opts); + }); + } + existsByLabel(label) { + return __awaiter(this, void 0, void 0, function* () { + const existingSoftware = yield this.loadQuery(LoadQuery, { label }, { fetchPolicy: 'network-only' }); + return isNotNil(existingSoftware && existingSoftware.id); + }); + } + canUserWrite(data, opts) { + return this.accountService.isAdmin(); + } + /** + * Save a configuration + * + * @param entity + */ + save(entity) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[software-service] Saving configuration...', entity); + const json = entity.asObject(); + // Execute mutation + yield this.graphql.mutate({ + mutation: SaveMutation, + variables: { + software: json + }, + error: { + code: ErrorCodes.SAVE_SOFTWARE_ERROR, + message: 'ERROR.SAVE_SOFTWARE_ERROR' + }, + update: (proxy, { data }) => { + const savedEntity = data && data.saveSoftware; + // Copy update properties + entity.id = savedEntity && savedEntity.id || entity.id; + entity.updateDate = savedEntity && savedEntity.updateDate || entity.updateDate; + console.debug('[software-service] Software saved!'); + } + }); + return entity; + }); + } + delete(data, options) { + throw new Error('Not implemented yet!'); + } + listenChanges(id, options) { + // TODO + console.warn('TODO: implement listen changes on Software'); + return of(); + } + /* -- private method -- */ + loadQuery(query, variables, opts) { + return __awaiter(this, void 0, void 0, function* () { + const now = Date.now(); + console.debug('[software-service] Loading software ...'); + try { + const res = yield this.graphql.query({ + query, + variables, + error: { code: ErrorCodes.LOAD_SOFTWARE_ERROR, message: 'ERROR.LOAD_SOFTWARE_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || undefined /*default*/ + }); + const data = res && res.software ? Software.fromObject(res.software) : undefined; + console.debug(`[software-service] Software loaded in ${Date.now() - now}ms:`, data); + return data; + } + catch (err) { + if ((err === null || err === void 0 ? void 0 : err.code) === ServerErrorCodes.NOT_FOUND) { + return null; + } + throw err; + } + }); + } +}; +SoftwareService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [GraphqlService, + AccountService]) +], SoftwareService); +export { SoftwareService }; +//# sourceMappingURL=software.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/software.service.js.map b/out-tsc/app/app/referential/services/software.service.js.map new file mode 100644 index 000000000..a1560cb13 --- /dev/null +++ b/out-tsc/app/app/referential/services/software.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"software.service.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/software.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/strategy-ref.service.js b/out-tsc/app/app/referential/services/strategy-ref.service.js new file mode 100644 index 000000000..42be74525 --- /dev/null +++ b/out-tsc/app/app/referential/services/strategy-ref.service.js @@ -0,0 +1,310 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable, Injector } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { ReferentialFragments } from './referential.fragments'; +import { AccountService, EntitiesStorage, firstArrayValue, fromDateISOString, isEmptyArray, isNil, isNotNil, NetworkService, } from '@sumaris-net/ngx-components'; +import { CacheService } from 'ionic-cache'; +import { ErrorCodes } from './errors'; +import { Strategy } from './model/strategy.model'; +import { StrategyFragments } from './strategy.fragments'; +import { defer, firstValueFrom, Subject, tap } from 'rxjs'; +import { filter, finalize, map } from 'rxjs/operators'; +import { BaseReferentialService } from './base-referential-service.class'; +import { StrategyFilter } from '@app/referential/services/filter/strategy.filter'; +import { DenormalizedPmfmStrategy } from '@app/referential/services/model/pmfm-strategy.model'; +import { DenormalizedPmfmStrategyFilter } from '@app/referential/services/filter/pmfm-strategy.filter'; +const Queries = { + load: gql ` + query StrategyRef($id: Int!) { + data: strategy(id: $id) { + ...StrategyRefFragment + } + } + ${StrategyFragments.strategyRef} + ${StrategyFragments.denormalizedPmfmStrategy} + ${StrategyFragments.taxonGroupStrategy} + ${StrategyFragments.taxonNameStrategy} + ${ReferentialFragments.lightReferential} + ${ReferentialFragments.taxonName} + `, + loadAll: gql ` + query StrategyRefs($filter: StrategyFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String) { + data: strategies(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection) { + ...LightStrategyRefFragment + } + } + ${StrategyFragments.lightStrategyRef} + `, + loadAllWithTotal: gql ` + query StrategyRefWithTotal($filter: StrategyFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String) { + data: strategies(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection) { + ...LightStrategyRefFragment + } + total: strategiesCount(filter: $filter) + } + ${StrategyFragments.lightStrategyRef} + `, + loadAllFull: gql ` + query StrategyRefs($filter: StrategyFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String) { + data: strategies(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection) { + ...StrategyRefFragment + } + } + ${StrategyFragments.strategyRef} + ${StrategyFragments.denormalizedPmfmStrategy} + ${StrategyFragments.taxonGroupStrategy} + ${StrategyFragments.taxonNameStrategy} + ${ReferentialFragments.lightReferential} + ${ReferentialFragments.taxonName} + `, + loadAllFullWithTotal: gql ` + query StrategyRefWithTotal($filter: StrategyFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String) { + data: strategies(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection) { + ...StrategyRefFragment + } + total: strategiesCount(filter: $filter) + } + ${StrategyFragments.strategyRef} + ${StrategyFragments.denormalizedPmfmStrategy} + ${StrategyFragments.taxonGroupStrategy} + ${StrategyFragments.taxonNameStrategy} + ${ReferentialFragments.lightReferential} + ${ReferentialFragments.taxonName} + `, +}; +const StrategyRefSubscriptions = { + listenChangesByProgram: gql `subscription LastStrategiesUpdateDate($filter: StrategyFilterVOInput!, $interval: Int){ + data: lastStrategiesUpdateDate(filter: $filter, interval: $interval) + }` +}; +const StrategyRefCacheKeys = { + CACHE_GROUP: 'strategy', + STRATEGY_BY_LABEL: 'strategyByLabel', + STRATEGY_BY_FILTER: 'strategyByFilter', + PMFMS_BY_FILTER: 'pmfmsByFilter', + LAST_UPDATE_DATE_BY_PROGRAM_ID: 'strategiesByProgramId' +}; +const STRATEGY_NOT_FOUND = Object.freeze({}); +let StrategyRefService = class StrategyRefService extends BaseReferentialService { + constructor(injector, network, accountService, cache, entities) { + super(injector, Strategy, StrategyFilter, { + queries: Queries + }); + this.network = network; + this.accountService = accountService; + this.cache = cache; + this.entities = entities; + this._subscriptionCache = {}; + } + /** + * Watch strategy by label + * + * @param dataFilter + * @param opts + */ + watchByFilter(dataFilter, opts) { + var _a; + if (isNil(dataFilter === null || dataFilter === void 0 ? void 0 : dataFilter.programId)) { + console.error('[strategy-ref-service] Missing \'filter.programId\''); + throw { code: ErrorCodes.LOAD_STRATEGY_ERROR, message: 'PROGRAM.STRATEGY.ERROR.LOAD_STRATEGY_ERROR' }; + } + const toEntityOrError = (data) => { + if (typeof data === 'string') + throw new Error(data); + if (!data) + return undefined; + return (opts === null || opts === void 0 ? void 0 : opts.toEntity) !== false ? Strategy.fromObject(data) : data; + }; + // Load from cache + if (!opts || opts.cache !== false) { + const cacheKey = [StrategyRefCacheKeys.STRATEGY_BY_FILTER, dataFilter.programId, JSON.stringify(Object.assign(Object.assign(Object.assign(Object.assign({}, dataFilter), { location: (_a = dataFilter === null || dataFilter === void 0 ? void 0 : dataFilter.location) === null || _a === void 0 ? void 0 : _a.id }), opts), { cache: undefined, toEntity: undefined, debug: undefined }))].join('|'); + return this.cache.loadFromObservable(cacheKey, defer(() => this.watchByFilter(dataFilter, Object.assign(Object.assign({}, opts), { toEntity: false, cache: false, debug: false }))), StrategyRefCacheKeys.CACHE_GROUP) + .pipe(map(toEntityOrError)); + } + // DEBUG + const debug = (opts === null || opts === void 0 ? void 0 : opts.debug) || (this._debug && (!opts || opts.debug !== false)); + if (debug) + console.debug('[strategy-ref-service] Watching strategy by filter...', dataFilter); + let startTime = debug && Date.now(); + let res; + // Load locally + const offline = this.network.offline && (!opts || opts.fetchPolicy !== 'network-only'); + if (offline) { + dataFilter = this.asFilter(dataFilter); + res = this.entities.watchAll(Strategy.TYPENAME, { + offset: 0, size: 1, sortBy: 'id', sortDirection: 'desc', + filter: dataFilter === null || dataFilter === void 0 ? void 0 : dataFilter.asFilterFn() + }); + } + // Load remotely + else { + dataFilter = this.asFilter(dataFilter); + // Fetch total, if need to detect duplicated strategy + const withTotal = (opts === null || opts === void 0 ? void 0 : opts.withTotal) || (opts === null || opts === void 0 ? void 0 : opts.failIfMany); + const query = (opts === null || opts === void 0 ? void 0 : opts.query) || (((opts === null || opts === void 0 ? void 0 : opts.fullLoad) !== false) + ? (withTotal ? this.queries.loadAllFullWithTotal : this.queries.loadAllFull) + : (withTotal ? this.queries.loadAllWithTotal : this.queries.loadAll)); + res = this.graphql.watchQuery({ + query, + variables: { + offset: 0, size: 1, sortBy: 'id', sortDirection: 'desc', + filter: dataFilter === null || dataFilter === void 0 ? void 0 : dataFilter.asPodObject() + }, + // Important: do NOT using cache here, as default (= 'no-cache') + // because cache is manage by Ionic cache (easier to clean) + fetchPolicy: opts && opts.fetchPolicy || 'no-cache', + error: { code: ErrorCodes.LOAD_STRATEGY_ERROR, message: 'PROGRAM.STRATEGY.ERROR.LOAD_STRATEGY_ERROR' } + }); + } + return res.pipe(filter(isNotNil), map(({ data, total }) => { + if ((opts === null || opts === void 0 ? void 0 : opts.failIfMissing) && isEmptyArray(data)) + return 'PROGRAM.STRATEGY.ERROR.STRATEGY_NOT_FOUND_OR_ALLOWED'; + if ((opts === null || opts === void 0 ? void 0 : opts.failIfMany) && isNotNil(total) && total > 1) + return 'PROGRAM.STRATEGY.ERROR.STRATEGY_DUPLICATED'; + return firstArrayValue(data) || STRATEGY_NOT_FOUND; + }), map(toEntityOrError), + // DEBUG + tap(_ => { + if (startTime) { + console.debug(`[strategy-service] Watching strategy [OK] in ${Date.now() - startTime}ms`); + startTime = undefined; + } + })); + } + /** + * Watch strategy by label + * + * @param label + * @param dataFilter + * @param opts + */ + watchByLabel(label, dataFilter, opts) { + if (!label) { + console.error('[strategy-ref-service] Missing \'label\''); + throw { code: ErrorCodes.LOAD_STRATEGY_ERROR, message: 'PROGRAM.STRATEGY.ERROR.LOAD_STRATEGY_ERROR' }; + } + return this.watchByFilter(Object.assign(Object.assign({}, dataFilter), { label }), Object.assign(Object.assign({}, opts), { failIfMissing: true, failIfMany: true })); + } + /** + * + * @param label + * @param filter + * @param opts + */ + loadByLabel(label, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + return firstValueFrom(this.watchByLabel(label, filter, opts)); + }); + } + loadByFilter(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + return firstValueFrom(this.watchByFilter(filter, opts)); + }); + } + /** + * Watch strategy pmfms + */ + watchPmfms(filter, opts) { + const toEntities = (opts === null || opts === void 0 ? void 0 : opts.toEntity) !== false ? DenormalizedPmfmStrategy.fromObjects : (data) => data; + // Use cache (enable by default) + if (!opts || opts.cache !== false) { + const cacheKey = [StrategyRefCacheKeys.PMFMS_BY_FILTER, JSON.stringify(filter)].join('|'); + return this.cache.loadFromObservable(cacheKey, defer(() => this.watchPmfms(filter, Object.assign(Object.assign({}, opts), { cache: false, toEntity: false }))), StrategyRefCacheKeys.CACHE_GROUP) + .pipe(map(toEntities)); + } + // DEBUG + //console.debug(`[program-ref-service] Watching '${programLabel}' pmfms...`, acquisitionLevels); + // Watch the full strategy + return this.watchByFilter(filter, { toEntity: false, fullLoad: true }) + .pipe( + // Filter strategy's pmfms + map(strategy => { + const filterFn = DenormalizedPmfmStrategyFilter.fromObject(opts).asFilterFn(); + if (!filterFn) + throw new Error('Missing opts to filter pmfm (.e.g opts.acquisitionLevel)!'); + return ((strategy === null || strategy === void 0 ? void 0 : strategy.denormalizedPmfms) || []).filter(filterFn); + }), + // Merge duplicated pmfms (make to a unique pmfm, by id) + map(pmfms => pmfms.reduce((res, p) => { + const index = res.findIndex(other => other.id === p.id); + if (index !== -1) { + console.warn('[program-ref-service] Merging duplicated pmfms:', res[index], p); + res[index] = DenormalizedPmfmStrategy.merge(res[index], p); + return res; + } + return res.concat(p); + }, [])), + // Sort on rank order (asc) + map(data => data.sort((p1, p2) => p1.rankOrder - p2.rankOrder)), map(toEntities), tap(data => { + if (opts === null || opts === void 0 ? void 0 : opts.debug) + console.debug(`[strategy-ref-service] Found ${data.length} PMFM for ${opts.acquisitionLevel}`, data); + })); + } + /** + * Load strategy pmfms + */ + loadPmfms(filter, options) { + return firstValueFrom(this.watchPmfms(filter, options)); + } + clearCache() { + return __awaiter(this, void 0, void 0, function* () { + console.info('[strategy-ref-service] Clearing strategy cache...'); + yield this.cache.clearGroup(StrategyRefCacheKeys.CACHE_GROUP); + }); + } + listenChangesByProgram(programId, opts) { + if (isNil(programId)) + throw Error('Missing argument \'programId\' '); + const cacheKey = [StrategyRefCacheKeys.LAST_UPDATE_DATE_BY_PROGRAM_ID, programId].join('|'); + let cache = this._subscriptionCache[cacheKey]; + if (!cache) { + if (this._debug) + console.debug(`[strategy-ref-service] [WS] Listening for changes on strategies, from program {${programId}}...`); + const program$ = this.graphql.subscribe({ + query: StrategyRefSubscriptions.listenChangesByProgram, + fetchPolicy: 'no-cache', + variables: { + filter: { programIds: [programId] }, + interval: (opts === null || opts === void 0 ? void 0 : opts.interval) || 30 // seconds + }, + error: { + code: ErrorCodes.SUBSCRIBE_REFERENTIAL_ERROR, + message: 'REFERENTIAL.ERROR.SUBSCRIBE_REFERENTIAL_ERROR' + } + }) + .pipe(map(({ data }) => fromDateISOString(data))); + const subject = new Subject(); + cache = { + subject, + subscription: program$.subscribe(subject) + }; + this._subscriptionCache[cacheKey] = cache; + } + return cache.subject.asObservable() + .pipe(finalize(() => { + // DEBUG + //console.debug(`[strategy-ref-service] Finalize strategies changes for program {${id}}(${cache.subject.observers.length} observers)`); + // Wait 100ms (to avoid to recreate if new subscription comes less than 100ms after) + setTimeout(() => { + if (cache.subject.observed) + return; // Skip if still observed + // DEBUG + //console.debug(`[strategy-ref-service] Closing strategies changes for program {${id}}(${cache.subject.observers.length} observers)`); + this._subscriptionCache[cacheKey] = undefined; + cache.subject.complete(); + cache.subject.unsubscribe(); + cache.subscription.unsubscribe(); + }, 100); + })); + } +}; +StrategyRefService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [Injector, + NetworkService, + AccountService, + CacheService, + EntitiesStorage]) +], StrategyRefService); +export { StrategyRefService }; +//# sourceMappingURL=strategy-ref.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/strategy-ref.service.js.map b/out-tsc/app/app/referential/services/strategy-ref.service.js.map new file mode 100644 index 000000000..9bfc55de9 --- /dev/null +++ b/out-tsc/app/app/referential/services/strategy-ref.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"strategy-ref.service.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/strategy-ref.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EACL,cAAc,EAEd,eAAe,EAGf,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,cAAc,GACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,cAAc,EAAc,OAAO,EAAgB,GAAG,EAAE,MAAM,MAAM,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAElF,OAAO,EAAE,wBAAwB,EAAE,MAAM,qDAAqD,CAAC;AAC/F,OAAO,EAAE,8BAA8B,EAAE,MAAM,uDAAuD,CAAC;AAsBvG,MAAM,OAAO,GAAuB;IAClC,IAAI,EAAE,GAAG,CAAA;;;;;;MAML,iBAAiB,CAAC,WAAW;MAC7B,iBAAiB,CAAC,wBAAwB;MAC1C,iBAAiB,CAAC,kBAAkB;MACpC,iBAAiB,CAAC,iBAAiB;MACnC,oBAAoB,CAAC,gBAAgB;MACrC,oBAAoB,CAAC,SAAS;GACjC;IAED,OAAO,EAAE,GAAG,CAAA;;;;;;MAMR,iBAAiB,CAAC,gBAAgB;GACrC;IAED,gBAAgB,EAAE,GAAG,CAAA;;;;;;;MAOjB,iBAAiB,CAAC,gBAAgB;GACrC;IAED,WAAW,EAAE,GAAG,CAAA;;;;;;MAMZ,iBAAiB,CAAC,WAAW;MAC7B,iBAAiB,CAAC,wBAAwB;MAC1C,iBAAiB,CAAC,kBAAkB;MACpC,iBAAiB,CAAC,iBAAiB;MACnC,oBAAoB,CAAC,gBAAgB;MACrC,oBAAoB,CAAC,SAAS;GACjC;IAED,oBAAoB,EAAE,GAAG,CAAA;;;;;;;MAOrB,iBAAiB,CAAC,WAAW;MAC7B,iBAAiB,CAAC,wBAAwB;MAC1C,iBAAiB,CAAC,kBAAkB;MACpC,iBAAiB,CAAC,iBAAiB;MACnC,oBAAoB,CAAC,gBAAgB;MACrC,oBAAoB,CAAC,SAAS;GACjC;CACF,CAAC;AAEF,MAAM,wBAAwB,GAAG;IAC/B,sBAAsB,EAAE,GAAG,CAAA;;IAEzB;CACH,CAAC;AAEF,MAAM,oBAAoB,GAAG;IAC3B,WAAW,EAAE,UAAU;IAEvB,iBAAiB,EAAE,iBAAiB;IACpC,kBAAkB,EAAE,kBAAkB;IACtC,eAAe,EAAE,eAAe;IAChC,8BAA8B,EAAE,uBAAuB;CACxD,CAAC;AAEF,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAW,EAAE,CAAC,CAAC;AAGhD,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,sBAGnB;IAOnB,YACE,QAAkB,EACR,OAAuB,EACvB,cAA8B,EAC9B,KAAmB,EACnB,QAAyB;QAEnC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,EACtC;YACE,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QARK,YAAO,GAAP,OAAO,CAAgB;QACvB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,UAAK,GAAL,KAAK,CAAc;QACnB,aAAQ,GAAR,QAAQ,CAAiB;QAV7B,uBAAkB,GAGlB,EAAE,CAAC;IAaX,CAAC;IAED;;;;;OAKG;IACH,aAAa,CAAC,UAAoC,EACpC,IAAiF;;QAC7F,IAAI,KAAK,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,CAAC,EAAE;YAChC,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACrE,MAAM,EAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,OAAO,EAAE,4CAA4C,EAAC,CAAC;SACrG;QAED,MAAM,eAAe,GAAG,CAAC,IAAqB,EAAE,EAAE;YAChD,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,IAAI;gBAAE,OAAO,SAAS,CAAC;YAC5B,OAAO,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,MAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAgB,CAAC;QACjF,CAAC,CAAC;QAEF,kBAAkB;QAClB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;YACjC,MAAM,QAAQ,GAAG,CAAC,oBAAoB,CAAC,kBAAkB,EAAE,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,6DAAK,UAAU,KAAE,QAAQ,EAAE,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,QAAQ,0CAAE,EAAE,KAAK,IAAI,KAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,IAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClO,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAW,QAAQ,EACrD,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,kCAAM,IAAI,KAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,IAAE,CAAC,EACnG,oBAAoB,CAAC,WAAW,CAAC;iBAChC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;SAC/B;QAED,QAAQ;QACR,MAAM,KAAK,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,KAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC;QAC9E,IAAI,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,uDAAuD,EAAE,UAAU,CAAC,CAAC;QAC9F,IAAI,SAAS,GAAW,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAE5C,IAAI,GAAqC,CAAC;QAE1C,eAAe;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,cAAc,CAAC,CAAC;QACvF,IAAI,OAAO,EAAE;YACX,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACvC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAW,QAAQ,CAAC,QAAQ,EAAE;gBACxD,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM;gBACvD,MAAM,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU,EAAE;aACjC,CAAC,CAAC;SACJ;QAED,gBAAgB;aACX;YACH,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACvC,qDAAqD;YACrD,MAAM,SAAS,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,MAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAA,CAAC;YACtD,MAAM,KAAK,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,KAAI,CAC3B,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,MAAK,KAAK,CAAC;gBACxB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;gBAC5E,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1E,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAuB;gBAClD,KAAK;gBACL,SAAS,EAAE;oBACT,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM;oBACvD,MAAM,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,WAAW,EAAE;iBAClC;gBACD,gEAAgE;gBAChE,2DAA2D;gBAC3D,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,UAAU;gBACnD,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,OAAO,EAAE,4CAA4C,EAAE;aACvG,CAAC,CAAC;SACJ;QAED,OAAO,GAAG,CAAC,IAAI,CACb,MAAM,CAAC,QAAQ,CAAC,EAChB,GAAG,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAC,EAAE,EAAE;YACpB,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,KAAI,YAAY,CAAC,IAAI,CAAC;gBAAE,OAAO,sDAAsD,CAAC;YAC7G,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,KAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;gBAAE,OAAO,4CAA4C,CAAC;YAC1G,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC;QACrD,CAAC,CAAC,EACF,GAAG,CAAC,eAAe,CAAC;QAEpB,QAAQ;QACR,GAAG,CAAC,CAAC,CAAC,EAAE;YACN,IAAI,SAAS,EAAE;gBACb,OAAO,CAAC,KAAK,CAAC,gDAAgD,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,CAAC,CAAC;gBAC1F,SAAS,GAAG,SAAS,CAAC;aACvB;QACH,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,YAAY,CAAC,KAAa,EACb,UAAoC,EACpC,IAA8B;QACzC,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC1D,MAAM,EAAC,IAAI,EAAE,UAAU,CAAC,mBAAmB,EAAE,OAAO,EAAE,4CAA4C,EAAC,CAAC;SACrG;QACD,OAAO,IAAI,CAAC,aAAa,iCAAK,UAAU,KAAE,KAAK,qCAAO,IAAI,KAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,IAAE,CAAC;IACtG,CAAC;IAED;;;;;OAKG;IACG,WAAW,CAAC,KAAa,EAAE,MAAgC,EAAE,IAA6B;;YAC9F,OAAO,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAChE,CAAC;KAAA;IAEK,YAAY,CAAC,MAAgC,EAAE,IAAgF;;YACnI,OAAO,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1D,CAAC;KAAA;IAED;;OAEG;IACH,UAAU,CACR,MAAgE,EAChE,IAA8B;QAE9B,MAAM,UAAU,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,MAAK,KAAK,CAAC,CAAC,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAW,EAAE,EAAE,CAAC,IAAkC,CAAC;QAEzI,gCAAgC;QAChC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;YACjC,MAAM,QAAQ,GAAG,CAAC,oBAAoB,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1F,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,EAC3C,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,kCAAM,IAAI,KAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAE,CAAC,EAC9E,oBAAoB,CAAC,WAAW,CAAC;iBAChC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;SAC1B;QAED,QAAQ;QACR,gGAAgG;QAEhG,0BAA0B;QAC1B,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;aACjE,IAAI;QACH,0BAA0B;QAC1B,GAAG,CAAC,QAAQ,CAAC,EAAE;YACb,MAAM,QAAQ,GAAG,8BAA8B,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YAC9E,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC5F,OAAO,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,iBAAiB,KAAI,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9D,CAAC,CAAC;QACF,wDAAwD;QACxD,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YACjC,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACxD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBAChB,OAAO,CAAC,IAAI,CAAC,iDAAiD,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/E,GAAG,CAAC,KAAK,CAAC,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3D,OAAO,GAAG,CAAC;aACZ;YACD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC,EAAE,EAAE,CAAC,CACP;QACD,2BAA2B;QAC3B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,EAC/D,GAAG,CAAC,UAAU,CAAC,EACf,GAAG,CAAC,IAAI,CAAC,EAAE;YACT,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK;gBAAE,OAAO,CAAC,KAAK,CAAC,gCAAgC,IAAI,CAAC,MAAM,aAAa,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,CAAC;QACxH,CAAC,CAAC,CACH,CAAC;IACN,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAwD,EACxD,OAA+B;QACvC,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,CAAC;IAEK,UAAU;;YACd,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YAClE,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAChE,CAAC;KAAA;IAED,sBAAsB,CAAC,SAAiB,EAAE,IAEzC;QACC,IAAI,KAAK,CAAC,SAAS,CAAC;YAAE,MAAM,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAErE,MAAM,QAAQ,GAAG,CAAC,oBAAoB,CAAC,8BAA8B,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5F,IAAI,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE;YACV,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,KAAK,CAAC,kFAAkF,SAAS,MAAM,CAAC,CAAC;YAClI,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAc;gBACnD,KAAK,EAAE,wBAAwB,CAAC,sBAAsB;gBACtD,WAAW,EAAE,UAAU;gBACvB,SAAS,EAAE;oBACT,MAAM,EAAE,EAAC,UAAU,EAAE,CAAC,SAAS,CAAC,EAAC;oBACjC,QAAQ,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,EAAE,CAAC,UAAU;iBAC1C;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,UAAU,CAAC,2BAA2B;oBAC5C,OAAO,EAAE,+CAA+C;iBACzD;aACF,CAAC;iBACC,IAAI,CACH,GAAG,CAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE,CAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAC1C,CAAC;YACJ,MAAM,OAAO,GAAG,IAAI,OAAO,EAAU,CAAC;YACtC,KAAK,GAAG;gBACN,OAAO;gBACP,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;aAC1C,CAAC;YACF,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;SAC3C;QAED,OAAO,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE;aAChC,IAAI,CACH,QAAQ,CAAC,GAAG,EAAE;YACZ,QAAQ;YACR,uIAAuI;YAEvI,oFAAoF;YACpF,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ;oBAAE,OAAO,CAAC,yBAAyB;gBAC7D,QAAQ;gBACR,sIAAsI;gBACtI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;gBAC9C,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACzB,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC5B,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YACnC,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC,CAAC,CACH,CAAC;IACN,CAAC;CACF,CAAA;AA9PY,kBAAkB;IAD9B,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAYnB,QAAQ;QACC,cAAc;QACP,cAAc;QACvB,YAAY;QACT,eAAe;GAf1B,kBAAkB,CA8P9B;SA9PY,kBAAkB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/strategy.fragments.js b/out-tsc/app/app/referential/services/strategy.fragments.js new file mode 100644 index 000000000..696cd5caf --- /dev/null +++ b/out-tsc/app/app/referential/services/strategy.fragments.js @@ -0,0 +1,285 @@ +import { gql } from '@apollo/client/core'; +export const StrategyFragments = { + lightStrategy: gql ` + fragment LightStrategyFragment on StrategyVO { + id + label + name + description + comments + analyticReference + updateDate + creationDate + statusId + programId + appliedStrategies { + ...AppliedStrategyFragment + } + } + `, + strategy: gql ` + fragment StrategyFragment on StrategyVO { + id + label + name + description + comments + analyticReference + updateDate + creationDate + statusId + programId + gears { + ...LightReferentialFragment + } + taxonGroups { + ...TaxonGroupStrategyFragment + } + taxonNames { + ...TaxonNameStrategyFragment + } + pmfms { + ...PmfmStrategyFragment + } + appliedStrategies { + ...AppliedStrategyFragment + } + departments { + ...StrategyDepartmentFragment + } + } + `, + appliedStrategy: gql ` + fragment AppliedStrategyFragment on AppliedStrategyVO { + id + strategyId + location { + ...LightReferentialFragment + } + appliedPeriods { + ...AppliedPeriodFragment + } + __typename + } + `, + appliedPeriod: gql ` + fragment AppliedPeriodFragment on AppliedPeriodVO { + appliedStrategyId + startDate + endDate + acquisitionNumber + __typename + } + `, + strategyDepartment: gql ` + fragment StrategyDepartmentFragment on StrategyDepartmentVO { + id + strategyId + location { + ...LightReferentialFragment + } + privilege { + ...LightReferentialFragment + } + department { + ...LightReferentialFragment + } + __typename + } + `, + lightPmfmStrategy: gql ` + fragment LightPmfmStrategyFragment on PmfmStrategyVO { + id + acquisitionLevel + rankOrder + acquisitionNumber + isMandatory + minValue + maxValue + defaultValue + pmfm { + ...LightPmfmFragment + } + parameter { + ...LightReferentialFragment + } + matrix { + ...LightReferentialFragment + } + fraction { + ...LightReferentialFragment + } + method { + ...LightReferentialFragment + } + gearIds + taxonGroupIds + referenceTaxonIds + strategyId + __typename + } + `, + pmfmStrategy: gql ` + fragment PmfmStrategyFragment on PmfmStrategyVO { + id + acquisitionLevel + rankOrder + acquisitionNumber + isMandatory + minValue + maxValue + defaultValue + pmfm { + ...PmfmFragment + } + parameter { + ...LightReferentialFragment + } + matrix { + ...LightReferentialFragment + } + fraction { + ...LightReferentialFragment + } + method { + ...LightReferentialFragment + } + gearIds + taxonGroupIds + referenceTaxonIds + strategyId + __typename + } + `, + taxonGroupStrategy: gql ` + fragment TaxonGroupStrategyFragment on TaxonGroupStrategyVO { + strategyId + priorityLevel + taxonGroup { + id + label + name + entityName + taxonNames { + ...TaxonNameFragment + } + } + __typename + } + `, + taxonNameStrategy: gql ` + fragment TaxonNameStrategyFragment on TaxonNameStrategyVO { + strategyId + priorityLevel + taxonName { + ...TaxonNameFragment + } + __typename + } + `, + lightStrategyRef: gql ` + fragment LightStrategyRefFragment on StrategyVO { + id + label + name + description + comments + analyticReference + updateDate + creationDate + statusId + programId + } + `, + strategyRef: gql ` + fragment StrategyRefFragment on StrategyVO { + id + label + name + description + comments + updateDate + creationDate + statusId + programId + gears { + ...LightReferentialFragment + } + taxonGroups { + ...TaxonGroupStrategyFragment + } + taxonNames { + ...TaxonNameStrategyFragment + } + denormalizedPmfms { + ...DenormalizedPmfmStrategyFragment + } + } + `, + denormalizedPmfmStrategy: gql ` + fragment DenormalizedPmfmStrategyFragment on DenormalizedPmfmStrategyVO { + id + label + name + completeName + unitLabel + type + minValue + maxValue + precision + maximumNumberDecimals + signifFiguresNumber + defaultValue + acquisitionNumber + isMandatory + isComputed + rankOrder + acquisitionLevel + parameterId + matrixId + fractionId + methodId + strategyId + gearIds + taxonGroupIds + referenceTaxonIds + qualitativeValues { + id + label + name + description + statusId + entityName + __typename + } + __typename + } + `, + samplingStrategyRef: gql ` + fragment SamplingStrategyRefFragment on StrategyVO { + id + label + name + description + comments + analyticReference + updateDate + creationDate + statusId + programId + taxonNames { + ...TaxonNameStrategyFragment + } + appliedStrategies { + ...AppliedStrategyFragment + } + departments { + ...StrategyDepartmentFragment + } + pmfms { + ...LightPmfmStrategyFragment + } + } + `, +}; +//# sourceMappingURL=strategy.fragments.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/strategy.fragments.js.map b/out-tsc/app/app/referential/services/strategy.fragments.js.map new file mode 100644 index 000000000..73ebd1b41 --- /dev/null +++ b/out-tsc/app/app/referential/services/strategy.fragments.js.map @@ -0,0 +1 @@ +{"version":3,"file":"strategy.fragments.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/strategy.fragments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,aAAa,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;GAgBjB;IAED,QAAQ,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BZ;IAED,eAAe,EAAE,GAAG,CAAA;;;;;;;;;;;;GAYnB;IAED,aAAa,EAAE,GAAG,CAAA;;;;;;;;GAQjB;IAED,kBAAkB,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;GAetB;IAED,iBAAiB,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BrB;IAED,YAAY,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BhB;IAED,kBAAkB,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;GAetB;IAED,iBAAiB,EAAE,GAAG,CAAA;;;;;;;;;GASrB;IAED,gBAAgB,EAAE,GAAG,CAAA;;;;;;;;;;;;;GAapB;IAED,WAAW,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBf;IAED,wBAAwB,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsC5B;IAED,mBAAmB,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBvB;CACF,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/strategy.service.js b/out-tsc/app/app/referential/services/strategy.service.js new file mode 100644 index 000000000..0a1853399 --- /dev/null +++ b/out-tsc/app/app/referential/services/strategy.service.js @@ -0,0 +1,544 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable, Injector } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { ReferentialFragments } from './referential.fragments'; +import { AccountService, ConfigService, CORE_CONFIG_OPTIONS, DateUtils, EntitiesStorage, EntityUtils, firstNotNilPromise, isEmptyArray, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, JsonUtils, NetworkService, ReferentialRef, ReferentialUtils, toNumber, } from '@sumaris-net/ngx-components'; +import { CacheService } from 'ionic-cache'; +import { ErrorCodes } from './errors'; +import { AppliedPeriod, AppliedStrategy, Strategy, StrategyDepartment, TaxonNameStrategy } from './model/strategy.model'; +import { ReferentialRefService } from './referential-ref.service'; +import { StrategyFragments } from './strategy.fragments'; +import { BaseReferentialService } from './base-referential-service.class'; +import { Pmfm } from './model/pmfm.model'; +import { ProgramRefService } from './program-ref.service'; +import { StrategyRefService } from './strategy-ref.service'; +import { ReferentialRefFilter } from './filter/referential-ref.filter'; +import { StrategyFilter } from '@app/referential/services/filter/strategy.filter'; +import { PmfmStrategy } from '@app/referential/services/model/pmfm-strategy.model'; +import { ProgramService } from '@app/referential/services/program.service'; +import { COPY_LOCALLY_AS_OBJECT_OPTIONS } from '@app/data/services/model/data-entity.model'; +import { TranslateService } from '@ngx-translate/core'; +import { BehaviorSubject } from 'rxjs'; +const FindStrategyNextLabel = gql ` + query StrategyNextLabelQuery($programId: Int!, $labelPrefix: String, $nbDigit: Int) { + data: strategyNextLabel(programId: $programId, labelPrefix: $labelPrefix, nbDigit: $nbDigit) + } +`; +const FindStrategyNextSampleLabel = gql ` + query StrategyNextSampleLabelQuery($strategyLabel: String!, $labelSeparator: String, $nbDigit: Int){ + data: strategyNextSampleLabel(strategyLabel: $strategyLabel, labelSeparator: $labelSeparator, nbDigit: $nbDigit) + } +`; +const LoadAllAnalyticReferencesQuery = gql `query AnalyticReferencesQuery($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: ReferentialFilterVOInput){ + data: analyticReferences(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...LightReferentialFragment + } + } + ${ReferentialFragments.lightReferential}`; +const LoadAllAnalyticReferencesWithTotalQuery = gql `query AnalyticReferencesQuery($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: ReferentialFilterVOInput){ + data: analyticReferences(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...LightReferentialFragment + } + total: analyticReferencesCount(filter: $filter) +} +${ReferentialFragments.lightReferential}`; +const FindStrategiesReferentials = gql ` + query StrategiesReferentials($programId: Int!, $locationClassification: LocationClassificationEnum, $entityName: String, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String){ + data: strategiesReferentials(programId: $programId, locationClassification: $locationClassification, entityName: $entityName, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + ...LightReferentialFragment + } + } + ${ReferentialFragments.lightReferential} +`; +const StrategyQueries = { + load: gql `query Strategy($id: Int!) { + data: strategy(id: $id) { + ...StrategyFragment + } + } + ${StrategyFragments.strategy} + ${StrategyFragments.appliedStrategy} + ${StrategyFragments.appliedPeriod} + ${StrategyFragments.strategyDepartment} + ${StrategyFragments.pmfmStrategy} + ${StrategyFragments.taxonGroupStrategy} + ${StrategyFragments.taxonNameStrategy} + ${ReferentialFragments.lightReferential} + ${ReferentialFragments.pmfm} + ${ReferentialFragments.parameter} + ${ReferentialFragments.referential} + ${ReferentialFragments.taxonName}`, + loadAll: gql `query Strategies($filter: StrategyFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String){ + data: strategies(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + ...LightStrategyFragment + } + } + ${StrategyFragments.lightStrategy} + ${StrategyFragments.appliedStrategy} + ${StrategyFragments.appliedPeriod} + ${ReferentialFragments.lightReferential}`, + loadAllWithTotal: gql `query StrategiesWithTotal($filter: StrategyFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String){ + data: strategies(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + ...LightStrategyFragment + } + total: strategiesCount(filter: $filter) + } + ${StrategyFragments.lightStrategy} + ${StrategyFragments.appliedStrategy} + ${StrategyFragments.appliedPeriod} + ${ReferentialFragments.lightReferential}`, + loadAllFull: gql `query Strategies($filter: StrategyFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String){ + data: strategies(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + ...LightStrategyFragment + } + } + ${StrategyFragments.lightStrategy} + ${StrategyFragments.appliedStrategy} + ${StrategyFragments.appliedPeriod} + ${StrategyFragments.lightPmfmStrategy} + ${StrategyFragments.strategyDepartment} + ${StrategyFragments.taxonGroupStrategy} + ${StrategyFragments.taxonNameStrategy} + ${ReferentialFragments.lightReferential} + ${ReferentialFragments.lightPmfm} + ${ReferentialFragments.taxonName}`, + loadAllFullWithTotal: gql `query StrategiesWithTotal($filter: StrategyFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String){ + data: strategies(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + ...LightStrategyFragment + } + total: strategiesCount(filter: $filter) + } + ${StrategyFragments.lightStrategy} + ${StrategyFragments.appliedStrategy} + ${StrategyFragments.appliedPeriod} + ${StrategyFragments.lightPmfmStrategy} + ${StrategyFragments.strategyDepartment} + ${StrategyFragments.taxonGroupStrategy} + ${StrategyFragments.taxonNameStrategy} + ${ReferentialFragments.lightReferential} + ${ReferentialFragments.lightPmfm} + ${ReferentialFragments.taxonName}`, + count: gql `query StrategyCount($filter: StrategyFilterVOInput!) { + total: strategiesCount(filter: $filter) + }` +}; +const StrategyMutations = { + save: gql `mutation SaveStrategy($data: StrategyVOInput!){ + data: saveStrategy(strategy: $data){ + ...StrategyFragment + } + } + ${StrategyFragments.strategy} + ${StrategyFragments.appliedStrategy} + ${StrategyFragments.appliedPeriod} + ${StrategyFragments.pmfmStrategy} + ${StrategyFragments.strategyDepartment} + ${StrategyFragments.taxonGroupStrategy} + ${StrategyFragments.taxonNameStrategy} + ${ReferentialFragments.lightReferential} + ${ReferentialFragments.pmfm} + ${ReferentialFragments.parameter} + ${ReferentialFragments.referential} + ${ReferentialFragments.taxonName}`, + delete: gql `mutation DeleteAllStrategies($id:Int!){ + deleteStrategy(id: $id) + }`, +}; +const StrategySubscriptions = { + listenChanges: gql `subscription UpdateReferential($id: Int!, $interval: Int){ + data: updateReferential(entityName: "Strategy", id: $id, interval: $interval) { + ...LightReferentialFragment + } + } + ${ReferentialFragments.lightReferential}` +}; +let StrategyService = class StrategyService extends BaseReferentialService { + constructor(injector, network, accountService, cache, entities, translate, programService, programRefService, strategyRefService, referentialRefService, configService) { + super(injector, Strategy, StrategyFilter, { + queries: StrategyQueries, + mutations: StrategyMutations, + subscriptions: StrategySubscriptions + }); + this.network = network; + this.accountService = accountService; + this.cache = cache; + this.entities = entities; + this.translate = translate; + this.programService = programService; + this.programRefService = programRefService; + this.strategyRefService = strategyRefService; + this.referentialRefService = referentialRefService; + this.configService = configService; + this.$dbTimeZone = new BehaviorSubject(null); + this.configService.config.subscribe(config => this.onConfigChanged(config)); + } + get dbTimeZone() { + return this.$dbTimeZone.value || DateUtils.moment().tz(); + } + getDateRangeByLabel(label) { + return __awaiter(this, void 0, void 0, function* () { + const strategy = yield this.loadByLabel(label); + return strategy.appliedStrategies + .reduce((res1, appliedStrategy) => appliedStrategy.appliedPeriods.reduce((res2, period) => { + res2.startDate = DateUtils.min(res2.startDate, period.startDate).clone(); + res2.endDate = DateUtils.max(res2.endDate, period.endDate).clone(); + return res2; + }, res1), { startDate: undefined, endDate: undefined }); + }); + } + onConfigChanged(config) { + const dbTimeZone = config.getProperty(CORE_CONFIG_OPTIONS.DB_TIMEZONE); + this.$dbTimeZone.next(dbTimeZone); + } + existsByLabel(label, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (isNilOrBlank(label)) + throw new Error('Missing argument \'label\' '); + const filter = { + label, + levelId: opts && isNotNil(opts.programId) ? opts.programId : undefined, + excludedIds: opts && isNotNil(opts.excludedIds) ? opts.excludedIds : undefined, + }; + const { total } = yield this.graphql.query({ + query: StrategyQueries.count, + variables: { filter }, + error: { code: ErrorCodes.LOAD_STRATEGY_ERROR, message: 'ERROR.LOAD_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || undefined + }); + return toNumber(total, 0) > 0; + }); + } + computeNextLabel(programId, labelPrefix, nbDigit) { + return __awaiter(this, void 0, void 0, function* () { + if (this._debug) + console.debug(`[strategy-service] Loading strategy next label for prefix ${labelPrefix}...`); + const res = yield this.graphql.query({ + query: FindStrategyNextLabel, + variables: { + programId, + labelPrefix, + nbDigit + }, + error: { code: ErrorCodes.LOAD_PROGRAM_ERROR, message: 'PROGRAM.STRATEGY.ERROR.LOAD_STRATEGY_LABEL_ERROR' }, + fetchPolicy: 'network-only' + }); + return res && res.data; + }); + } + computeNextSampleTagId(strategyLabel, labelSeparator, nbDigit) { + return __awaiter(this, void 0, void 0, function* () { + if (this._debug) + console.debug(`[strategy-service] Loading strategy next sample label...`); + const res = yield this.graphql.query({ + query: FindStrategyNextSampleLabel, + variables: { + strategyLabel, + labelSeparator, + nbDigit + }, + error: { code: ErrorCodes.LOAD_PROGRAM_ERROR, message: 'PROGRAM.STRATEGY.ERROR.LOAD_STRATEGY_SAMPLE_LABEL_ERROR' }, + fetchPolicy: 'network-only' + }); + return res && res.data; + }); + } + loadByLabel(label) { + return __awaiter(this, void 0, void 0, function* () { + const filter = StrategyFilter.fromObject({ label }); + const result = yield this.loadAll(0, 1, 'id', 'asc', filter); + return isNotEmptyArray(result.data) && result.data[0] || null; + }); + } + loadStrategiesReferentials(programId, entityName, locationClassification, offset, size, sortBy, sortDirection) { + return __awaiter(this, void 0, void 0, function* () { + if (this._debug) + console.debug(`[strategy-service] Loading strategies referential (predoc) for ${entityName}...`); + const res = yield this.graphql.query({ + query: FindStrategiesReferentials, + variables: { + programId, + locationClassification, + entityName, + offset: offset || 0, + size: size || 100, + sortBy: sortBy || 'label', + sortDirection: sortDirection || 'asc' + }, + error: { code: ErrorCodes.LOAD_PROGRAM_ERROR, message: 'PROGRAM.STRATEGY.ERROR.LOAD_STRATEGY_SAMPLE_LABEL_ERROR' }, + fetchPolicy: 'network-only' + }); + return ((res === null || res === void 0 ? void 0 : res.data) || []); + }); + } + loadAllAnalyticReferences(offset, size, sortBy, sortDirection, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + filter = ReferentialRefFilter.fromObject(filter); + const variables = { + offset: offset || 0, + size: size || 100, + sortBy: sortBy || 'label', + sortDirection: sortDirection || 'asc', + filter: filter && filter.asPodObject() + }; + const now = this._debug && Date.now(); + if (this._debug) + console.debug(`[strategy-service] Loading analytic references...`, variables); + const withTotal = (!opts || opts.withTotal !== false); + const query = withTotal ? LoadAllAnalyticReferencesWithTotalQuery : LoadAllAnalyticReferencesQuery; + const { data, total } = yield this.graphql.query({ + query, + variables, + error: { code: ErrorCodes.LOAD_STRATEGY_ANALYTIC_REFERENCES_ERROR, message: 'PROGRAM.STRATEGY.ERROR.LOAD_STRATEGY_ANALYTIC_REFERENCES_ERROR' }, + fetchPolicy: 'cache-first' + }); + const entities = (!opts || opts.toEntity !== false) + ? data && data.map(ReferentialRef.fromObject) + : data; + const res = { + data: entities, + total + }; + // Add fetch more capability, if total was fetched + if (withTotal) { + const nextOffset = offset + entities.length; + if (nextOffset < total) { + res.fetchMore = () => this.loadAllAnalyticReferences(nextOffset, size, sortBy, sortDirection, filter, opts); + } + } + if (this._debug) + console.debug(`[strategy-service] Analytic references loaded in ${Date.now() - now}ms`); + return res; + }); + } + suggestAnalyticReferences(value, filter, sortBy, sortDirection) { + return __awaiter(this, void 0, void 0, function* () { + if (ReferentialUtils.isNotEmpty(value)) + return { data: [value] }; + value = (typeof value === 'string' && value !== '*') && value || undefined; + return this.loadAllAnalyticReferences(0, !value ? 30 : 10, sortBy, sortDirection, Object.assign(Object.assign({}, filter), { searchText: value }), { withTotal: true }); + }); + } + canUserWrite(data, opts) { + // user is admin: ok + if (this.accountService.isAdmin()) + return true; + // Check if user is a program manager (if given) + if (ReferentialUtils.isNotEmpty(opts === null || opts === void 0 ? void 0 : opts.program)) { + // TODO check in strategy's managers + return this.programService.canUserWrite(opts.program); + } + //const isNew = (!data || isNil(data.id); + return this.accountService.isSupervisor(); + } + copyIdAndUpdateDate(source, target) { + EntityUtils.copyIdAndUpdateDate(source, target); + // Make sure tp copy programId (need by equals) + target.programId = source.programId; + // Applied strategies + if (source.appliedStrategies && target.appliedStrategies) { + target.appliedStrategies.forEach(targetAppliedStrategy => { + // Make sure to copy strategyId (need by equals) + targetAppliedStrategy.strategyId = source.id; + // Copy id and update date + const savedAppliedStrategy = (source.appliedStrategies || []).find(as => targetAppliedStrategy.equals(as)); + EntityUtils.copyIdAndUpdateDate(savedAppliedStrategy, targetAppliedStrategy); + }); + } + // Pmfm strategies + if (source.pmfms && target.pmfms) { + target.pmfms.forEach(targetPmfmStrategy => { + // Make sure to copy strategyId (need by equals) + targetPmfmStrategy.strategyId = source.id; + // Copy id and update date + const savedPmfmStrategy = source.pmfms.find(srcPmfmStrategy => targetPmfmStrategy.equals(srcPmfmStrategy)); + EntityUtils.copyIdAndUpdateDate(savedPmfmStrategy, targetPmfmStrategy); + // Copy pmfm + targetPmfmStrategy.pmfm = Pmfm.fromObject(savedPmfmStrategy === null || savedPmfmStrategy === void 0 ? void 0 : savedPmfmStrategy.pmfm) || targetPmfmStrategy.pmfm; + }); + } + } + saveAll(data, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!data) + return data; + // Clear cache (once) + if (!opts || opts.clearCache !== false) { + yield this.clearCache(); + } + return yield Promise.all(data.map(entity => this.save(entity, Object.assign(Object.assign({}, opts), { clearCache: true })))); + }); + } + save(entity, opts) { + const _super = Object.create(null, { + save: { get: () => super.save } + }); + return __awaiter(this, void 0, void 0, function* () { + // Clear cache + if (!opts || opts.clearCache !== false) { + yield this.clearCache(); + } + return _super.save.call(this, entity, Object.assign(Object.assign({}, opts), { refetchQueries: this._mutableWatchQueries + .filter(query => query.query === this.queries.loadAllWithTotal || query.query === this.queries.loadAllWithTotal), awaitRefetchQueries: true })); + }); + } + duplicateAllToYear(sources, year) { + return __awaiter(this, void 0, void 0, function* () { + if (isEmptyArray(sources)) + return []; + if (isNilOrNaN(year) || typeof year !== 'number' || year < 1970) + throw Error('Missing or invalid year argument (should be YYYY format)'); + // CLear cache (only once) + yield this.clearCache(); + const savedEntities = []; + // WARN: do not use a Promise.all, because parallel execution not working (label computation need series execution) + for (const source of sources) { + const duplicatedSource = yield this.cloneToYear(source, year); + const savedEntity = yield this.save(duplicatedSource, { clearCache: false /*already done*/ }); + savedEntities.push(savedEntity); + } + return savedEntities; + }); + } + cloneToYear(source, year, newLabel) { + return __awaiter(this, void 0, void 0, function* () { + if (!source || isNil(source.programId)) + throw Error('Missing strategy or strategy.programId, or newLabel argument'); + if (isNilOrNaN(year) || typeof year !== 'number' || year < 1970) + throw Error('Missing or invalid year argument (should be YYYY format)'); + newLabel = newLabel || source.label && `${source.label} (bis)`; + if (isNilOrBlank(newLabel)) + throw Error('Missing strategy.label or newLabel argument'); + const target = new Strategy(); + target.label = newLabel; + target.name = newLabel; + target.description = newLabel; + target.analyticReference = source.analyticReference; + target.programId = source.programId; + const dbTimeZone = yield firstNotNilPromise(this.$dbTimeZone, { stop: this.stopSubject }); + target.appliedStrategies = (source.appliedStrategies || []).map(sourceAppliedStrategy => { + const targetAppliedStrategy = new AppliedStrategy(); + targetAppliedStrategy.id = undefined; + targetAppliedStrategy.updateDate = undefined; + targetAppliedStrategy.location = sourceAppliedStrategy.location; + targetAppliedStrategy.appliedPeriods = (sourceAppliedStrategy.appliedPeriods || []).map(sourceAppliedPeriod => { + var _a, _b; + // DEBUG + //console.debug(`[strategy-service] Duplicate applied period, into year ${year}`, sourceAppliedPeriod); + return ({ + acquisitionNumber: sourceAppliedPeriod.acquisitionNumber, + startDate: (_a = sourceAppliedPeriod.startDate) === null || _a === void 0 ? void 0 : _a.clone().tz(dbTimeZone).year(year), + endDate: (_b = sourceAppliedPeriod.endDate) === null || _b === void 0 ? void 0 : _b.clone().tz(dbTimeZone).year(year) + }); + }) + .map(AppliedPeriod.fromObject); + return targetAppliedStrategy; + }); + target.pmfms = source.pmfms && source.pmfms.map(pmfmStrategy => { + const pmfmStrategyCloned = pmfmStrategy.clone(); + pmfmStrategyCloned.id = undefined; + pmfmStrategyCloned.strategyId = undefined; + return PmfmStrategy.fromObject(pmfmStrategyCloned); + }) || []; + target.departments = source.departments && source.departments.map(department => { + const departmentCloned = department.clone(); + departmentCloned.id = undefined; + departmentCloned.strategyId = undefined; + return StrategyDepartment.fromObject(departmentCloned); + }) || []; + target.taxonNames = source.taxonNames && source.taxonNames.map(taxonNameStrategy => { + const taxonNameStrategyCloned = taxonNameStrategy.clone(); + taxonNameStrategyCloned.strategyId = undefined; + return TaxonNameStrategy.fromObject(taxonNameStrategyCloned); + }) || []; + target.id = undefined; + target.updateDate = undefined; + target.comments = source.comments; + target.creationDate = undefined; + target.statusId = source.statusId; + target.validityStatusId = source.validityStatusId; + target.levelId = source.levelId; + target.parentId = source.parentId; + target.entityName = source.entityName; + target.denormalizedPmfms = undefined; + target.gears = undefined; + target.taxonGroups = undefined; + return target; + }); + } + clearCache() { + return __awaiter(this, void 0, void 0, function* () { + // Make sure to clean all strategy references (.e.g Pmfm cache, etc) + yield Promise.all([ + this.programRefService.clearCache(), + this.strategyRefService.clearCache() + ]); + }); + } + downloadAsJsonByIds(ids, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (isEmptyArray(ids)) + throw Error('Required not empty array of ids'); + // Load entities + const { data } = yield this.loadAll(0, ids.length, 'creationDate', 'asc', { + includedIds: ids + }, { + withTotal: false, + query: StrategyQueries.loadAllFull + }); + if (!data.length) + throw Error('COMMON.NO_RESULT'); + // To json + const jsonArray = data.map(entity => entity.asObject(Object.assign(Object.assign(Object.assign({}, COPY_LOCALLY_AS_OBJECT_OPTIONS), opts), { minify: false }))); + const program = opts.program || (yield this.programRefService.load(data[0].programId)); + const filename = this.translate.instant('PROGRAM.STRATEGY.DOWNLOAD_MANY_JSON_FILENAME', { + programLabel: program === null || program === void 0 ? void 0 : program.label + }); + // Export to file + JsonUtils.exportToFile(jsonArray, { filename }); + }); + } + downloadAsJson(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!entity) + throw new Error('Missing required \'entity\' argument'); + if (isNilOrNaN(entity.programId)) + throw new Error('Missing required \'entity.programId\''); + // Convert strategy into JSON + const json = Strategy.fromObject(entity) + .asObject(Object.assign(Object.assign(Object.assign({}, COPY_LOCALLY_AS_OBJECT_OPTIONS), opts), { minify: false })); + delete json.denormalizedPmfms; // Not used, because we already have pmfms + const program = opts.program || (yield this.programRefService.load(entity.programId)); + const filename = this.translate.instant('PROGRAM.STRATEGY.DOWNLOAD_JSON_FILENAME', { + programLabel: program === null || program === void 0 ? void 0 : program.label, + label: entity.label + }); + // Export to file + JsonUtils.exportToFile(json, { filename }); + }); + } + /* -- protected functions -- */ + asObject(entity, opts) { + const target = super.asObject(entity, opts); + (target.pmfms || []).forEach(pmfmStrategy => { + pmfmStrategy.pmfmId = toNumber(pmfmStrategy.pmfm && pmfmStrategy.pmfm.id, pmfmStrategy.pmfmId); + delete pmfmStrategy.pmfm; + }); + return target; + } +}; +StrategyService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [Injector, + NetworkService, + AccountService, + CacheService, + EntitiesStorage, + TranslateService, + ProgramService, + ProgramRefService, + StrategyRefService, + ReferentialRefService, + ConfigService]) +], StrategyService); +export { StrategyService }; +//# sourceMappingURL=strategy.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/strategy.service.js.map b/out-tsc/app/app/referential/services/strategy.service.js.map new file mode 100644 index 000000000..45449f801 --- /dev/null +++ b/out-tsc/app/app/referential/services/strategy.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"strategy.service.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/strategy.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/taxon-group-ref.service.js b/out-tsc/app/app/referential/services/taxon-group-ref.service.js new file mode 100644 index 000000000..5def44f65 --- /dev/null +++ b/out-tsc/app/app/referential/services/taxon-group-ref.service.js @@ -0,0 +1,37 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable, Injector } from '@angular/core'; +import { BaseReferentialRefService } from '@app/referential/services/base-referential-ref-service.class'; +import { TaxonGroupRef } from '@app/referential/services/model/taxon-group.model'; +import { ReferentialRefFilter } from '@app/referential/services/filter/referential-ref.filter'; +import { gql } from '@apollo/client/core'; +import { ReferentialFragments } from '@app/referential/services/referential.fragments'; +const TaxonGroupQueries = { + loadAll: gql `query TaxonGroups($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: ReferentialFilterVOInput){ + data: taxonGroups(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...TaxonGroupFragment + } + } + ${ReferentialFragments.taxonGroup} + ${ReferentialFragments.taxonName}`, + loadAllWithTotal: gql `query TaxonGroups($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: ReferentialFilterVOInput){ + data: taxonGroups(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...TaxonGroupFragment + } + total: taxonGroupsCount(filter: $filter) + } + ${ReferentialFragments.taxonGroup} + ${ReferentialFragments.taxonName}` +}; +let TaxonGroupRefService = class TaxonGroupRefService extends BaseReferentialRefService { + constructor(injector) { + super(injector, TaxonGroupRef, ReferentialRefFilter, { + queries: TaxonGroupQueries + }); + } +}; +TaxonGroupRefService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [Injector]) +], TaxonGroupRefService); +export { TaxonGroupRefService }; +//# sourceMappingURL=taxon-group-ref.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/taxon-group-ref.service.js.map b/out-tsc/app/app/referential/services/taxon-group-ref.service.js.map new file mode 100644 index 000000000..d3ff35882 --- /dev/null +++ b/out-tsc/app/app/referential/services/taxon-group-ref.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"taxon-group-ref.service.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/taxon-group-ref.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,8DAA8D,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yDAAyD,CAAC;AAC/F,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAIvF,MAAM,iBAAiB,GAA6B;IAClD,OAAO,EAAE,GAAG,CAAA;;;;;IAKV,oBAAoB,CAAC,UAAU;IAC/B,oBAAoB,CAAC,SAAS,EAAE;IAElC,gBAAgB,EAAE,GAAG,CAAA;;;;;;IAMnB,oBAAoB,CAAC,UAAU;IAC/B,oBAAoB,CAAC,SAAS,EAAE;CACnC,CAAC;AAGK,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,yBAA8D;IAEtG,YACE,QAAkB;QAElB,KAAK,CAAC,QAAQ,EACZ,aAAa,EACb,oBAAoB,EACpB;YACE,OAAO,EAAE,iBAAiB;SAC3B,CAAC,CAAC;IACP,CAAC;CAEF,CAAA;AAbY,oBAAoB;IADhC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAInB,QAAQ;GAHT,oBAAoB,CAahC;SAbY,oBAAoB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/taxon-name-ref.service.js b/out-tsc/app/app/referential/services/taxon-name-ref.service.js new file mode 100644 index 000000000..57703a68c --- /dev/null +++ b/out-tsc/app/app/referential/services/taxon-name-ref.service.js @@ -0,0 +1,19 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable, Injector } from '@angular/core'; +import { TaxonNameRef } from './model/taxon-name.model'; +import { TaxonNameRefFilter } from './filter/taxon-name-ref.filter'; +import { TaxonNameQueries } from '@app/referential/services/taxon-name.service'; +import { BaseReferentialRefService } from '@app/referential/services/base-referential-ref-service.class'; +let TaxonNameRefService = class TaxonNameRefService extends BaseReferentialRefService { + constructor(injector) { + super(injector, TaxonNameRef, TaxonNameRefFilter, { + queries: TaxonNameQueries + }); + } +}; +TaxonNameRefService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [Injector]) +], TaxonNameRefService); +export { TaxonNameRefService }; +//# sourceMappingURL=taxon-name-ref.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/taxon-name-ref.service.js.map b/out-tsc/app/app/referential/services/taxon-name-ref.service.js.map new file mode 100644 index 000000000..53167228a --- /dev/null +++ b/out-tsc/app/app/referential/services/taxon-name-ref.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"taxon-name-ref.service.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/taxon-name-ref.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,8DAA8D,CAAC;AAGlG,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,yBAA2D;IAElG,YACE,QAAkB;QAElB,KAAK,CAAC,QAAQ,EACZ,YAAY,EACZ,kBAAkB,EAClB;YACE,OAAO,EAAE,gBAAgB;SAC1B,CAAC,CAAC;IACP,CAAC;CAEF,CAAA;AAbY,mBAAmB;IAD/B,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAInB,QAAQ;GAHT,mBAAmB,CAa/B;SAbY,mBAAmB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/taxon-name.service.js b/out-tsc/app/app/referential/services/taxon-name.service.js new file mode 100644 index 000000000..6344583c3 --- /dev/null +++ b/out-tsc/app/app/referential/services/taxon-name.service.js @@ -0,0 +1,114 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { ErrorCodes } from './errors'; +import { AccountService, BaseEntityService, EntityUtils, GraphqlService, isNil, isNotNil, MINIFY_ENTITY_FOR_POD, PlatformService, StatusIds } from '@sumaris-net/ngx-components'; +import { ReferentialService } from './referential.service'; +import { ReferentialFragments } from './referential.fragments'; +import { TaxonName } from './model/taxon-name.model'; +import { TaxonNameFilter } from '@app/referential/services/filter/taxon-name.filter'; +import { mergeMap } from 'rxjs/operators'; +export const TaxonNameQueries = { + loadAll: gql `query TaxonNames($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: TaxonNameFilterVOInput){ + data: taxonNames(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...LightTaxonNameFragment + } + } + ${ReferentialFragments.lightTaxonName}`, + loadAllWithTotal: gql `query TaxonNames($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: TaxonNameFilterVOInput){ + data: taxonNames(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...LightTaxonNameFragment + } + total: taxonNameCount(filter: $filter) + } + ${ReferentialFragments.lightTaxonName}`, + countAll: gql `query TaxonNameCount($filter: TaxonNameFilterVOInput){ + total: taxonNameCount(filter: $filter) + }`, + load: gql `query taxonName($label: String, $id: Int){ + data: taxonName(label: $label, id: $id){ + ...FullTaxonNameFragment + } + } + ${ReferentialFragments.fullTaxonName}`, + referenceTaxonExists: gql `query referenceTaxonExists($id: Int){ + data: referenceTaxonExists(id: $id) + }` +}; +const TaxonNameMutations = { + save: gql `mutation saveTaxonName($data: TaxonNameVOInput!) { + data: saveTaxonName(taxonName: $data){ + ...FullTaxonNameFragment + } + } + ${ReferentialFragments.fullTaxonName}` +}; +let TaxonNameService = class TaxonNameService extends BaseEntityService { + constructor(graphql, platform, accountService, referentialService) { + super(graphql, platform, TaxonName, TaxonNameFilter, { + queries: TaxonNameQueries, + mutations: TaxonNameMutations + }); + this.graphql = graphql; + this.platform = platform; + this.accountService = accountService; + this.referentialService = referentialService; + } + existsByLabel(label, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (isNil(label)) + return false; + return yield this.referentialService.existsByLabel(label, Object.assign(Object.assign({}, opts), { entityName: 'TaxonName' })); + }); + } + referenceTaxonExists(referenceTaxonId) { + return __awaiter(this, void 0, void 0, function* () { + if (isNil(referenceTaxonId)) + return false; + const { data } = yield this.graphql.query({ + query: TaxonNameQueries.referenceTaxonExists, + variables: { + id: referenceTaxonId + }, + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' } + }); + return data; + }); + } + /** + * Delete parameter entities + */ + delete(entity, options) { + return __awaiter(this, void 0, void 0, function* () { + entity.entityName = TaxonName.ENTITY_NAME; + yield this.referentialService.deleteAll([entity]); + }); + } + canUserWrite(data, opts) { + return this.accountService.isAdmin(); + } + listenChanges(id, options) { + return this.referentialService.listenChanges(id, Object.assign({ entityName: TaxonName.ENTITY_NAME }, options)) + .pipe(mergeMap(data => this.load(id, Object.assign(Object.assign({}, options), { fetchPolicy: 'network-only' })))); + } + copyIdAndUpdateDate(source, target) { + EntityUtils.copyIdAndUpdateDate(source, target); + target.referenceTaxonId = source.referenceTaxonId; + } + /* -- protected methods -- */ + asObject(entity, opts) { + return super.asObject(entity, Object.assign(Object.assign({}, MINIFY_ENTITY_FOR_POD), opts)); + } + fillDefaultProperties(entity) { + entity.statusId = isNotNil(entity.statusId) ? entity.statusId : StatusIds.ENABLE; + } +}; +TaxonNameService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [GraphqlService, + PlatformService, + AccountService, + ReferentialService]) +], TaxonNameService); +export { TaxonNameService }; +//# sourceMappingURL=taxon-name.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/taxon-name.service.js.map b/out-tsc/app/app/referential/services/taxon-name.service.js.map new file mode 100644 index 000000000..114e6999d --- /dev/null +++ b/out-tsc/app/app/referential/services/taxon-name.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"taxon-name.service.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/taxon-name.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/validator/parameter.validator.js b/out-tsc/app/app/referential/services/validator/parameter.validator.js new file mode 100644 index 000000000..d263b13ea --- /dev/null +++ b/out-tsc/app/app/referential/services/validator/parameter.validator.js @@ -0,0 +1,28 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { ReferentialValidatorService } from './referential.validator'; +let ParameterValidatorService = class ParameterValidatorService extends ReferentialValidatorService { + constructor(formBuilder, referentialValidatorService) { + super(formBuilder); + this.formBuilder = formBuilder; + this.referentialValidatorService = referentialValidatorService; + } + getRowValidator() { + return this.getFormGroup(); + } + getFormGroupConfig(data, opts) { + const config = super.getFormGroupConfig(data, opts); + return Object.assign(Object.assign({}, config), { type: [data && data.type || null, Validators.required], qualitativeValues: this.formBuilder.array((data && data.qualitativeValues || []).map(item => this.getQualitativeValuesFormGroup(item))) }); + } + getQualitativeValuesFormGroup(data) { + return this.formBuilder.group(this.referentialValidatorService.getFormGroupConfig(data)); + } +}; +ParameterValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + ReferentialValidatorService]) +], ParameterValidatorService); +export { ParameterValidatorService }; +//# sourceMappingURL=parameter.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/validator/parameter.validator.js.map b/out-tsc/app/app/referential/services/validator/parameter.validator.js.map new file mode 100644 index 000000000..45cfb56b3 --- /dev/null +++ b/out-tsc/app/app/referential/services/validator/parameter.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parameter.validator.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/validator/parameter.validator.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,kBAAkB,EAAoB,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAC,2BAA2B,EAAC,MAAM,yBAAyB,CAAC;AAK7D,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,2BAAsC;IAEnF,YACY,WAA+B,EAC/B,2BAAqE;QAE/E,KAAK,CAAC,WAAW,CAAC,CAAC;QAHT,gBAAW,GAAX,WAAW,CAAoB;QAC/B,gCAA2B,GAA3B,2BAA2B,CAA0C;IAGjF,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED,kBAAkB,CAAC,IAAgB,EAAE,IAA4D;QAC/F,MAAM,MAAM,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpD,uCACK,MAAM,KACT,IAAI,EAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,EACvD,iBAAiB,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CACvC,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC,CAC7F,IACA;IACL,CAAC;IAED,6BAA6B,CAAC,IAAkB;QAC9C,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3F,CAAC;CACF,CAAA;AA3BY,yBAAyB;IADrC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAIN,kBAAkB;QACF,2BAA2B;GAJzD,yBAAyB,CA2BrC;SA3BY,yBAAyB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/validator/pmfm-strategy.validator.js b/out-tsc/app/app/referential/services/validator/pmfm-strategy.validator.js new file mode 100644 index 000000000..c38a49a4e --- /dev/null +++ b/out-tsc/app/app/referential/services/validator/pmfm-strategy.validator.js @@ -0,0 +1,70 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { SharedValidators } from '@sumaris-net/ngx-components'; +import { isNotNil } from '@sumaris-net/ngx-components'; +let PmfmStrategyValidatorService = class PmfmStrategyValidatorService { + constructor(formBuilder) { + this.formBuilder = formBuilder; + this._withDetails = true; + this._withDetails = true; + } + get withDetails() { + return this._withDetails; + } + set withDetails(value) { + this._withDetails = value; + } + getRowValidator() { + return this.getFormGroup(); + } + getFormGroup(data, opts) { + opts = Object.assign({ withDetails: this._withDetails }, opts); + return this.formBuilder.group(this.getFormGroupConfig(data, opts), this.getFormGroupOptions(data, opts)); + } + getFormGroupConfig(data, opts) { + const config = { + id: [data && data.id || null], + pmfm: [data && data.pmfm || null, SharedValidators.entity], + parameter: [data && data.parameter || null, SharedValidators.entity], + matrix: [data && data.matrix || null, SharedValidators.entity], + fraction: [data && data.fraction || null, SharedValidators.entity], + method: [data && data.method || null, SharedValidators.entity] + }; + if (opts.withDetails) { + config.acquisitionLevel = [data && data.acquisitionLevel || null, Validators.required]; + config.rankOrder = [data && data.rankOrder || 1, Validators.compose([Validators.required, SharedValidators.integer, Validators.min(0)])]; + config.isMandatory = [data && data.isMandatory || false, Validators.required]; + config.acquisitionNumber = [data && data.acquisitionNumber || 1, Validators.compose([Validators.required, SharedValidators.integer, Validators.min(1)])]; + config.minValue = [data && data.minValue || null, SharedValidators.decimal()]; + config.maxValue = [data && data.maxValue || null, SharedValidators.decimal()]; + config.defaultValue = [isNotNil(data && data.defaultValue) ? data.defaultValue : null]; + config.gearIds = [data && data.gearIds || null]; + config.taxonGroupIds = [data && data.taxonGroupIds || null]; + config.referenceTaxonIds = [data && data.referenceTaxonIds || null]; + } + return config; + } + getFormGroupOptions(data, opts) { + if (!opts || opts.required !== false) { + return { + validator: (form) => { + const pmfm = form.get('pmfm').value; + const parameter = form.get('parameter').value; + const fraction = form.get('fraction').value; + if (!pmfm && !parameter && !fraction) { + return { required: true }; + } + return null; + } + }; + } + return {}; + } +}; +PmfmStrategyValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder]) +], PmfmStrategyValidatorService); +export { PmfmStrategyValidatorService }; +//# sourceMappingURL=pmfm-strategy.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/validator/pmfm-strategy.validator.js.map b/out-tsc/app/app/referential/services/validator/pmfm-strategy.validator.js.map new file mode 100644 index 000000000..afe10636b --- /dev/null +++ b/out-tsc/app/app/referential/services/validator/pmfm-strategy.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfm-strategy.validator.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/validator/pmfm-strategy.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/validator/pmfm.validator.js b/out-tsc/app/app/referential/services/validator/pmfm.validator.js new file mode 100644 index 000000000..6b762f7a3 --- /dev/null +++ b/out-tsc/app/app/referential/services/validator/pmfm.validator.js @@ -0,0 +1,28 @@ +import { __decorate, __metadata } from "tslib"; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { isNotNil, toNumber } from '@sumaris-net/ngx-components'; +import { SharedValidators } from '@sumaris-net/ngx-components'; +import { Injectable } from '@angular/core'; +import { ReferentialValidatorService } from './referential.validator'; +let PmfmValidatorService = class PmfmValidatorService extends ReferentialValidatorService { + constructor(formBuilder) { + super(formBuilder); + this.formBuilder = formBuilder; + } + getFormGroupConfig(data, opts) { + const config = super.getFormGroupConfig(data, opts); + return Object.assign(Object.assign({}, config), { minValue: [toNumber(data && data.minValue, null), SharedValidators.decimal()], maxValue: [toNumber(data && data.maxValue, null), SharedValidators.decimal()], defaultValue: [isNotNil(data && data.defaultValue) ? data.defaultValue : null], maximumNumberDecimals: [toNumber(data && data.maximumNumberDecimals, null), SharedValidators.integer], signifFiguresNumber: [toNumber(data && data.signifFiguresNumber, null), SharedValidators.integer], precision: [toNumber(data && data.precision, null), SharedValidators.decimal()], parameter: [data && data.parameter || null, Validators.compose([Validators.required, SharedValidators.entity])], matrix: [data && data.matrix || null, SharedValidators.entity], fraction: [data && data.fraction || null, SharedValidators.entity], method: [data && data.method || null, SharedValidators.entity], unit: [data && data.unit || null, Validators.compose([Validators.required, SharedValidators.entity])] }); + } + getFormGroupOptions(data, opts) { + /*return {validator: Validators.compose([ + SharedFormGroupValidators.requiredIf('fraction', 'matrix') + ])}*/ + return null; + } +}; +PmfmValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder]) +], PmfmValidatorService); +export { PmfmValidatorService }; +//# sourceMappingURL=pmfm.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/validator/pmfm.validator.js.map b/out-tsc/app/app/referential/services/validator/pmfm.validator.js.map new file mode 100644 index 000000000..ac5c4c4e9 --- /dev/null +++ b/out-tsc/app/app/referential/services/validator/pmfm.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfm.validator.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/validator/pmfm.validator.ts"],"names":[],"mappings":";AAAA,OAAO,EAAyB,kBAAkB,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAC,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAA4B,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AACxF,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,2BAA2B,EAAC,MAAM,yBAAyB,CAAC;AAK7D,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,2BAAiC;IAEzE,YACY,WAA+B;QAEzC,KAAK,CAAC,WAAW,CAAC,CAAC;QAFT,gBAAW,GAAX,WAAW,CAAoB;IAG3C,CAAC;IAED,kBAAkB,CAAC,IAAW,EAAE,IAA4D;QAC1F,MAAM,MAAM,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpD,uCACK,MAAM,KACT,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAC7E,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAC7E,YAAY,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,EAC9E,qBAAqB,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,EACrG,mBAAmB,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,EACjG,SAAS,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAC/E,SAAS,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAC/G,MAAM,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAC9D,QAAQ,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAClE,MAAM,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAC9D,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,IACpG;IACL,CAAC;IAED,mBAAmB,CAAC,IAAW,EAAE,IAAU;QACzC;;aAEK;QACL,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAhCY,oBAAoB;IADhC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAIN,kBAAkB;GAHhC,oBAAoB,CAgChC;SAhCY,oBAAoB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/validator/pmfm.validators.js b/out-tsc/app/app/referential/services/validator/pmfm.validators.js new file mode 100644 index 000000000..cc6ee31e0 --- /dev/null +++ b/out-tsc/app/app/referential/services/validator/pmfm.validators.js @@ -0,0 +1,88 @@ +import { Validators } from '@angular/forms'; +import { isNil, isNotNil, SharedValidators } from '@sumaris-net/ngx-components'; +import { PmfmUtils } from '../model/pmfm.model'; +const REGEXP_INTEGER = /^[+|-]?[0-9]+$/; +const REGEXP_DOUBLE = /^[+|-]?[0-9]+(\.[0-9]+)?$/; +export class PmfmValidators { + static create(pmfm, validatorFns, opts) { + validatorFns = validatorFns || []; + // Add required validator (if NOT force as optional - can occur when on field mode) + if (pmfm.required && (!opts || opts.forceOptional !== true)) { + validatorFns.push(Validators.required); + } + // If pmfm is alphanumerical + if (pmfm.type === 'string') { + validatorFns.push(Validators.maxLength(40)); + } + // If pmfm is numerical + else if (pmfm.type === 'integer' || pmfm.type === 'double') { + if (isNotNil(pmfm.minValue)) { + validatorFns.push(Validators.min(pmfm.minValue)); + } + if (isNotNil(pmfm.maxValue)) { + validatorFns.push(Validators.max(pmfm.maxValue)); + } + // Pattern validation: + // Integer or double with 0 decimals + if (pmfm.type === 'integer' || pmfm.maximumNumberDecimals === 0) { + validatorFns.push(Validators.pattern(REGEXP_INTEGER)); + } + // Double without maximal decimals + else if (pmfm.type === 'double' && isNil(pmfm.maximumNumberDecimals)) { + validatorFns.push(Validators.pattern(REGEXP_DOUBLE)); + } + // Double with a N decimal + else if (pmfm.maximumNumberDecimals > 0) { + validatorFns.push(SharedValidators.decimal({ maxDecimals: pmfm.maximumNumberDecimals })); + } + // Significant figures number + if (pmfm.signifFiguresNumber > 0) { + // TODO test this, and add i18n validator message + console.warn('/!\ Enabling \'significantFiguresNumber\' validator (found in a pmfm)', pmfm); + validatorFns.push(PmfmValidators.significantFiguresNumber(pmfm.signifFiguresNumber)); + } + // Precision (only if defined, or if maximumNumberDecimals is defined) + const precision = PmfmUtils.getOrComputePrecision(pmfm, null); + if (precision > 0) { + validatorFns.push(SharedValidators.precision(precision)); + } + } + else if (pmfm.type === 'qualitative_value') { + validatorFns.push(SharedValidators.entity); + } + return validatorFns.length > 1 ? Validators.compose(validatorFns) : (validatorFns.length === 1 ? validatorFns[0] : null); + } + static significantFiguresNumber(n) { + return (control) => { + const value = control.value; + let significantFigures; + let strValue = (typeof value === 'string') ? value : ((typeof value === 'number') ? String(value) : ''); + if (strValue) { + strValue = strValue.replace(/^[\s0]+|\s$/g, ''); // Remove leading zeros/space, and trailing space + // If there is a decimal point + if (strValue.includes('.')) { + const [wholePart, fractionalPart] = strValue.split('.'); + // If 0.00xxx => ignore starting 0.00 + if (wholePart.length === 0) { + const leadingDecimalZeros = fractionalPart.match(/^0*/)[0].length; + significantFigures = fractionalPart.slice(leadingDecimalZeros).replace(/^0+$/g, '').length; + } + // value > 1: count every figures numbers + else { + significantFigures = wholePart.length + fractionalPart.length; + } + } + // If there is no decimal point: count every non-trailing zeros + else { + significantFigures = strValue.replace(/0+$/g, '').length; // Remove trailing zeros + } + } + // Check if value has n significant figures + return significantFigures <= n ? null : { significantFiguresNumber: { significantFiguresNumber: n } }; + }; + } +} +export const PMFM_VALIDATOR_I18N_ERROR_KEYS = { + significantFiguresNumber: 'REFERENTIAL.PMFM.ERROR.FIELD_SIGNIF_FIGURES_NUMBER' +}; +//# sourceMappingURL=pmfm.validators.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/validator/pmfm.validators.js.map b/out-tsc/app/app/referential/services/validator/pmfm.validators.js.map new file mode 100644 index 000000000..4c710dc1d --- /dev/null +++ b/out-tsc/app/app/referential/services/validator/pmfm.validators.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfm.validators.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/validator/pmfm.validators.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/validator/program.validator.js b/out-tsc/app/app/referential/services/validator/program.validator.js new file mode 100644 index 000000000..f9b89177c --- /dev/null +++ b/out-tsc/app/app/referential/services/validator/program.validator.js @@ -0,0 +1,52 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { SharedFormArrayValidators, SharedValidators } from '@sumaris-net/ngx-components'; +import { EntityUtils } from '@sumaris-net/ngx-components'; +let ProgramValidatorService = class ProgramValidatorService { + constructor(formBuilder) { + this.formBuilder = formBuilder; + } + getRowValidator() { + return this.getFormGroup(); + } + getFormGroup(data) { + return this.formBuilder.group({ + id: [data && data.id || null], + updateDate: [data && data.updateDate || null], + creationDate: [data && data.creationDate || null], + statusId: [data && data.statusId || null, Validators.required], + label: [data && data.label || null, Validators.required], + name: [data && data.name || null, Validators.required], + description: [data && data.description || null, Validators.maxLength(255)], + comments: [data && data.comments || null, Validators.maxLength(2000)], + taxonGroupType: [data && data.taxonGroupType || null, Validators.compose([Validators.required, SharedValidators.entity])], + gearClassification: [data && data.gearClassification || null, Validators.compose([Validators.required, SharedValidators.entity])], + locationClassifications: this.getLocationClassificationArray(data && data.locationClassifications), + locations: this.formBuilder.array([]), + properties: this.getPropertiesArray(data && data.properties) + }); + } + getPropertiesArray(array) { + const properties = EntityUtils.getMapAsArray(array || {}); + return this.formBuilder.array(properties.map(item => this.getPropertyFormGroup(item))); + } + getPropertyFormGroup(data) { + return this.formBuilder.group({ + key: [data && data.key || null, Validators.compose([Validators.required, Validators.max(50)])], + value: [data && data.value || null, Validators.compose([Validators.required, Validators.max(100)])] + }); + } + getLocationClassificationArray(array) { + return this.formBuilder.array((array || []).map(item => this.getLocationClassificationControl(item)), SharedFormArrayValidators.requiredArrayMinLength(1)); + } + getLocationClassificationControl(locationClassification) { + return this.formBuilder.control(locationClassification || null, [Validators.required, SharedValidators.entity]); + } +}; +ProgramValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder]) +], ProgramValidatorService); +export { ProgramValidatorService }; +//# sourceMappingURL=program.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/validator/program.validator.js.map b/out-tsc/app/app/referential/services/validator/program.validator.js.map new file mode 100644 index 000000000..61c1a4ac7 --- /dev/null +++ b/out-tsc/app/app/referential/services/validator/program.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"program.validator.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/validator/program.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/validator/referential.validator.js b/out-tsc/app/app/referential/services/validator/referential.validator.js new file mode 100644 index 000000000..dbd22f255 --- /dev/null +++ b/out-tsc/app/app/referential/services/validator/referential.validator.js @@ -0,0 +1,50 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { AppValidatorService, SharedValidators, toNumber } from '@sumaris-net/ngx-components'; +let ReferentialValidatorService = class ReferentialValidatorService extends AppValidatorService { + constructor(formBuilder) { + super(formBuilder); + this.formBuilder = formBuilder; + } + getRowValidator() { + return this.getFormGroup(); + } + getFormGroup(data, opts) { + return this.formBuilder.group(this.getFormGroupConfig(data, opts), this.getFormGroupOptions(data, opts)); + } + getFormGroupConfig(data, opts) { + opts = opts || {}; + const controlsConfig = { + id: [data && data.id || null], + updateDate: [data && data.updateDate || null], + creationDate: [data && data.creationDate || null], + statusId: [toNumber(data === null || data === void 0 ? void 0 : data.statusId, null), Validators.required], + levelId: [toNumber(data === null || data === void 0 ? void 0 : data.levelId, null)], + parentId: [toNumber(data === null || data === void 0 ? void 0 : data.parentId, null)], + label: [data && data.label || null, Validators.required], + name: [data && data.name || null, Validators.required], + entityName: [data && data.entityName || null, Validators.required], + properties: [data && data['properties'] || null] + }; + if (opts.withParent !== false) { + controlsConfig.parent = [data && data['parent'] || null, SharedValidators.entity]; + } + if (opts.withDescription !== false) { + controlsConfig.description = [data && data.description || null, Validators.maxLength(255)]; + } + if (opts.withComments !== false) { + controlsConfig.comments = [data && data.comments || null, Validators.maxLength(2000)]; + } + return controlsConfig; + } + getFormGroupOptions(data, opts) { + return null; + } +}; +ReferentialValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder]) +], ReferentialValidatorService); +export { ReferentialValidatorService }; +//# sourceMappingURL=referential.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/validator/referential.validator.js.map b/out-tsc/app/app/referential/services/validator/referential.validator.js.map new file mode 100644 index 000000000..e2fcaaed7 --- /dev/null +++ b/out-tsc/app/app/referential/services/validator/referential.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential.validator.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/validator/referential.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/validator/software.validator.js b/out-tsc/app/app/referential/services/validator/software.validator.js new file mode 100644 index 000000000..faf53e7a7 --- /dev/null +++ b/out-tsc/app/app/referential/services/validator/software.validator.js @@ -0,0 +1,41 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { EntityUtils } from '@sumaris-net/ngx-components'; +let SoftwareValidatorService = class SoftwareValidatorService { + constructor(formBuilder) { + this.formBuilder = formBuilder; + } + getRowValidator() { + return this.getFormGroup(); + } + getFormGroup(data) { + return this.formBuilder.group({ + id: [data && data.id || null], + label: [data && data.label || null, Validators.compose([Validators.required, Validators.max(50)])], + name: [data && data.name || null, Validators.compose([Validators.required, Validators.max(100)])], + description: [data && data.description || null, Validators.maxLength(255)], + comments: [data && data.comments || null, Validators.maxLength(2000)], + updateDate: [data && data.updateDate || null], + creationDate: [data && data.creationDate || null], + statusId: [data && data.statusId || null, Validators.required], + properties: this.getPropertiesArray(data && data.properties) + }); + } + getPropertiesArray(array) { + const properties = EntityUtils.getMapAsArray(array || {}); + return this.formBuilder.array(properties.map(item => this.getPropertyFormGroup(item))); + } + getPropertyFormGroup(data) { + return this.formBuilder.group({ + key: [data && data.key || null, Validators.compose([Validators.required, Validators.max(50)])], + value: [data && data.value || null, Validators.compose([Validators.required, Validators.max(100)])] + }); + } +}; +SoftwareValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder]) +], SoftwareValidatorService); +export { SoftwareValidatorService }; +//# sourceMappingURL=software.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/validator/software.validator.js.map b/out-tsc/app/app/referential/services/validator/software.validator.js.map new file mode 100644 index 000000000..b8545108b --- /dev/null +++ b/out-tsc/app/app/referential/services/validator/software.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"software.validator.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/validator/software.validator.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,kBAAkB,EAAoB,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAGhF,OAAO,EAAC,WAAW,EAAC,MAAO,6BAA6B,CAAC;AAGlD,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAEnC,YACY,WAA+B;QAA/B,gBAAW,GAAX,WAAW,CAAoB;IAE3C,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED,YAAY,CAAC,IAAQ;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAC5B,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC;YAC7B,KAAK,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAClG,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjG,WAAW,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC1E,QAAQ,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACrE,UAAU,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;YAC7C,YAAY,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;YACjD,QAAQ,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;YAC9D,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC;SAC7D,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,KAAW;QAC5B,MAAM,UAAU,GAAG,WAAW,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAC3B,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CACxD,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,IAAsC;QACzD,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAC5B,GAAG,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9F,KAAK,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACpG,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAtCY,wBAAwB;IADpC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAIN,kBAAkB;GAHhC,wBAAwB,CAsCpC;SAtCY,wBAAwB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/validator/strategy.validator.js b/out-tsc/app/app/referential/services/validator/strategy.validator.js new file mode 100644 index 000000000..ee942c53f --- /dev/null +++ b/out-tsc/app/app/referential/services/validator/strategy.validator.js @@ -0,0 +1,112 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { toNumber } from '@sumaris-net/ngx-components'; +import { SharedValidators } from '@sumaris-net/ngx-components'; +import { PmfmStrategyValidatorService } from './pmfm-strategy.validator'; +import { ReferentialValidatorService } from './referential.validator'; +let StrategyValidatorService = class StrategyValidatorService extends ReferentialValidatorService { + constructor(formBuilder, pmfmStrategyValidatorService) { + super(formBuilder); + this.formBuilder = formBuilder; + this.pmfmStrategyValidatorService = pmfmStrategyValidatorService; + } + getFormGroup(data) { + //console.debug("[strategy-validator] Creating strategy form"); + return this.formBuilder.group({ + id: [toNumber(data && data.id, null)], + updateDate: [data && data.updateDate || null], + creationDate: [data && data.creationDate || null], + statusId: [data && data.statusId || null /*, Validators.required*/], + label: this.getLabel(data), + name: [data && data.name || null /*, Validators.required*/], + description: [data && data.description || null, Validators.maxLength(255)], + comments: [data && data.comments || null, Validators.maxLength(2000)], + analyticReference: [data && data.analyticReference || null, Validators.maxLength(255)], + gears: this.getGearsFormArray(data), + taxonGroups: this.getTaxonGroupStrategyFormArray(data), + taxonNames: this.getTaxonNameStrategyFormArray(data), + pmfms: this.getPmfmStrategiesFormArray(data), + appliedStrategies: this.getAppliedStrategiesFormArray(data), + departments: this.getStrategyDepartmentsFormArray(data), + programId: [toNumber(data && data.programId, null)], + }); + } + getLabel(data) { + return [data && data.label || null, [Validators.required, (control) => { + if (control && control.value && control.value.includes('_')) { + return { pattern: { pattern: false } }; + } + return null; + }]]; + } + getPmfmStrategiesFormArray(data) { + return this.formBuilder.array((data && data.pmfms || []).map(ps => this.pmfmStrategyValidatorService.getFormGroup(ps))); + } + getAppliedStrategiesFormArray(data) { + return this.formBuilder.array((data && data.appliedStrategies || []).map(as => this.getAppliedStrategiesControl(as))); + } + getAppliedStrategiesControl(data) { + return this.formBuilder.group({ + id: [toNumber(data && data.id, null)], + strategyId: [toNumber(data && data.strategyId, null)], + location: [data && data.location, Validators.compose([Validators.required, SharedValidators.entity])], + appliedPeriods: this.getAppliedPeriodsFormArray(data) + }); + } + getAppliedPeriodsFormArray(data) { + return this.formBuilder.array((data && data.appliedPeriods || []).map(ap => this.getAppliedPeriodsControl(ap))); + } + getAppliedPeriodsControl(data) { + return this.formBuilder.group({ + appliedStrategyId: [toNumber(data && data.appliedStrategyId, null)], + startDate: [data && data.startDate, Validators.compose([Validators.required, SharedValidators.validDate])], + endDate: [data && data.endDate, Validators.compose([Validators.required, SharedValidators.validDate])], + acquisitionNumber: [data && data.acquisitionNumber, Validators.compose([SharedValidators.integer, Validators.min(0)])] + }); + } + getStrategyDepartmentsFormArray(data) { + return this.formBuilder.array((data && data.departments || []).map(sd => this.getStrategyDepartmentsControl(sd))); + } + getStrategyDepartmentsControl(data) { + return this.formBuilder.group({ + strategyId: [toNumber(data && data.strategyId, null)], + location: [data && data.location, SharedValidators.entity], + privilege: [data && data.privilege], + department: [data && data.department, Validators.compose([Validators.required, SharedValidators.entity])] + }); + } + getGearsFormArray(data) { + return this.formBuilder.array((data && data.gears || []).map(g => this.getGearControl(g))); + } + getGearControl(gear) { + return this.formBuilder.control(gear || null, [Validators.required, SharedValidators.entity]); + } + getTaxonNameStrategyFormArray(data) { + return this.formBuilder.array((data && data.taxonNames || []).map(tn => this.getTaxonNameStrategyControl(tn))); + } + getTaxonNameStrategyControl(data) { + return this.formBuilder.group({ + strategyId: [toNumber(data && data.strategyId, null)], + priorityLevel: [data && data.priorityLevel, SharedValidators.integer], + taxonName: [data && data.taxonName, Validators.compose([Validators.required, SharedValidators.entity])] + }); + } + getTaxonGroupStrategyFormArray(data) { + return this.formBuilder.array((data && data.taxonGroups || []).map(tn => this.getTaxonGroupStrategyControl(tn))); + } + getTaxonGroupStrategyControl(data) { + return this.formBuilder.group({ + strategyId: [toNumber(data && data.strategyId, null)], + priorityLevel: [data && data.priorityLevel, SharedValidators.integer], + taxonGroup: [data && data.taxonGroup, Validators.compose([Validators.required, SharedValidators.entity])] + }); + } +}; +StrategyValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + PmfmStrategyValidatorService]) +], StrategyValidatorService); +export { StrategyValidatorService }; +//# sourceMappingURL=strategy.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/validator/strategy.validator.js.map b/out-tsc/app/app/referential/services/validator/strategy.validator.js.map new file mode 100644 index 000000000..0af845ad0 --- /dev/null +++ b/out-tsc/app/app/referential/services/validator/strategy.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"strategy.validator.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/validator/strategy.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/validator/taxon-name.validator.js b/out-tsc/app/app/referential/services/validator/taxon-name.validator.js new file mode 100644 index 000000000..dc25c0a83 --- /dev/null +++ b/out-tsc/app/app/referential/services/validator/taxon-name.validator.js @@ -0,0 +1,25 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { ReferentialValidatorService } from './referential.validator'; +import { toBoolean } from '@sumaris-net/ngx-components'; +import { SharedValidators } from '@sumaris-net/ngx-components'; +let TaxonNameValidatorService = class TaxonNameValidatorService extends ReferentialValidatorService { + constructor(formBuilder) { + super(formBuilder); + this.formBuilder = formBuilder; + } + getRowValidator() { + return this.getFormGroup(); + } + getFormGroupConfig(data, opts) { + const config = super.getFormGroupConfig(data, opts); + return Object.assign(Object.assign({}, config), { isReferent: [toBoolean(data && data.isReferent, true)], isNaming: [toBoolean(data && data.isNaming, false)], isVirtual: [toBoolean(data && data.isVirtual, false)], useExistingReferenceTaxon: [toBoolean(data && data.useExistingReferenceTaxon, false)], parentTaxonName: [data && data.parentTaxonName || null, SharedValidators.entity], referenceTaxonId: [data && data.referenceTaxonId || null], taxonomicLevel: [data && data.taxonomicLevel || null, Validators.required], startDate: [data && data.startDate || null, Validators.required], endDate: [data && data.endDate || null] }); + } +}; +TaxonNameValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder]) +], TaxonNameValidatorService); +export { TaxonNameValidatorService }; +//# sourceMappingURL=taxon-name.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/validator/taxon-name.validator.js.map b/out-tsc/app/app/referential/services/validator/taxon-name.validator.js.map new file mode 100644 index 000000000..62d7b3c18 --- /dev/null +++ b/out-tsc/app/app/referential/services/validator/taxon-name.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"taxon-name.validator.js","sourceRoot":"","sources":["../../../../../../src/app/referential/services/validator/taxon-name.validator.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,kBAAkB,EAAoB,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAC,2BAA2B,EAAC,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAC,SAAS,EAAC,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AAGtD,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,2BAAsC;IAEnF,YACY,WAA+B;QAEzC,KAAK,CAAC,WAAW,CAAC,CAAC;QAFT,gBAAW,GAAX,WAAW,CAAoB;IAG3C,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED,kBAAkB,CAAC,IAAgB,EAAE,IAA4D;QAC/F,MAAM,MAAM,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpD,uCACK,MAAM,KACT,UAAU,EAAE,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,EACtD,QAAQ,EAAE,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,EACnD,SAAS,EAAE,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EACrD,yBAAyB,EAAE,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC,EACrF,eAAe,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAChF,gBAAgB,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,EACzD,cAAc,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,EAC1E,SAAS,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,EAChE,OAAO,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAEvC;IACJ,CAAC;CAEF,CAAA;AA7BY,yBAAyB;IADrC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAIN,kBAAkB;GAHhC,yBAAyB,CA6BrC;SA7BY,yBAAyB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/vessel-snapshot.service.js b/out-tsc/app/app/referential/services/vessel-snapshot.service.js new file mode 100644 index 000000000..ed9e90606 --- /dev/null +++ b/out-tsc/app/app/referential/services/vessel-snapshot.service.js @@ -0,0 +1,410 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { ErrorCodes } from './errors'; +import { BaseGraphqlService, ConfigService, EntitiesStorage, firstNotNilPromise, GraphqlService, isEmptyArray, isNotNil, JobUtils, LocalSettingsService, NetworkService, ReferentialRef, ReferentialUtils, StatusIds, } from '@sumaris-net/ngx-components'; +import { ReferentialFragments } from './referential.fragments'; +import { merge } from 'rxjs'; +import { VesselSnapshot } from './model/vessel-snapshot.model'; +import { environment } from '@environments/environment'; +import { VesselSnapshotFilter } from './filter/vessel.filter'; +import { ProgramLabel } from '@app/referential/services/model/model.enum'; +import { VESSEL_CONFIG_OPTIONS, VESSEL_FEATURE_NAME } from '@app/vessel/services/config/vessel.config'; +import { debounceTime, filter, map } from 'rxjs/operators'; +import { SAVE_AS_OBJECT_OPTIONS } from '@app/data/services/model/data-entity.model'; +import { mergeLoadResult } from '@app/shared/functions'; +export const VesselSnapshotFragments = { + lightVesselSnapshot: gql ` + fragment LightVesselSnapshotFragment on VesselSnapshotVO { + id: vesselId + name + exteriorMarking + registrationCode + intRegistrationCode + updateDate + vesselType { + ...LightReferentialFragment + } + vesselStatusId + } + `, + lightVesselSnapshotWithPort: gql ` + fragment LightVesselSnapshotWithPortFragment on VesselSnapshotVO { + id: vesselId + name + exteriorMarking + registrationCode + intRegistrationCode + startDate + endDate + updateDate + basePortLocation { + ...LocationFragment + } + vesselType { + ...LightReferentialFragment + } + vesselStatusId + } + `, + vesselSnapshot: gql ` + fragment VesselSnapshotFragment on VesselSnapshotVO { + id: vesselId + name + exteriorMarking + registrationCode + intRegistrationCode + startDate + endDate + updateDate + basePortLocation { + ...LocationFragment + } + vesselType { + ...LightReferentialFragment + } + vesselStatusId + } + `, +}; +const QUERIES = { + // Load all + loadAll: gql `query VesselSnapshots($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: VesselFilterVOInput){ + data: vesselSnapshots(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...LightVesselSnapshotFragment + } + } + ${VesselSnapshotFragments.lightVesselSnapshot} + ${ReferentialFragments.lightReferential}`, + // Load all with total + loadAllWithTotal: gql `query VesselSnapshotsWithTotal($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: VesselFilterVOInput){ + data: vesselSnapshots(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...LightVesselSnapshotFragment + } + total: vesselSnapshotsCount(filter: $filter) + } + ${VesselSnapshotFragments.lightVesselSnapshot} + ${ReferentialFragments.lightReferential}`, + // Load one item + load: gql `query VesselSnapshot($vesselId: Int, $vesselFeaturesId: Int) { + data: vesselSnapshots(filter: {vesselId: $vesselId, vesselFeaturesId: $vesselFeaturesId}) { + ...LightVesselSnapshotFragment + } + } + ${VesselSnapshotFragments.lightVesselSnapshot} + ${ReferentialFragments.lightReferential}`, + // Load all WITH base port location + loadAllWithPort: gql `query VesselSnapshotsWithPort($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: VesselFilterVOInput){ + data: vesselSnapshots(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...LightVesselSnapshotWithPortFragment + } + } + ${VesselSnapshotFragments.lightVesselSnapshotWithPort} + ${ReferentialFragments.location} + ${ReferentialFragments.lightReferential}`, + // Load all WITH base port location AND total + loadAllWithPortAndTotal: gql `query VesselSnapshotsWithPortAndTotal($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: VesselFilterVOInput){ + data: vesselSnapshots(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...LightVesselSnapshotWithPortFragment + } + total: vesselSnapshotsCount(filter: $filter) + } + ${VesselSnapshotFragments.lightVesselSnapshotWithPort} + ${ReferentialFragments.location} + ${ReferentialFragments.lightReferential}` +}; +let VesselSnapshotService = class VesselSnapshotService extends BaseGraphqlService { + constructor(graphql, network, entities, configService, settings) { + super(graphql, environment); + this.graphql = graphql; + this.network = network; + this.entities = entities; + this.configService = configService; + this.settings = settings; + this.defaultFilter = null; + this.defaultLoadOptions = null; + this.suggestLengthThreshold = 0; + this.enableSearchRegistrationByPrefix = VESSEL_CONFIG_OPTIONS.VESSEL_FILTER_SEARCH_REGISTRATION_CODE_AS_PREFIX.defaultValue; + } + get onConfigOrSettingsChanges() { + return merge(this.configService.config, this.settings.onChange); + } + ngOnStart() { + return __awaiter(this, void 0, void 0, function* () { + console.info('[vessel-snapshot-service] Starting service...'); + // Restoring local settings + yield Promise.all([ + this.settings.ready(), + this.configService.ready() + ]); + yield this.initDefaults(); + // Listen for config or settings changes, then update defaults + this.registerSubscription(this.onConfigOrSettingsChanges + .pipe(filter(() => this.started), debounceTime(1000)) + .subscribe(() => this.initDefaults())); + }); + } + /** + * Load many vessels + * + * @param offset + * @param size + * @param sortBy + * @param sortDirection + * @param filter + * @param opts + */ + loadAll(offset, size, sortBy, sortDirection, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.started) + yield this.ready(); + filter = this.asFilter(Object.assign(Object.assign({}, this.defaultFilter), filter)); + opts = Object.assign(Object.assign({}, this.defaultLoadOptions), opts); + const variables = { + offset: offset || 0, + size: size || 100, + sortBy: sortBy || ((filter === null || filter === void 0 ? void 0 : filter.searchAttributes) && (filter === null || filter === void 0 ? void 0 : filter.searchAttributes[0])) || VesselSnapshotFilter.DEFAULT_SEARCH_ATTRIBUTES[0], + sortDirection: sortDirection || 'asc' + }; + const debug = this._debug && (!opts || opts.debug !== false); + const now = debug && Date.now(); + if (debug) + console.debug('[vessel-snapshot-service] Loading vessel snapshots using options:', variables); + const withTotal = (!opts || opts.withTotal !== false); + let res; + // Offline: use local store + const forceOffline = this.network.offline && (!opts || opts.fetchPolicy !== 'network-only') || (isNotNil(filter.vesselId) && filter.vesselId < 0); + const offline = forceOffline || (filter.synchronizationStatus && filter.synchronizationStatus !== 'SYNC'); + if (offline) { + res = yield this.entities.loadAll(VesselSnapshot.TYPENAME, Object.assign(Object.assign({}, variables), { filter: filter === null || filter === void 0 ? void 0 : filter.asFilterFn() })); + } + else { + // Online: use GraphQL + const query = withTotal + ? ((opts === null || opts === void 0 ? void 0 : opts.withBasePortLocation) ? QUERIES.loadAllWithPortAndTotal : QUERIES.loadAllWithTotal) + : ((opts === null || opts === void 0 ? void 0 : opts.withBasePortLocation) ? QUERIES.loadAllWithPort : QUERIES.loadAll); + res = yield this.graphql.query({ + query, + variables: Object.assign(Object.assign({}, variables), { filter: filter === null || filter === void 0 ? void 0 : filter.asPodObject() }), + error: { code: ErrorCodes.LOAD_VESSELS_ERROR, message: 'VESSEL.ERROR.LOAD_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || undefined /*use default*/ + }); + // Add local temporary vessels + const needLocalTemporaryVessel = this.settings.hasOfflineFeature(VESSEL_FEATURE_NAME) + && (isEmptyArray(filter === null || filter === void 0 ? void 0 : filter.statusIds) || filter.statusIds.includes(StatusIds.TEMPORARY)); + if (needLocalTemporaryVessel) { + const temporaryFilter = filter ? filter.clone() : new VesselSnapshotFilter(); + temporaryFilter.statusIds = [StatusIds.TEMPORARY]; + const localRes = yield this.entities.loadAll(VesselSnapshot.TYPENAME, Object.assign(Object.assign({}, variables), { filter: temporaryFilter.asFilterFn() })); + // Add to result + if (localRes.total) { + res = mergeLoadResult(res, localRes); + } + } + } + const entities = (!opts || opts.toEntity !== false) ? + ((res === null || res === void 0 ? void 0 : res.data) || []).map(VesselSnapshot.fromObject) : + ((res === null || res === void 0 ? void 0 : res.data) || []); + const total = (res === null || res === void 0 ? void 0 : res.total) || entities.length; + res = { total, data: entities }; + // Add fetch more capability, if total was fetched + if (withTotal) { + const nextOffset = offset + entities.length; + if (nextOffset < res.total) { + res.fetchMore = () => this.loadAll(nextOffset, size, sortBy, sortDirection, filter, opts); + } + } + if (debug) + console.debug(`[vessel-snapshot-service] Vessels loaded in ${Date.now() - now}ms`); + return res; + }); + } + suggest(value, filter) { + return __awaiter(this, void 0, void 0, function* () { + if (ReferentialUtils.isNotEmpty(value)) + return { data: [value] }; + // Make sure service has been started, before using defaults (e.g. minSearchTextLength) + if (!this.started) + yield this.ready(); + const searchText = (typeof value === 'string' && value !== '*') && value || undefined; + // Not enough character to launch the search + if ((searchText && searchText.length || 0) < this.suggestLengthThreshold) + return { data: undefined }; + let searchAttributes = filter.searchAttributes; + // Exclude search on name, when search by prefix is enabled (by config) + if (this.enableSearchRegistrationByPrefix) { + if (searchText && !searchText.startsWith('*') && searchAttributes && searchAttributes[0] !== 'name') { + searchAttributes = searchAttributes.filter(attr => attr !== 'name'); + } + } + return this.loadAll(0, !value ? 30 : 20, undefined, undefined, Object.assign(Object.assign({}, filter), { searchText, + searchAttributes }), { + fetchPolicy: 'cache-first' + }); + }); + } + load(id, opts) { + return __awaiter(this, void 0, void 0, function* () { + console.debug(`[vessel-snapshot-service] Loading vessel snapshot #${id}`); + // Offline mode + const offline = (id < 0) || (this.network.offline && (!opts || opts.fetchPolicy !== 'network-only')); + if (offline) { + const data = yield this.entities.load(id, VesselSnapshot.TYPENAME); + if (!data) + throw { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }; + return ((!opts || opts.toEntity !== false) ? VesselSnapshot.fromObject(data) : data) || null; + } + const { data } = yield this.graphql.query({ + query: QUERIES.load, + variables: { + vesselId: id, + vesselFeaturesId: null + }, + fetchPolicy: opts && opts.fetchPolicy || undefined + }); + const res = data && data[0]; + return res && ((!opts || opts.toEntity !== false) ? VesselSnapshot.fromObject(res) : res) || null; + }); + } + watchAllLocally(offset, size, sortBy, sortDirection, filter, opts) { + filter = this.asFilter(filter); + const variables = { + offset: offset || 0, + size: size || 100, + sortBy: sortBy || 'exteriorMarking', + sortDirection: sortDirection || 'asc', + filter: filter === null || filter === void 0 ? void 0 : filter.asFilterFn() + }; + if (this._debug) + console.debug('[vessel-snapshot-service] Loading local vessel snapshots using options:', variables); + return this.entities.watchAll(VesselSnapshot.TYPENAME, variables, opts) + .pipe(map(({ data, total }) => { + const entities = (data || []).map(VesselSnapshot.fromObject); + return { data: entities, total }; + })); + } + /** + * Save into the local storage + * + * @param entity + */ + saveLocally(entity) { + return __awaiter(this, void 0, void 0, function* () { + if (this._debug) + console.debug('[vessel-snapshot-service] [offline] Saving vesselSnapshot locally...', entity); + const json = entity.asObject(SAVE_AS_OBJECT_OPTIONS); + // Save locally + return yield this.entities.save(json, { entityName: VesselSnapshot.TYPENAME }); + }); + } + /** + * Delete vesselSnapshot locally (from the entity storage) + */ + deleteLocally(filter) { + return __awaiter(this, void 0, void 0, function* () { + if (!filter) + throw new Error('Missing arguments \'filter\''); + const dataFilter = this.asFilter(filter); + const variables = { + filter: dataFilter && dataFilter.asFilterFn() + }; + try { + // Find vessel snapshot to delete + const res = yield this.entities.loadAll(VesselSnapshot.TYPENAME, variables, { fullLoad: false }); + const ids = (res && res.data || []).map(o => o.id); + if (isEmptyArray(ids)) + return undefined; // Skip + // Apply deletion + return yield this.entities.deleteMany(ids, { entityName: VesselSnapshot.TYPENAME }); + } + catch (err) { + console.error(`[vessel-snapshot-service] Failed to delete vessel snapshot ${JSON.stringify(filter)}`, err); + throw err; + } + }); + } + executeImport(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + const maxProgression = opts && opts.maxProgression || 100; + filter = Object.assign(Object.assign({}, filter), { statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], + // Force the use of the specific program, used for vessels + program: ReferentialRef.fromObject({ label: ProgramLabel.SIH }) }); + console.info('[vessel-snapshot-service] Importing vessels (snapshot)...'); + const res = yield JobUtils.fetchAllPages((offset, size) => this.loadAll(offset, size, 'id', null, filter, { + debug: false, + fetchPolicy: 'no-cache', + withBasePortLocation: true, + withTotal: (offset === 0), + toEntity: false + }), { + progression: opts === null || opts === void 0 ? void 0 : opts.progression, + maxProgression: maxProgression * 0.9, + logPrefix: '[vessel-snapshot-service]' + }); + // Save locally + yield this.entities.saveAll(res.data, { entityName: VesselSnapshot.TYPENAME }); + }); + } + asFilter(source) { + return VesselSnapshotFilter.fromObject(source); + } + getDisplayAttributes(fieldName, defaultAttributes) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + // Make sure defaults have been loaded + if (!this.started) + yield this.ready(); + const baseAttributes = this.settings.getFieldDisplayAttributes(fieldName || 'vesselSnapshot', defaultAttributes || VesselSnapshotFilter.DEFAULT_SEARCH_ATTRIBUTES); + const displayAttributes = ((_a = this.defaultLoadOptions) === null || _a === void 0 ? void 0 : _a.withBasePortLocation) + ? baseAttributes.concat(this.settings.getFieldDisplayAttributes('location').map(key => 'basePortLocation.' + key)) + : baseAttributes; + return displayAttributes; + }); + } + getAutocompleteFieldOptions(fieldName, defaultAttributes) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const baseAttributes = this.settings.getFieldDisplayAttributes(fieldName || 'vesselSnapshot', defaultAttributes || VesselSnapshotFilter.DEFAULT_SEARCH_ATTRIBUTES); + const displayAttributes = ((_a = this.defaultLoadOptions) === null || _a === void 0 ? void 0 : _a.withBasePortLocation) + ? baseAttributes.concat(this.settings.getFieldDisplayAttributes('location').map(key => 'basePortLocation.' + key)) + : baseAttributes; + return { + showAllOnFocus: false, + suggestFn: (value, filter) => this.suggest(value, filter), + attributes: displayAttributes, + filter: Object.assign(Object.assign({}, this.defaultFilter), { statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], searchAttributes: baseAttributes }), + suggestLengthThreshold: this.suggestLengthThreshold, + mobile: this.settings.mobile + }; + }); + } + /* -- protected methods -- */ + initDefaults() { + return __awaiter(this, void 0, void 0, function* () { + // DEBUG + console.debug('[vessel-snapshot-service] Init defaults load options'); + const config = yield firstNotNilPromise(this.configService.config); + const withBasePortLocation = config.getPropertyAsBoolean(VESSEL_CONFIG_OPTIONS.VESSEL_BASE_PORT_LOCATION_VISIBLE); + // Set default filter (registration location, vessel type) + const defaultRegistrationLocationId = config.getPropertyAsInt(VESSEL_CONFIG_OPTIONS.VESSEL_FILTER_DEFAULT_COUNTRY_ID); + const defaultVesselTypeId = config.getPropertyAsInt(VESSEL_CONFIG_OPTIONS.VESSEL_FILTER_DEFAULT_TYPE_ID); + const settingsAttributes = this.settings.getFieldDisplayAttributes('vesselSnapshot', VesselSnapshotFilter.DEFAULT_SEARCH_ATTRIBUTES); + // Update default filter + this.defaultFilter = Object.assign(Object.assign({}, this.defaultFilter), { searchAttributes: settingsAttributes, registrationLocation: isNotNil(defaultRegistrationLocationId) ? { id: defaultRegistrationLocationId } : undefined, vesselTypeId: isNotNil(defaultVesselTypeId) ? defaultVesselTypeId : undefined }); + // Update default options + this.defaultLoadOptions = Object.assign(Object.assign({}, this.defaultLoadOptions), { withBasePortLocation }); + this.suggestLengthThreshold = config.getPropertyAsInt(VESSEL_CONFIG_OPTIONS.VESSEL_FILTER_MIN_LENGTH); + this.enableSearchRegistrationByPrefix = config.getPropertyAsBoolean(VESSEL_CONFIG_OPTIONS.VESSEL_FILTER_SEARCH_REGISTRATION_CODE_AS_PREFIX); + }); + } +}; +VesselSnapshotService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [GraphqlService, + NetworkService, + EntitiesStorage, + ConfigService, + LocalSettingsService]) +], VesselSnapshotService); +export { VesselSnapshotService }; +//# sourceMappingURL=vessel-snapshot.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/services/vessel-snapshot.service.js.map b/out-tsc/app/app/referential/services/vessel-snapshot.service.js.map new file mode 100644 index 000000000..9b910de8c --- /dev/null +++ b/out-tsc/app/app/referential/services/vessel-snapshot.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel-snapshot.service.js","sourceRoot":"","sources":["../../../../../src/app/referential/services/vessel-snapshot.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAe,GAAG,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAEL,kBAAkB,EAClB,aAAa,EACb,eAAe,EAGf,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,QAAQ,EAER,oBAAoB,EAEpB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,SAAS,GAEV,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAmB,KAAK,EAAc,MAAM,MAAM,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AACvG,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,mBAAmB,EAAE,GAAG,CAAA;;;;;;;;;;;;;GAavB;IACD,2BAA2B,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;GAkB/B;IACD,cAAc,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;GAkBlB;CACF,CAAC;AAEF,MAAM,OAAO,GAAsF;IACjG,WAAW;IACX,OAAO,EAAE,GAAG,CAAA;;;;;IAKV,uBAAuB,CAAC,mBAAmB;IAC3C,oBAAoB,CAAC,gBAAgB,EAAE;IAEzC,sBAAsB;IACtB,gBAAgB,EAAE,GAAG,CAAA;;;;;;IAMnB,uBAAuB,CAAC,mBAAmB;IAC3C,oBAAoB,CAAC,gBAAgB,EAAE;IAEzC,gBAAgB;IAChB,IAAI,EAAE,GAAG,CAAA;;;;;IAKP,uBAAuB,CAAC,mBAAmB;IAC3C,oBAAoB,CAAC,gBAAgB,EAAE;IAEzC,mCAAmC;IACnC,eAAe,EAAE,GAAG,CAAA;;;;;IAKlB,uBAAuB,CAAC,2BAA2B;IACnD,oBAAoB,CAAC,QAAQ;IAC7B,oBAAoB,CAAC,gBAAgB,EAAE;IAEzC,6CAA6C;IAC7C,uBAAuB,EAAE,GAAG,CAAA;;;;;;IAM1B,uBAAuB,CAAC,2BAA2B;IACnD,oBAAoB,CAAC,QAAQ;IAC7B,oBAAoB,CAAC,gBAAgB,EAAE;CAC1C,CAAC;AASK,IAAM,qBAAqB,GAA3B,MAAM,qBACX,SAAQ,kBAAwD;IAehE,YACY,OAAuB,EACvB,OAAuB,EACvB,QAAyB,EACzB,aAA4B,EAC5B,QAA8B;QAExC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QANlB,YAAO,GAAP,OAAO,CAAgB;QACvB,YAAO,GAAP,OAAO,CAAgB;QACvB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,kBAAa,GAAb,aAAa,CAAe;QAC5B,aAAQ,GAAR,QAAQ,CAAsB;QAjBlC,kBAAa,GAAkC,IAAI,CAAC;QACpD,uBAAkB,GAAsC,IAAI,CAAC;QAC7D,2BAAsB,GAAG,CAAC,CAAC;QAC3B,qCAAgC,GAAY,qBAAqB,CAAC,gDAAgD,CAAC,YAAY,CAAC;IAiBxI,CAAC;IAfD,IAAY,yBAAyB;QACnC,OAAO,KAAK,CACV,IAAI,CAAC,aAAa,CAAC,MAAM,EACzB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;IACJ,CAAC;IAYe,SAAS;;YAEvB,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAE9D,2BAA2B;YAC3B,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;gBACrB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;aAC3B,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAE1B,8DAA8D;YAC9D,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,yBAAyB;iBAC3B,IAAI,CACH,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAC1B,YAAY,CAAC,IAAI,CAAC,CACnB;iBACA,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CACxC,CAAC;QAEJ,CAAC;KAAA;IAED;;;;;;;;;OASG;IACG,OAAO,CAAC,MAAc,EACd,IAAY,EACZ,MAAe,EACf,aAA6B,EAC7B,MAAsC,EACtC,IAA+B;;YAE3C,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YAEtC,MAAM,GAAG,IAAI,CAAC,QAAQ,iCACjB,IAAI,CAAC,aAAa,GAClB,MAAM,EACT,CAAC;YACH,IAAI,mCACC,IAAI,CAAC,kBAAkB,GACvB,IAAI,CACR,CAAC;YAEF,MAAM,SAAS,GAAQ;gBACrB,MAAM,EAAE,MAAM,IAAI,CAAC;gBACnB,IAAI,EAAE,IAAI,IAAI,GAAG;gBACjB,MAAM,EAAE,MAAM,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,gBAAgB,MAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA,CAAC,IAAI,oBAAoB,CAAC,yBAAyB,CAAC,CAAC,CAAC;gBAChI,aAAa,EAAE,aAAa,IAAI,KAAK;aACtC,CAAC;YAEF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;YAC7D,MAAM,GAAG,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,IAAI,KAAK;gBAAE,OAAO,CAAC,KAAK,CAAC,mEAAmE,EAAE,SAAS,CAAC,CAAC;YAEzG,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC;YACtD,IAAI,GAA+B,CAAC;YAEpC,2BAA2B;YAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YAClJ,MAAM,OAAO,GAAG,YAAY,IAAG,CAAC,MAAM,CAAC,qBAAqB,IAAI,MAAM,CAAC,qBAAqB,KAAK,MAAM,CAAC,CAAC;YACzG,IAAI,OAAO,EAAE;gBACX,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,kCAElD,SAAS,KACZ,MAAM,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,EAAE,IAE/B,CAAC;aACH;iBAEI;gBACH,sBAAsB;gBACtB,MAAM,KAAK,GAAG,SAAS;oBACrB,CAAC,CAAC,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,oBAAoB,EAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;oBAC3F,CAAC,CAAC,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,oBAAoB,EAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC7E,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAkB;oBAC9C,KAAK;oBACL,SAAS,kCACJ,SAAS,KACZ,MAAM,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,EAAE,GAC9B;oBACD,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,kBAAkB,EAAE,OAAO,EAAE,yBAAyB,EAAE;oBAClF,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC,eAAe;iBACnE,CAAC,CAAC;gBAEH,8BAA8B;gBAC9B,MAAM,wBAAwB,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,mBAAmB,CAAC;uBAChF,CAAC,YAAY,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;gBACzF,IAAI,wBAAwB,EAAE;oBAC5B,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,oBAAoB,EAAE,CAAC;oBAC7E,eAAe,CAAC,SAAS,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;oBAClD,MAAM,QAAQ,GAA+B,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,kCAEzF,SAAS,KACZ,MAAM,EAAE,eAAe,CAAC,UAAU,EAAE,IAEvC,CAAC;oBACF,gBAAgB;oBAChB,IAAI,QAAQ,CAAC,KAAK,EAAE;wBAClB,GAAG,GAAG,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;qBACtC;iBACF;aACF;YAED,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC;gBACnD,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,KAAI,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;gBAClD,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,KAAI,EAAE,CAAqB,CAAC;YAExC,MAAM,KAAK,GAAG,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK,KAAI,QAAQ,CAAC,MAAM,CAAC;YAC5C,GAAG,GAAG,EAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAC,CAAC;YAE9B,kDAAkD;YAClD,IAAI,SAAS,EAAE;gBACb,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAC5C,IAAI,UAAU,GAAG,GAAG,CAAC,KAAK,EAAE;oBAC1B,GAAG,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;iBAC3F;aACF;YAED,IAAI,KAAK;gBAAE,OAAO,CAAC,KAAK,CAAC,+CAA+C,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC;YAC9F,OAAO,GAAG,CAAC;QACb,CAAC;KAAA;IAEK,OAAO,CAAC,KAAU,EAAE,MAAsC;;YAC9D,IAAI,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC;gBAAE,OAAO,EAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAC,CAAC;YAE/D,uFAAuF;YACvF,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YAEtC,MAAM,UAAU,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,SAAS,CAAC;YAEtF,4CAA4C;YAC5C,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,sBAAsB;gBAAE,OAAO,EAAC,IAAI,EAAE,SAAS,EAAC,CAAC;YAEnG,IAAI,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;YAE/C,uEAAuE;YACvE,IAAI,IAAI,CAAC,gCAAgC,EAAE;gBACzC,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;oBACnG,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;iBACrE;aACF;YAED,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,kCAEtD,MAAM,KACT,UAAU;gBACV,gBAAgB,KACf;gBACD,WAAW,EAAE,aAAa;aAC3B,CACF,CAAC;QACJ,CAAC;KAAA;IAEK,IAAI,CAAC,EAAU,EAAE,IAGtB;;YAEC,OAAO,CAAC,KAAK,CAAC,sDAAsD,EAAE,EAAE,CAAC,CAAC;YAE1E,eAAe;YACf,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,cAAc,CAAC,CAAC,CAAC;YACrG,IAAI,OAAO,EAAE;gBACX,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAiB,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;gBACnF,IAAI,CAAC,IAAI;oBAAE,MAAM,EAAC,IAAI,EAAE,UAAU,CAAC,sBAAsB,EAAE,OAAO,EAAE,0CAA0C,EAAC,CAAC;gBAChH,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAsB,CAAC,IAAI,IAAI,CAAC;aAChH;YAED,MAAM,EAAC,IAAI,EAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAkB;gBACvD,KAAK,EAAE,OAAO,CAAC,IAAI;gBACnB,SAAS,EAAE;oBACT,QAAQ,EAAE,EAAE;oBACZ,gBAAgB,EAAE,IAAI;iBACvB;gBACD,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS;aACnD,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAqB,CAAC,IAAI,IAAI,CAAC;QACtH,CAAC;KAAA;IAED,eAAe,CAAC,MAAc,EACd,IAAY,EACZ,MAAe,EACf,aAA6B,EAC7B,MAAsC,EACtC,IAA+B;QAE7C,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE/B,MAAM,SAAS,GAAQ;YACrB,MAAM,EAAE,MAAM,IAAI,CAAC;YACnB,IAAI,EAAE,IAAI,IAAI,GAAG;YACjB,MAAM,EAAE,MAAM,IAAI,iBAAiB;YACnC,aAAa,EAAE,aAAa,IAAI,KAAK;YACrC,MAAM,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,EAAE;SAC7B,CAAC;QAEF,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,yEAAyE,EAAE,SAAS,CAAC,CAAC;QAErH,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAiB,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC;aACpF,IAAI,CACH,GAAG,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAC,EAAE,EAAE;YACpB,MAAM,QAAQ,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC7D,OAAO,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;QACjC,CAAC,CAAC,CAAC,CAAC;IACV,CAAC;IAED;;;;OAIG;IACG,WAAW,CAAC,MAAsB;;YAEtC,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,KAAK,CAAC,sEAAsE,EAAE,MAAM,CAAC,CAAC;YAE/G,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;YAErD,eAAe;YACf,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAC,UAAU,EAAE,cAAc,CAAC,QAAQ,EAAC,CAAC,CAAC;QAC/E,CAAC;KAAA;IAED;;OAEG;IACG,aAAa,CAAC,MAAqC;;YACvD,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAE7D,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACzC,MAAM,SAAS,GAAG;gBAChB,MAAM,EAAE,UAAU,IAAI,UAAU,CAAC,UAAU,EAAE;aAC9C,CAAC;YAEF,IAAI;gBACF,iCAAiC;gBACjC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAiB,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAC,QAAQ,EAAE,KAAK,EAAC,CAAC,CAAC;gBAC/G,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACnD,IAAI,YAAY,CAAC,GAAG,CAAC;oBAAE,OAAO,SAAS,CAAC,CAAC,OAAO;gBAEhD,iBAAiB;gBACjB,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,EAAC,UAAU,EAAE,cAAc,CAAC,QAAQ,EAAC,CAAC,CAAC;aACnF;YAAC,OAAO,GAAG,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,8DAA8D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC3G,MAAM,GAAG,CAAC;aACX;QACH,CAAC;KAAA;IAEK,aAAa,CAAC,MAAqC,EACrC,IAGC;;YAEnB,MAAM,cAAc,GAAG,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,GAAG,CAAC;YAC1D,MAAM,mCACD,MAAM,KACT,SAAS,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC;gBAClD,0DAA0D;gBAC1D,OAAO,EAAE,cAAc,CAAC,UAAU,CAAC,EAAC,KAAK,EAAE,YAAY,CAAC,GAAG,EAAC,CAAC,GAC9D,CAAC;YAEF,OAAO,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;YAE1E,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACtD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;gBAC7C,KAAK,EAAE,KAAK;gBACZ,WAAW,EAAE,UAAU;gBACvB,oBAAoB,EAAE,IAAI;gBAC1B,SAAS,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;gBACzB,QAAQ,EAAE,KAAK;aAChB,CAAC,EACJ;gBACE,WAAW,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW;gBAC9B,cAAc,EAAE,cAAc,GAAG,GAAG;gBACpC,SAAS,EAAE,2BAA2B;aACvC,CACF,CAAC;YAEF,eAAe;YACf,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAC,UAAU,EAAE,cAAc,CAAC,QAAQ,EAAC,CAAC,CAAC;QAC/E,CAAC;KAAA;IAED,QAAQ,CAAC,MAAqC;QAC5C,OAAO,oBAAoB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAEK,oBAAoB,CAAC,SAAkB,EAAE,iBAA4B;;;YACzE,sCAAsC;YACtC,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YAEtC,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,SAAS,IAAI,gBAAgB,EAAE,iBAAiB,IAAI,oBAAoB,CAAC,yBAAyB,CAAC,CAAC;YAEnK,MAAM,iBAAiB,GAAG,CAAA,MAAA,IAAI,CAAC,kBAAkB,0CAAE,oBAAoB;gBACrE,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,mBAAmB,GAAG,GAAG,CAAC,CAAC;gBAClH,CAAC,CAAC,cAAc,CAAC;YAEnB,OAAO,iBAAiB,CAAC;;KAC1B;IAEK,2BAA2B,CAAC,SAAkB,EAAE,iBAA4B;;;YAEhF,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,SAAS,IAAI,gBAAgB,EAAE,iBAAiB,IAAI,oBAAoB,CAAC,yBAAyB,CAAC,CAAC;YACnK,MAAM,iBAAiB,GAAG,CAAA,MAAA,IAAI,CAAC,kBAAkB,0CAAE,oBAAoB;gBACrE,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,mBAAmB,GAAG,GAAG,CAAC,CAAC;gBAClH,CAAC,CAAC,cAAc,CAAC;YAEnB,OAA6E;gBAC3E,cAAc,EAAE,KAAK;gBACrB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;gBACzD,UAAU,EAAE,iBAAiB;gBAC7B,MAAM,kCACD,IAAI,CAAC,aAAa,KACrB,SAAS,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,EAClD,gBAAgB,EAAE,cAAc,GACjC;gBACD,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;gBACnD,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;aAC7B,CAAC;;KACH;IAED,6BAA6B;IAEvB,YAAY;;YAChB,QAAQ;YACR,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAEtE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAEnE,MAAM,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,iCAAiC,CAAC,CAAC;YAElH,0DAA0D;YAC1D,MAAM,6BAA6B,GAAG,MAAM,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,gCAAgC,CAAC,CAAC;YACtH,MAAM,mBAAmB,GAAG,MAAM,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,6BAA6B,CAAC,CAAC;YAEzG,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,yBAAyB,CAAC,CAAC;YAErI,wBAAwB;YACxB,IAAI,CAAC,aAAa,mCACb,IAAI,CAAC,aAAa,KACrB,gBAAgB,EAAE,kBAAkB,EACpC,oBAAoB,EAAE,QAAQ,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAiB,EAAC,EAAE,EAAE,6BAA6B,EAAC,CAAC,CAAC,CAAC,SAAS,EAC/H,YAAY,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,GAC9E,CAAC;YAEF,yBAAyB;YACzB,IAAI,CAAC,kBAAkB,mCAClB,IAAI,CAAC,kBAAkB,KAC1B,oBAAoB,GACrB,CAAC;YAEF,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,CAAC;YACtG,IAAI,CAAC,gCAAgC,GAAG,MAAM,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,gDAAgD,CAAC,CAAC;QAC9I,CAAC;KAAA;CACF,CAAA;AApYY,qBAAqB;IADjC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAkBV,cAAc;QACd,cAAc;QACb,eAAe;QACV,aAAa;QAClB,oBAAoB;GArB/B,qBAAqB,CAoYjC;SApYY,qBAAqB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/software/abstract-software.page.js b/out-tsc/app/app/referential/software/abstract-software.page.js new file mode 100644 index 000000000..37bb04f0b --- /dev/null +++ b/out-tsc/app/app/referential/software/abstract-software.page.js @@ -0,0 +1,207 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectorRef, Directive, Injector, ViewChild } from '@angular/core'; +import { AccountService, AppEditorOptions, AppEntityEditor, AppPropertiesForm, CORE_CONFIG_OPTIONS, EntityUtils, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, PlatformService, } from '@sumaris-net/ngx-components'; +import { ReferentialForm } from '../form/referential.form'; +import { SoftwareService } from '../services/software.service'; +import { SoftwareValidatorService } from '../services/validator/software.validator'; +import { ReferentialRefService } from '../services/referential-ref.service'; +let AbstractSoftwarePage = class AbstractSoftwarePage extends AppEntityEditor { + constructor(injector, dataType, dataService, validatorService, configOptions, options) { + super(injector, dataType, dataService, options); + this.validatorService = validatorService; + this.platform = injector.get(PlatformService); + this.accountService = injector.get(AccountService); + this.cd = injector.get(ChangeDetectorRef); + this.referentialRefService = injector.get(ReferentialRefService); + // Convert map to list of options + this.propertyDefinitions = Object.values(Object.assign(Object.assign({}, CORE_CONFIG_OPTIONS), configOptions)).map((def) => { + if (def.type === 'entity' || def.type === 'entities') { + def = Object.assign({}, def); // Copy + def.autocomplete = Object.assign({ suggestFn: (value, filter) => this.referentialRefService.suggest(value, filter), attributes: ['label', 'name'] }, (def.autocomplete || {})); + } + return def; + }); + this.form = validatorService.getFormGroup(); + } + ngOnInit() { + super.ngOnInit(); + // Set entity name (required for referential form validator) + this.referentialForm.entityName = 'Software'; + // Check label is unique + if (this.service instanceof SoftwareService) { + const softwareService = this.service; + this.form.get('label').setAsyncValidators((control) => __awaiter(this, void 0, void 0, function* () { + const label = control.enabled && control.value; + return label && (yield softwareService.existsByLabel(label)) ? { unique: true } : null; + })); + } + } + /* -- protected methods -- */ + enable() { + super.enable(); + if (!this.isNewData) { + this.form.get('label').disable(); + } + } + registerForms() { + this.addChildForms([this.referentialForm, this.propertiesForm]); + } + loadFromRoute() { + const _super = Object.create(null, { + loadFromRoute: { get: () => super.loadFromRoute } + }); + return __awaiter(this, void 0, void 0, function* () { + // Make sure the platform is ready, before loading configuration + yield this.platform.ready(); + return _super.loadFromRoute.call(this); + }); + } + setValue(data) { + if (!data) + return; // Skip + this.form.patchValue(Object.assign(Object.assign({}, data.asObject()), { properties: [] }), { emitEvent: false }); + // Program properties + this.propertiesForm.value = EntityUtils.getMapAsArray(data.properties || {}); + this.markAsPristine(); + } + getJsonValueToSave() { + const _super = Object.create(null, { + getJsonValueToSave: { get: () => super.getJsonValueToSave } + }); + return __awaiter(this, void 0, void 0, function* () { + const data = yield _super.getJsonValueToSave.call(this); + // Re add label, because missing when field disable + data.label = this.form.get('label').value; + // Transform properties + data.properties = this.propertiesForm.value; + data.properties + .filter((property) => this.propertyDefinitions.find((def) => def.key === property.key && (def.type === 'entity' || def.type === 'entities'))) + .forEach((property) => { + var _a; + if (Array.isArray(property.value)) { + property.value = property.value + .map((v) => v === null || v === void 0 ? void 0 : v.id) + .filter(isNotNil) + .join(','); + } + else { + property.value = (_a = property.value) === null || _a === void 0 ? void 0 : _a.id; + } + }); + return data; + }); + } + computeTitle(data) { + // new data + if (!data || isNil(data.id)) { + return this.translate.get('CONFIGURATION.NEW.TITLE').toPromise(); + } + return this.translate.get('CONFIGURATION.EDIT.TITLE', data).toPromise(); + } + getFirstInvalidTabIndex() { + if (this.referentialForm.invalid) + return 0; + if (this.propertiesForm.invalid) + return 1; + return -1; + } + onEntityLoaded(data, options) { + const _super = Object.create(null, { + onEntityLoaded: { get: () => super.onEntityLoaded } + }); + return __awaiter(this, void 0, void 0, function* () { + yield this.loadEntityProperties(data); + yield _super.onEntityLoaded.call(this, data, options); + this.markAsReady(); + }); + } + onEntitySaved(data) { + const _super = Object.create(null, { + onEntitySaved: { get: () => super.onEntitySaved } + }); + return __awaiter(this, void 0, void 0, function* () { + yield this.loadEntityProperties(data); + yield _super.onEntitySaved.call(this, data); + this.markAsReady(); + }); + } + loadEntityProperties(data) { + return __awaiter(this, void 0, void 0, function* () { + yield Promise.all(Object.keys(data.properties) + .map((key) => this.propertyDefinitions.find((def) => def.key === key && (def.type === 'entity' || def.type === 'entities'))) + .filter(isNotNil) + .map((def) => __awaiter(this, void 0, void 0, function* () { + if (def.type === 'entities') { + const values = (data.properties[def.key] || '').trim().split(/[|,]+/); + if (isNotEmptyArray(values)) { + const entities = yield Promise.all(values.map((value) => this.resolveEntity(def, value))); + data.properties[def.key] = entities; + } + else { + data.properties[def.key] = null; + } + } + // If type = 'entity' + else { + let value = data.properties[def.key]; + value = typeof value === 'string' ? value.trim() : value; + if (isNotNilOrBlank(value)) { + const entity = yield this.resolveEntity(def, value); + data.properties[def.key] = entity; + } + else { + data.properties[def.key] = null; + } + } + }))); + }); + } + resolveEntity(def, value) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!def.autocomplete) { + console.warn('Missing autocomplete, in definition of property ' + def.key); + return; // Skip + } + const filter = Object.assign({}, def.autocomplete.filter); // Copy filter + const joinAttribute = ((_a = def.autocomplete.filter) === null || _a === void 0 ? void 0 : _a.joinAttribute) || 'id'; + if (joinAttribute === 'id') { + filter.id = parseInt(value); + value = '*'; + } + else { + filter.searchAttribute = joinAttribute; + } + const suggestFn = def.autocomplete.suggestFn || this.referentialRefService.suggest; + try { + // Fetch entity, as a referential + const res = yield suggestFn(value, filter); + const data = Array.isArray(res) ? res : res.data; + return ((data && data[0]) || { id: value, label: '??' }); + } + catch (err) { + console.error('Cannot fetch entity, from option: ' + def.key + '=' + value, err); + return { id: value, label: '??' }; + } + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + ViewChild('referentialForm', { static: true }), + __metadata("design:type", ReferentialForm) +], AbstractSoftwarePage.prototype, "referentialForm", void 0); +__decorate([ + ViewChild('propertiesForm', { static: true }), + __metadata("design:type", AppPropertiesForm) +], AbstractSoftwarePage.prototype, "propertiesForm", void 0); +AbstractSoftwarePage = __decorate([ + Directive() + // tslint:disable-next-line:directive-class-suffix + , + __metadata("design:paramtypes", [Injector, Function, Object, SoftwareValidatorService, Object, AppEditorOptions]) +], AbstractSoftwarePage); +export { AbstractSoftwarePage }; +//# sourceMappingURL=abstract-software.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/software/abstract-software.page.js.map b/out-tsc/app/app/referential/software/abstract-software.page.js.map new file mode 100644 index 000000000..717ab0723 --- /dev/null +++ b/out-tsc/app/app/referential/software/abstract-software.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"abstract-software.page.js","sourceRoot":"","sources":["../../../../../src/app/referential/software/abstract-software.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/software/software-routing.module.js b/out-tsc/app/app/referential/software/software-routing.module.js new file mode 100644 index 000000000..0e08413e2 --- /dev/null +++ b/out-tsc/app/app/referential/software/software-routing.module.js @@ -0,0 +1,30 @@ +import { __decorate } from "tslib"; +import { RouterModule } from '@angular/router'; +import { NgModule } from '@angular/core'; +import { SoftwarePage } from '@app/referential/software/software.page'; +import { AppSoftwareModule } from '@app/referential/software/software.module'; +const routes = [ + { + path: ':id', + pathMatch: 'full', + component: SoftwarePage, + runGuardsAndResolvers: 'pathParamsChange', + data: { + profile: 'ADMIN', + pathIdParam: 'id' + } + } +]; +let AppSoftwareRoutingModule = class AppSoftwareRoutingModule { +}; +AppSoftwareRoutingModule = __decorate([ + NgModule({ + imports: [ + AppSoftwareModule, + RouterModule.forChild(routes) + ], + exports: [RouterModule] + }) +], AppSoftwareRoutingModule); +export { AppSoftwareRoutingModule }; +//# sourceMappingURL=software-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/software/software-routing.module.js.map b/out-tsc/app/app/referential/software/software-routing.module.js.map new file mode 100644 index 000000000..2ffc3070b --- /dev/null +++ b/out-tsc/app/app/referential/software/software-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"software-routing.module.js","sourceRoot":"","sources":["../../../../../src/app/referential/software/software-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAE9E,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,YAAY;QACvB,qBAAqB,EAAE,kBAAkB;QACzC,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,IAAI;SAClB;KACF;CACF,CAAC;AASK,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;CAAI,CAAA;AAA5B,wBAAwB;IAPpC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,iBAAiB;YACjB,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC9B;QACD,OAAO,EAAE,CAAC,YAAY,CAAC;KACxB,CAAC;GACW,wBAAwB,CAAI;SAA5B,wBAAwB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/software/software.module.js b/out-tsc/app/app/referential/software/software.module.js new file mode 100644 index 000000000..d8ee32012 --- /dev/null +++ b/out-tsc/app/app/referential/software/software.module.js @@ -0,0 +1,37 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { SoftwarePage } from './software.page'; +import { TranslateModule } from '@ngx-translate/core'; +import { TextMaskModule } from 'angular2-text-mask'; +import { CommonModule } from '@angular/common'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppReferentialFormModule } from '@app/referential/form/referential-form.module'; +import { AppReferentialPipesModule } from '@app/referential/pipes/referential-pipes.module'; +import { AppReferentialTableModule } from '@app/referential/table/referential-table.module'; +let AppSoftwareModule = class AppSoftwareModule { +}; +AppSoftwareModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TextMaskModule, + TranslateModule.forChild(), + AppCoreModule, + // Sub modules + AppReferentialFormModule, + AppReferentialTableModule, + AppReferentialPipesModule, + ], + declarations: [ + // Components + SoftwarePage, + ], + exports: [ + TranslateModule, + // Components + SoftwarePage + ], + }) +], AppSoftwareModule); +export { AppSoftwareModule }; +//# sourceMappingURL=software.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/software/software.module.js.map b/out-tsc/app/app/referential/software/software.module.js.map new file mode 100644 index 000000000..a27777d32 --- /dev/null +++ b/out-tsc/app/app/referential/software/software.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"software.module.js","sourceRoot":"","sources":["../../../../../src/app/referential/software/software.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AA2BrF,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAC7B,CAAA;AADY,iBAAiB;IAzB7B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,cAAc;YACd,eAAe,CAAC,QAAQ,EAAE;YAE1B,aAAa;YAEb,cAAc;YACd,wBAAwB;YACxB,yBAAyB;YACzB,yBAAyB;SAC1B;QACD,YAAY,EAAE;YAEZ,aAAa;YACb,YAAY;SACb;QACD,OAAO,EAAE;YACP,eAAe;YAEf,aAAa;YACb,YAAY;SACb;KACF,CAAC;GACW,iBAAiB,CAC7B;SADY,iBAAiB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/software/software.page.js b/out-tsc/app/app/referential/software/software.page.js new file mode 100644 index 000000000..9558fca3a --- /dev/null +++ b/out-tsc/app/app/referential/software/software.page.js @@ -0,0 +1,42 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, Component, Inject, Injector, Optional } from '@angular/core'; +import { APP_CONFIG_OPTIONS, Software } from '@sumaris-net/ngx-components'; +import { SoftwareService } from '../services/software.service'; +import { SoftwareValidatorService } from '../services/validator/software.validator'; +import { AbstractSoftwarePage } from './abstract-software.page'; +let SoftwarePage = class SoftwarePage extends AbstractSoftwarePage { + constructor(injector, dataService, validatorService, configOptions) { + super(injector, Software, dataService, validatorService, configOptions); + // default values + this.defaultBackHref = '/referential/list?entity=Software'; + this.debug = !this.environment.production; + } + onNewEntity(data, options) { + this.markAsReady(); + return super.onNewEntity(data, options); + } + computePageHistory(title) { + const _super = Object.create(null, { + computePageHistory: { get: () => super.computePageHistory } + }); + var _a; + return __awaiter(this, void 0, void 0, function* () { + return Object.assign(Object.assign({}, (yield _super.computePageHistory.call(this, title))), { path: `referential/software/${((_a = this.data) === null || _a === void 0 ? void 0 : _a.id) || 'new'}`, subtitle: 'REFERENTIAL.ENTITY.SOFTWARE', icon: 'server' }); + }); + } +}; +SoftwarePage = __decorate([ + Component({ + selector: 'app-software-page', + templateUrl: 'software.page.html', + styleUrls: ['./software.page.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __param(3, Optional()), + __param(3, Inject(APP_CONFIG_OPTIONS)), + __metadata("design:paramtypes", [Injector, + SoftwareService, + SoftwareValidatorService, Object]) +], SoftwarePage); +export { SoftwarePage }; +//# sourceMappingURL=software.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/software/software.page.js.map b/out-tsc/app/app/referential/software/software.page.js.map new file mode 100644 index 000000000..1b96f6776 --- /dev/null +++ b/out-tsc/app/app/referential/software/software.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"software.page.js","sourceRoot":"","sources":["../../../../../src/app/referential/software/software.page.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAA0E,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACnJ,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAQzD,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,oBAA+C;IAC/E,YACE,QAAkB,EAClB,WAA4B,EAC5B,gBAA0C,EACF,aAAqC;QAE7E,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;QAExE,iBAAiB;QACjB,IAAI,CAAC,eAAe,GAAG,mCAAmC,CAAC;QAE3D,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;IAC5C,CAAC;IAES,WAAW,CAAC,IAAc,EAAE,OAAkC;QACtE,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAEe,kBAAkB,CAAC,KAAa;;;;;;YAC9C,uCACK,CAAC,MAAM,OAAM,kBAAkB,YAAC,KAAK,CAAC,CAAC,KAC1C,IAAI,EAAE,wBAAwB,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,EAAE,KAAI,KAAK,EAAE,EACtD,QAAQ,EAAE,6BAA6B,EACvC,IAAI,EAAE,QAAQ,IACd;;KACH;CACF,CAAA;AA5BY,YAAY;IANxB,SAAS,CAAC;QACT,QAAQ,EAAE,mBAAmB;QAC7B,WAAW,EAAE,oBAAoB;QACjC,SAAS,EAAE,CAAC,sBAAsB,CAAC;QACnC,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;IAMG,WAAA,QAAQ,EAAE,CAAA;IAAE,WAAA,MAAM,CAAC,kBAAkB,CAAC,CAAA;qCAH7B,QAAQ;QACL,eAAe;QACV,wBAAwB;GAJjC,YAAY,CA4BxB;SA5BY,YAAY"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/pmfm-strategies.table.js b/out-tsc/app/app/referential/strategy/pmfm-strategies.table.js new file mode 100644 index 000000000..dd1351d32 --- /dev/null +++ b/out-tsc/app/app/referential/strategy/pmfm-strategies.table.js @@ -0,0 +1,543 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input, Output } from '@angular/core'; +import { AppFormUtils, AppInMemoryTable, changeCaseToUnderscore, EntityUtils, firstNotNilPromise, InMemoryEntitiesService, isEmptyArray, isNotEmptyArray, isNotNil, ReferentialUtils, removeDuplicatesFromArray, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, StatusIds, } from '@sumaris-net/ngx-components'; +import { environment } from '@environments/environment'; +import { PmfmStrategyValidatorService } from '../services/validator/pmfm-strategy.validator'; +import { ReferentialRefService } from '../services/referential-ref.service'; +import { merge, Observable, of } from 'rxjs'; +import { PmfmService } from '../services/pmfm.service'; +import { debounceTime, distinctUntilChanged, filter, map, mergeMap, startWith, takeUntil } from 'rxjs/operators'; +import { PmfmStrategy } from '../services/model/pmfm-strategy.model'; +import { PmfmValueUtils } from '../services/model/pmfm-value.model'; +import { PmfmStrategyFilter } from '@app/referential/services/filter/pmfm-strategy.filter'; +import { PmfmFilter } from '@app/referential/services/filter/pmfm.filter'; +import { RxState } from '@rx-angular/state'; +let PmfmStrategiesTable = class PmfmStrategiesTable extends AppInMemoryTable { + constructor(injector, validatorService, pmfmService, referentialRefService, state, cd) { + super(injector, + // columns + RESERVED_START_COLUMNS + .concat([ + 'acquisitionLevel', + 'rankOrder', + 'pmfm', + 'parameter', + 'isMandatory', + 'acquisitionNumber', + 'minValue', + 'maxValue', + 'defaultValue', + 'conditions' + ]) + .concat(RESERVED_END_COLUMNS), PmfmStrategy, new InMemoryEntitiesService(PmfmStrategy, PmfmStrategyFilter, { + onLoad: (data) => this.onLoadData(data), + equals: PmfmStrategy.equals + }), validatorService, { + prependNewElements: false, + suppressErrors: true, + onRowCreated: (row) => this.onRowCreated(row) + }, new PmfmStrategyFilter()); + this.injector = injector; + this.validatorService = validatorService; + this.pmfmService = pmfmService; + this.referentialRefService = referentialRefService; + this.state = state; + this.cd = cd; + this.acquisitionLevels$ = this.state.select('acquisitionLevels'); + this.fieldDefinitions = {}; + this.columnDefinitions = []; + this.filterCriteriaCount = 0; + this.showToolbar = true; + this.showPaginator = true; + this.showHeaderRow = true; + this.withDetails = true; + this.showPmfmLabel = true; + this.allowEmpty = false; + this.canEdit = false; + this.sticky = false; + this.i18nColumnPrefix = 'PROGRAM.STRATEGY.PMFM_STRATEGY.'; + this.inlineEdition = true; + this.defaultSortBy = 'id'; + this.defaultSortDirection = 'asc'; + this.saveBeforeDelete = true; + this.saveBeforeSort = true; + this.saveBeforeFilter = true; + this.debug = !environment.production; + } + set showDetailsColumns(value) { + // Set details columns visibility + this.setShowColumn('acquisitionLevel', value); + this.setShowColumn('rankOrder', value); + this.setShowColumn('isMandatory', value); + this.setShowColumn('acquisitionNumber', value); + this.setShowColumn('minValue', value); + this.setShowColumn('maxValue', value); + this.setShowColumn('defaultValue', value); + // Inverse visibility of the parameter columns + this.setShowColumn('parameter', !value); + } + set showIdColumn(value) { + this.setShowColumn('id', value); + } + get showIdColumn() { + return this.getShowColumn('id'); + } + set showSelectColumn(value) { + this.setShowColumn('select', value); + } + get showSelectColumn() { + return this.getShowColumn('select'); + } + get selectionChanges() { + return this.selection.changed.pipe(map(_ => this.selection.selected)); + } + get loading$() { + return merge(this.loadingSubject, this.acquisitionLevels$ + .pipe(startWith(true), filter(isNotNil), map(_ => false))).pipe(distinctUntilChanged()); + } + get filterIsEmpty() { + return this.filterCriteriaCount === 0; + } + get acquisitionLevels() { + return this.state.get('acquisitionLevels'); + } + get qualitativeValues() { + return this.state.get('qualitativeValues'); + } + ngOnInit() { + super.ngOnInit(); + this.validatorService.withDetails = this.withDetails; + // Acquisition level + this.registerColumnDefinition({ + key: 'acquisitionLevel', + type: 'entity', + required: true, + autocomplete: this.registerAutocompleteField('acquisitionLevel', { + items: this.state.select('acquisitionLevels'), + attributes: ['name'], + showAllOnFocus: true, + class: 'mat-autocomplete-panel-large-size' + }) + }); + // Load acquisition levels + this.state.connect('acquisitionLevels', this.watchAcquisitionLevels()); + // Rank order + this.registerColumnDefinition({ + key: 'rankOrder', + type: 'integer', + minValue: 1, + defaultValue: 1, + required: true + }); + // Pmfm + const basePmfmAttributes = (!this.showPmfmLabel ? ['name'] : this.settings.getFieldDisplayAttributes('pmfm', ['label', 'name'])); + const pmfmAttributes = basePmfmAttributes + .map(attr => attr === 'name' ? 'parameter.name' : attr) + .concat(['unit.label', 'matrix.name', 'fraction.name', 'method.name']); + const pmfmColumnNames = basePmfmAttributes.map(attr => 'REFERENTIAL.' + attr.toUpperCase()) + .concat(['REFERENTIAL.PMFM.UNIT', 'REFERENTIAL.PMFM.MATRIX', 'REFERENTIAL.PMFM.FRACTION', 'REFERENTIAL.PMFM.METHOD']); + this.registerColumnDefinition({ + key: 'pmfm', + type: 'entity', + required: false, + autocomplete: this.registerAutocompleteField('pmfm', { + suggestFn: (value, opts) => this.suggestPmfms(value, opts), + attributes: pmfmAttributes, + columnSizes: pmfmAttributes.map(attr => { + switch (attr) { + case 'label': + return 2; + case 'name': + return 3; + case 'unit.label': + return 1; + case 'method.name': + return 4; + default: return undefined; + } + }), + columnNames: pmfmColumnNames, + displayWith: (pmfm) => this.displayPmfm(pmfm, { withUnit: true, withDetails: true }), + showAllOnFocus: false, + class: 'mat-autocomplete-panel-full-size' + }) + }); + // PMFM.PARAMETER + const pmfmParameterAttributes = ['label', 'name']; + this.registerColumnDefinition({ + key: 'parameter', + type: 'entity', + required: false, + autocomplete: this.registerAutocompleteField('parameter', { + suggestFn: (value, opts) => this.suggestParameters(value, opts), + attributes: pmfmParameterAttributes, + columnSizes: [4, 8], + columnNames: ['REFERENTIAL.PARAMETER.CODE', 'REFERENTIAL.PARAMETER.NAME'], + showAllOnFocus: false, + class: 'mat-autocomplete-panel-large-size' + }) + }); + // Is mandatory + this.registerColumnDefinition({ + key: 'isMandatory', + type: 'boolean', + defaultValue: false, + required: true + }); + // Acquisition number + this.registerColumnDefinition({ + key: 'acquisitionNumber', + type: 'integer', + minValue: 0, + defaultValue: 1, + required: true + }); + // Min / Max + this.registerColumnDefinition({ + key: 'minValue', + type: 'double', + required: false + }); + this.registerColumnDefinition({ + key: 'maxValue', + type: 'double', + required: false + }); + // Register default value definition + this.registerFieldDefinition({ + key: 'defaultValue', + type: 'double', + required: false + }); + const qvAttributes = this.settings.getFieldDisplayAttributes('qualitativeValue', ['label', 'name']); + this.registerFieldDefinition({ + key: 'defaultQualitativeValue', + type: 'entity', + autocomplete: { + attributes: qvAttributes, + items: this.state.select('qualitativeValues'), + showAllOnFocus: true, + class: 'mat-autocomplete-panel-large-size' + }, + required: false + }); + // Load default qualitative value + this.state.connect('qualitativeValues', this.watchQualitativeValues()); + } + getDisplayColumns() { + let userColumns = this.getUserColumns(); + // No user override: use defaults + if (!userColumns) { + userColumns = this.columns; + } + // Get fixed start columns + const fixedStartColumns = this.columns.filter(c => RESERVED_START_COLUMNS.includes(c)); + // Remove end columns + const fixedEndColumns = this.columns.filter(c => RESERVED_END_COLUMNS.includes(c)); + // Remove fixed columns from user columns + userColumns = userColumns.filter(c => (!fixedStartColumns.includes(c) && !fixedEndColumns.includes(c) && this.columns.includes(c))); + return fixedStartColumns + .concat(userColumns) + .concat(fixedEndColumns) + // Remove columns to hide + .filter(column => !this.excludesColumns.includes(column)); + } + editRow(event, row, opts) { + return super.editRow(event, row, opts); + } + setFilter(source, opts) { + const target = new PmfmStrategyFilter(); + Object.assign(target, source); + // Update criteria count + const criteriaCount = target.countNotEmptyCriteria(); + if (criteriaCount !== this.filterCriteriaCount) { + this.filterCriteriaCount = criteriaCount; + this.markForCheck(); + } + super.setFilter(target, opts); + } + onLoadData(sources) { + return __awaiter(this, void 0, void 0, function* () { + // Wait acquisition levels to be loaded + const acquisitionLevels = yield firstNotNilPromise(this.acquisitionLevels$); + // Add at least one item + if (!this.allowEmpty && isEmptyArray(sources)) { + console.debug('[pmfm-strategy-table] Force add empty PmfmSTrategy, because allowEmpty=false'); + sources = [new PmfmStrategy()]; + } + console.debug('[pmfm-strategy-table] Adapt loaded data to table...'); + const entities = sources.map(source => { + const target = PmfmStrategy.fromObject(source); + // Convert acquisition level, from string to entity + if (typeof target.acquisitionLevel === 'string') { + target.acquisitionLevel = acquisitionLevels.find(i => i.label === target.acquisitionLevel); + } + if (isNotNil(target.defaultValue) && target.pmfm) { + target.defaultValue = target.pmfm && PmfmValueUtils.fromModelValue(target.defaultValue, target.pmfm); + console.debug('[pmfm-strategy-table] Received default value: ', target.defaultValue); + } + else { + target.defaultValue = null; + } + return target; + }); + return entities; + }); + } + onRowCreated(row) { + return __awaiter(this, void 0, void 0, function* () { + // Creating default values, from the current filter + const filter = this.filter; + const acquisitionLevelLabel = filter && filter.acquisitionLevel; + const acquisitionLevel = acquisitionLevelLabel && (this.acquisitionLevels || []).find(item => item.label === acquisitionLevelLabel); + const gearIds = filter && filter.gearIds; + const taxonGroupIds = filter && filter.taxonGroupIds; + const referenceTaxonIds = filter && filter.referenceTaxonIds; + let rankOrder = null; + if (acquisitionLevel) { + rankOrder = ((yield this.getMaxRankOrder(acquisitionLevel)) || 0) + 1; + } + const defaultValues = { + acquisitionLevel, + rankOrder, + gearIds, + taxonGroupIds, + referenceTaxonIds + }; + // Applying defaults + if (row.validator) { + row.validator.patchValue(defaultValues); + } + else { + Object.assign(row.currentData, defaultValues); + } + }); + } + getMaxRankOrder(acquisitionLevel) { + return __awaiter(this, void 0, void 0, function* () { + const rows = this.dataSource.getRows(); + return rows + .map(row => row.currentData) + .filter(data => ReferentialUtils.equals(data.acquisitionLevel, acquisitionLevel)) + .reduce((res, data) => Math.max(res, data.rankOrder || 0), 0); + }); + } + registerColumnDefinition(def) { + const definition = Object.assign({ label: this.i18nColumnPrefix + changeCaseToUnderscore(def.key).toUpperCase() }, def); + this.columnDefinitions.push(definition); + } + registerFieldDefinition(def) { + const definition = Object.assign({ label: this.i18nColumnPrefix + changeCaseToUnderscore(def.key).toUpperCase() }, def); + this.fieldDefinitions[def.key] = definition; + } + watchAcquisitionLevels() { + return this.referentialRefService.watchAll(0, 100, null, null, { + entityName: 'AcquisitionLevel' + }, { withTotal: false }) + .pipe(map(res => (res === null || res === void 0 ? void 0 : res.data) || [])); + } + watchQualitativeValues() { + return this.onStartEditingRow + .pipe( + // DEBUG + //tap(row => console.debug('DEV - Starting editing row', row.currentData)), + debounceTime(200), mergeMap(row => { + var _a; + const control = (_a = row.validator) === null || _a === void 0 ? void 0 : _a.get('pmfm'); + if (control) { + return control.valueChanges.pipe(startWith(control.value), takeUntil(this.onStartEditingRow)); + } + else { + return of(row.currentData.pmfm); + } + }), map(pmfm => pmfm === null || pmfm === void 0 ? void 0 : pmfm.id), filter(isNotNil), + //tap(pmfmId => console.debug("TODO current pmdm id=", pmfmId)), + //distinctUntilChanged(), + //debounceTime(200), + mergeMap(pmfmId => this.pmfmService.load(pmfmId)), map(pmfm => { var _a; return ((isNotEmptyArray(pmfm.qualitativeValues) ? pmfm.qualitativeValues : (_a = pmfm.parameter) === null || _a === void 0 ? void 0 : _a.qualitativeValues) || []); }), filter(isNotEmptyArray) + // DEBUG + //,tap(items => console.debug("TODO Check Pmfm QV", items)) + ); + } + resetRow(event, row) { + return __awaiter(this, void 0, void 0, function* () { + if (event === null || event === void 0 ? void 0 : event.defaultPrevented) + return false; + console.debug('[pmfm-strategies-table] Resetting row'); + if (event) + event.preventDefault(); // Avoid clickRow to be executed + AppFormUtils.copyEntity2Form({}, row.validator); + row.validator.markAsUntouched(); + row.validator.markAsPristine(); + row.validator.disable(); + this.editedRow = undefined; + return true; + }); + } + get valueChanges() { + return merge(this.dataSource.connect(null), this.onStartEditingRow.pipe(filter(row => !!row.validator), mergeMap(row => row.validator.valueChanges + .pipe( + //debounceTime(250), + map((_) => this.dataSource.getRows()), map((rows) => rows.map(r => r.id === row.id ? row : r)))))) + .pipe(map(rows => (rows || []).map(r => r.currentData))); + } + duplicateSelection(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.selection.isEmpty()) + return; // Skip if empty + if (!this.confirmEditCreate()) + return; // Stop if cannot confirm previous row + try { + const rows = this.selection.selected + // Sort by ID desc (need to insertAt) + .sort((r1, r2) => r1.id > r2.id ? -1 : 1); + console.debug(`[pmfm-strategy-table] Duplicating ${rows.length} rows...`); + for (const sourceRow of rows) { + const source = PmfmStrategy.fromObject(sourceRow.currentData); + const target = source.clone(); + EntityUtils.cleanIdAndUpdateDate(target); + const targetRow = yield this.addRowToTable(sourceRow.id + 1, { editing: false }); + if (!targetRow) + break; + targetRow.validator.patchValue(target); + if (!this.confirmEditCreate(null, targetRow)) + break; + this.selection.deselect(sourceRow); + } + } + finally { + this.markAsDirty(); + } + }); + } + /* -- protected functions -- */ + suggestPmfms(value, opts) { + return __awaiter(this, void 0, void 0, function* () { + return this.pmfmService.suggest(value, Object.assign({ searchJoin: 'parameter', searchAttribute: !this.showPmfmLabel ? 'name' : undefined /*label + name*/ }, this.pmfmFilter)); + }); + } + suggestParameters(value, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (this.pmfmFilter) { + const { data } = yield this.pmfmService.suggest(value, Object.assign({ searchJoin: 'parameter' }, this.pmfmFilter)); + const pmfmParameters = data.map(p => p.parameter).filter(isNotNil); + return removeDuplicatesFromArray(pmfmParameters, 'label'); + } + else { + return yield this.referentialRefService.suggest(value, Object.assign(Object.assign({}, opts), { entityName: 'Parameter', statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] })); + } + }); + } + /** + * Compute a PMFM.NAME, with the last part of the name + * + * @param pmfm + * @param opts + */ + displayPmfm(pmfm, opts) { + if (!pmfm) + return undefined; + let name = pmfm.parameter && pmfm.parameter.name; + if (opts && opts.withDetails) { + name = [ + name, + pmfm.matrix && pmfm.matrix.name, + pmfm.fraction && pmfm.fraction.name, + pmfm.method && pmfm.method.name + ].filter(isNotNil).join(' - '); + } + // Append unit + const unitLabel = (pmfm.type === 'integer' || pmfm.type === 'double') && pmfm.unit && pmfm.unit.label; + if ((!opts || opts.withUnit !== false) && unitLabel) { + if (opts && opts.html) { + name += `
(${unitLabel})
`; + } + else { + name += ` (${unitLabel})`; + } + } + return name; + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmStrategiesTable.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmStrategiesTable.prototype, "showPaginator", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmStrategiesTable.prototype, "showHeaderRow", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmStrategiesTable.prototype, "withDetails", void 0); +__decorate([ + Input(), + __metadata("design:type", PmfmFilter) +], PmfmStrategiesTable.prototype, "pmfmFilter", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmStrategiesTable.prototype, "showPmfmLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmStrategiesTable.prototype, "allowEmpty", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmStrategiesTable.prototype, "canEdit", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PmfmStrategiesTable.prototype, "sticky", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], PmfmStrategiesTable.prototype, "showDetailsColumns", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], PmfmStrategiesTable.prototype, "showIdColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], PmfmStrategiesTable.prototype, "showSelectColumn", null); +__decorate([ + Input(), + __metadata("design:type", String) +], PmfmStrategiesTable.prototype, "title", void 0); +__decorate([ + Output(), + __metadata("design:type", Observable), + __metadata("design:paramtypes", []) +], PmfmStrategiesTable.prototype, "selectionChanges", null); +PmfmStrategiesTable = __decorate([ + Component({ + selector: 'app-pmfm-strategies-table', + templateUrl: './pmfm-strategies.table.html', + styleUrls: ['./pmfm-strategies.table.scss'], + providers: [ + RxState + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + PmfmStrategyValidatorService, + PmfmService, + ReferentialRefService, + RxState, + ChangeDetectorRef]) +], PmfmStrategiesTable); +export { PmfmStrategiesTable }; +//# sourceMappingURL=pmfm-strategies.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/pmfm-strategies.table.js.map b/out-tsc/app/app/referential/strategy/pmfm-strategies.table.js.map new file mode 100644 index 000000000..14f5d043c --- /dev/null +++ b/out-tsc/app/app/referential/strategy/pmfm-strategies.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfm-strategies.table.js","sourceRoot":"","sources":["../../../../../src/app/referential/strategy/pmfm-strategies.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/sampling/sampling-strategies.table.js b/out-tsc/app/app/referential/strategy/sampling/sampling-strategies.table.js new file mode 100644 index 000000000..6877b5a4d --- /dev/null +++ b/out-tsc/app/app/referential/strategy/sampling/sampling-strategies.table.js @@ -0,0 +1,506 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input, Output, TemplateRef, ViewChild } from '@angular/core'; +import { Alerts, AppFormUtils, AppTable, DateUtils, EntitiesTableDataSource, fromDateISOString, isEmptyArray, isNotEmptyArray, isNotNil, PersonService, PersonUtils, removeDuplicatesFromArray, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, SharedValidators, sleep, StatusIds, toBoolean, } from '@sumaris-net/ngx-components'; +import { Program } from '../../services/model/program.model'; +import { LocationLevelGroups, ParameterLabelGroups, TaxonomicLevelIds } from '../../services/model/model.enum'; +import { ReferentialRefService } from '../../services/referential-ref.service'; +import { ProgramProperties, SAMPLING_STRATEGIES_FEATURE_NAME } from '../../services/config/program.config'; +import { environment } from '@environments/environment'; +import { SamplingStrategy } from '../../services/model/sampling-strategy.model'; +import { SamplingStrategyService } from '../../services/sampling-strategy.service'; +import { StrategyService } from '../../services/strategy.service'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { ParameterService } from '@app/referential/services/parameter.service'; +import { debounceTime, filter, tap } from 'rxjs/operators'; +import { AppRootTableSettingsEnum } from '@app/data/table/root-table.class'; +import { MatExpansionPanel } from '@angular/material/expansion'; +import { Subject } from 'rxjs'; +import { StrategyFilter } from '@app/referential/services/filter/strategy.filter'; +import { StrategyModal } from '@app/referential/strategy/strategy.modal'; +import { TaxonNameRefService } from '@app/referential/services/taxon-name-ref.service'; +import moment from 'moment'; +import { RxState } from '@rx-angular/state'; +import { LandingFilter } from '@app/trip/landing/landing.filter'; +export const SamplingStrategiesPageSettingsEnum = { + PAGE_ID: 'samplingStrategies', + FILTER_KEY: 'filter', + FEATURE_ID: SAMPLING_STRATEGIES_FEATURE_NAME, +}; +let SamplingStrategiesTable = class SamplingStrategiesTable extends AppTable { + constructor(injector, samplingStrategyService, strategyService, referentialRefService, taxonNameRefService, personService, parameterService, formBuilder, _state, cd) { + super(injector, + // columns + RESERVED_START_COLUMNS + .concat([ + 'label', + 'analyticReference', + 'recorderDepartments', + 'locations', + 'taxonNames', + 'comments', + 'parameterGroups', + 'effortQ1', + 'effortQ2', + 'effortQ3', + 'effortQ4' + ]) + .concat(RESERVED_END_COLUMNS), new EntitiesTableDataSource(SamplingStrategy, samplingStrategyService, null, { + prependNewElements: false, + suppressErrors: environment.production, + readOnly: true, + watchAllOptions: { + withTotal: true + } + })); + this.samplingStrategyService = samplingStrategyService; + this.strategyService = strategyService; + this.referentialRefService = referentialRefService; + this.taxonNameRefService = taxonNameRefService; + this.personService = personService; + this.parameterService = parameterService; + this.formBuilder = formBuilder; + this._state = _state; + this.cd = cd; + this.canEdit$ = this._state.select('canEdit'); + this.canDelete$ = this._state.select('canDelete'); + this.quarters = Object.freeze([1, 2, 3, 4]); + this.filterCriteriaCount = 0; + this.i18nContext = {}; + this.showToolbar = true; + this.canOpenRealizedLandings = false; + this.showError = true; + this.showPaginator = true; + this.filterPanelFloating = true; + this.useSticky = true; + this.onNewDataFromRow = new Subject(); + this.parameterGroupLabels = ['LENGTH', 'WEIGHT', 'SEX', 'MATURITY', 'AGE']; + this.filterForm = formBuilder.group({ + searchText: [null], + levelId: [null, Validators.required], + analyticReference: [null], + department: [null, SharedValidators.entity], + location: [null, SharedValidators.entity], + taxonName: [null, SharedValidators.entity], + startDate: [null, SharedValidators.validDate], + endDate: [null, SharedValidators.validDate], + //recorderPerson: [null, SharedValidators.entity], + effortByQuarter: formBuilder.group({ + 1: [null], + 2: [null], + 3: [null], + 4: [null] + }), + parameterGroups: formBuilder.group(this.parameterGroupLabels.reduce((controlConfig, label) => { + controlConfig[label] = [null]; + return controlConfig; + }, {})) + }); + this.i18nColumnPrefix = 'PROGRAM.STRATEGY.TABLE.'; // Can be overwritten by a program property - see setProgram() + this.autoLoad = false; // waiting program to be loaded - see setProgram() + this.defaultSortBy = 'label'; + this.defaultSortDirection = 'asc'; + this.confirmBeforeDelete = true; + this.inlineEdition = false; + // Will be overridden when getting program - see setProgram() + this.settingsId = SamplingStrategiesPageSettingsEnum.PAGE_ID + '#?'; + this._state.set({ + canEdit: false, + canDelete: false + }); + // FOR DEV ONLY ---- + this.debug = !environment.production; + } + set canEdit(value) { + this._state.set('canEdit', _ => value); + } + get canEdit() { + return this._state.get('canEdit'); + } + set canDelete(value) { + this._state.set('canDelete', _ => value); + } + get canDelete() { + return this._state.get('canDelete'); + } + set program(program) { + this.setProgram(program); + } + get program() { + return this._program; + } + ngOnInit() { + super.ngOnInit(); + // By default, use floating filter if toolbar not shown + this.filterPanelFloating = toBoolean(this.filterPanelFloating, !this.showToolbar); + // Remove error after changed selection + this.selection.changed.subscribe(() => this.resetError()); + // Watch 'canEdit' and 'canDelete' to update 'readonly' + this._state.hold(this._state.select(['canEdit', 'canDelete'], res => res).pipe(debounceTime(250)), ({ canEdit, canDelete }) => { + this.readOnly = !canEdit && !canDelete; + this.markForCheck(); + }); + // Analytic reference autocomplete + this.registerAutocompleteField('analyticReference', { + showAllOnFocus: false, + suggestFn: (value, filter) => this.strategyService.suggestAnalyticReferences(value, Object.assign(Object.assign({}, filter), { statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] })), + columnSizes: [4, 6], + mobile: this.mobile + }); + this.registerAutocompleteField('department', { + showAllOnFocus: false, + service: this.referentialRefService, + filter: { + entityName: 'Department', + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] + }, + mobile: this.mobile + }); + this.registerAutocompleteField('location', { + showAllOnFocus: false, + suggestFn: (value, filter) => __awaiter(this, void 0, void 0, function* () { + // Note: wait enumeration override, before using LocationLevelGroups.FISHING_AREA + yield this.referentialRefService.ready(); + return this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { levelIds: LocationLevelGroups.FISHING_AREA })); + }), + filter: { + entityName: 'Location', + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] + }, + mobile: this.mobile + }); + this.registerAutocompleteField('taxonName', { + showAllOnFocus: false, + service: this.taxonNameRefService, + attributes: ['name'], + filter: { + levelIds: [TaxonomicLevelIds.SPECIES, TaxonomicLevelIds.SUBSPECIES], + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] + }, + mobile: this.mobile + }); + // Combo: recorder person (filter) + this.registerAutocompleteField('person', { + showAllOnFocus: false, + service: this.personService, + filter: { + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE] + }, + attributes: ['lastName', 'firstName', 'department.name'], + displayWith: PersonUtils.personToString, + mobile: this.mobile + }); + // Update filter when changes + this.registerSubscription(this.filterForm.valueChanges + .pipe( + //debounceTime(250), + filter((_) => this.filterForm.valid), tap((value) => { + const filter = this.asFilter(value); + this.filterCriteriaCount = filter.countNotEmptyCriteria() - 1 /* remove the levelId (always exists) */; + this.markForCheck(); + // Update the filter, without reloading the content + this.setFilter(filter, { emitEvent: false }); + }), + // Save filter in settings (after a debounce time) + debounceTime(500), tap(json => this.settings.savePageSetting(this.settingsId, json, SamplingStrategiesPageSettingsEnum.FILTER_KEY))) + .subscribe()); + } + highlightRow(row) { + this.highlightedRowId = row === null || row === void 0 ? void 0 : row.id; + this.markForCheck(); + } + clickRow(event, row) { + this.highlightedRowId = row === null || row === void 0 ? void 0 : row.id; + return super.clickRow(event, row); + } + deleteSelection(event) { + const _super = Object.create(null, { + deleteSelection: { get: () => super.deleteSelection }, + markAsPristine: { get: () => super.markAsPristine } + }); + return __awaiter(this, void 0, void 0, function* () { + const rowsToDelete = this.selection.selected; + const strategyLabelsWithData = (rowsToDelete || []) + .map(row => row.currentData) + .map(SamplingStrategy.fromObject) + .filter(strategy => strategy.hasRealizedEffort) + .map(s => s.label); + // send error if one strategy has landing + if (isNotEmptyArray(strategyLabelsWithData)) { + this.errorDetails = { label: strategyLabelsWithData.join(', ') }; + this.setError(strategyLabelsWithData.length === 1 + ? 'PROGRAM.STRATEGY.ERROR.STRATEGY_HAS_DATA' + : 'PROGRAM.STRATEGY.ERROR.STRATEGIES_HAS_DATA'); + const message = this.translate.instant(strategyLabelsWithData.length === 1 ? 'PROGRAM.STRATEGY.ERROR.STRATEGY_HAS_DATA' : 'PROGRAM.STRATEGY.ERROR.STRATEGIES_HAS_DATA', this.errorDetails); + yield Alerts.showError(message, this.alertCtrl, this.translate); + return 0; + } + // delete if strategy has not effort + yield _super.deleteSelection.call(this, event); + //TODO FIX : After delete first time, _dirty = false; Cannot delete second times cause try to save + _super.markAsPristine.call(this); + this.resetError(); + }); + } + closeFilterPanel(event) { + if (this.filterExpansionPanel) + this.filterExpansionPanel.close(); + this.filterPanelFloating = true; + } + applyFilterAndClosePanel(event, waitDebounceTime) { + return __awaiter(this, void 0, void 0, function* () { + if (this.filterExpansionPanel) + this.filterExpansionPanel.close(); + this.filterPanelFloating = true; + // Wait end of debounce + if (waitDebounceTime) + yield sleep(260); + this.onRefresh.emit(event); + }); + } + resetFilter(json) { + var _a; + json = Object.assign(Object.assign({}, json), { levelId: (json === null || json === void 0 ? void 0 : json.levelId) || ((_a = this._program) === null || _a === void 0 ? void 0 : _a.id) }); + const filter = this.asFilter(json); + AppFormUtils.copyEntity2Form(json, this.filterForm); + this.setFilter(filter, { emitEvent: true }); + } + resetFilterAndClose() { + if (this.filterExpansionPanel) + this.filterExpansionPanel.close(); + this.resetFilter(); + } + onNewData(event, row) { + } + toggleFilterPanelFloating() { + this.filterPanelFloating = !this.filterPanelFloating; + this.markForCheck(); + } + /* -- protected methods -- */ + setProgram(program) { + if (program && isNotNil(program.id) && this._program !== program) { + console.debug('[strategy-table] Setting program:', program); + this._program = program; + this.settingsId = SamplingStrategiesPageSettingsEnum.PAGE_ID + '#' + program.id; + this.i18nColumnPrefix = 'PROGRAM.STRATEGY.TABLE.'; + // Add a i18n suffix (e.g. in Biological sampling program) + const i18nSuffix = program.getProperty(ProgramProperties.I18N_SUFFIX); + this.i18nColumnPrefix += i18nSuffix !== 'legacy' && i18nSuffix || ''; + // Restore filter from settings, or load all + this.restoreFilterOrLoad(program.id); + } + } + markForCheck() { + this.cd.markForCheck(); + } + restoreFilterOrLoad(programId) { + return __awaiter(this, void 0, void 0, function* () { + this.markAsLoading(); + // Load map of parameter ids, by group label + if (!this.parameterIdsByGroupLabel) { + this.parameterIdsByGroupLabel = yield this.loadParameterIdsByGroupLabel(); + } + console.debug('[root-table] Restoring filter from settings...'); + const json = this.settings.getPageSettings(this.settingsId, AppRootTableSettingsEnum.FILTER_KEY) || {}; + this.resetFilter(Object.assign(Object.assign({}, json), { levelId: programId })); + }); + } + asFilter(source) { + var _a, _b; + source = source || this.filterForm.value; + const filter = StrategyFilter.fromObject(source); + // Start date: should be the first day of the year + // End date: should be the last day of the year + // /!\ Need to use local time, because the DB can use a local time (e.g. SIH-ADAGIO use tz=Europe/Paris) + // TODO: use DB Timezone, using the config CORE_CONFIG_OPTIONS.DB_TIMEZONE; + filter.startDate = (_a = filter.startDate) === null || _a === void 0 ? void 0 : _a.local(true).startOf('year'); + filter.endDate = (_b = filter.endDate) === null || _b === void 0 ? void 0 : _b.local(true).endOf('year').startOf('day'); + // Convert periods (from quarters) + filter.periods = this.asFilterPeriods(source); + // Convert parameter groups to list of parameter ids + filter.parameterIds = this.asFilterParameterIds(source); + return filter; + } + asFilterParameterIds(source) { + const checkedParameterGroupLabels = Object.keys(source.parameterGroups || {}) + // Filter on checked item + .filter(label => source.parameterGroups[label] === true); + const parameterIds = checkedParameterGroupLabels.reduce((res, groupLabel) => res.concat(this.parameterIdsByGroupLabel[groupLabel]), []); + if (isEmptyArray(parameterIds)) + return undefined; + return removeDuplicatesFromArray(parameterIds); + } + asFilterPeriods(source) { + var _a, _b; + const selectedQuarters = source.effortByQuarter && this.quarters.filter(quarter => source.effortByQuarter[quarter] === true); + if (isEmptyArray(selectedQuarters)) + return undefined; // Skip if no quarters selected + // Start year ( by default) + // /!\ Need to use local time, because the DB can use a local time (e.g. SIH-ADAGIO use tz=Europe/Paris) + // TODO: use DB Timezone, using the config CORE_CONFIG_OPTIONS.DB_TIMEZONE; + const startYear = ((_a = fromDateISOString(source.startDate)) === null || _a === void 0 ? void 0 : _a.clone().local(true).year()) || (moment().year() - 10); + // End year (N + 1 by default) + const endYear = ((_b = fromDateISOString(source.endDate)) === null || _b === void 0 ? void 0 : _b.clone().local(true).year()) || (moment().year() + 1); + if (startYear > endYear) + return undefined; // Invalid years + const periods = []; + for (let year = startYear; year <= endYear; year++) { + selectedQuarters.forEach(quarter => { + const startMonth = (quarter - 1) * 3; + const startDate = DateUtils.moment().local(true).year(year).month(startMonth).startOf('month'); + const endDate = startDate.clone().add(2, 'month').endOf('month').startOf('day'); + periods.push({ startDate, endDate }); + }); + } + return isNotEmptyArray(periods) ? periods : undefined; + } + clearControlValue(event, formControl) { + if (event) + event.stopPropagation(); // Avoid to enter input the field + formControl.setValue(null); + return false; + } + loadParameterIdsByGroupLabel() { + return __awaiter(this, void 0, void 0, function* () { + const result = {}; + yield Promise.all(this.parameterGroupLabels.map(groupLabel => { + const parameterLabels = ParameterLabelGroups[groupLabel]; + return this.parameterService.loadAllByLabels(parameterLabels, { toEntity: false, fetchPolicy: 'cache-first' }) + .then(parameters => result[groupLabel] = parameters.map(p => p.id)); + })); + return result; + }); + } + // INFO CLT : Imagine 355. Sampling strategy can be duplicated with selected year. + // We keep initial strategy and remove year related data like efforts. + // We update year-related values like applied period as done in sampling-strategy.form.ts getValue() + openStrategyDuplicateYearSelectionModal(event, rows) { + return __awaiter(this, void 0, void 0, function* () { + const modal = yield this.modalCtrl.create({ + component: StrategyModal, + }); + // Open the modal + yield modal.present(); + const { data } = yield modal.onDidDismiss(); + if (!data) + return; + const strategies = rows + .map(row => row.currentData) + .map(SamplingStrategy.fromObject); + const year = fromDateISOString(data) + // We need the local year, not the UTC year + .local(true) + .format('YYYY').toString(); + yield this.duplicateStrategies(strategies, +year); + this.selection.clear(); + }); + } + duplicateStrategies(sources, year) { + return __awaiter(this, void 0, void 0, function* () { + try { + this.markAsLoading(); + // Do save + // This should refresh the table (because of the watchAll updated throught the cache update) + yield this.samplingStrategyService.duplicateAllToYear(sources, year); + } + catch (err) { + this.setError(err && err.message || err, { emitEvent: false }); + } + finally { + this.markAsLoaded(); + } + }); + } + openLandingsByQuarter(event, strategy, quarter) { + var _a, _b, _c; + const effort = (_a = strategy === null || strategy === void 0 ? void 0 : strategy.effortByQuarter) === null || _a === void 0 ? void 0 : _a[quarter]; + if (!this.canOpenRealizedLandings || !(effort === null || effort === void 0 ? void 0 : effort.realizedEffort)) + return; // Skip if nothing to show (no realized effort) + // Prevent row click action + event.preventDefault(); + const filter = LandingFilter.fromObject({ + program: { id: this.program.id, label: this.program.label }, + startDate: (_b = effort.startDate) === null || _b === void 0 ? void 0 : _b.clone().startOf('day'), + endDate: (_c = effort.endDate) === null || _c === void 0 ? void 0 : _c.clone().endOf('day'), + strategy: { id: strategy.id, label: strategy.label } + }); + const filterString = JSON.stringify(filter.asObject()); + console.info(`[sampling-strategies-table] Opening landings for quarter ${quarter} and strategy '${strategy.label}'`, effort); + return this.navController.navigateForward(`/observations/landings`, { + queryParams: { + q: filterString + } + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplingStrategiesTable.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SamplingStrategiesTable.prototype, "canEdit", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SamplingStrategiesTable.prototype, "canDelete", null); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplingStrategiesTable.prototype, "canOpenRealizedLandings", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplingStrategiesTable.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplingStrategiesTable.prototype, "showPaginator", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplingStrategiesTable.prototype, "filterPanelFloating", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplingStrategiesTable.prototype, "useSticky", void 0); +__decorate([ + Input(), + __metadata("design:type", TemplateRef) +], SamplingStrategiesTable.prototype, "cellTemplate", void 0); +__decorate([ + Input(), + __metadata("design:type", Program), + __metadata("design:paramtypes", [Program]) +], SamplingStrategiesTable.prototype, "program", null); +__decorate([ + Output(), + __metadata("design:type", Object) +], SamplingStrategiesTable.prototype, "onNewDataFromRow", void 0); +__decorate([ + ViewChild(MatExpansionPanel, { static: true }), + __metadata("design:type", MatExpansionPanel) +], SamplingStrategiesTable.prototype, "filterExpansionPanel", void 0); +SamplingStrategiesTable = __decorate([ + Component({ + selector: 'app-sampling-strategies-table', + templateUrl: 'sampling-strategies.table.html', + styleUrls: ['sampling-strategies.table.scss'], + providers: [RxState], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + SamplingStrategyService, + StrategyService, + ReferentialRefService, + TaxonNameRefService, + PersonService, + ParameterService, + UntypedFormBuilder, + RxState, + ChangeDetectorRef]) +], SamplingStrategiesTable); +export { SamplingStrategiesTable }; +//# sourceMappingURL=sampling-strategies.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/sampling/sampling-strategies.table.js.map b/out-tsc/app/app/referential/strategy/sampling/sampling-strategies.table.js.map new file mode 100644 index 000000000..ac0532f89 --- /dev/null +++ b/out-tsc/app/app/referential/strategy/sampling/sampling-strategies.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sampling-strategies.table.js","sourceRoot":"","sources":["../../../../../../src/app/referential/strategy/sampling/sampling-strategies.table.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAU,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/I,OAAO,EACL,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,uBAAuB,EACvB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,QAAQ,EAER,aAAa,EACb,WAAW,EAEX,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,KAAK,EACL,SAAS,EACT,SAAS,GACV,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAC/G,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,gCAAgC,EAAE,MAAM,sCAAsC,CAAC;AAC3G,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAkB,MAAM,8CAA8C,CAAC;AAChG,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAmB,kBAAkB,EAAoB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAGzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AAGvF,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,MAAM,CAAC,MAAM,kCAAkC,GAAG;IAChD,OAAO,EAAE,oBAAoB;IAC7B,UAAU,EAAE,QAAQ;IACpB,UAAU,EAAE,gCAAgC;CAC7C,CAAC;AAcK,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,QAA0C;IAqDrF,YACE,QAAkB,EACR,uBAAgD,EAChD,eAAgC,EAChC,qBAA4C,EAC5C,mBAAwC,EACxC,aAA4B,EAC5B,gBAAkC,EAClC,WAA+B,EAC/B,MAA6C,EAC7C,EAAqB;QAE/B,KAAK,CAAC,QAAQ;QACZ,UAAU;QACV,sBAAsB;aACnB,MAAM,CAAC;YACN,OAAO;YACP,mBAAmB;YACnB,qBAAqB;YACrB,WAAW;YACX,YAAY;YACZ,UAAU;YACV,iBAAiB;YACjB,UAAU;YACV,UAAU;YACV,UAAU;YACV,UAAU;SAAC,CAAC;aACb,MAAM,CAAC,oBAAoB,CAAC,EAC/B,IAAI,uBAAuB,CAAC,gBAAgB,EAAE,uBAAuB,EAAE,IAAI,EAAE;YAC3E,kBAAkB,EAAE,KAAK;YACzB,cAAc,EAAE,WAAW,CAAC,UAAU;YACtC,QAAQ,EAAE,IAAI;YACd,eAAe,EAAE;gBACf,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC,CAAC;QAjCI,4BAAuB,GAAvB,uBAAuB,CAAyB;QAChD,oBAAe,GAAf,eAAe,CAAiB;QAChC,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,wBAAmB,GAAnB,mBAAmB,CAAqB;QACxC,kBAAa,GAAb,aAAa,CAAe;QAC5B,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,gBAAW,GAAX,WAAW,CAAoB;QAC/B,WAAM,GAAN,MAAM,CAAuC;QAC7C,OAAE,GAAF,EAAE,CAAmB;QA3DxB,aAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzC,eAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC7C,aAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAQhD,wBAAmB,GAAG,CAAC,CAAC;QACxB,gBAAW,GAGP,EAAE,CAAC;QAEE,gBAAW,GAAG,IAAI,CAAC;QAcnB,4BAAuB,GAAG,KAAK,CAAC;QAChC,cAAS,GAAG,IAAI,CAAC;QACjB,kBAAa,GAAG,IAAI,CAAC;QACrB,wBAAmB,GAAG,IAAI,CAAC;QAC3B,cAAS,GAAG,IAAI,CAAC;QAWhB,qBAAgB,GAAG,IAAI,OAAO,EAAuD,CAAC;QAyC9F,IAAI,CAAC,oBAAoB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAE3E,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC;YAClC,UAAU,EAAE,CAAC,IAAI,CAAC;YAClB,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;YACpC,iBAAiB,EAAE,CAAC,IAAI,CAAC;YACzB,UAAU,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC;YAC3C,QAAQ,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC;YACzC,SAAS,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC;YAC1C,SAAS,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC;YAC7C,OAAO,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC;YAC3C,kDAAkD;YAClD,eAAe,EAAG,WAAW,CAAC,KAAK,CAAC;gBAClC,CAAC,EAAE,CAAC,IAAI,CAAC;gBACT,CAAC,EAAE,CAAC,IAAI,CAAC;gBACT,CAAC,EAAE,CAAC,IAAI,CAAC;gBACT,CAAC,EAAE,CAAC,IAAI,CAAC;aACV,CAAC;YACF,eAAe,EAAG,WAAW,CAAC,KAAK,CACjC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE;gBACxD,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC9B,OAAO,aAAa,CAAC;YACvB,CAAC,EAAE,EAAE,CAAC,CACP;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,GAAG,yBAAyB,CAAC,CAAC,8DAA8D;QACjH,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,kDAAkD;QACzE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAC7B,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAE3B,6DAA6D;QAC7D,IAAI,CAAC,UAAU,GAAG,kCAAkC,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YACd,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QAEH,oBAAoB;QACpB,IAAI,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;IACvC,CAAC;IA/GD,IAAa,OAAO,CAAC,KAAc;QACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IACD,IAAa,SAAS,CAAC,KAAc;QAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAQD,IAAa,OAAO,CAAC,OAAgB;QACpC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAwFD,QAAQ;QACN,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEjB,uDAAuD;QACvD,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAElF,uCAAuC;QACvC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAE1D,uDAAuD;QACvD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAC/F,CAAC,EAAC,OAAO,EAAE,SAAS,EAAC,EAAE,EAAE;YACvB,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC;YACvC,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QAEL,kCAAkC;QAClC,IAAI,CAAC,yBAAyB,CAAC,mBAAmB,EAAE;YAClD,cAAc,EAAE,KAAK;YACrB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,KAAK,kCAC7E,MAAM,KAAE,SAAS,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,IAC7D;YACF,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,IAAI,CAAC,yBAAyB,CAAuC,YAAY,EAAE;YACjF,cAAc,EAAE,KAAK;YACrB,OAAO,EAAE,IAAI,CAAC,qBAAqB;YACnC,MAAM,EAAE;gBACN,UAAU,EAAE,YAAY;gBACxB,SAAS,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC;aACnD;YACD,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,IAAI,CAAC,yBAAyB,CAAuC,UAAU,EAAE;YAC/E,cAAc,EAAE,KAAK;YACrB,SAAS,EAAE,CAAO,KAAK,EAAE,MAAM,EAAE,EAAE;gBACjC,iFAAiF;gBACjF,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;gBACzC,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,kCAC1C,MAAM,KACT,QAAQ,EAAE,mBAAmB,CAAC,YAAY,IAC1C,CAAC;YACL,CAAC,CAAA;YACD,MAAM,EAAE;gBACN,UAAU,EAAE,UAAU;gBACtB,SAAS,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC;aACnD;YACD,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,IAAI,CAAC,yBAAyB,CAAmC,WAAW,EAAE;YAC5E,cAAc,EAAE,KAAK;YACrB,OAAO,EAAE,IAAI,CAAC,mBAAmB;YACjC,UAAU,EAAE,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE;gBACN,QAAQ,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,CAAC,UAAU,CAAC;gBACnE,SAAS,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC;aACnD;YACD,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,kCAAkC;QAClC,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE;YACvC,cAAc,EAAE,KAAK;YACrB,OAAO,EAAE,IAAI,CAAC,aAAa;YAC3B,MAAM,EAAE;gBACN,SAAS,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC;aACnD;YACD,UAAU,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,iBAAiB,CAAC;YACxD,WAAW,EAAE,WAAW,CAAC,cAAc;YACvC,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,6BAA6B;QAC7B,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,UAAU,CAAC,YAAY;aACzB,IAAI;QACH,oBAAoB;QACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EACpC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACZ,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,wCAAwC,CAAC;YACvG,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,mDAAmD;YACnD,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;QAC7C,CAAC,CAAC;QACF,kDAAkD;QAClD,YAAY,CAAC,GAAG,CAAC,EACjB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,kCAAkC,CAAC,UAAU,CAAC,CAAC,CACjH;aACA,SAAS,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,YAAY,CAAC,GAAmC;QAC9C,IAAI,CAAC,gBAAgB,GAAG,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,EAAE,CAAC;QAChC,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,QAAQ,CAAC,KAA2B,EAAE,GAAmC;QACvE,IAAI,CAAC,gBAAgB,GAAG,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAEK,eAAe,CAAC,KAAY;;;;;;YAChC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YAE7C,MAAM,sBAAsB,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;iBAChD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAA+B,CAAC;iBAC/C,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC;iBAChC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;iBAC9C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAErB,yCAAyC;YACzC,IAAI,eAAe,CAAC,sBAAsB,CAAC,EAAE;gBAC3C,IAAI,CAAC,YAAY,GAAG,EAAC,KAAK,EAAE,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAC,CAAC;gBAC/D,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,MAAM,KAAK,CAAC;oBAC/C,CAAC,CAAC,0CAA0C;oBAC5C,CAAC,CAAC,4CAA4C,CAAC,CAAC;gBAClD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,sBAAsB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,4CAA4C,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC3L,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChE,OAAO,CAAC,CAAC;aACV;YAED,oCAAoC;YACpC,MAAM,OAAM,eAAe,YAAC,KAAK,CAAC,CAAC;YAEnC,kGAAkG;YAClG,OAAM,cAAc,YAAG;YAEvB,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;KAAA;IAED,gBAAgB,CAAC,KAAa;QAC5B,IAAI,IAAI,CAAC,oBAAoB;YAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QACjE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAClC,CAAC;IAEK,wBAAwB,CAAC,KAAa,EAAE,gBAA0B;;YACtE,IAAI,IAAI,CAAC,oBAAoB;gBAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;YACjE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAEhC,uBAAuB;YACvB,IAAI,gBAAgB;gBAAE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;KAAA;IAED,WAAW,CAAC,IAAU;;QACpB,IAAI,mCACC,IAAI,KACP,OAAO,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,MAAI,MAAA,IAAI,CAAC,QAAQ,0CAAE,EAAE,CAAA,GAC5C,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnC,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IAC5C,CAAC;IAED,mBAAmB;QACjB,IAAI,IAAI,CAAC,oBAAoB;YAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QACjE,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,SAAS,CAAC,KAAY,EAAE,GAAmC;IAE3D,CAAC;IAED,yBAAyB;QACvB,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACrD,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,6BAA6B;IAGnB,UAAU,CAAC,OAAgB;QACnC,IAAI,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE;YAChE,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC;YAE5D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;YACxB,IAAI,CAAC,UAAU,GAAG,kCAAkC,CAAC,OAAO,GAAG,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC;YAEhF,IAAI,CAAC,gBAAgB,GAAG,yBAAyB,CAAC;YAClD,0DAA0D;YAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACtE,IAAI,CAAC,gBAAgB,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,IAAI,EAAE,CAAC;YAErE,4CAA4C;YAC5C,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SACtC;IACH,CAAC;IAES,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;IAEe,mBAAmB,CAAC,SAAiB;;YACnD,IAAI,CAAC,aAAa,EAAE,CAAC;YAErB,4CAA4C;YAC5C,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;gBAClC,IAAI,CAAC,wBAAwB,GAAG,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAC;aAC3E;YAED,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAEhE,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,wBAAwB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAEvG,IAAI,CAAC,WAAW,iCACX,IAAI,KACP,OAAO,EAAE,SAAS,IAClB,CAAC;QACL,CAAC;KAAA;IAES,QAAQ,CAAC,MAAY;;QAC7B,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAEzC,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAEjD,kDAAkD;QAClD,+CAA+C;QAC/C,wGAAwG;QACxG,+EAA+E;QAC/E,MAAM,CAAC,SAAS,GAAG,MAAA,MAAM,CAAC,SAAS,0CAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACjE,MAAM,CAAC,OAAO,GAAG,MAAA,MAAM,CAAC,OAAO,0CAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAE1E,kCAAkC;QAClC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAE9C,oDAAoD;QACpD,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAExD,OAAO,MAAM,CAAC;IAChB,CAAC;IAGS,oBAAoB,CAAC,MAAY;QAEzC,MAAM,2BAA2B,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;YAC3E,yBAAyB;aACxB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;QAE3D,MAAM,YAAY,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAExI,IAAI,YAAY,CAAC,YAAY,CAAC;YAAE,OAAO,SAAS,CAAC;QAEjD,OAAO,yBAAyB,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC;IAES,eAAe,CAAC,MAAW;;QACnC,MAAM,gBAAgB,GAAa,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;QACvI,IAAI,YAAY,CAAC,gBAAgB,CAAC;YAAE,OAAO,SAAS,CAAC,CAAC,+BAA+B;QAErF,mCAAmC;QACnC,wGAAwG;QACxG,+EAA+E;QAC/E,MAAM,SAAS,GAAG,CAAA,MAAA,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,0CAAE,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5G,8BAA8B;QAC9B,MAAM,OAAO,GAAG,CAAA,MAAA,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,0CAAE,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QAEvG,IAAI,SAAS,GAAG,OAAO;YAAE,OAAO,SAAS,CAAC,CAAC,gBAAgB;QAE3D,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,IAAI,IAAI,GAAG,SAAS,EAAE,IAAI,IAAI,OAAO,EAAE,IAAI,EAAE,EAAE;YAClD,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACjC,MAAM,UAAU,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACrC,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC/F,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAChF,OAAO,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,OAAO,EAAC,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;SACJ;QACD,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,CAAC;IAED,iBAAiB,CAAC,KAAY,EAAE,WAA4B;QAC1D,IAAI,KAAK;YAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,iCAAiC;QACrE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAEe,4BAA4B;;YAC1C,MAAM,MAAM,GAAwB,EAAE,CAAC;YACvC,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;gBAC3D,MAAM,eAAe,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;gBACzD,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,eAAe,EAAE,EAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAC,CAAC;qBACzG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC,CAAC;YACJ,OAAO,MAAM,CAAC;QAChB,CAAC;KAAA;IAED,kFAAkF;IAClF,sEAAsE;IACtE,oGAAoG;IAC9F,uCAAuC,CAAC,KAAY,EAAE,IAAsC;;YAChG,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBACxC,SAAS,EAAE,aAAa;aACzB,CAAC,CAAC;YAEH,iBAAiB;YACjB,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC;YAE5C,IAAI,CAAC,IAAI;gBAAE,OAAO;YAElB,MAAM,UAAU,GAAG,IAAI;iBACpB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC;iBAC3B,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC;gBAClC,2CAA2C;iBAC1C,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;YAG7B,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;YAClD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;KAAA;IAEK,mBAAmB,CAAC,OAA2B,EAAE,IAAY;;YAEjE,IAAI;gBACF,IAAI,CAAC,aAAa,EAAE,CAAC;gBAErB,UAAU;gBACV,4FAA4F;gBAC5F,MAAM,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;aACtE;YACD,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;aAC9D;oBACO;gBACN,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;QACH,CAAC;KAAA;IAES,qBAAqB,CAAC,KAAc,EAAE,QAA0B,EAAE,OAAe;;QACzF,MAAM,MAAM,GAAmB,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,eAAe,0CAAG,OAAO,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,CAAA;YAAE,OAAO,CAAE,+CAA+C;QAEtH,2BAA2B;QAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAyB;YAC9D,OAAO,EAAE,EAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAC;YACzD,SAAS,EAAE,MAAA,MAAM,CAAC,SAAS,0CAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YACnD,OAAO,EAAE,MAAA,MAAM,CAAC,OAAO,0CAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAC7C,QAAQ,EAAE,EAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAC;SACnD,CAAC,CAAC;QACH,MAAM,YAAY,GAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,4DAA4D,OAAO,kBAAkB,QAAQ,CAAC,KAAK,GAAG,EAAE,MAAM,CAAC,CAAC;QAC7H,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,wBAAwB,EAAE;YAClE,WAAW,EAAE;gBACX,CAAC,EAAE,YAAY;aAChB;SACF,CAAC,CAAC;IAEL,CAAC;CACF,CAAA;AAxdC;IAAC,KAAK,EAAE;;4DAAoB;AAE5B;IAAC,KAAK,EAAE;;;sDAEP;AAID;IAAC,KAAK,EAAE;;;wDAEP;AAID;IAAC,KAAK,EAAE;;wEAAiC;AACzC;IAAC,KAAK,EAAE;;0DAAkB;AAC1B;IAAC,KAAK,EAAE;;8DAAsB;AAC9B;IAAC,KAAK,EAAE;;oEAA4B;AACpC;IAAC,KAAK,EAAE;;0DAAkB;AAC1B;IAAC,KAAK,EAAE;8BAAe,WAAW;6DAAM;AAExC;IAAC,KAAK,EAAE;8BAAsB,OAAO;qCAAP,OAAO;sDAEpC;AAMD;IAAC,MAAM,EAAE;;iEAAuF;AAEhG;IAAC,SAAS,CAAC,iBAAiB,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC;8BAAuB,iBAAiB;qEAAC;AAnD3E,uBAAuB;IAPnC,SAAS,CAAC;QACT,QAAQ,EAAE,+BAA+B;QACzC,WAAW,EAAE,gCAAgC;QAC7C,SAAS,EAAE,CAAC,gCAAgC,CAAC;QAC7C,SAAS,EAAE,CAAC,OAAO,CAAC;QACpB,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAuDY,QAAQ;QACiB,uBAAuB;QAC/B,eAAe;QACT,qBAAqB;QACvB,mBAAmB;QACzB,aAAa;QACV,gBAAgB;QACrB,kBAAkB;QACvB,OAAO;QACX,iBAAiB;GA/DtB,uBAAuB,CA4enC;SA5eY,uBAAuB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/sampling/sampling-strategy.form.js b/out-tsc/app/app/referential/strategy/sampling/sampling-strategy.form.js new file mode 100644 index 000000000..4de543d76 --- /dev/null +++ b/out-tsc/app/app/referential/strategy/sampling/sampling-strategy.form.js @@ -0,0 +1,1347 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { AppForm, AppFormUtils, DateUtils, DEFAULT_PLACEHOLDER_CHAR, EntityUtils, firstArrayValue, firstNotNilPromise, FormArrayHelper, fromDateISOString, isEmptyArray, isNil, isNilOrBlank, isNotEmptyArray, isNotNil, LocalSettingsService, ReferentialRef, ReferentialUtils, removeDuplicatesFromArray, SharedValidators, StatusIds, suggestFromArray, toBoolean, toNumber, } from '@sumaris-net/ngx-components'; +import { PmfmStrategy } from '../../services/model/pmfm-strategy.model'; +import { Program } from '../../services/model/program.model'; +import { AppliedPeriod, AppliedStrategy, StrategyDepartment, TaxonNameStrategy } from '../../services/model/strategy.model'; +import { ReferentialRefService } from '../../services/referential-ref.service'; +import { StrategyService } from '../../services/strategy.service'; +import { StrategyValidatorService } from '../../services/validator/strategy.validator'; +import { AcquisitionLevelCodes, autoCompleteFractions, FractionIdGroups, LocationLevelGroups, LocationLevelIds, ParameterLabelGroups, PmfmIds, ProgramPrivilegeIds, TaxonomicLevelIds, } from '../../services/model/model.enum'; +import { ProgramProperties } from '../../services/config/program.config'; +import { BehaviorSubject, merge } from 'rxjs'; +import { PmfmService } from '../../services/pmfm.service'; +import { SamplingStrategy } from '@app/referential/services/model/sampling-strategy.model'; +import { TaxonNameRef, TaxonUtils } from '@app/referential/services/model/taxon-name.model'; +import { TaxonNameService } from '@app/referential/services/taxon-name.service'; +import { PmfmStrategyValidatorService } from '@app/referential/services/validator/pmfm-strategy.validator'; +import { Pmfm } from '@app/referential/services/model/pmfm.model'; +import { filter, map } from 'rxjs/operators'; +import { environment } from '@environments/environment'; +import { TaxonNameRefService } from '@app/referential/services/taxon-name-ref.service'; +import moment from 'moment'; +import { Parameter } from '@app/referential/services/model/parameter.model'; +const MIN_PMFM_COUNT = 2; +const STRATEGY_LABEL_UI_PREFIX_REGEXP = new RegExp(/^\d\d [a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z] ___$/); +const STRATEGY_LABEL_UI_REGEXP = new RegExp(/^\d\d [a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z] \d\d\d$/); +let SamplingStrategyForm = class SamplingStrategyForm extends AppForm { + constructor(injector, validatorService, referentialRefService, pmfmService, strategyService, settings, taxonNameService, taxonNameRefService, pmfmStrategyValidator, cd, formBuilder) { + super(injector, validatorService.getFormGroup()); + this.validatorService = validatorService; + this.referentialRefService = referentialRefService; + this.pmfmService = pmfmService; + this.strategyService = strategyService; + this.settings = settings; + this.taxonNameService = taxonNameService; + this.taxonNameRefService = taxonNameRefService; + this.pmfmStrategyValidator = pmfmStrategyValidator; + this.cd = cd; + this.formBuilder = formBuilder; + this._$pmfmGroups = new BehaviorSubject(null); + this.initJobs = []; + this.$program = new BehaviorSubject(null); + this.labelMask = [/\d/, /\d/, ' ', /^[a-zA-Z]$/, /^[a-zA-Z]$/, /^[a-zA-Z]$/, /^[a-zA-Z]$/, /^[a-zA-Z]$/, /^[a-zA-Z]$/, /^[a-zA-Z]$/, ' ', /\d/, /\d/, /\d/]; + this.hasEffort = false; + this.autocompleteFilters = { + analyticReference: false, + location: false, + taxonName: false, + department: false, + // Pmfms + lengthPmfm: false, + weightPmfm: false, + maturityPmfm: false, + fractionPmfm: false + }; + this.showError = true; + this.i18nFieldPrefix = 'PROGRAM.STRATEGY.EDIT.'; + this.placeholderChar = DEFAULT_PLACEHOLDER_CHAR; + this.$filteredAnalyticsReferences = new BehaviorSubject(null); + this.$filteredLocations = new BehaviorSubject(null); + this.$filteredDepartments = new BehaviorSubject(null); + this.$filteredTaxonNames = new BehaviorSubject(null); + this.$filteredLengthPmfms = new BehaviorSubject(null); + this.$filteredWeightPmfms = new BehaviorSubject(null); + this.$filteredMaturityPmfms = new BehaviorSubject(null); + this.$filteredFractionPmfms = new BehaviorSubject(null); + this.$allFractions = new BehaviorSubject(null); + this.selectInputContent = AppFormUtils.selectInputContent; + this.mobile = this.settings.mobile; + this.debug = !environment.production; + // Add missing control + this.form.addControl('year', this.formBuilder.control(null, Validators.required)); + this.form.addControl('sex', this.formBuilder.control(null, Validators.required)); + this.form.addControl('age', this.formBuilder.control(null, Validators.required)); + // Init array helpers + this.initDepartmentsHelper(); + this.initTaxonNameHelper(); + this.initAppliedStrategiesHelper(); + this.initAppliedPeriodHelper(); + this.initPmfmStrategiesHelpers(); + // Start loading items + this.loadReferentialItems(); + } + get value() { + throw new Error('Not implemented! Please use getValue() instead, that is an async function'); + } + get pmfmGroups() { + return this._$pmfmGroups.getValue(); + } + set pmfmGroups(value) { + this._$pmfmGroups.next(value); + } + set program(value) { + this.setProgram(value); + } + get program() { + return this.$program.getValue(); + } + get hasSex() { + return this.form.get('sex').value; + } + get hasAge() { + return this.form.get('age').value; + } + get appliedStrategiesForm() { + return this.form.controls.appliedStrategies; + } + get appliedStrategyForm() { + return this.appliedStrategiesHelper && this.appliedStrategiesHelper.at(0); + } + get appliedPeriodsForm() { + const appliedStrategyForm = this.appliedStrategyForm; + return appliedStrategyForm && appliedStrategyForm.controls.appliedPeriods; + } + get departmentsFormArray() { + return this.form.controls.departments; + } + get taxonNamesFormArray() { + return this.form.controls.taxonNames; + } + get pmfmsForm() { + return this.form.controls.pmfms; + } + get minPmfmCount() { + return MIN_PMFM_COUNT; + } + get lengthPmfmsForm() { + return this.form.controls.lengthPmfms; + } + get weightPmfmsForm() { + return this.form.controls.weightPmfms; + } + get maturityPmfmsForm() { + return this.form.controls.maturityPmfms; + } + get fractionPmfmsForm() { + return this.form.controls.fractionPmfms; + } + get taxonNameStrategyControl() { + var _a; + return (_a = this.taxonNamesHelper) === null || _a === void 0 ? void 0 : _a.at(0); + } + get touched() { + return this.form.touched; + } + get untouched() { + return this.form.untouched; + } + enable(opts) { + super.enable(opts); + if (this.hasEffort) { + this.taxonNamesFormArray.disable(); + this.appliedStrategiesForm.disable(); + this.lengthPmfmsForm.disable(); + this.weightPmfmsForm.disable(); + this.maturityPmfmsForm.disable(); + const form = this.form; + form.get('analyticReference').disable(); + form.get('year').disable(); + form.get('label').disable(); + form.get('age').disable(); + form.get('sex').disable(); + // Allow user to update efforts, even past quarters - Fix issue OBSBIO-48 + this.appliedPeriodsForm.controls.map(control => { + const formGroupControl = control; + formGroupControl.enable(); + }); + } + } + disable(opts) { + super.disable(opts); + // FIXME fractions not disabled + this.fractionPmfmsHelper.disable(); + } + ngOnInit() { + super.ngOnInit(); + this.registerSubscription(this.form.get('age').valueChanges + .pipe(filter(() => this.loaded)) + .subscribe(hasAge => { + if (hasAge) { + this.loadFraction(); + this.fractionPmfmsForm.enable(); + } + else { + this.fractionPmfmsForm.disable(); + } + })); + this.taxonNamesFormArray.setAsyncValidators((_) => __awaiter(this, void 0, void 0, function* () { + this.loadFraction(); + return null; + })); + const dbTimeZone = this.strategyService.dbTimeZone; + this.appliedPeriodsForm.setAsyncValidators([ + (control) => __awaiter(this, void 0, void 0, function* () { + const appliedPeriodsForm = this.appliedPeriodsForm; + if (this.loading || appliedPeriodsForm.disabled) + return; + const minLength = 1; + const appliedPeriods = control.controls; + if (!isEmptyArray(appliedPeriods)) { + const values = appliedPeriods.filter(appliedPeriod => toNumber(appliedPeriod.value.acquisitionNumber, 0) >= 1); + if (!isEmptyArray(values) && values.length >= minLength) { + SharedValidators.clearError(control, 'minLength'); + return null; + } + } + if (this.form.touched) + appliedPeriodsForm.markAllAsTouched(); + if (this.form.dirty) + appliedPeriodsForm.markAsDirty(); + return { minLength: { minLength } }; + }), + // Check quarter acquisitionNumber is not + (control) => __awaiter(this, void 0, void 0, function* () { + const appliedPeriodsForm = this.appliedPeriodsForm; + if (this.loading || appliedPeriodsForm.disabled) + return; + const appliedPeriods = control.value; + const invalidQuarters = (appliedPeriods || []) + .map(AppliedPeriod.fromObject) + .filter(period => { + const quarter = period.startDate.tz(dbTimeZone).quarter(); + const quarterEffort = this.data && this.data.effortByQuarter && this.data.effortByQuarter[quarter]; + return quarterEffort && quarterEffort.hasRealizedEffort && (isNil(period.acquisitionNumber) || period.acquisitionNumber < 0); + }).map(period => period.startDate.tz(dbTimeZone).quarter()); + if (isNotEmptyArray(invalidQuarters)) { + if (this.form.touched) + appliedPeriodsForm.markAllAsTouched(); + if (this.form.dirty) + appliedPeriodsForm.markAsDirty(); + return { hasRealizedEffort: { quarters: invalidQuarters } }; + } + SharedValidators.clearError(control, 'hasRealizedEffort'); + return null; + }) + ]); + this.appliedPeriodsForm.setErrors({ minLength: true }); + const pmfmValidator = (_) => this.validatePmfmsForm(); + this.pmfmsForm.setAsyncValidators(pmfmValidator); + this.lengthPmfmsForm.setAsyncValidators(pmfmValidator); + this.weightPmfmsForm.setAsyncValidators(pmfmValidator); + this.maturityPmfmsForm.setAsyncValidators(pmfmValidator); + this.fractionPmfmsForm.setAsyncValidators(pmfmValidator); + // Force pmfms validation, when sex/age changes + this.registerSubscription(merge(this.form.get('sex').valueChanges, this.form.get('age').valueChanges) + .pipe(filter(() => !this.loading && !this.disabled && !this.disableEditionListeners)) + .subscribe(() => { + this.pmfmsForm.updateValueAndValidity(); + this.validatePmfmsForm(); + })); + this.registerSubscription(this.form.get('label').valueChanges + .pipe(filter(() => !this.loading && !this.disabled && !this.disableEditionListeners)) + .subscribe(label => this.onStrategyLabelChanged(label))); + this.registerSubscription(merge(this.form.get('year').valueChanges.pipe(map(_ => 'year')), this.taxonNameStrategyControl.valueChanges.pipe(map(_ => 'taxonName'))) + .pipe(filter(() => !this.loading && !this.disabled && !this.disableEditionListeners)) + .subscribe(event => this.generateLabelPrefix(event))); + const idControl = this.form.get('id'); + this.form.get('label').setAsyncValidators((control) => __awaiter(this, void 0, void 0, function* () { + var _a; + if (this.untouched) + return; + const programId = (_a = this.program) === null || _a === void 0 ? void 0 : _a.id; + if (isNil(programId)) + return; // Skip + const label = control.value; + const parts = label.split(' '); + if (parts.some(str => str.indexOf('_') !== -1)) { + return { required: true }; + } + if (label.includes('000')) { + return { zero: true }; + } + console.debug('[sampling-strategy-form] Checking of label is unique...'); + const exists = yield this.strategyService.existsByLabel(label, { + programId, + excludedIds: isNotNil(idControl.value) ? [idControl.value] : undefined, + fetchPolicy: 'network-only' // Force to check remotely + }); + if (exists) { + console.warn('[sampling-strategy-form] Label not unique!'); + return { unique: true }; + } + console.debug('[sampling-strategy-form] Checking of label is unique [OK]'); + SharedValidators.clearError(control, 'unique'); + SharedValidators.clearError(control, 'zero'); + })); + // taxonName autocomplete + this.registerAutocompleteField('taxonName', { + suggestFn: (value, filter) => this.suggestTaxonName(value, Object.assign(Object.assign({}, filter), { searchAttribute: 'name', statusIds: [StatusIds.ENABLE], levelIds: [TaxonomicLevelIds.SPECIES, TaxonomicLevelIds.SUBSPECIES] })), + attributes: ['name'], + columnNames: ['REFERENTIAL.NAME'], + mobile: this.mobile + }); + // Department autocomplete + this.registerAutocompleteField('department', { + suggestFn: (value, filter) => this.suggestDepartments(value, Object.assign(Object.assign({}, filter), { statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] })), + columnSizes: [4, 8], + mobile: this.mobile + }); + // appliedStrategy autocomplete + this.registerAutocompleteField('location', { + suggestFn: (value, filter) => this.suggestLocations(value, Object.assign(Object.assign({}, filter), { statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], levelIds: LocationLevelGroups.FISHING_AREA })), + mobile: this.mobile + }); + // Analytic reference autocomplete + this.registerAutocompleteField('analyticReference', { + suggestFn: (value, filter) => this.suggestAnalyticReferences(value, Object.assign(Object.assign({}, filter), { statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] })), + columnSizes: [4, 8], + mobile: this.mobile + }); + // length PMFM autocomplete + this.registerAutocompleteField('lengthPmfm', { + // suggestFn: (value, filter) => this.suggestLengthPmfms(value, { + suggestFn: (value, filter) => this.suggestLengthPmfms(value, Object.assign(Object.assign({}, filter), { statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], levelLabels: ParameterLabelGroups.LENGTH })), + attributes: ['name', 'unit.label', 'matrix.name', 'fraction.name', 'method.name'], + columnNames: ['REFERENTIAL.NAME', 'REFERENTIAL.PMFM.UNIT', 'REFERENTIAL.PMFM.MATRIX', 'REFERENTIAL.PMFM.FRACTION', 'REFERENTIAL.PMFM.METHOD'], + mobile: this.mobile + }); + // appliedStrategy autocomplete + this.registerAutocompleteField('weightPmfm', { + suggestFn: (value, filter) => this.suggestWeightPmfms(value, Object.assign(Object.assign({}, filter), { statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], levelLabels: ParameterLabelGroups.WEIGHT })), + attributes: ['name', 'unit.label', 'matrix.name', 'fraction.name', 'method.name'], + columnNames: ['REFERENTIAL.NAME', 'REFERENTIAL.PMFM.UNIT', 'REFERENTIAL.PMFM.MATRIX', 'REFERENTIAL.PMFM.FRACTION', 'REFERENTIAL.PMFM.METHOD'], + mobile: this.mobile + }); + // appliedStrategy autocomplete + this.registerAutocompleteField('maturityPmfm', { + suggestFn: (value, filter) => this.suggestMaturityPmfms(value, Object.assign(Object.assign({}, filter), { statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], levelLabels: ParameterLabelGroups.MATURITY })), + attributes: ['name', 'unit.label', 'matrix.name', 'fraction.name', 'method.name'], + columnNames: ['REFERENTIAL.NAME', 'REFERENTIAL.PMFM.UNIT', 'REFERENTIAL.PMFM.MATRIX', 'REFERENTIAL.PMFM.FRACTION', 'REFERENTIAL.PMFM.METHOD'], + mobile: this.mobile + }); + // Fraction autocomplete + this.registerAutocompleteField('fractionPmfm', { + suggestFn: (value, filter) => this.suggestFractionPmfms(value, Object.assign(Object.assign({}, filter), { statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], includedIds: FractionIdGroups.CALCIFIED_STRUCTURE })), + attributes: ['name'], + columnNames: ['REFERENTIAL.NAME'], + mobile: this.mobile + }); + } + setDisableEditionListeners(disable) { + this.disableEditionListeners = disable; + } + setProgram(program, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (program && this.program !== program) { + this.i18nFieldPrefix = 'PROGRAM.STRATEGY.EDIT.'; + const i18nSuffix = program.getProperty(ProgramProperties.I18N_SUFFIX) || ''; + this.i18nFieldPrefix += i18nSuffix !== 'legacy' && i18nSuffix || ''; + // Get location level ids + this.locationLevelIds = program.getPropertyAsNumbers(ProgramProperties.STRATEGY_EDITOR_LOCATION_LEVEL_IDS); + // Load items from historical data + this.loadFilteredItems(program); + this.$program.next(program); + if (!opts || opts.emitEvent !== false) { + this.markForCheck(); + } + } + }); + } + ready() { + const _super = Object.create(null, { + ready: { get: () => super.ready } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.ready.call(this); + yield Promise.all([ + firstNotNilPromise(this.$allFractions), + firstNotNilPromise(this._$pmfmGroups) + ]); + }); + } + loadFraction() { + var _a; + const taxonNameStrategies = this.hasAge && this.taxonNamesFormArray.value; + if (isNotEmptyArray(taxonNameStrategies) && ((_a = taxonNameStrategies[0]) === null || _a === void 0 ? void 0 : _a.taxonName)) { + const taxonNameStrategy = taxonNameStrategies[0]; + const fractionName = autoCompleteFractions[taxonNameStrategy.taxonName.id]; + if (fractionName) { + const fraction = this.$allFractions.value.find(f => f.label.toUpperCase() === fractionName.toUpperCase()); + this.fractionPmfmsForm.patchValue([{ fraction }]); + } + } + } + loadReferentialItems() { + return __awaiter(this, void 0, void 0, function* () { + // Make sure all enumerations has been override, by config + yield this.referentialRefService.ready(); + try { + console.debug('[sampling-strategy-form] Loading referential items...'); + yield Promise.all([ + this.referentialRefService.loadAll(0, 1000, null, null, { + entityName: 'Fraction', + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], + includedIds: FractionIdGroups.CALCIFIED_STRUCTURE + }) + .then(({ data }) => this.$allFractions.next(data)), + // Load pmfm by parameter groups + this.pmfmService.loadIdsGroupByParameterLabels() + .then(pmfmGroups => { + if (this.debug) + console.debug('[sampling-strategy-form] Pmfm groups loaded: ', pmfmGroups); + this._$pmfmGroups.next(pmfmGroups); + }) + ]); + } + catch (err) { + console.error('Error while loading referential items', err); + } + }); + } + loadFilteredItems(program) { + return __awaiter(this, void 0, void 0, function* () { + // Get load options, from program properties + const autoEnableFilter = program.getPropertyAsBoolean(ProgramProperties.STRATEGY_EDITOR_PREDOC_ENABLE); + const fetchSize = program.getPropertyAsInt(ProgramProperties.STRATEGY_EDITOR_PREDOC_FETCH_SIZE); + const now = Date.now(); + console.info(`[sampling-strategy-form] Loading filtered items... {autoEnableFilter: ${autoEnableFilter}, fetchSize: ${fetchSize}}`); + yield Promise.all([ + // Analytic References + this.strategyService.loadStrategiesReferentials(program.id, 'AnalyticReference', undefined, 0, fetchSize) + .then((analyticReferences) => { + analyticReferences = removeDuplicatesFromArray(analyticReferences, 'id'); + this.$filteredAnalyticsReferences.next(analyticReferences); + this.autocompleteFilters.analyticReference = autoEnableFilter && isNotEmptyArray(analyticReferences); // Enable filtering, if need by program + }) + .catch(err => { + console.debug('[sampling-strategy-form] Error while loading filtered analyticReferences: ', err); + this.autocompleteFilters.analyticReference = false; + }), + // Departments + this.strategyService.loadStrategiesReferentials(program.id, 'Department', undefined, 0, fetchSize) + .then((departments) => { + this.$filteredDepartments.next(departments); + this.autocompleteFilters.department = autoEnableFilter && isNotEmptyArray(departments); // Enable filtering, if need by program + }) + .catch(err => { + console.debug('[sampling-strategy-form] Error while loading filtered departments: ', err); + this.autocompleteFilters.department = false; + }), + // Locations + this.strategyService.loadStrategiesReferentials(program.id, 'Location', 'SEA', 0, fetchSize) + .then(locations => { + this.$filteredLocations.next(locations); + this.autocompleteFilters.location = autoEnableFilter && isNotEmptyArray(locations); // Enable filtering, if need by program + }) + .catch(err => { + console.debug('[sampling-strategy-form] Error while loading filtered locations: ', err); + this.autocompleteFilters.location = false; + }), + // Taxons + this.strategyService.loadStrategiesReferentials(program.id, 'TaxonName', undefined, 0, fetchSize) + .then(taxons => { + this.$filteredTaxonNames.next(taxons); + this.autocompleteFilters.taxonName = autoEnableFilter && isNotEmptyArray(taxons); // Enable filtering, if need by program + }) + .catch(err => { + console.debug('[sampling-strategy-form] Error while loading filtered taxonNames: ', err); + this.autocompleteFilters.taxonName = false; + }), + // Length pmfms + /*this.strategyService.loadStrategiesReferentials(program.id, 'Pmfm', undefined, 0, fetchSize, 'name') + .then(lengthPmfms => { + this.$filteredLengthPmfms.next(lengthPmfms); + this.autocompleteFilters.lengthPmfm = isNotEmptyArray(lengthPmfms) && autoEnableFilter; // Enable filtering, if need by program + }), + + // Weight pmfms + this.strategyService.loadStrategiesReferentials(program.id, 'Pmfm', undefined, 0, fetchSize, 'name') + .then(weightPmfms => { + this.$filteredWeightPmfms.next(weightPmfms); + this.autocompleteFilters.weightPmfm = isNotEmptyArray(weightPmfms) && autoEnableFilter; // Enable filtering, if need by program + }), + + // Maturity pmfms + this.strategyService.loadStrategiesReferentials(program.id, 'Pmfm', undefined, 0, fetchSize, 'name') + .then(maturityPmfms => { + this.$filteredMaturityPmfms.next(maturityPmfms); + this.autocompleteFilters.maturityPmfm = isNotEmptyArray(maturityPmfms) && autoEnableFilter; // Enable filtering, if need by program + }),*/ + // Fractions pmfm + this.strategyService.loadStrategiesReferentials(program.id, 'Fraction', undefined, 0, fetchSize) + .then((fractions) => { + this.$filteredFractionPmfms.next(fractions); + this.autocompleteFilters.fractionPmfm = autoEnableFilter && isNotEmptyArray(fractions); // Enable filtering, if need by program + }) + .catch(err => { + console.debug('[sampling-strategy-form] Error while loading filtered fractions: ', err); + this.autocompleteFilters.fractionPmfm = false; + }) + ]); + console.info(`[sampling-strategy-form] Loading filtered items [OK] in ${Date.now() - now}ms`); + this.markForCheck(); + }); + } + getAnalyticReferenceByLabel(label) { + return __awaiter(this, void 0, void 0, function* () { + if (isNilOrBlank(label)) + return undefined; + try { + const res = yield this.strategyService.loadAllAnalyticReferences(0, 1, 'label', 'desc', { label }); + return firstArrayValue(res && res.data || []); + } + catch (err) { + console.debug('Error on load AnalyticReference'); + } + }); + } + removeAppliedStrategies(index) { + // first element AND more than one element + // this.appliedPeriodsForm.controls become empty array + let appliedPeriodsFormControls = null; + if (index === 0 && this.appliedStrategiesHelper.size() > 1) { + appliedPeriodsFormControls = this.appliedPeriodsForm.controls; + } + this.appliedStrategiesHelper.removeAt(index); + if (index === 0) { + if (appliedPeriodsFormControls) { + this.appliedPeriodsForm.controls = appliedPeriodsFormControls; + } + } + } + /** + * Select text that can be changed, using the text mask + * + * @param input + */ + selectMask(input) { + if (!this.labelMask) + input.select(); + const taxonNameControl = this.taxonNamesHelper.at(0); + const endIndex = this.labelMask.length; + if (taxonNameControl.hasError('cannotComputeTaxonCode') || taxonNameControl.hasError('uniqueTaxonCode')) { + input.setSelectionRange(3, endIndex, 'backward'); + } + else { + input.setSelectionRange(11, endIndex, 'backward'); + } + } + toggleFilter(fieldName, field) { + this.autocompleteFilters[fieldName] = !this.autocompleteFilters[fieldName]; + this.markForCheck(); + if (field) + field.reloadItems(); + } + /** + * Suggest autocomplete values + * + * @param value + * @param filter - filters to apply + */ + suggestDepartments(value, filter) { + return __awaiter(this, void 0, void 0, function* () { + const currentControlValue = ReferentialUtils.isNotEmpty(value) ? value : null; + const newValue = currentControlValue ? '*' : value; + // Excluded existing locations, BUT keep the current control value + const excludedIds = (this.departmentsFormArray.value || []) + .map(pmfmDepartment => pmfmDepartment === null || pmfmDepartment === void 0 ? void 0 : pmfmDepartment.department) + .filter(ReferentialUtils.isNotEmpty) + .filter(item => !currentControlValue || currentControlValue !== item) + .map(item => parseInt(item.id)); + if (this.autocompleteFilters.department) { + return suggestFromArray(this.$filteredDepartments.getValue(), newValue, Object.assign(Object.assign({}, filter), { excludedIds })); + } + else { + return this.referentialRefService.suggest(newValue, Object.assign(Object.assign({}, filter), { excludedIds, entityName: 'Department' })); + } + }); + } + suggestTaxonName(value, filter) { + return __awaiter(this, void 0, void 0, function* () { + if (this.autocompleteFilters.taxonName) { + return suggestFromArray(this.$filteredTaxonNames.getValue(), value, filter); + } + else { + return this.taxonNameRefService.suggest(value, filter); + } + }); + } + /** + * Suggest autocomplete values + * + * @param value + * @param filter - filters to apply + */ + suggestLocations(value, filter) { + return __awaiter(this, void 0, void 0, function* () { + filter = Object.assign({ levelIds: this.locationLevelIds || [LocationLevelIds.DIVISION_ICES] }, filter); + // DEBUG + //console.debug("Suggest locations: ", filter); + if (this.autocompleteFilters.location) { + return suggestFromArray(this.$filteredLocations.getValue(), value, filter); + } + else { + return this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { entityName: 'Location' })); + } + }); + } + /** + * Suggest autocomplete values + * + * @param value + * @param filter - filters to apply + */ + suggestAnalyticReferences(value, filter) { + return __awaiter(this, void 0, void 0, function* () { + if (this.autocompleteFilters.analyticReference) { + return suggestFromArray(this.$filteredAnalyticsReferences.getValue(), value, filter); + } + else { + return this.strategyService.suggestAnalyticReferences(value, filter); + } + }); + } + /** + * Suggest autocomplete values, for length pmfms + * + * @param value + * @param filter - filters to apply + */ + suggestLengthPmfms(value, filter) { + return __awaiter(this, void 0, void 0, function* () { + const currentControlValue = ReferentialUtils.isNotEmpty(value) ? value : null; + const newValue = currentControlValue ? '*' : value; + // Excluded existing locations, BUT keep the current control value + const excludedIds = (this.lengthPmfmsForm.value || []) + .map(ps => ps === null || ps === void 0 ? void 0 : ps.pmfm) + .filter(ReferentialUtils.isNotEmpty) + .filter(item => !currentControlValue || currentControlValue !== item) + .map(item => parseInt(item.id)); + if (this.autocompleteFilters.lengthPmfm) { + return suggestFromArray(this.$filteredLengthPmfms.value, value, Object.assign(Object.assign({}, filter), { excludedIds })); + } + else { + return this.pmfmService.suggest(newValue, Object.assign(Object.assign({}, filter), { excludedIds, entityName: Pmfm.ENTITY_NAME }), 'name'); + } + }); + } + /** + * Suggest autocomplete values, for weight pmfms + * + * @param value + * @param filter - filters to apply + */ + suggestWeightPmfms(value, filter) { + return __awaiter(this, void 0, void 0, function* () { + const currentControlValue = ReferentialUtils.isNotEmpty(value) ? value : null; + const newValue = currentControlValue ? '*' : value; + // Excluded existing locations, BUT keep the current control value + const excludedIds = (this.weightPmfmsForm.value || []) + .map(ps => ps === null || ps === void 0 ? void 0 : ps.pmfm) + .filter(ReferentialUtils.isNotEmpty) + .filter(item => !currentControlValue || currentControlValue !== item) + .map(item => parseInt(item.id)); + if (this.autocompleteFilters.weightPmfm) { + return suggestFromArray(this.$filteredWeightPmfms.value, value, Object.assign(Object.assign({}, filter), { excludedIds })); + } + else { + return this.pmfmService.suggest(newValue, Object.assign(Object.assign({}, filter), { excludedIds, entityName: Pmfm.ENTITY_NAME }), 'name'); + } + }); + } + /** + * Suggest autocomplete values, for maturity pmfms + * + * @param value + * @param filter - filters to apply + */ + suggestMaturityPmfms(value, filter) { + return __awaiter(this, void 0, void 0, function* () { + const currentControlValue = ReferentialUtils.isNotEmpty(value) ? value : null; + const newValue = currentControlValue ? '*' : value; + // Excluded existing locations, BUT keep the current control value + const excludedIds = (this.maturityPmfmsForm.value || []) + .map(ps => ps === null || ps === void 0 ? void 0 : ps.pmfm) + .filter(ReferentialUtils.isNotEmpty) + .filter(item => !currentControlValue || currentControlValue !== item) + .map(item => parseInt(item.id)); + if (this.autocompleteFilters.maturityPmfm) { + return suggestFromArray(this.$filteredMaturityPmfms.value, value, filter); + } + else { + return this.pmfmService.suggest(newValue, Object.assign(Object.assign({}, filter), { excludedIds, entityName: Pmfm.ENTITY_NAME }), 'name'); + } + }); + } + /** + * Suggest autocomplete values, for age fraction + * + * @param value + * @param filter - filters to apply + */ + suggestFractionPmfms(value, filter) { + return __awaiter(this, void 0, void 0, function* () { + const currentControlValue = ReferentialUtils.isNotEmpty(value) ? value : null; + const newValue = currentControlValue ? '*' : value; + // Excluded existing locations, BUT keep the current control value + const excludedIds = (this.fractionPmfmsForm.value || []) + .map(ps => ps === null || ps === void 0 ? void 0 : ps.fraction) + .filter(ReferentialUtils.isNotEmpty) + .filter(item => !currentControlValue || currentControlValue !== item) + .map(item => parseInt(item.id)); + if (this.autocompleteFilters.fractionPmfm) { + return suggestFromArray(this.$filteredFractionPmfms.value, newValue, Object.assign(Object.assign({}, filter), { excludedIds })); + } + else { + const items = yield firstNotNilPromise(this.$allFractions); + return suggestFromArray(items, newValue, Object.assign(Object.assign({}, filter), { excludedIds })); + } + }); + } + setValue(data, opts) { + const _super = Object.create(null, { + setValue: { get: () => super.setValue } + }); + var _a; + return __awaiter(this, void 0, void 0, function* () { + console.debug('[sampling-strategy-form] Setting Strategy value', data); + if (!data) + return; + this.markAsLoading(); + try { + const isNew = isNil(data.id); + this.data = SamplingStrategy.fromObject(data); + // Fill efforts (need by validator) + this.hasEffort = this.data.hasRealizedEffort; + // Make sure to have (at least) one department + data.departments = data.departments && data.departments.length ? data.departments : [null]; + // Resize strategy department array + this.departmentsHelper.resize(Math.max(1, data.departments.length)); + data.appliedStrategies = isNotEmptyArray(data.appliedStrategies) ? data.appliedStrategies : [new AppliedStrategy()]; + // Resize strategy department array + this.appliedStrategiesHelper.resize(Math.max(1, data.appliedStrategies.length)); + data.taxonNames = data.taxonNames && data.taxonNames.length ? data.taxonNames : [null]; + // Resize pmfm strategy array + this.taxonNamesHelper.resize(Math.max(1, data.taxonNames.length)); + // APPLIED_PERIODS + // get model appliedPeriods which are stored in first applied strategy + const dbTimeZone = this.strategyService.dbTimeZone; + const appliedStrategyWithPeriods = firstArrayValue((data.appliedStrategies || []).filter(as => as && isNotEmptyArray(as.appliedPeriods))) + || firstArrayValue(data.appliedStrategies || []); + const appliedPeriods = appliedStrategyWithPeriods.appliedPeriods || []; + // Find year, from applied period, or use current + const year = firstArrayValue(appliedPeriods.map(ap => ap.startDate.tz(dbTimeZone).year())) || DateUtils.moment().year(); + // format periods for applied period in view and init default period by quarter if no set + appliedStrategyWithPeriods.appliedPeriods = [1, 2, 3, 4].map(quarter => { + const startMonth = (quarter - 1) * 3 + 1; + // INFO CLT : #IMAGINE-643 [Ligne de plan] Décalage heure de début et de fin des efforts + // We use local timezone for Imagine instead of utc + const startDate = fromDateISOString(`${year}-${startMonth.toString().padStart(2, '0')}-01T00:00:00.000`).tz(dbTimeZone); + const endDate = startDate.clone().add(2, 'month').endOf('month').endOf('day'); + // Find the existing entity, or create a new one + const appliedPeriod = appliedPeriods && appliedPeriods.find(period => period.startDate.month() === startDate.month()) + || AppliedPeriod.fromObject({ acquisitionNumber: undefined }); + appliedPeriod.startDate = startDate; + appliedPeriod.endDate = endDate; + return appliedPeriod; + }); + // Resize applied periods array + this.appliedPeriodsHelper.resize(4); + // Get first period + const firstAppliedPeriod = firstArrayValue(appliedStrategyWithPeriods.appliedPeriods); + data.year = firstAppliedPeriod ? firstAppliedPeriod.startDate : moment(); + data.pmfms = data.pmfms || []; + // If new + if (isNew) { + // pmfms = [null, null]; + data.sex = null; + data.age = null; + } + else { + data.label = ((_a = data.label) === null || _a === void 0 ? void 0 : _a.length) === 12 + ? data.label.substring(0, 2).concat(' ').concat(data.label.substring(2, 9)).concat(' ').concat(data.label.substring(9, 12)) + : data.label; + data.age = data.pmfms.some(p => { var _a; return ((_a = p.parameter) === null || _a === void 0 ? void 0 : _a.label) && ParameterLabelGroups.AGE.includes(p.parameter.label); }); + data.sex = data.pmfms.some(p => p.pmfmId && p.pmfmId === PmfmIds.SEX); + console.debug('[sampling-strategy-form] Has sex ?', data.sex, PmfmIds.SEX); + } + const pmfmGroups = yield firstNotNilPromise(this._$pmfmGroups, { stop: this.destroySubject }); + data.lengthPmfms = this.getPmfmStrategiesByGroup(data.pmfms, pmfmGroups.LENGTH, ParameterLabelGroups.LENGTH); + data.weightPmfms = this.getPmfmStrategiesByGroup(data.pmfms, pmfmGroups.WEIGHT, ParameterLabelGroups.WEIGHT); + data.maturityPmfms = this.getPmfmStrategiesByGroup(data.pmfms, pmfmGroups.MATURITY, ParameterLabelGroups.MATURITY); + data.fractionPmfms = (data.pmfms || []) + .filter(p => p.fraction && !p.pmfm) + .map(ps => { + ps.fraction = this.$allFractions.value.find(fraction => fraction.id === ps.fraction.id); + return ps; + }); + // Min size = 1 + if (isEmptyArray(data.lengthPmfms)) + data.lengthPmfms = [new PmfmStrategy()]; + if (isEmptyArray(data.weightPmfms)) + data.weightPmfms = [new PmfmStrategy()]; + if (isEmptyArray(data.maturityPmfms)) + data.maturityPmfms = [new PmfmStrategy()]; + if (isEmptyArray(data.fractionPmfms)) + data.fractionPmfms = [new PmfmStrategy()]; + this.lengthPmfmsHelper.resize(Math.max(1, data.lengthPmfms.length)); + this.weightPmfmsHelper.resize(Math.max(1, data.weightPmfms.length)); + this.maturityPmfmsHelper.resize(Math.max(1, data.maturityPmfms.length)); + this.fractionPmfmsHelper.resize(Math.max(1, data.fractionPmfms.length)); + yield _super.setValue.call(this, data, opts); + } + catch (err) { + this.error = err && err.message || err; + console.error(err); + } + finally { + this.markAsPristine(); + this.markAsLoaded(); + } + }); + } + getValue() { + return __awaiter(this, void 0, void 0, function* () { + // DEBUG + console.debug('[sampling-strategy-form] getValue()'); + const json = this.form.getRawValue(); + const target = SamplingStrategy.fromObject(json); + target.name = target.label || target.name; + target.label = target.label || target.name; + target.description = target.label || target.description; + target.analyticReference = target.analyticReference && EntityUtils.isNotEmpty(target.analyticReference, 'label') ? + target.analyticReference['label'] : + EntityUtils.isNotEmpty(this.form.get('analyticReference').value, 'label') ? + this.form.get('analyticReference').value.label : + this.form.get('analyticReference').value; + // get taxonName and + target.taxonNames = (this.form.controls.taxonNames.value || []).map(TaxonNameStrategy.fromObject); + target.taxonNames.forEach(taxonNameStrategy => { + delete taxonNameStrategy.strategyId; // Not need when saved + taxonNameStrategy.priorityLevel = taxonNameStrategy.priorityLevel || 1; + taxonNameStrategy.taxonName = TaxonNameRef.fromObject(Object.assign(Object.assign({}, taxonNameStrategy.taxonName), { taxonGroupIds: undefined })); + }); + // Apply observer privilege to departments + const observerPrivilege = ReferentialRef.fromObject({ id: ProgramPrivilegeIds.OBSERVER, entityName: 'ProgramPrivilege' }); + target.departments = (target.departments || []).map(StrategyDepartment.fromObject); + target.departments.forEach(department => { + department.privilege = observerPrivilege; + }); + // Compute year + const dbTimeZone = this.strategyService.dbTimeZone; + const year = isNotNil(this.form.controls.year.value) ? DateUtils.moment(this.form.controls.year.value).tz(dbTimeZone).year() : DateUtils.moment().year(); + // Fishing Area + Efforts -------------------------------------------------------------------------------------------- + const appliedStrategyWithPeriods = firstArrayValue((target.appliedStrategies || []).filter(as => isNotEmptyArray(as.appliedPeriods))); + if (appliedStrategyWithPeriods) { + appliedStrategyWithPeriods.appliedPeriods = (appliedStrategyWithPeriods && appliedStrategyWithPeriods.appliedPeriods || []) + // Exclude period without acquisition number + .filter(period => isNotNil(period.acquisitionNumber)) + .map(ap => { + // Set year (a quarter should be already set) + ap.startDate.tz(dbTimeZone).set('year', year); + ap.endDate.tz(dbTimeZone).set('year', year); + ap.appliedStrategyId = appliedStrategyWithPeriods.id; + return ap; + }); + // Clean periods, on each other applied strategies + (target.appliedStrategies || []) + .filter(as => as !== appliedStrategyWithPeriods) + .forEach(appliedStrategy => appliedStrategy.appliedPeriods = []); + } + // PMFM + Fractions ------------------------------------------------------------------------------------------------- + let pmfmStrategies = [ + // Add tag id Pmfm + { pmfmId: PmfmIds.TAG_ID, isMandatory: false, id: this.getPmfmStrategyIdByPmfmId(PmfmIds.TAG_ID) }, + // Add dressing Pmfm + { pmfmId: PmfmIds.DRESSING, isMandatory: true, id: this.getPmfmStrategyIdByPmfmId(PmfmIds.DRESSING) }, + // Weight + ...target.weightPmfms, + // Length + ...target.lengthPmfms + ]; + // Add SEX Pmfm + if (target.sex) { + pmfmStrategies = pmfmStrategies.concat([ + { pmfmId: PmfmIds.SEX, id: this.getPmfmStrategyIdByPmfmId(PmfmIds.SEX) }, + ...target.maturityPmfms + ]); + } + // Add AGE + fraction Pmfms + if (target.age) { + // Load AGE parameter + const ageParameter = yield this.referentialRefService.loadByLabel(ParameterLabelGroups.AGE[0], Parameter.ENTITY_NAME); + target.fractionPmfms.forEach(ps => ps.parameter = ageParameter); + pmfmStrategies = pmfmStrategies.concat(...target.fractionPmfms); + } + // Fill PmfmStrategy defaults + let rankOrder = 1; + target.pmfms = pmfmStrategies + .filter(isNotNil) + .map(PmfmStrategy.fromObject) + .map(pmfmStrategy => { + pmfmStrategy.strategyId = pmfmStrategy.id; + pmfmStrategy.acquisitionLevel = AcquisitionLevelCodes.SAMPLE; + pmfmStrategy.acquisitionNumber = 1; + pmfmStrategy.isMandatory = toBoolean(pmfmStrategy.isMandatory, false); + pmfmStrategy.rankOrder = rankOrder++; + return pmfmStrategy; + }) + // Remove if empty + .filter(p => isNotNil(p.pmfmId) || isNotNil(p.pmfm) || isNotNil(p.parameter) || isNotNil(p.matrix) || isNotNil(p.fraction) || isNotNil(p.method)); + return target; + }); + } + getPmfmStrategyIdByPmfmId(pmfmId) { + var _a, _b; + return ((_b = (_a = this.data) === null || _a === void 0 ? void 0 : _a.pmfms.find(ps => ps.pmfmId === pmfmId)) === null || _b === void 0 ? void 0 : _b.id) || undefined; + } + onStrategyLabelChanged(label) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (this.disableEditionListeners || this.loading) + return; + const labelControl = this.form.get('label'); + label = label || labelControl.value; + if (isNilOrBlank(label)) + return; // Skip is empty + const taxonNameStrategyControl = this.taxonNameStrategyControl; + const taxonCode = label.substring(3, 10); + const taxonName = (_a = taxonNameStrategyControl === null || taxonNameStrategyControl === void 0 ? void 0 : taxonNameStrategyControl.value) === null || _a === void 0 ? void 0 : _a.taxonName; + // Only prefix has been set + if (label.match(STRATEGY_LABEL_UI_PREFIX_REGEXP)) { + const isUnique = yield this.isTaxonNameUnique(taxonCode, taxonName === null || taxonName === void 0 ? void 0 : taxonName.id); + if (!isUnique) { + taxonNameStrategyControl.setErrors({ uniqueTaxonCode: true }); + } + else { + SharedValidators.clearError(taxonNameStrategyControl, 'uniqueTaxonCode'); + } + labelControl.setErrors({ pattern: true }); + } + // Full label filled + else if (label.match(STRATEGY_LABEL_UI_REGEXP)) { + const isUnique = yield this.isTaxonNameUnique(taxonCode, taxonName === null || taxonName === void 0 ? void 0 : taxonName.id); + if (!isUnique) { + //taxonNameControl.setErrors({ uniqueTaxonCode: true }); + } + else { + SharedValidators.clearError(taxonNameStrategyControl, 'uniqueTaxonCode'); + labelControl.setValue(label === null || label === void 0 ? void 0 : label.replace(/\s/g, '').toUpperCase(), { emitEvent: false }); + } + } + }); + } + isTaxonNameUnique(label, currentViewTaxonId) { + return __awaiter(this, void 0, void 0, function* () { + if (isNilOrBlank(label)) + return true; + const taxonNameFilter = { + searchAttribute: 'name', + excludedIds: [currentViewTaxonId], + statusIds: [StatusIds.ENABLE], + levelIds: [TaxonomicLevelIds.SPECIES, TaxonomicLevelIds.SUBSPECIES], + withSynonyms: false + }; + const [first, second] = yield Promise.all([ + // Try without parenthesis + this.taxonNameService.countAll(Object.assign(Object.assign({}, taxonNameFilter), { searchText: TaxonUtils.generateNameSearchPatternFromLabel(label, false) })), + // Try WITH parenthesis + this.taxonNameService.countAll(Object.assign(Object.assign({}, taxonNameFilter), { searchText: TaxonUtils.generateNameSearchPatternFromLabel(label, true) })) + ]); + return (first + second) === 0; + }); + } + generateLabelPrefix(event) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; + return __awaiter(this, void 0, void 0, function* () { + const labelControl = this.form.get('label'); + if (this.loading || labelControl.disabled) + return; // Skip + if (this.debug) + console.debug('[sampling-strategy-fom] Generating label prefix, from event: ' + event); + const yearCode = this.yearCode; + if (isNilOrBlank(yearCode) || !this.program) + return; // Skip + let errors; + const taxonNameStrategyControl = this.taxonNameStrategyControl; + if (!taxonNameStrategyControl) + return; + const currentViewTaxon = (_a = taxonNameStrategyControl.value) === null || _a === void 0 ? void 0 : _a.taxonName; + const currentViewTaxonName = (_c = (_b = taxonNameStrategyControl.value) === null || _b === void 0 ? void 0 : _b.taxonName) === null || _c === void 0 ? void 0 : _c.name; + const storedDataTaxonName = (_e = (_d = this.data.taxonNames[0]) === null || _d === void 0 ? void 0 : _d.taxonName) === null || _e === void 0 ? void 0 : _e.name; + const taxonCode = currentViewTaxonName && TaxonUtils.generateLabelFromName(currentViewTaxonName); + const isUnique = yield this.isTaxonNameUnique(taxonCode, currentViewTaxon === null || currentViewTaxon === void 0 ? void 0 : currentViewTaxon.id); + const formRawValue = this.form.getRawValue(); + const previousFormTaxonName = (_h = (_g = (_f = formRawValue.taxonNames[0]) === null || _f === void 0 ? void 0 : _f.taxonName) === null || _g === void 0 ? void 0 : _g.name) === null || _h === void 0 ? void 0 : _h.clone; + const previousFormYear = (_j = fromDateISOString(formRawValue.year)) === null || _j === void 0 ? void 0 : _j.format('YY'); + if (!taxonCode) { + errors = { cannotComputeTaxonCode: true }; + } + else if (!isUnique) { + errors = { uniqueTaxonCode: true }; + } + // Skip generate label when there is no update on year or taxon + if (currentViewTaxonName && currentViewTaxonName === previousFormTaxonName && yearCode && yearCode === previousFormYear) + return; + // Update label mask + // @ts-ignore + this.labelMask = yearCode.split('') + .concat([' ', /^[a-zA-Z]$/, /^[a-zA-Z]$/, /^[a-zA-Z]$/, /^[a-zA-Z]$/, /^[a-zA-Z]$/, /^[a-zA-Z]$/, /^[a-zA-Z]$/, ' ', /\d/, /\d/, /\d/]); + if (errors) { + // if (this.data.label && this.data.label.substring(0, 2) === yearMask && this.data.label.substring(2, 9) === labelControl.value.toUpperCase().substring(2, 9)) { + // labelControl.setValue(this.data.label); + // } else { + const computedLabel = `${yearCode} `; + if (!taxonNameStrategyControl.errors) { + if ((this.data.label && this.data.label === labelControl.value) && (storedDataTaxonName && storedDataTaxonName === currentViewTaxonName)) { + // When function is called back after save, we do nothing + } + else { + labelControl.setValue(computedLabel); + } + } + taxonNameStrategyControl.setErrors(errors); + // } + } + else { + //const computedLabel = this.program && (await this.strategyService.computeNextLabel(this.program.id, `${yearMask}${label}`, 3)); + SharedValidators.clearError(taxonNameStrategyControl, 'cannotComputeTaxonCode'); + //console.info('[sampling-strategy-form] Computed label: ' + computedLabel); + //labelControl.setValue(computedLabel); + // if current date and taxon code are same than stored data, set stored data + const formTaxonCode = (_k = labelControl.value) === null || _k === void 0 ? void 0 : _k.replace(/\s/g, '').toUpperCase().substring(2, 9); + if (this.data.label && this.data.label.substring(0, 2) === yearCode && this.data.label.substring(2, 9) === formTaxonCode && formTaxonCode === taxonCode) { + // Complete label with '___' when increment isn't set in order to throw a warning in validator + if (this.data.label.length === 9) { + labelControl.setValue(this.data.label + '___'); + } + else { + labelControl.setValue(this.data.label); + } + } + else { + // Complete label with '___' when increment isn't set in order to throw a warning in validator + labelControl.setValue(`${yearCode} ${taxonCode} ___`); + } + } + labelControl.markAsDirty(); + }); + } + get canGenerateLabel() { + var _a; + return !this.hasEffort && !this.loading && this.program && this.year && ((_a = this.taxonNameStrategyControl.value) === null || _a === void 0 ? void 0 : _a.taxonName) && true; + } + generateLabelIncrement() { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + if (this.loading) + return; // Skip + const yearCode = this.yearCode; + const programId = (_a = this.program) === null || _a === void 0 ? void 0 : _a.id; + if (isNilOrBlank(yearCode) || isNil(programId)) + return; // Skip + // Get label, or computed from label + const labelControl = this.form.get('label'); + const taxonNameStrategyControl = this.taxonNameStrategyControl; + let inputLabel = labelControl.value; + inputLabel = inputLabel && inputLabel.replace(/\s/g, '').toUpperCase(); + let taxonCode = inputLabel && inputLabel.substring(2, 9); + // No taxon code + if (isNilOrBlank(taxonCode)) { + const taxonName = (_b = taxonNameStrategyControl.value) === null || _b === void 0 ? void 0 : _b.taxonName; + if (taxonName) { + taxonCode = TaxonUtils.generateLabelFromName(taxonName.name); + if (!taxonCode) { + taxonNameStrategyControl.setErrors({ cannotComputeTaxonCode: true }); + return; + } + const isUnique = yield this.isTaxonNameUnique(taxonCode, taxonName.id); + if (!isUnique) { + taxonNameStrategyControl.setErrors({ uniqueTaxonCode: true }); + return; + } + } + } + SharedValidators.clearError(taxonNameStrategyControl, 'uniqueTaxonCode'); + SharedValidators.clearError(taxonNameStrategyControl, 'cannotComputeTaxonCode'); + const labelPrefix = yearCode + taxonCode.toUpperCase(); + const label = yield this.strategyService.computeNextLabel(programId, labelPrefix, 3); + labelControl.setValue(label); + }); + } + // TaxonName Helper ----------------------------------------------------------------------------------------------- + initTaxonNameHelper() { + // appliedStrategies => appliedStrategies.location ? + this.taxonNamesHelper = new FormArrayHelper(FormArrayHelper.getOrCreateArray(this.formBuilder, this.form, 'taxonNames'), (ts) => this.validatorService.getTaxonNameStrategyControl(ts), (t1, t2) => EntityUtils.equals(t1.taxonName, t2.taxonName, 'name'), value => isNil(value) && isNil(value.taxonName), { + allowEmptyArray: false + }); + // Create at least one fishing Area + if (this.taxonNamesHelper.size() === 0) { + this.taxonNamesHelper.resize(1); + } + } + // appliedStrategies Helper ----------------------------------------------------------------------------------------------- + initAppliedStrategiesHelper() { + // appliedStrategiesHelper formControl can't have common validator since quarters efforts are optional + this.appliedStrategiesHelper = new FormArrayHelper(FormArrayHelper.getOrCreateArray(this.formBuilder, this.form, 'appliedStrategies'), (appliedStrategy) => this.validatorService.getAppliedStrategiesControl(appliedStrategy), (s1, s2) => EntityUtils.equals(s1.location, s2.location, 'label'), value => isNil(value) && isNil(value.location), { + allowEmptyArray: false + }); + // Create at least one fishing Area + if (this.appliedStrategiesHelper.size() === 0) { + this.appliedStrategiesHelper.resize(1); + } + } + addAppliedStrategy() { + this.appliedStrategiesHelper.add(new AppliedStrategy()); + } + addLengthPmfm() { + this.lengthPmfmsHelper.add(new PmfmStrategy()); + } + addWeightPmfm() { + this.weightPmfmsHelper.add(new PmfmStrategy()); + } + addMaturityPmfm() { + this.maturityPmfmsHelper.add(new PmfmStrategy()); + } + removeLengthPmfm(idx) { + this.lengthPmfmsHelper.removeAt(idx); + this.validatePmfmsForm(); + } + removeWeightPmfm(idx) { + this.weightPmfmsHelper.removeAt(idx); + this.validatePmfmsForm(); + } + removeMaturityPmfm(idx) { + this.maturityPmfmsHelper.removeAt(idx); + this.validatePmfmsForm(); + } + // appliedStrategies Helper ----------------------------------------------------------------------------------------------- + initAppliedPeriodHelper() { + // Use the first applied strategy form group (created just before) + const appliedStrategyForm = this.appliedStrategiesHelper.at(0); + // appliedStrategyForm formControl can't have common validator since quarters efforts are optional + this.appliedPeriodsHelper = new FormArrayHelper(FormArrayHelper.getOrCreateArray(this.formBuilder, appliedStrategyForm, 'appliedPeriods'), (appliedPeriod) => this.validatorService.getAppliedPeriodsControl(appliedPeriod), (p1, p2) => EntityUtils.equals(p1, p2, 'startDate'), value => isNil(value), { + allowEmptyArray: false, + validators: [ + // this.requiredPeriodMinLength(1) + ] + }); + // Create at least one fishing Area + if (this.appliedStrategiesHelper.size() === 0) { + this.departmentsHelper.resize(1); + } + } + // Laboratory Helper ----------------------------------------------------------------------------------------------- + initDepartmentsHelper() { + this.departmentsHelper = new FormArrayHelper(FormArrayHelper.getOrCreateArray(this.formBuilder, this.form, 'departments'), (department) => this.validatorService.getStrategyDepartmentsControl(department), (d1, d2) => EntityUtils.equals(d1.department, d2.department, 'label'), value => isNil(value) && isNil(value.department), { + allowEmptyArray: false + }); + // Create at least one laboratory + if (this.departmentsHelper.size() === 0) { + this.departmentsHelper.resize(1); + } + } + addDepartment() { + this.departmentsHelper.add(new StrategyDepartment()); + } + initPmfmStrategiesHelpers() { + this.pmfmsHelper = this.createPmfmStrategiesArrayHelper('pmfms', 0); + this.lengthPmfmsHelper = this.createPmfmStrategiesArrayHelper('lengthPmfms', 1); + this.weightPmfmsHelper = this.createPmfmStrategiesArrayHelper('weightPmfms', 1); + this.maturityPmfmsHelper = this.createPmfmStrategiesArrayHelper('maturityPmfms', 1); + this.fractionPmfmsHelper = this.createPmfmStrategiesArrayHelper('fractionPmfms', 1); + } + createPmfmStrategiesArrayHelper(arrayName, minSize) { + const helper = new FormArrayHelper(FormArrayHelper.getOrCreateArray(this.formBuilder, this.form, arrayName), (data) => this.pmfmStrategyValidator.getFormGroup(data, { withDetails: false, required: false }), PmfmStrategy.equals, PmfmStrategy.isEmpty, { + allowEmptyArray: false + }); + // Create at least one fishing Area + if (minSize && helper.size() < minSize) { + helper.resize(minSize); + } + return helper; + } + addPmfmFraction() { + this.fractionPmfmsHelper.add(); + } + markForCheck() { + if (this.cd) + this.cd.markForCheck(); + } + // Get the year + get year() { + const value = this.form.get('year').value; + // Value is stored in database in utc, we need to get local timezone moment in order to get year + const localTimeZoneDate = moment.utc(value).local(); + const year = localTimeZoneDate && +(localTimeZoneDate.format('YYYY')); + // Skip if too old + if (year >= 1970) + return year; + return undefined; + } + // Get year, as string (last 2 digits) + get yearCode() { + const year = this.year; + if (year >= 1970) { + return year.toString().substring(2); + } + return undefined; + } + requiredPeriodMinLength(minLength) { + minLength = minLength || 1; + return (array) => { + const values = array.value.flat().filter(period => period.acquisitionNumber !== undefined && period.acquisitionNumber !== null && period.acquisitionNumber >= 1); + if (!values || values.length < minLength) { + return { minLength: { minLength } }; + } + return null; + }; + } + isDepartmentDisable(index) { + return this.departmentsHelper.at(index).status === 'DISABLED'; + } + isLocationDisable(index) { + return this.appliedStrategiesHelper.at(index).status === 'DISABLED' || this.hasEffort; + } + isFractionDisable(index) { + return this.fractionPmfmsHelper.at(index).status === 'DISABLED'; + } + isLengthPmfmDisable(index) { + return this.lengthPmfmsHelper.at(index).status === 'DISABLED'; + } + isWeightPmfmDisable(index) { + return this.weightPmfmsHelper.at(index).status === 'DISABLED'; + } + isMaturityPmfmDisable(index) { + return this.maturityPmfmsHelper.at(index).status === 'DISABLED'; + } + markAsDirty() { + this.form.markAsDirty(); + } + /** + * get pmfm by type + * + * @param pmfms + * @param pmfmIds + * @param parameterLabels + * @protected + */ + getPmfmStrategiesByGroup(pmfms, pmfmIds, parameterLabels) { + return (pmfms || []).filter(p => { + if (p) { + const pmfm = p.pmfm; + const pmfmId = toNumber(p.pmfmId, pmfm === null || pmfm === void 0 ? void 0 : pmfm.id); + const parameter = (pmfm === null || pmfm === void 0 ? void 0 : pmfm.parameter) || p.parameter; + const hasParameterId = (parameter === null || parameter === void 0 ? void 0 : parameter.label) && parameterLabels.includes(parameter.label); + return pmfmIds.includes(pmfmId) || hasParameterId; + } + return false; + }); + } + validatePmfmsForm() { + return __awaiter(this, void 0, void 0, function* () { + const pmfmsForm = this.pmfmsForm; + if (this.loading || pmfmsForm.disabled) { + if (pmfmsForm.errors) + pmfmsForm.setErrors(null, { emitEvent: false }); + return; + } + // DEBUG + //console.debug('DEV Call validatePmfmsForm()...'); + const lengthPmfmsCount = (this.lengthPmfmsForm.value || []).filter(PmfmStrategy.isNotEmpty).length; + const weightPmfmsCount = (this.weightPmfmsForm.value || []).filter(PmfmStrategy.isNotEmpty).length; + const maturityPmfmsCount = (this.maturityPmfmsForm.value || []).filter(PmfmStrategy.isNotEmpty).length; + const fractionPmfmCount = (this.fractionPmfmsForm.value || []).filter(value => { var _a; return (value === null || value === void 0 ? void 0 : value.fraction) && ((_a = value.fraction) === null || _a === void 0 ? void 0 : _a.id); }).length; + let errors; + // Check weight OR length is present + if (weightPmfmsCount === 0 && lengthPmfmsCount === 0) { + errors = { + weightOrSize: true + }; + } + else { + SharedValidators.clearError(pmfmsForm, 'weightOrSize'); + } + // If hasAge and no fraction set explicit error + if (this.hasAge && fractionPmfmCount === 0) { + errors = Object.assign(Object.assign({}, errors), { missingFraction: true }); + } + else { + SharedValidators.clearError(pmfmsForm, 'missingFraction'); + } + // Add one to min count to ignore fraction and maturity if they control are set to false + const pmfmCount = lengthPmfmsCount + + weightPmfmsCount + + (this.hasSex ? (1 + maturityPmfmsCount) : 0) + + (this.hasAge ? 1 : 0); + if (pmfmCount < MIN_PMFM_COUNT) { + errors = Object.assign(Object.assign({}, errors), { minLength: { minLength: MIN_PMFM_COUNT } }); + } + else { + SharedValidators.clearError(pmfmsForm, 'minLength'); + } + pmfmsForm.setErrors(errors); + if (errors) { + if (this.form.touched) + pmfmsForm.markAllAsTouched(); + if (this.form.dirty) + pmfmsForm.markAsDirty(); + } + return null; + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", Program), + __metadata("design:paramtypes", [Program]) +], SamplingStrategyForm.prototype, "program", null); +__decorate([ + Input(), + __metadata("design:type", Number) +], SamplingStrategyForm.prototype, "tabIndex", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplingStrategyForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplingStrategyForm.prototype, "i18nFieldPrefix", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SamplingStrategyForm.prototype, "placeholderChar", void 0); +SamplingStrategyForm = __decorate([ + Component({ + selector: 'app-sampling-strategy-form', + templateUrl: './sampling-strategy.form.html', + styleUrls: ['./sampling-strategy.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + StrategyValidatorService, + ReferentialRefService, + PmfmService, + StrategyService, + LocalSettingsService, + TaxonNameService, + TaxonNameRefService, + PmfmStrategyValidatorService, + ChangeDetectorRef, + UntypedFormBuilder]) +], SamplingStrategyForm); +export { SamplingStrategyForm }; +//# sourceMappingURL=sampling-strategy.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/sampling/sampling-strategy.form.js.map b/out-tsc/app/app/referential/strategy/sampling/sampling-strategy.form.js.map new file mode 100644 index 000000000..f388f90fa --- /dev/null +++ b/out-tsc/app/app/referential/strategy/sampling/sampling-strategy.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sampling-strategy.form.js","sourceRoot":"","sources":["../../../../../../src/app/referential/strategy/sampling/sampling-strategy.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/sampling/sampling-strategy.page.js b/out-tsc/app/app/referential/strategy/sampling/sampling-strategy.page.js new file mode 100644 index 000000000..44d122bfc --- /dev/null +++ b/out-tsc/app/app/referential/strategy/sampling/sampling-strategy.page.js @@ -0,0 +1,299 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, ViewChild } from '@angular/core'; +import { UntypedFormBuilder } from '@angular/forms'; +import { AccountService, AppEntityEditor, firstNotNilPromise, isNil, isNotEmptyArray, isNotNil, PlatformService, SharedValidators, StatusIds, toNumber, } from '@sumaris-net/ngx-components'; +import { ProgramProperties } from '../../services/config/program.config'; +import { PmfmStrategy } from '../../services/model/pmfm-strategy.model'; +import { PmfmService } from '../../services/pmfm.service'; +import { SamplingStrategyForm } from './sampling-strategy.form'; +import { BehaviorSubject } from 'rxjs'; +import { ProgramService } from '../../services/program.service'; +import { AcquisitionLevelCodes, PmfmIds } from '../../services/model/model.enum'; +import { SamplingStrategyService } from '@app/referential/services/sampling-strategy.service'; +import { SamplingStrategy } from '@app/referential/services/model/sampling-strategy.model'; +import moment from 'moment'; +let SamplingStrategyPage = class SamplingStrategyPage extends AppEntityEditor { + constructor(injector, formBuilder, accountService, samplingStrategyService, programService, pmfmService, platform) { + super(injector, SamplingStrategy, samplingStrategyService, { + pathIdAttribute: 'strategyId', + tabCount: 1, + enableListenChanges: true, + }); + this.injector = injector; + this.formBuilder = formBuilder; + this.accountService = accountService; + this.samplingStrategyService = samplingStrategyService; + this.programService = programService; + this.pmfmService = pmfmService; + this.platform = platform; + this.$program = new BehaviorSubject(null); + // default values + this.defaultBackHref = '/referential/programs'; + this._enabled = this.accountService.isAdmin(); + } + get form() { + return this.strategyForm.form; + } + ngOnInit() { + super.ngOnInit(); + // Update back href, when program changed + this.registerSubscription(this.$program.subscribe((program) => this.setProgram(program))); + } + load(id, opts) { + const _super = Object.create(null, { + load: { get: () => super.load } + }); + return __awaiter(this, void 0, void 0, function* () { + // Force the load from network + return _super.load.call(this, id, Object.assign(Object.assign({}, opts), { fetchPolicy: 'network-only' })); + }); + } + canUserWrite(data, opts) { + return super.canUserWrite(data, Object.assign(Object.assign({}, opts), { + // Important: sent the opts.program, to check if user is a program manager + program: this.$program.value })); + } + /* -- protected functions -- */ + onNewEntity(data, options) { + const _super = Object.create(null, { + onNewEntity: { get: () => super.onNewEntity } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.onNewEntity.call(this, data, options); + // Load program, form the route path + if (options && isNotNil(options.programId)) { + const program = yield this.programService.load(options.programId); + this.$program.next(program); + data.programId = program && program.id; + } + // Set defaults + data.statusId = toNumber(data.statusId, StatusIds.ENABLE); + data.creationDate = moment(); + // Fill default PmfmStrategy (e.g. the PMFM to store the strategy's label) + this.fillPmfmStrategyDefaults(data); + this.markAsPristine(); + this.markAsReady(); + }); + } + onEntityLoaded(data, options) { + const _super = Object.create(null, { + onEntityLoaded: { get: () => super.onEntityLoaded } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.onEntityLoaded.call(this, data, options); + // Load program, form the entity's program + if (data && isNotNil(data.programId)) { + const program = yield this.programService.load(data.programId); + this.$program.next(program); + } + // Load full analytic reference, from label + if (data.analyticReference && typeof data.analyticReference === 'string') { + data.analyticReference = yield this.samplingStrategyService.loadAnalyticReferenceByLabel(data.analyticReference); + } + this.markAsReady(); + }); + } + onEntitySaved(data) { + const _super = Object.create(null, { + onEntitySaved: { get: () => super.onEntitySaved } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.onEntitySaved.call(this, data); + // Restore analyticReference object + data.analyticReference = this.form.get('analyticReference').value; + }); + } + registerForms() { + this.addChildForm(this.strategyForm); + } + setProgram(program) { + if (program && isNotNil(program.id)) { + this.defaultBackHref = `/referential/programs/${program.id}/strategies`; + this.markForCheck(); + } + } + /** + * Compute the title + * + * @param data + * @param opts + */ + computeTitle(data, opts) { + return __awaiter(this, void 0, void 0, function* () { + const program = yield firstNotNilPromise(this.$program, { stop: this.destroySubject }); + let i18nSuffix = program.getProperty(ProgramProperties.I18N_SUFFIX); + i18nSuffix = (i18nSuffix !== 'legacy' && i18nSuffix) || ''; + // new strategy + if (!data || isNil(data.id)) { + return this.translate.instant(`PROGRAM.STRATEGY.NEW.${i18nSuffix}TITLE`); + } + // Existing strategy + return this.translate.instant(`PROGRAM.STRATEGY.EDIT.${i18nSuffix}TITLE`, { + program: program.label, + label: data && data.label, + }); + }); + } + getFirstInvalidTabIndex() { + if (this.strategyForm.invalid) + return 0; + return -1; + } + loadFromRoute() { + return super.loadFromRoute(); + } + setValue(data, opts) { + if (!data) + return; // Skip + this.strategyForm.setValue(data); + } + getValue() { + return __awaiter(this, void 0, void 0, function* () { + const value = (yield this.strategyForm.getValue()); + // Add default PmfmStrategy + this.fillPmfmStrategyDefaults(value); + return value; + }); + } + /** + * Clear previous cannotComputeTaxonCode warning / error if label match regex constraints + */ + clearCannotComputeTaxonBeforeSave() { + return __awaiter(this, void 0, void 0, function* () { + const taxonNameControl = this.strategyForm.taxonNamesHelper.at(0); + if (taxonNameControl.hasError('cannotComputeTaxonCode')) { + const labelRegex = new RegExp(/^\d\d[a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z]\d\d\d/); + if (this.form.get('label').value.match(labelRegex)) { + SharedValidators.clearError(taxonNameControl, 'cannotComputeTaxonCode'); + } + } + }); + } + save(event, options) { + const _super = Object.create(null, { + save: { get: () => super.save } + }); + var _a; + return __awaiter(this, void 0, void 0, function* () { + // Disable form listeners (e.g. label) + this.strategyForm.setDisableEditionListeners(true); + // Prepare label + this.form.get('label').setValue((_a = this.form.get('label').value) === null || _a === void 0 ? void 0 : _a.replace(/\s/g, '')); // remove whitespace + yield this.clearCannotComputeTaxonBeforeSave(); + this.form.get('label').updateValueAndValidity(); + try { + // Call inherited save + return yield _super.save.call(this, event, options); + } + finally { + // Enable form listeners + this.strategyForm.setDisableEditionListeners(false); + } + }); + } + /** + * Fill default PmfmStrategy (e.g. the PMFM to store the strategy's label) + * + * @param target + */ + fillPmfmStrategyDefaults(target) { + var _a, _b, _c, _d, _e, _f; + target.pmfms = target.pmfms || []; + const pmfmIds = []; + target.pmfms.forEach((pmfmStrategy) => { + var _a; + // Keep only pmfmId + pmfmStrategy.pmfmId = toNumber((_a = pmfmStrategy.pmfm) === null || _a === void 0 ? void 0 : _a.id, pmfmStrategy.pmfmId); + // delete pmfmStrategy.pmfm; + // Remember PMFM Ids + pmfmIds.push(pmfmStrategy.pmfmId); + }); + // Add a Pmfm for the strategy label, if missing + if (!pmfmIds.includes(PmfmIds.STRATEGY_LABEL)) { + console.debug(`[sampling-strategy-page] Adding new PmfmStrategy on Pmfm {id: ${PmfmIds.STRATEGY_LABEL}} to hold the strategy label, on ${AcquisitionLevelCodes.LANDING}`); + target.pmfms.push(PmfmStrategy.fromObject({ + // Restore existing id + id: ((_b = (_a = this.data) === null || _a === void 0 ? void 0 : _a.pmfms.find((ps) => ps.pmfmId === PmfmIds.STRATEGY_LABEL && ps.acquisitionLevel === AcquisitionLevelCodes.LANDING)) === null || _b === void 0 ? void 0 : _b.id) || + undefined, + pmfm: { id: PmfmIds.STRATEGY_LABEL }, + acquisitionLevel: AcquisitionLevelCodes.LANDING, + isMandatory: true, + acquisitionNumber: 1, + rankOrder: 1, // Should be the only one PmfmStrategy on Landing + })); + } + // Add a TAG_ID Pmfm, if missing + if (!pmfmIds.includes(PmfmIds.TAG_ID)) { + console.debug(`[sampling-strategy-page] Adding new PmfmStrategy on Pmfm {id: ${PmfmIds.TAG_ID}} to hold the tag id, on ${AcquisitionLevelCodes.SAMPLE}`); + target.pmfms.push(PmfmStrategy.fromObject({ + id: ((_d = (_c = this.data) === null || _c === void 0 ? void 0 : _c.pmfms.find((ps) => ps.pmfmId === PmfmIds.TAG_ID && ps.acquisitionLevel === AcquisitionLevelCodes.SAMPLE)) === null || _d === void 0 ? void 0 : _d.id) || undefined, + pmfm: { id: PmfmIds.TAG_ID }, + acquisitionLevel: AcquisitionLevelCodes.SAMPLE, + isMandatory: false, + acquisitionNumber: 1, + rankOrder: 1, // Should be the only one PmfmStrategy on Landing + })); + } + // Add a DRESSING_ID Pmfm, if missing + if (!pmfmIds.includes(PmfmIds.DRESSING)) { + console.debug(`[sampling-strategy-page] Adding new PmfmStrategy on Pmfm {id: ${PmfmIds.DRESSING}} to hold the dressing, on ${AcquisitionLevelCodes.SAMPLE}`); + target.pmfms.push(PmfmStrategy.fromObject({ + id: ((_f = (_e = this.data) === null || _e === void 0 ? void 0 : _e.pmfms.find((ps) => ps.pmfmId === PmfmIds.DRESSING && ps.acquisitionLevel === AcquisitionLevelCodes.SAMPLE)) === null || _f === void 0 ? void 0 : _f.id) || undefined, + pmfm: { id: PmfmIds.DRESSING }, + acquisitionLevel: AcquisitionLevelCodes.SAMPLE, + isMandatory: true, + acquisitionNumber: 1, + rankOrder: 2, // Should be the only one PmfmStrategy on Landing + })); + } + // Remove unused attributes + delete target.denormalizedPmfms; + } + computePageHistory(title) { + const _super = Object.create(null, { + computePageHistory: { get: () => super.computePageHistory } + }); + return __awaiter(this, void 0, void 0, function* () { + return Object.assign(Object.assign({}, (yield _super.computePageHistory.call(this, title))), { matIcon: 'date_range', title: `${this.data.label} - ${this.data.name}`, subtitle: 'REFERENTIAL.ENTITY.PROGRAM' }); + }); + } + updateRoute(data, queryParams) { + return __awaiter(this, void 0, void 0, function* () { + const path = this.computePageUrl(isNotNil(data.id) ? data.id : 'new'); + const commands = path && typeof path === 'string' ? path.split('/') : path; + if (isNotEmptyArray(commands)) { + commands.pop(); + // commands.push('strategy'); + // commands.push('sampling'); + // commands.push(data.id); + return yield this.router.navigate(commands, { + replaceUrl: true, + queryParams: this.queryParams, + }); + } + else { + console.warn('Skip page route update. Invalid page path: ', path); + } + }); + } +}; +__decorate([ + ViewChild('form', { static: true }), + __metadata("design:type", SamplingStrategyForm) +], SamplingStrategyPage.prototype, "strategyForm", void 0); +SamplingStrategyPage = __decorate([ + Component({ + selector: 'app-sampling-strategy-page', + templateUrl: 'sampling-strategy.page.html', + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + UntypedFormBuilder, + AccountService, + SamplingStrategyService, + ProgramService, + PmfmService, + PlatformService]) +], SamplingStrategyPage); +export { SamplingStrategyPage }; +//# sourceMappingURL=sampling-strategy.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/sampling/sampling-strategy.page.js.map b/out-tsc/app/app/referential/strategy/sampling/sampling-strategy.page.js.map new file mode 100644 index 000000000..0f3b0a88d --- /dev/null +++ b/out-tsc/app/app/referential/strategy/sampling/sampling-strategy.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sampling-strategy.page.js","sourceRoot":"","sources":["../../../../../../src/app/referential/strategy/sampling/sampling-strategy.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/sampling/testing/pmfm-strategies.table.test.js b/out-tsc/app/app/referential/strategy/sampling/testing/pmfm-strategies.table.test.js new file mode 100644 index 000000000..1829b2d54 --- /dev/null +++ b/out-tsc/app/app/referential/strategy/sampling/testing/pmfm-strategies.table.test.js @@ -0,0 +1,31 @@ +import { __decorate, __metadata } from "tslib"; +import { Component, ViewChild } from '@angular/core'; +import { ParameterLabelGroups } from 'src/app/referential/services/model/model.enum'; +import { PmfmStrategy } from 'src/app/referential/services/model/pmfm-strategy.model'; +import { PmfmStrategiesTable } from '../../pmfm-strategies.table'; +let PmfmStrategiesTableTestPage = class PmfmStrategiesTableTestPage { + constructor() { + this.enabled = true; + this.pmfmFilters = { + table1: { + levelLabels: ParameterLabelGroups.WEIGHT + } + }; + } + ngOnInit() { + this.table1.value = [new PmfmStrategy(), new PmfmStrategy()]; + } +}; +__decorate([ + ViewChild('table1', { static: true }), + __metadata("design:type", PmfmStrategiesTable) +], PmfmStrategiesTableTestPage.prototype, "table1", void 0); +PmfmStrategiesTableTestPage = __decorate([ + Component({ + selector: 'app-pmfm-strategies-table-test', + templateUrl: './pmfm-strategies.table.test.html' + }), + __metadata("design:paramtypes", []) +], PmfmStrategiesTableTestPage); +export { PmfmStrategiesTableTestPage }; +//# sourceMappingURL=pmfm-strategies.table.test.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/sampling/testing/pmfm-strategies.table.test.js.map b/out-tsc/app/app/referential/strategy/sampling/testing/pmfm-strategies.table.test.js.map new file mode 100644 index 000000000..22777dff1 --- /dev/null +++ b/out-tsc/app/app/referential/strategy/sampling/testing/pmfm-strategies.table.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pmfm-strategies.table.test.js","sourceRoot":"","sources":["../../../../../../../src/app/referential/strategy/sampling/testing/pmfm-strategies.table.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAU,SAAS,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,wDAAwD,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAQ3D,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAYtC;QAVA,YAAO,GAAG,IAAI,CAAC;QAIN,gBAAW,GAAG;YACrB,MAAM,EAAc;gBAClB,WAAW,EAAE,oBAAoB,CAAC,MAAM;aACzC;SACF,CAAC;IAEa,CAAC;IAEhB,QAAQ;QAEN,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,YAAY,EAAE,EAAE,IAAI,YAAY,EAAE,CAAC,CAAC;IAE/D,CAAC;CAEF,CAAA;AAhBC;IAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;8BAAS,mBAAmB;2DAAC;AAJxD,2BAA2B;IAJvC,SAAS,CAAC;QACT,QAAQ,EAAE,gCAAgC;QAC1C,WAAW,EAAE,mCAAmC;KACjD,CAAC;;GACW,2BAA2B,CAoBvC;SApBY,2BAA2B"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/strategies.page.js b/out-tsc/app/app/referential/strategy/strategies.page.js new file mode 100644 index 000000000..69d78ec53 --- /dev/null +++ b/out-tsc/app/app/referential/strategy/strategies.page.js @@ -0,0 +1,183 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { Subject } from 'rxjs'; +import { AccountService, isNotNil, PlatformService } from '@sumaris-net/ngx-components'; +import { ProgramProperties } from '../services/config/program.config'; +import { Strategy } from '../services/model/strategy.model'; +import { ProgramService } from '../services/program.service'; +import { ReferentialRefService } from '../services/referential-ref.service'; +import { SamplingStrategiesTable } from './sampling/sampling-strategies.table'; +import { StrategiesTable } from './strategies.table'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { ContextService } from '@app/shared/context.service'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { NavController } from '@ionic/angular'; +// app-strategies-page +let StrategiesPage = class StrategiesPage { + constructor(route, router, navController, referentialRefService, programService, programRefService, accountService, platformService, context, cd) { + this.route = route; + this.router = router; + this.navController = navController; + this.referentialRefService = referentialRefService; + this.programService = programService; + this.programRefService = programRefService; + this.accountService = accountService; + this.platformService = platformService; + this.context = context; + this.cd = cd; + this.error = null; + this.enabled = false; + this.canEdit = false; + this.canDelete = false; + this.i18nSuffix = ''; + this.$title = new Subject(); + this.mobile = platformService.mobile; + const id = this.route.snapshot.params['programId']; + if (isNotNil(id)) { + this.load(+id); + } + } + get table() { + return this.strategyEditor !== 'sampling' ? this.legacyTable : this.samplingTable; + } + get loading() { + var _a; + return (_a = this.table) === null || _a === void 0 ? void 0 : _a.loading; + } + get filterExpansionPanel() { + var _a; + return (_a = this.samplingTable) === null || _a === void 0 ? void 0 : _a.filterExpansionPanel; + } + get filterCriteriaCount() { + var _a; + return (_a = this.samplingTable) === null || _a === void 0 ? void 0 : _a.filterCriteriaCount; + } + ngOnInit() { + // Make to remove old contextual values + this.resetContext(); + } + load(id, opts) { + return __awaiter(this, void 0, void 0, function* () { + try { + // Force the load from network + const program = yield this.programService.load(id, Object.assign(Object.assign({}, opts), { fetchPolicy: 'network-only' })); + this.data = program; + // Check user rights (always readonly if mobile) + this.canEdit = !this.mobile && this.canUserWrite(program); + this.canDelete = this.canEdit; + // Read program's properties + this.strategyEditor = program.getProperty(ProgramProperties.STRATEGY_EDITOR); + const i18nSuffix = program.getProperty(ProgramProperties.I18N_SUFFIX); + this.i18nSuffix = i18nSuffix !== 'legacy' ? i18nSuffix : ''; + this.$title.next(program.label); + this.cd.markForCheck(); + } + catch (err) { + console.error(err); + this.error = err && err.message || err; + } + }); + } + onOpenRow(row) { + return this.navController.navigateForward(['referential', 'programs', this.data.id, 'strategies', this.strategyEditor, row.currentData.id], { + queryParams: {} + }); + } + onNewRow(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.loading) + return; // Skip + this.markAsLoading({ emitEvent: false }); + try { + yield this.navController.navigateForward(['referential', 'programs', this.data.id, 'strategies', this.strategyEditor, 'new'], { + queryParams: {} + }); + } + finally { + this.markAsLoaded(); + } + }); + } + onNewDataFromRow(row, acquisitionLevel) { + var _a, _b; + const strategy = row.currentData; + // Store strategy in context + this.setContext(strategy); + // Redirect to editor + switch (acquisitionLevel) { + case AcquisitionLevelCodes.LANDING: + const editor = this.data.getProperty(ProgramProperties.LANDING_EDITOR); + return this.navController.navigateForward(`/observations/landings/${editor}/new`, { + queryParams: { + parent: AcquisitionLevelCodes.OBSERVED_LOCATION, + program: (_a = this.data) === null || _a === void 0 ? void 0 : _a.label, + strategyLabel: strategy.label + } + }); + case AcquisitionLevelCodes.OBSERVED_LOCATION: + default: + return this.navController.navigateForward('/observations/new', { + queryParams: { + program: (_b = this.data) === null || _b === void 0 ? void 0 : _b.label + } + }); + } + } + markAsLoading(opts) { + var _a; + (_a = this.table) === null || _a === void 0 ? void 0 : _a.markAsLoading(opts); + } + markAsLoaded(opts) { + var _a; + (_a = this.table) === null || _a === void 0 ? void 0 : _a.markAsLoaded(opts); + } + doRefresh(event) { + var _a; + (_a = this.table) === null || _a === void 0 ? void 0 : _a.doRefresh(event); + } + resetFilter(event) { + var _a; + (_a = this.samplingTable) === null || _a === void 0 ? void 0 : _a.resetFilter(event); + } + canUserWrite(data) { + return this.programService.canUserWrite(data); + } + setContext(strategy) { + var _a; + this.context.setValue('program', (_a = this.data) === null || _a === void 0 ? void 0 : _a.clone()); + this.context.setValue('strategy', Strategy.fromObject(strategy)); + } + resetContext() { + this.context.reset(); + } +}; +__decorate([ + ViewChild('legacyTable', { static: false }), + __metadata("design:type", StrategiesTable) +], StrategiesPage.prototype, "legacyTable", void 0); +__decorate([ + ViewChild('samplingTable', { static: false }), + __metadata("design:type", SamplingStrategiesTable) +], StrategiesPage.prototype, "samplingTable", void 0); +StrategiesPage = __decorate([ + Component({ + selector: 'app-strategies-page', + templateUrl: 'strategies.page.html', + styleUrls: ['strategies.page.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __param(8, Inject(ContextService)), + __metadata("design:paramtypes", [ActivatedRoute, + Router, + NavController, + ReferentialRefService, + ProgramService, + ProgramRefService, + AccountService, + PlatformService, + ContextService, + ChangeDetectorRef]) +], StrategiesPage); +export { StrategiesPage }; +//# sourceMappingURL=strategies.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/strategies.page.js.map b/out-tsc/app/app/referential/strategy/strategies.page.js.map new file mode 100644 index 000000000..8fa181725 --- /dev/null +++ b/out-tsc/app/app/referential/strategy/strategies.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"strategies.page.js","sourceRoot":"","sources":["../../../../../src/app/referential/strategy/strategies.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/strategies.table.js b/out-tsc/app/app/referential/strategy/strategies.table.js new file mode 100644 index 000000000..0e6ef4a04 --- /dev/null +++ b/out-tsc/app/app/referential/strategy/strategies.table.js @@ -0,0 +1,291 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { ValidatorService } from '@e-is/ngx-material-table'; +import { StrategyValidatorService } from '../services/validator/strategy.validator'; +import { Strategy } from '../services/model/strategy.model'; +import { AppTable, chainPromises, EntitiesTableDataSource, EntityUtils, FileResponse, FilesUtils, isEmptyArray, isNil, isNotNil, isNotNilOrBlank, JsonUtils, ReferentialUtils, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, sleep, StatusById, StatusList, } from '@sumaris-net/ngx-components'; +import { StrategyService } from '../services/strategy.service'; +import { PopoverController } from '@ionic/angular'; +import { Program } from '../services/model/program.model'; +import { environment } from '@environments/environment'; +import { StrategyFilter } from '@app/referential/services/filter/strategy.filter'; +import { of, Subject } from 'rxjs'; +import { filter, switchMap } from 'rxjs/operators'; +import { HttpEventType } from '@angular/common/http'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { TranscribingItem, TranscribingItemType } from '@app/referential/transcribing/transcribing.model'; +import { TranscribingItemsModal } from '@app/referential/transcribing/modal/transcribing-items.modal'; +let StrategiesTable = class StrategiesTable extends AppTable { + constructor(injector, strategyService, popoverController, referentialRefService, validatorService, cd) { + super(injector, + // columns + RESERVED_START_COLUMNS.concat(['label', 'name', 'description', 'status', 'comments']).concat(RESERVED_END_COLUMNS), new EntitiesTableDataSource(Strategy, strategyService, validatorService, { + prependNewElements: false, + suppressErrors: environment.production, + saveOnlyDirtyRows: false, + })); + this.strategyService = strategyService; + this.popoverController = popoverController; + this.referentialRefService = referentialRefService; + this.cd = cd; + this.statusList = StatusList; + this.statusById = StatusById; + this.canEdit = false; + this.canDelete = false; + this.showError = true; + this.showToolbar = true; + this.showPaginator = true; + this.canDownload = false; + this.canUpload = false; + this.inlineEdition = false; + this.i18nColumnPrefix = 'REFERENTIAL.'; + this.confirmBeforeDelete = true; + this.autoLoad = false; // waiting parent to load + this.logPrefix = '[strategies-table] '; + this.debug = !environment.production; + } + set program(program) { + if (program && isNotNil(program.id) && this._program !== program) { + this._program = program; + console.debug('[strategy-table] Setting program:', program); + this.setFilter(StrategyFilter.fromObject(Object.assign(Object.assign({}, this.filter), { levelId: program.id }))); + } + } + get program() { + return this._program; + } + markForCheck() { + this.cd.markForCheck(); + } + downloadSelectionAsJson(event, opts = { keepRemoteId: false }) { + return __awaiter(this, void 0, void 0, function* () { + const ids = this.selection.hasValue() + ? this.selection.selected.map((row) => row.currentData.id) + : this.dataSource.getData().map((entity) => entity.id); + console.info(this.logPrefix + `Download ${ids.length} strategies as JSON file...`); + yield this.strategyService.downloadAsJsonByIds(ids, Object.assign(Object.assign({}, opts), { program: this._program })); + this.selection.clear(); + }); + } + importFromJson(event) { + return __awaiter(this, void 0, void 0, function* () { + const { data } = yield FilesUtils.showUploadPopover(this.popoverController, event, { + uniqueFile: true, + fileExtension: '.json', + uploadFn: (file) => this.readJsonFile(file), + }); + const entities = (data || []) + .flatMap((file) => { var _a; return ((_a = file.response) === null || _a === void 0 ? void 0 : _a.body) || []; }) + // Keep non exists entities + .filter((entity) => isNil(entity.id)) + .map(Strategy.fromObject); + if (isEmptyArray(entities)) + return; // No entities: skip + console.info(this.logPrefix + `Importing ${entities.length} entities...`, entities); + // Applying defaults + entities.forEach((entity) => { + var _a; + entity.programId = (_a = this._program) === null || _a === void 0 ? void 0 : _a.id; + }); + // Add entities, one by one + yield this.strategyService.saveAll(entities); + yield sleep(1000); + this.onRefresh.emit(); + }); + } + readJsonFile(file) { + console.info(this.logPrefix + `Importing JSON file ${file.name}...`); + return JsonUtils.parseFile(file).pipe(switchMap((event) => { + if (event.type === HttpEventType.UploadProgress) { + const loaded = Math.round(event.loaded * 0.8); + return of(Object.assign(Object.assign({}, event), { loaded })); + } + else if (event instanceof FileResponse) { + const data = Array.isArray(event.body) ? event.body : [event.body]; + return this.resolveJsonArray(data); + } + // Unknown event: skip + else { + return of(); + } + }), filter(isNotNil)); + } + resolveJsonArray(sources) { + if (isEmptyArray(sources)) + throw { message: 'FILE.CSV.ERROR.EMPTY_FILE' }; + const $progress = new Subject(); + console.debug(this.logPrefix + `Importing ${sources.length} strategies...`); + $progress.next({ type: HttpEventType.UploadProgress, loaded: -1 }); + const entities = sources.map(Strategy.fromObject).filter(isNotNil); + // TODO ask user a transcibing system ? + const transcribingSystemId = null; + this.transcribeAll(entities, transcribingSystemId) + .then((types) => this.openTranscribingModal(types)) + .then((types) => entities.map((source) => this.transcribeStrategy(source, types))) + .then((entities) => { + $progress.next(new FileResponse({ body: entities })); + $progress.complete(); + }) + .catch((err) => $progress.error(err)); + return $progress.asObservable(); + } + transcribeStrategy(source, resolution) { + const target = Strategy.fromObject(source); + if (!target) + return undefined; + return target; + } + transcribeAll(entities, transcribingSystemId) { + return __awaiter(this, void 0, void 0, function* () { + const program = this._program; + if (!program) + throw new Error('Missing required program'); + if (ReferentialUtils.isEmpty(program.gearClassification)) + throw new Error("Missing required 'program.gearClassification'"); + const gears = entities.flatMap((entity) => entity.gears); + const taxonGroups = entities.flatMap((entity) => entity.taxonGroups); + const taxonNames = entities.flatMap((entity) => entity.taxonNames); + yield EntityUtils.fillLocalIds(gears, () => Promise.resolve(0)); + const gearTscbType = TranscribingItemType.fromObject({ label: 'PROGRAM.STRATEGY.GEARS', name: this.translate.instant('PROGRAM.STRATEGY.GEARS') }); + const taxonGroupTscbType = TranscribingItemType.fromObject({ + label: 'PROGRAM.STRATEGY.TAXON_GROUPS', + name: this.translate.instant('PROGRAM.STRATEGY.TAXON_GROUPS'), + }); + const taxonNameTscbType = TranscribingItemType.fromObject({ + label: 'PROGRAM.STRATEGY.TAXON_NAMES', + name: this.translate.instant('PROGRAM.STRATEGY.SCIENTIFIC_TAXON_NAMES'), + }); + // Preparing transcribing item types + const types = [gearTscbType, taxonGroupTscbType, taxonNameTscbType]; + yield this.resolveItems(types, { + entityName: TranscribingItemType.ENTITY_NAME, + levelId: transcribingSystemId, + }, { keepSourceObject: true }); + // Add a local id to unresolved types + yield EntityUtils.fillLocalIds(types, () => Promise.resolve(0)); + // Resolve gears + gearTscbType.items = yield this.transcribeItems(gears, { entityName: 'Gear', levelId: program.gearClassification.id }, gearTscbType.id); + //this.transcribeItems(gears, {entityName: 'Gear', levelId: GearLevelIds.FAO}) + //this.referentialRefService.suggest() + return types; // + }); + } + transcribeItems(sources, filter, typeId) { + return __awaiter(this, void 0, void 0, function* () { + const resolvedItems = this.resolveItems(sources, filter); + return sources.map((source, index) => { + const target = new TranscribingItem(); + target.label = source.label; + target.typeId = typeId; + const match = resolvedItems[index]; + if (match && match.entityName === filter.entityName) { + target.objectId = match.id; + } + return target; + }); + }); + } + resolveItems(sources, filter, opts = { keepSourceObject: false }) { + return __awaiter(this, void 0, void 0, function* () { + return chainPromises(sources.map((source) => () => this.resolveItem(source, filter, opts))); + }); + } + resolveItem(source, filter, opts = { keepSourceObject: false }) { + return __awaiter(this, void 0, void 0, function* () { + let match; + // Resolve by label + if (isNotNilOrBlank(source.label)) { + const { data, total } = yield this.referentialRefService.loadAll(0, 1, null, null, Object.assign(Object.assign({}, filter), { label: source.label }), { withTotal: true, toEntity: false }); + if (total === 1) { + match = data[0]; + console.debug(this.logPrefix + `Entity ${filter.entityName}#${source.label} resolved by label: `, match); + } + } + // Resolve by label + if (!match && isNotNilOrBlank(source.name)) { + const { data, total } = yield this.referentialRefService.loadAll(0, 1, null, null, Object.assign(Object.assign({}, filter), { searchText: source.name, searchAttribute: 'name' }), { withTotal: true, toEntity: false }); + if (total === 1) { + match = data[0]; + console.debug(this.logPrefix + `Entity ${filter.entityName}#${source.label} resolved by name ('${source.name}'): `, match); + } + } + if (match) { + if (opts === null || opts === void 0 ? void 0 : opts.keepSourceObject) { + Object.assign(source, match); + return source; + } + return match; + } + // Not resolved + return (opts === null || opts === void 0 ? void 0 : opts.keepSourceObject) ? source : undefined; + }); + } + openTranscribingModal(types) { + return __awaiter(this, void 0, void 0, function* () { + const modal = yield this.modalCtrl.create({ + component: TranscribingItemsModal, + componentProps: { + //title: '' + filterTypes: types, + data: types.flatMap((t) => t.items), + }, + }); + yield modal.present(); + const { data, role } = yield modal.onDidDismiss(); + if (!data || role === 'cancel') { + throw 'CANCELLED'; + } + return data; + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], StrategiesTable.prototype, "canEdit", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], StrategiesTable.prototype, "canDelete", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], StrategiesTable.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], StrategiesTable.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], StrategiesTable.prototype, "showPaginator", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], StrategiesTable.prototype, "canDownload", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], StrategiesTable.prototype, "canUpload", void 0); +__decorate([ + Input(), + __metadata("design:type", Program), + __metadata("design:paramtypes", [Program]) +], StrategiesTable.prototype, "program", null); +StrategiesTable = __decorate([ + Component({ + selector: 'app-strategy-table', + templateUrl: 'strategies.table.html', + styleUrls: ['strategies.table.scss'], + providers: [{ provide: ValidatorService, useExisting: StrategyValidatorService }], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + StrategyService, + PopoverController, + ReferentialRefService, + ValidatorService, + ChangeDetectorRef]) +], StrategiesTable); +export { StrategiesTable }; +//# sourceMappingURL=strategies.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/strategies.table.js.map b/out-tsc/app/app/referential/strategy/strategies.table.js.map new file mode 100644 index 000000000..9bdec5e5a --- /dev/null +++ b/out-tsc/app/app/referential/strategy/strategies.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"strategies.table.js","sourceRoot":"","sources":["../../../../../src/app/referential/strategy/strategies.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/strategy.form.js b/out-tsc/app/app/referential/strategy/strategy.form.js new file mode 100644 index 000000000..227491935 --- /dev/null +++ b/out-tsc/app/app/referential/strategy/strategy.form.js @@ -0,0 +1,492 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input, ViewChild } from '@angular/core'; +import { ReferentialForm } from '../form/referential.form'; +import { AccountService, AppEntityEditor, AppListForm, isEmptyArray, isNotNil, LocalSettingsService, ReferentialRef, referentialToString, ReferentialUtils, toNumber, } from '@sumaris-net/ngx-components'; +import { PmfmStrategiesTable } from './pmfm-strategies.table'; +import { ReferentialRefService } from '../services/referential-ref.service'; +import { SelectReferentialModal } from '../table/select-referential.modal'; +import { ModalController } from '@ionic/angular'; +import { StrategyValidatorService } from '../services/validator/strategy.validator'; +import { BehaviorSubject } from 'rxjs'; +import { debounceTime } from 'rxjs/operators'; +import { UntypedFormBuilder } from '@angular/forms'; +import { ReferentialValidatorService } from '../services/validator/referential.validator'; +import { Strategy, TaxonGroupStrategy, TaxonNameStrategy } from '../services/model/strategy.model'; +import { Program } from '../services/model/program.model'; +import { MatSidenav } from '@angular/material/sidenav'; +let StrategyForm = class StrategyForm extends AppEntityEditor { + constructor(injector, formBuilder, settings, validatorService, referentialRefService, modalCtrl, accountService, cd) { + super(injector, Strategy, null, { + pathIdAttribute: null, + autoLoad: false, + }); + this.formBuilder = formBuilder; + this.settings = settings; + this.validatorService = validatorService; + this.referentialRefService = referentialRefService; + this.modalCtrl = modalCtrl; + this.accountService = accountService; + this.cd = cd; + this.$isPmfmStrategyEmpty = new BehaviorSubject(true); + this.$filter = new BehaviorSubject({}); + this.$allAcquisitionLevels = new BehaviorSubject(undefined); + this.gearListOptions = { + allowEmptyArray: true, + allowMultipleSelection: true, + buttons: [ + // Remove from Pmfm + { + title: 'PROGRAM.STRATEGY.BTN_REMOVE_FROM_SELECTED_PMFM', + icon: 'arrow-back-circle-outline', + disabled: this.$isPmfmStrategyEmpty, + click: (event, item) => this.removeFromSelectedPmfmRows(event, 'gearIds', item.id), + }, + // Apply to Pmfm + { + title: 'PROGRAM.STRATEGY.BTN_APPLY_TO_SELECTED_PMFM', + icon: 'arrow-forward-circle-outline', + disabled: this.$isPmfmStrategyEmpty, + click: (event, item) => this.addToSelectedPmfmRows(event, 'gearIds', item.id), + }, + ], + }; + this.taxonGroupListOptions = { + allowEmptyArray: true, + allowMultipleSelection: true, + buttons: [ + // Remove from Pmfm + { + title: 'PROGRAM.STRATEGY.BTN_REMOVE_FROM_SELECTED_PMFM', + icon: 'arrow-back-circle-outline', + disabled: this.$isPmfmStrategyEmpty, + click: (event, item) => this.removeFromSelectedPmfmRows(event, 'taxonGroupIds', item.taxonGroup.id), + }, + // Apply to Pmfm + { + title: 'PROGRAM.STRATEGY.BTN_APPLY_TO_SELECTED_PMFM', + icon: 'arrow-forward-circle-outline', + disabled: this.$isPmfmStrategyEmpty, + click: (event, item) => this.addToSelectedPmfmRows(event, 'taxonGroupIds', item.taxonGroup.id), + }, + ], + }; + this.taxonNameListOptions = { + allowEmptyArray: true, + allowMultipleSelection: true, + buttons: [ + // Remove from Pmfm + { + title: 'PROGRAM.STRATEGY.BTN_REMOVE_FROM_SELECTED_PMFM', + icon: 'arrow-back-circle-outline', + disabled: this.$isPmfmStrategyEmpty, + click: (event, item) => this.removeFromSelectedPmfmRows(event, 'referenceTaxonIds', item.taxonName.referenceTaxonId), + }, + // Apply to Pmfm + { + title: 'PROGRAM.STRATEGY.BTN_APPLY_TO_SELECTED_PMFM', + icon: 'arrow-forward-circle-outline', + disabled: this.$isPmfmStrategyEmpty, + click: (event, item) => this.addToSelectedPmfmRows(event, 'referenceTaxonIds', item.taxonName.referenceTaxonId), + }, + ], + }; + this.showBaseForm = true; + this.allowMultiple = false; + this.referentialToString = referentialToString; + this.referentialEquals = ReferentialUtils.equals; + this.filterForm = formBuilder.group({ + acquisitionLevels: formBuilder.array([]), + locations: formBuilder.array([]), + }); + //this.debug = !environment.production; + } + get form() { + return this.referentialForm.form; + } + get firstError() { + const firstChildWithError = this.children.find((item) => isNotNil(item.error)); + return firstChildWithError && firstChildWithError.error; + } + get filterCriteriaCount() { + var _a; + return ((_a = this.pmfmsTable) === null || _a === void 0 ? void 0 : _a.filterCriteriaCount) || 0; + } + ngOnInit() { + super.ngOnInit(); + this.registerSubscription(this.$filter.pipe(debounceTime(450)).subscribe((filter) => this.pmfmsTable.setFilter(filter))); + // Load acquisition levels + this.registerSubscription(this.referentialRefService + .watchAll(0, 1000, 'name', 'asc', { entityName: 'AcquisitionLevel' }, { fetchPolicy: 'cache-first', withTotal: false }) + .subscribe((res) => this.$allAcquisitionLevels.next((res && res.data) || []))); + // Listen when Pmfm selection is empty + this.registerSubscription(this.pmfmsTable.selectionChanges.subscribe((rows) => this.$isPmfmStrategyEmpty.next(isEmptyArray(rows)))); + // TODO: Check label is unique + /*this.form.get('label') + .setAsyncValidators(async (control: AbstractControl) => { + const label = control.enabled && control.value; + return label && (await this.programService.existsByLabel(label)) ? {unique: true} : null; + });*/ + } + ngOnDestroy() { + super.ngOnDestroy(); + this.$isPmfmStrategyEmpty.unsubscribe(); + this.$filter.unsubscribe(); + this.$allAcquisitionLevels.unsubscribe(); + } + canUserWrite(data) { + // TODO test user is a program's manager + return this.enabled && this.accountService.isAdmin(); + } + /* -- protected functions -- */ + registerForms() { + this.addChildForms([ + this.referentialForm, + this.pmfmsTable, + this.acquisitionLevelList, + this.locationListForm, + this.gearListForm, + this.taxonGroupListForm, + this.taxonNameListForm, + ]); + } + getFirstInvalidTabIndex() { + return 0; + } + computeTitle(data) { + return __awaiter(this, void 0, void 0, function* () { + return (data && referentialToString(data)) || 'PROGRAM.STRATEGY.NEW.TITLE'; + }); + } + save(event, options) { + return __awaiter(this, void 0, void 0, function* () { + if (this.dirty) { + if (!this.valid) { + yield this.waitWhilePending(); + if (this.invalid) { + this.logFormErrors(); + return false; + } + } + const json = yield this.getJsonValueToSave(); + const data = Strategy.fromObject(json); + yield this.updateView(data, { openTabIndex: -1, updateTabAndRoute: false }); + } + return true; + }); + } + updateView(data, opts) { + const _super = Object.create(null, { + updateView: { get: () => super.updateView } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.updateView.call(this, data, Object.assign(Object.assign({}, opts), { updateRoute: false })); + }); + } + openSelectReferentialModal(opts) { + return __awaiter(this, void 0, void 0, function* () { + const modal = yield this.modalCtrl.create({ + component: SelectReferentialModal, + componentProps: Object.assign({ allowMultipleSelection: true }, opts), + keyboardClose: true, + cssClass: 'modal-large', + }); + yield modal.present(); + const { data } = yield modal.onDidDismiss(); + return data; + }); + } + addAcquisitionLevel() { + return __awaiter(this, void 0, void 0, function* () { + if (this.disabled) + return; // Skip + const items = yield this.openSelectReferentialModal({ + filter: { + entityName: 'AcquisitionLevel', + }, + }); + // Add to list + (items || []).forEach((item) => this.acquisitionLevelList.add(item)); + this.markForCheck(); + }); + } + addLocation() { + return __awaiter(this, void 0, void 0, function* () { + if (this.disabled) + return; // Skip + const items = yield this.openSelectReferentialModal({ + filter: { + entityName: 'Location', + levelIds: ((this.program && this.program.locationClassifications) || []).map((item) => item.id).filter(isNotNil), + }, + }); + // Add to list + (items || []).forEach((item) => this.locationListForm.add(item)); + this.markForCheck(); + }); + } + addGear() { + return __awaiter(this, void 0, void 0, function* () { + if (this.disabled) + return; // Skip + const items = yield this.openSelectReferentialModal({ + filter: { + entityName: 'Gear', + levelId: this.program && this.program.gearClassification ? toNumber(this.program.gearClassification.id, null) : null, + }, + }); + // Add to list + (items || []).forEach((item) => this.gearListForm.add(item)); + this.markForCheck(); + }); + } + addTaxonGroup(priorityLevel) { + return __awaiter(this, void 0, void 0, function* () { + if (this.disabled) + return; // Skip + priorityLevel = priorityLevel && priorityLevel > 0 ? priorityLevel : 1; + const items = yield this.openSelectReferentialModal({ + filter: { + entityName: 'TaxonGroup', + levelId: this.program && this.program.taxonGroupType ? toNumber(this.program.taxonGroupType.id, -1) : -1, + }, + }); + // Add to list + (items || []) + .map((taxonGroup) => TaxonGroupStrategy.fromObject({ + priorityLevel, + taxonGroup: taxonGroup.asObject(), + })) + .forEach((item) => this.taxonGroupListForm.add(item)); + this.markForCheck(); + }); + } + addTaxonName(priorityLevel) { + return __awaiter(this, void 0, void 0, function* () { + if (this.disabled) + return; // Skip + priorityLevel = priorityLevel && priorityLevel > 0 ? priorityLevel : 1; + const items = yield this.openSelectReferentialModal({ + filter: { + entityName: 'TaxonName', + }, + }); + // Add to list + (items || []) + .map((taxonName) => TaxonNameStrategy.fromObject({ + priorityLevel, + taxonName: taxonName.asObject(), + })) + .forEach((item) => this.taxonNameListForm.add(item)); + this.markForCheck(); + }); + } + load(id, opts) { + return __awaiter(this, void 0, void 0, function* () { }); + } + setValue(data) { + var _a; + console.debug('[strategy-form] Setting value', data); + //const json = data.asObject(); + this.referentialForm.setForm(this.validatorService.getFormGroup(data)); + //AppFormUtils.copyEntity2Form(data, this.form, {emitEvent: false}); + // TODO get locations from AppliedStrategy + this.locationListForm.value = []; //data.locations; + this.gearListForm.value = data.gears; + this.taxonGroupListForm.value = (_a = data.taxonGroups) === null || _a === void 0 ? void 0 : _a.sort((a, b) => ('' + a.taxonGroup.label).localeCompare(b.taxonGroup.label)); + this.taxonNameListForm.value = data.taxonNames; + const allAcquisitionLevels = this.$allAcquisitionLevels.getValue(); + const collectedAcquisitionLevels = (data.pmfms || []).reduce((res, item) => { + if (typeof item.acquisitionLevel === 'string' && res[item.acquisitionLevel] === undefined) { + res[item.acquisitionLevel] = allAcquisitionLevels.find((al) => al.label === item.acquisitionLevel) || null; + } + else if (item.acquisitionLevel instanceof ReferentialRef && res[item.acquisitionLevel.label] === undefined) { + res[item.acquisitionLevel.label] = item.acquisitionLevel; + } + return res; + }, {}); + this.acquisitionLevelList.value = Object.values(collectedAcquisitionLevels).filter(isNotNil); + this.pmfmsTable.value = data.pmfms || []; + } + /* -- protected methods -- */ + getJsonValueToSave() { + return __awaiter(this, void 0, void 0, function* () { + const json = this.form.value; + // Re add label, because missing when field disable + json.label = this.form.get('label').value; + json.gears = this.gearListForm.value; + json.taxonGroups = this.taxonGroupListForm.value; + json.taxonNames = this.taxonNameListForm.value; + if (this.pmfmsTable.dirty) { + const saved = yield this.pmfmsTable.save(); + if (!saved) + throw Error('Failed to save pmfmsTable'); + } + json.pmfms = this.pmfmsTable.value || []; + return json; + }); + } + updateFilterAcquisitionLevel(value) { + const acquisitionLevel = (value && value.label) || undefined; + this.patchPmfmStrategyFilter({ acquisitionLevel }); + } + updateFilterLocations(value) { + const locationIds = (value && value.map((item) => item.id)) || undefined; + this.patchPmfmStrategyFilter({ locationIds }); + } + updateFilterGears(value) { + const gearIds = (value && value.map((item) => item.id)) || undefined; + this.patchPmfmStrategyFilter({ gearIds }); + } + updateFilterTaxonGroups(value) { + const taxonGroupIds = (value && value.map((tgs) => tgs.taxonGroup && tgs.taxonGroup.id)) || undefined; + this.patchPmfmStrategyFilter({ taxonGroupIds }); + } + updateFilterTaxonNames(value) { + const referenceTaxonIds = (value && value.map((tgs) => tgs.taxonName && tgs.taxonName.referenceTaxonId)) || undefined; + this.patchPmfmStrategyFilter({ referenceTaxonIds }); + } + patchPmfmStrategyFilter(filter) { + this.$filter.next(Object.assign(Object.assign({}, this.$filter.getValue()), filter)); + } + addToSelectedPmfmRows(event, arrayName, value) { + if (event) + event.preventDefault(); // Cancel toggle event, in component + (this.pmfmsTable.selection.selected || []).forEach((row) => { + const control = row.validator.get(arrayName); + if (!control) + throw new Error('Control not found in row validator: ' + arrayName); + const existingValues = (control.value || []); + if (!existingValues.includes(value)) { + existingValues.push(value); + control.setValue(existingValues, { emitEvent: false }); + row.validator.markAsDirty(); + } + }); + this.pmfmsTable.markAsDirty(); + } + removeFromSelectedPmfmRows(event, arrayName, value) { + if (event) + event.preventDefault(); // Cancel toggle event, in component + (this.pmfmsTable.selection.selected || []).forEach((row) => { + const control = row.validator.get(arrayName); + if (!control) + throw new Error('Control not found in row validator: ' + arrayName); + const existingValues = (control.value || []); + const index = existingValues.indexOf(value); + if (index !== -1) { + existingValues.splice(index, 1); + control.setValue(existingValues, { emitEvent: false }); + row.validator.markAsDirty(); + } + }); + this.pmfmsTable.markAsDirty(); + } + taxonGroupStrategyToString(data) { + return (data && referentialToString(data.taxonGroup)) || ''; + } + taxonGroupStrategyEquals(v1, v2) { + return ReferentialUtils.equals(v1.taxonGroup, v2.taxonGroup); + } + taxonNameStrategyToString(data) { + return (data && referentialToString(data.taxonName)) || ''; + } + taxonNameStrategyEquals(v1, v2) { + return ReferentialUtils.equals(v1.taxonName, v2.taxonName); + } + getReferentialName(item) { + return (item && item.name) || ''; + } + openFilterPanel() { + var _a, _b; + if (!((_a = this.sidenav) === null || _a === void 0 ? void 0 : _a.opened)) + (_b = this.sidenav) === null || _b === void 0 ? void 0 : _b.open(); + } + closeFilterPanel() { + var _a; + (_a = this.sidenav) === null || _a === void 0 ? void 0 : _a.close(); + this.markForCheck(); + } + toggleFilterPanel() { + var _a; + (_a = this.sidenav) === null || _a === void 0 ? void 0 : _a.toggle(); + this.markForCheck(); + } + resetFilter() { + this.patchPmfmStrategyFilter({ + acquisitionLevel: null, + referenceTaxonIds: null, + locationIds: null, + taxonGroupIds: null, + gearIds: null, + }); + } + closeFloatingPanel() { + this.sidenav.close(); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Program) +], StrategyForm.prototype, "program", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], StrategyForm.prototype, "showBaseForm", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], StrategyForm.prototype, "allowMultiple", void 0); +__decorate([ + ViewChild('referentialForm', { static: true }), + __metadata("design:type", ReferentialForm) +], StrategyForm.prototype, "referentialForm", void 0); +__decorate([ + ViewChild('acquisitionLevelList', { static: true }), + __metadata("design:type", AppListForm) +], StrategyForm.prototype, "acquisitionLevelList", void 0); +__decorate([ + ViewChild('locationList', { static: true }), + __metadata("design:type", AppListForm) +], StrategyForm.prototype, "locationListForm", void 0); +__decorate([ + ViewChild('gearList', { static: true }), + __metadata("design:type", AppListForm) +], StrategyForm.prototype, "gearListForm", void 0); +__decorate([ + ViewChild('taxonGroupList', { static: true }), + __metadata("design:type", AppListForm) +], StrategyForm.prototype, "taxonGroupListForm", void 0); +__decorate([ + ViewChild('taxonNameList', { static: true }), + __metadata("design:type", AppListForm) +], StrategyForm.prototype, "taxonNameListForm", void 0); +__decorate([ + ViewChild('pmfmsTable', { static: true }), + __metadata("design:type", PmfmStrategiesTable) +], StrategyForm.prototype, "pmfmsTable", void 0); +__decorate([ + ViewChild('sidenav'), + __metadata("design:type", MatSidenav) +], StrategyForm.prototype, "sidenav", void 0); +StrategyForm = __decorate([ + Component({ + selector: 'app-strategy-form', + templateUrl: 'strategy.form.html', + styleUrls: ['strategy.form.scss'], + providers: [{ provide: ReferentialValidatorService, useExisting: StrategyValidatorService }], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + UntypedFormBuilder, + LocalSettingsService, + StrategyValidatorService, + ReferentialRefService, + ModalController, + AccountService, + ChangeDetectorRef]) +], StrategyForm); +export { StrategyForm }; +//# sourceMappingURL=strategy.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/strategy.form.js.map b/out-tsc/app/app/referential/strategy/strategy.form.js.map new file mode 100644 index 000000000..911cf3ef3 --- /dev/null +++ b/out-tsc/app/app/referential/strategy/strategy.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"strategy.form.js","sourceRoot":"","sources":["../../../../../src/app/referential/strategy/strategy.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/strategy.modal.js b/out-tsc/app/app/referential/strategy/strategy.modal.js new file mode 100644 index 000000000..933279f95 --- /dev/null +++ b/out-tsc/app/app/referential/strategy/strategy.modal.js @@ -0,0 +1,52 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector } from '@angular/core'; +import { ModalController } from '@ionic/angular'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { AppForm } from '@sumaris-net/ngx-components'; +import moment from 'moment'; +let StrategyModal = class StrategyModal extends AppForm { + constructor(injector, formBuilder, viewCtrl, cd) { + super(injector, formBuilder.group({ + year: [null, Validators.required] + })); + this.formBuilder = formBuilder; + this.viewCtrl = viewCtrl; + this.cd = cd; + } + ngOnInit() { + super.ngOnInit(); + this.form.get('year').setValue(moment()); + this.form.enable(); + } + computeTitle() { + return __awaiter(this, void 0, void 0, function* () { + return 'REFERENTIAL.ENTITY.DUPLICATE_STRATEGY'; + }); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.viewCtrl.dismiss(); + }); + } + validDate() { + return __awaiter(this, void 0, void 0, function* () { + yield this.viewCtrl.dismiss(this.form.get('year').value); + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +StrategyModal = __decorate([ + Component({ + selector: 'app-strategy-modal', + templateUrl: './strategy.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + UntypedFormBuilder, + ModalController, + ChangeDetectorRef]) +], StrategyModal); +export { StrategyModal }; +//# sourceMappingURL=strategy.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/strategy.modal.js.map b/out-tsc/app/app/referential/strategy/strategy.modal.js.map new file mode 100644 index 000000000..951a5df16 --- /dev/null +++ b/out-tsc/app/app/referential/strategy/strategy.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"strategy.modal.js","sourceRoot":"","sources":["../../../../../src/app/referential/strategy/strategy.modal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAU,MAAM,eAAe,CAAC;AACxG,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,MAAkB,MAAM,QAAQ,CAAC;AAOjC,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,OAAuB;IAExD,YACE,QAAkB,EACR,WAA+B,EAC/B,QAAyB,EACzB,EAAqB;QAE/B,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC;YAChC,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;SAClC,CAAC,CAAC,CAAC;QANM,gBAAW,GAAX,WAAW,CAAoB;QAC/B,aAAQ,GAAR,QAAQ,CAAiB;QACzB,OAAE,GAAF,EAAE,CAAmB;IAKjC,CAAC;IAED,QAAQ;QACN,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;IAEe,YAAY;;YAC1B,OAAO,uCAAuC,CAAC;QACjD,CAAC;KAAA;IAEK,MAAM;;YACV,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAChC,CAAC;KAAA;IAEK,SAAS;;YACb,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;QAC3D,CAAC;KAAA;IAES,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;CACF,CAAA;AAlCY,aAAa;IALzB,SAAS,CAAC;QACT,QAAQ,EAAE,oBAAoB;QAC9B,WAAW,EAAE,uBAAuB;QACpC,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAIY,QAAQ;QACK,kBAAkB;QACrB,eAAe;QACrB,iBAAiB;GANtB,aAAa,CAkCzB;SAlCY,aAAa"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/strategy.module.js b/out-tsc/app/app/referential/strategy/strategy.module.js new file mode 100644 index 000000000..000523256 --- /dev/null +++ b/out-tsc/app/app/referential/strategy/strategy.module.js @@ -0,0 +1,66 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { StrategiesTable } from './strategies.table'; +import { PmfmStrategiesTable } from './pmfm-strategies.table'; +import { StrategyForm } from './strategy.form'; +import { TranslateModule } from '@ngx-translate/core'; +import { StrategyPage } from './strategy.page'; +import { TextMaskModule } from 'angular2-text-mask'; +import { CommonModule } from '@angular/common'; +import { SamplingStrategyForm } from './sampling/sampling-strategy.form'; +import { SamplingStrategyPage } from './sampling/sampling-strategy.page'; +import { SamplingStrategiesTable } from './sampling/sampling-strategies.table'; +import { AppCoreModule } from '@app/core/core.module'; +import { StrategiesPage } from './strategies.page'; +import { StrategyModal } from './strategy.modal'; +import { AppTranscribingModule } from '@app/referential/transcribing/transcribing.module'; +import { AppReferentialFormModule } from '@app/referential/form/referential-form.module'; +import { AppReferentialPipesModule } from '@app/referential/pipes/referential-pipes.module'; +import { MatSidenavModule } from '@angular/material/sidenav'; +import { AppPmfmFormFieldModule } from '@app/referential/pmfm/field/pmfm.form-field.module'; +import { AppExtractionButtonModule } from '@app/extraction/button/extraction-button.module'; +let AppStrategyModule = class AppStrategyModule { +}; +AppStrategyModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TextMaskModule, + TranslateModule.forChild(), + MatSidenavModule, + // App modules + AppCoreModule, + AppReferentialFormModule, + AppReferentialPipesModule, + AppPmfmFormFieldModule, + AppTranscribingModule, + AppExtractionButtonModule, + ], + declarations: [ + // Pipes + // Components + StrategiesPage, + StrategyPage, + StrategyForm, + StrategiesTable, + PmfmStrategiesTable, + SamplingStrategyPage, + SamplingStrategyForm, + SamplingStrategiesTable, + StrategyModal + ], + exports: [ + TranslateModule, + // Pipes + // Components + StrategiesPage, + StrategyPage, + StrategiesTable, + SamplingStrategyPage, + SamplingStrategiesTable, + PmfmStrategiesTable + ] + }) +], AppStrategyModule); +export { AppStrategyModule }; +//# sourceMappingURL=strategy.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/strategy.module.js.map b/out-tsc/app/app/referential/strategy/strategy.module.js.map new file mode 100644 index 000000000..faf379844 --- /dev/null +++ b/out-tsc/app/app/referential/strategy/strategy.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"strategy.module.js","sourceRoot":"","sources":["../../../../../src/app/referential/strategy/strategy.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAC5F,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AA6CrF,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAC7B,CAAA;AADY,iBAAiB;IA3C7B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,cAAc;YACd,eAAe,CAAC,QAAQ,EAAE;YAC1B,gBAAgB;YAEhB,cAAc;YACd,aAAa;YACb,wBAAwB;YACxB,yBAAyB;YACzB,sBAAsB;YACtB,qBAAqB;YACrB,yBAAyB;SAC1B;QACD,YAAY,EAAE;YACZ,QAAQ;YAER,aAAa;YACb,cAAc;YACd,YAAY;YACZ,YAAY;YACZ,eAAe;YACf,mBAAmB;YACnB,oBAAoB;YACpB,oBAAoB;YACpB,uBAAuB;YACvB,aAAa;SACd;QACD,OAAO,EAAE;YACP,eAAe;YAEf,QAAQ;YAER,aAAa;YACb,cAAc;YACd,YAAY;YACZ,eAAe;YACf,oBAAoB;YACpB,uBAAuB;YACvB,mBAAmB;SACpB;KACF,CAAC;GACW,iBAAiB,CAC7B;SADY,iBAAiB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/strategy.page.js b/out-tsc/app/app/referential/strategy/strategy.page.js new file mode 100644 index 000000000..d71c9a7b7 --- /dev/null +++ b/out-tsc/app/app/referential/strategy/strategy.page.js @@ -0,0 +1,237 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, ViewChild } from '@angular/core'; +import { ValidatorService } from '@e-is/ngx-material-table'; +import { UntypedFormBuilder } from '@angular/forms'; +import { Strategy } from '../services/model/strategy.model'; +import { AccountService, Alerts, AppEntityEditor, firstNotNilPromise, isNil, isNotNil, } from '@sumaris-net/ngx-components'; +import { ReferentialRefService } from '../services/referential-ref.service'; +import { ModalController } from '@ionic/angular'; +import { StrategyForm } from './strategy.form'; +import { StrategyValidatorService } from '../services/validator/strategy.validator'; +import { StrategyService } from '../services/strategy.service'; +import { BehaviorSubject } from 'rxjs'; +import { ReferentialForm } from '../form/referential.form'; +import { debounceTime, filter, tap } from 'rxjs/operators'; +import { environment } from '@environments/environment'; +import { ProgramRefService } from '../services/program-ref.service'; +let StrategyPage = class StrategyPage extends AppEntityEditor { + constructor(injector, formBuilder, accountService, validatorService, dataService, programRefService, referentialRefService, modalCtrl) { + super(injector, Strategy, dataService, { + pathIdAttribute: 'strategyId' + }); + this.injector = injector; + this.formBuilder = formBuilder; + this.accountService = accountService; + this.validatorService = validatorService; + this.programRefService = programRefService; + this.referentialRefService = referentialRefService; + this.modalCtrl = modalCtrl; + this.$program = new BehaviorSubject(null); + this.showImportModal = false; + // default values + this.defaultBackHref = '/referential/programs'; + this._enabled = this.accountService.isAdmin(); + this.tabCount = 4; + this.debug = !environment.production; + } + get form() { + return this.strategyForm.form; + } + ngOnInit() { + super.ngOnInit(); + // Update back href, when program changed + this.registerSubscription(this.$program.subscribe(program => { + if (program && isNotNil(program.id)) { + this.defaultBackHref = `/referential/programs/${program.id}?tab=1`; + } + this.markAsReady(); + this.markForCheck(); + })); + this.registerSubscription(this.referentialForm.form.valueChanges + .pipe(debounceTime(100), filter(() => this.referentialForm.valid), + // DEBUG + tap(value => console.debug('[strategy-page] referentialForm value changes:', value))) + .subscribe(value => this.strategyForm.form.patchValue(Object.assign(Object.assign({}, value), { entityName: undefined })))); + } + setError(err) { + // Special case when user cancelled save. See strategy form + if (err === 'CANCELLED') { + this.askConfirmationToReload(); + return; + } + super.setError(err); + } + load(id, opts) { + const _super = Object.create(null, { + load: { get: () => super.load } + }); + return __awaiter(this, void 0, void 0, function* () { + // Force the load from network + return _super.load.call(this, id, Object.assign(Object.assign({}, opts), { fetchPolicy: 'network-only' })); + }); + } + canUserWrite(data, opts) { + return super.canUserWrite(data, Object.assign(Object.assign({}, opts), { + // Important: sent the opts.program, to check if user is a program manager + program: this.$program.value })); + } + enable(opts) { + super.enable(opts); + if (!this.isNewData) { + this.form.get('label').disable(); + } + } + /* -- protected methods -- */ + registerForms() { + this.addChildForms([ + this.referentialForm, + this.strategyForm + ]); + } + onNewEntity(data, options) { + const _super = Object.create(null, { + onNewEntity: { get: () => super.onNewEntity } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.onNewEntity.call(this, data, options); + data.programId = options.programId; + const program = yield this.programRefService.load(data.programId); + this.$program.next(program); + }); + } + onEntityLoaded(data, options) { + const _super = Object.create(null, { + onEntityLoaded: { get: () => super.onEntityLoaded } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.onEntityLoaded.call(this, data, options); + const program = yield this.programRefService.load(data.programId); + this.$program.next(program); + }); + } + setValue(data) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!data) + return; // Skip + this.referentialForm.setValue(data); + yield this.strategyForm.updateView(data); + // Remember count - see getJsonValueToSave() + this.initialPmfmCount = (_a = data.pmfms) === null || _a === void 0 ? void 0 : _a.length; + this.markAsPristine(); + }); + } + getJsonValueToSave() { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (this.strategyForm.dirty) { + const saved = yield this.strategyForm.save(); + if (!saved) + return; // Skip + } + const data = this.strategyForm.form.value; + // Re add label, because missing when field disable + data.label = this.referentialForm.form.get('label').value; + console.debug('[strategy-page] JSON value to save:', data); + // Workaround to avoid to many PMFM_STRATEGY deletion + const deletedPmfmCount = (this.initialPmfmCount || 0) - (((_a = data.pmfms) === null || _a === void 0 ? void 0 : _a.length) || 0); + if (deletedPmfmCount > 1) { + const confirm = yield Alerts.askConfirmation('PROGRAM.STRATEGY.CONFIRM.MANY_PMFM_DELETED', this.alertCtrl, this.translate, null, { count: deletedPmfmCount }); + if (!confirm) + throw 'CANCELLED'; // Stop + } + return data; + }); + } + downloadAsJson(event, opts = { keepRemoteId: false }) { + return __awaiter(this, void 0, void 0, function* () { + if (event === null || event === void 0 ? void 0 : event.defaultPrevented) + return false; // Skip + event === null || event === void 0 ? void 0 : event.preventDefault(); // Avoid propagation + // Avoid reloading while saving or still loading + yield this.waitIdle(); + const saved = this.dirty && this.valid + // If on field mode AND valid: save silently + ? yield this.save(event) + // Else If desktop mode: ask before save + : yield this.saveIfDirtyAndConfirm(); + if (!saved) + return; // not saved + // Download as JSON + yield this.service.downloadAsJson(this.data, Object.assign(Object.assign({ keepRemoteId: false }, opts), { program: this.$program.value })); + }); + } + askConfirmationToReload() { + return __awaiter(this, void 0, void 0, function* () { + const confirm = yield Alerts.askConfirmation('PROGRAM.STRATEGY.CONFIRM.RELOAD_PAGE', this.alertCtrl, this.translate, null); + if (confirm) { + return this.reload(); + } + }); + } + computeTitle(data) { + return __awaiter(this, void 0, void 0, function* () { + // new data + if (!data || isNil(data.id)) { + return this.translate.get('PROGRAM.STRATEGY.NEW.TITLE').toPromise(); + } + // Existing data + const program = yield firstNotNilPromise(this.$program); + return this.translate.instant('PROGRAM.STRATEGY.EDIT.TITLE', { + program: program.label, + label: data.label || ('#' + data.id) + }); + }); + } + computePageHistory(title) { + const _super = Object.create(null, { + computePageHistory: { get: () => super.computePageHistory } + }); + return __awaiter(this, void 0, void 0, function* () { + return Object.assign(Object.assign({}, (yield _super.computePageHistory.call(this, title))), { matIcon: 'date_range', title: `${this.data.label} - ${this.data.name}`, subtitle: 'REFERENTIAL.ENTITY.PROGRAM' }); + }); + } + getFirstInvalidTabIndex() { + if (this.referentialForm.invalid) + return 0; + if (this.strategyForm.invalid) + return 1; + return -1; + } + markForCheck() { + this.cd.markForCheck(); + } + initTranscribingItemTable(table) { + } + startImport(event) { + } +}; +__decorate([ + ViewChild('referentialForm', { static: true }), + __metadata("design:type", ReferentialForm) +], StrategyPage.prototype, "referentialForm", void 0); +__decorate([ + ViewChild('strategyForm', { static: true }), + __metadata("design:type", StrategyForm) +], StrategyPage.prototype, "strategyForm", void 0); +StrategyPage = __decorate([ + Component({ + selector: 'app-strategy', + templateUrl: 'strategy.page.html', + styleUrls: ['./strategy.page.scss'], + providers: [ + { provide: ValidatorService, useExisting: StrategyValidatorService } + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + UntypedFormBuilder, + AccountService, + StrategyValidatorService, + StrategyService, + ProgramRefService, + ReferentialRefService, + ModalController]) +], StrategyPage); +export { StrategyPage }; +//# sourceMappingURL=strategy.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/strategy/strategy.page.js.map b/out-tsc/app/app/referential/strategy/strategy.page.js.map new file mode 100644 index 000000000..cdd9c6319 --- /dev/null +++ b/out-tsc/app/app/referential/strategy/strategy.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"strategy.page.js","sourceRoot":"","sources":["../../../../../src/app/referential/strategy/strategy.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/table/base-referential.table.js b/out-tsc/app/app/referential/table/base-referential.table.js new file mode 100644 index 000000000..bb509b88b --- /dev/null +++ b/out-tsc/app/app/referential/table/base-referential.table.js @@ -0,0 +1,411 @@ +var BaseReferentialTable_1; +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Directive, Injector, Input, ViewChild } from '@angular/core'; +import { AppFormUtils, changeCaseToUnderscore, CsvUtils, FileResponse, FilesUtils, firstNotNilPromise, isEmptyArray, isNil, isNotNil, isNotNilOrBlank, PropertyFormatPipe, sleep, StartableService, StatusById, StatusList, suggestFromArray, } from '@sumaris-net/ngx-components'; +import { AppBaseTable, BASE_TABLE_SETTINGS_ENUM } from '@app/shared/table/base.table'; +import { UntypedFormBuilder } from '@angular/forms'; +import { debounceTime, filter, switchMap, tap } from 'rxjs/operators'; +import { IonInfiniteScroll, PopoverController } from '@ionic/angular'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { BehaviorSubject, isObservable, of, Subject } from 'rxjs'; +import { HttpEventType } from '@angular/common/http'; +export const IGNORED_ENTITY_COLUMNS = ['__typename', 'id', 'updateDate']; +let BaseReferentialTable = BaseReferentialTable_1 = class BaseReferentialTable extends AppBaseTable { + constructor(injector, dataType, filterType, entityService, validatorService, options) { + super(injector, dataType, filterType, ((options === null || options === void 0 ? void 0 : options.propertyNames) || BaseReferentialTable_1.getEntityDisplayProperties(dataType)), entityService, validatorService, options); + this.showIdColumn = false; + this.canDownload = false; + this.canUpload = false; + this.$status = new BehaviorSubject(null); + this.referentialRefService = injector.get(ReferentialRefService); + this.propertyFormatPipe = injector.get(PropertyFormatPipe); + this.popoverController = injector.get(PopoverController); + this.title = this.i18nColumnPrefix && (this.i18nColumnPrefix + 'TITLE') || ''; + this.logPrefix = '[base-referential-table] '; + this.canUpload = (options === null || options === void 0 ? void 0 : options.canUpload) || false; + this.withStatusId = this.columns.includes('statusId'); + const filterFormConfig = this.getFilterFormConfig(); + this.filterForm = filterFormConfig && injector.get(UntypedFormBuilder).group(filterFormConfig); + } + /** + * Compute columns from entity + * + * @param dataType + * @param validatorService + * @param excludedProperties + */ + static getEntityDisplayProperties(dataType, validatorService, excludedProperties) { + excludedProperties = excludedProperties || IGNORED_ENTITY_COLUMNS; + return Object.keys(validatorService && validatorService.getRowValidator().controls || new dataType()) + .filter(key => !excludedProperties.includes(key)); + } + static getFirstEntityColumn(dataType, excludedProperties) { + excludedProperties = excludedProperties || IGNORED_ENTITY_COLUMNS; + return Object.keys(new dataType()).find(key => !excludedProperties.includes(key)); + } + ngOnInit() { + var _a; + super.ngOnInit(); + // Status + if (this.withStatusId) { + this.registerSubscription(this.translate.get(StatusList.map(status => status.label)) + .subscribe(translations => { + const items = StatusList.map(status => (Object.assign(Object.assign({}, status), { label: translations[status.label] }))); + this.$status.next(items); + })); + this.registerAutocompleteField('statusId', { + showAllOnFocus: false, + items: this.$status, + attributes: ['label'], + displayWith: (statusId) => { + if (typeof statusId === 'object') { + return statusId['label']; + } + return this.translate.instant(StatusById[statusId].label); + }, + mobile: this.mobile + }); + } + // Register autocomplete fields, BEFORE loading column definitions + this.registerAutocompleteFields(); + this.columnDefinitions = this.loadColumnDefinitions(this.options); + this.defaultSortBy = ((_a = this.columnDefinitions[0]) === null || _a === void 0 ? void 0 : _a.key) || 'id'; + this.registerSubscription(this.onRefresh.subscribe(() => { + this.filterForm.markAsUntouched(); + this.filterForm.markAsPristine(); + })); + // Update filter when changes + this.registerSubscription(this.filterForm.valueChanges + .pipe(debounceTime(250), filter((_) => { + const valid = this.filterForm.valid; + if (!valid && this.debug) + AppFormUtils.logFormErrors(this.filterForm); + return valid; + }), + // Update the filter, without reloading the content + tap(json => this.setFilter(json, { emitEvent: false })), + // Save filter in settings (after a debounce time) + debounceTime(500), tap(json => this.settings.savePageSetting(this.settingsId, json, BASE_TABLE_SETTINGS_ENUM.filterKey))) + .subscribe()); + this.ready().then(() => this.restoreFilterOrLoad()); + } + ready() { + const _super = Object.create(null, { + ready: { get: () => super.ready } + }); + return __awaiter(this, void 0, void 0, function* () { + yield (this._dataService instanceof StartableService + ? this._dataService.ready() + : this.settings.ready()); + return _super.ready.call(this); + }); + } + exportToCsv(event) { + return __awaiter(this, void 0, void 0, function* () { + const filename = this.getExportFileName(); + const separator = this.getExportSeparator(); + const encoding = this.getExportEncoding(); + const headers = this.columnDefinitions.map(def => def.key); + const rows = this.dataSource.getRows() + .map(element => element.currentData) + .map(data => this.columnDefinitions.map(definition => this.propertyFormatPipe.transform(data, definition))); + CsvUtils.exportToFile(rows, { filename, headers, separator, encoding }); + }); + } + importFromCsv(event) { + return __awaiter(this, void 0, void 0, function* () { + const { data } = yield FilesUtils.showUploadPopover(this.popoverController, event, { + uniqueFile: true, + fileExtension: '.csv', + uploadFn: (file) => this.uploadFile(file) + }); + const entities = (data || []).flatMap(file => { var _a; return ((_a = file.response) === null || _a === void 0 ? void 0 : _a.body) || []; }); + if (isEmptyArray(entities)) + return; // No entities: skip + console.info(this.logPrefix + `Importing ${entities.length} entities...`, entities); + // Keep non exists entities + const newEntities = entities.filter(entity => isNil(entity.id)); + // Add entities, one by one + yield this.dataSource.dataService.saveAll(newEntities); + yield sleep(1000); + this.onRefresh.emit(); + }); + } + /* -- protected functions -- */ + loadColumnDefinitions(options) { + return ((options === null || options === void 0 ? void 0 : options.propertyNames) || BaseReferentialTable_1.getEntityDisplayProperties(this.dataType)) + .map(key => this.getColumnDefinition(key, options)); + } + registerAutocompleteFields() { + // Can be overwritten by subclasses + } + getColumnDefinition(key, options) { + if (this.autocompleteFields[key]) { + return { + key, + type: 'entity', + label: (this.i18nColumnPrefix) + changeCaseToUnderscore(key).toUpperCase(), + autocomplete: this.autocompleteFields[key] + }; + } + return { + key, + type: this.getColumnType(key), + label: (this.i18nColumnPrefix) + changeCaseToUnderscore(key).toUpperCase() + }; + } + getColumnType(key) { + if (key === 'id' || key.endsWith('Id')) + return 'integer'; + key = key.toLowerCase(); + if (key.endsWith('date')) + return 'date'; + if (key.endsWith('month') || key.endsWith('year')) + return 'integer'; + if (key.startsWith('is')) + return 'boolean'; + if (key.endsWith('label') || key.endsWith('name') || key.endsWith('code') + || key.endsWith('description') || key.endsWith('comments')) + return 'string'; + return 'string'; + } + getFilterFormConfig() { + console.debug(this.logPrefix + ' Creating filter form group...'); + return BaseReferentialTable_1.getEntityDisplayProperties(this.filterType, this.validatorService) + .reduce((config, key) => { + console.debug(this.logPrefix + ' Adding filter control: ' + key); + config[key] = [null]; + return config; + }, {}); + } + getExportFileName() { + var _a; + const key = this.i18nColumnPrefix + 'EXPORT_CSV_FILENAME'; + const filename = this.translate.instant(key, (_a = this.filter) === null || _a === void 0 ? void 0 : _a.asObject()); + if (filename !== key) + return filename; + return 'export.csv'; // Default filename + } + getExportSeparator() { + const key = 'FILE.CSV.SEPARATOR'; + const separator = this.translate.instant(key); + if (separator !== key) + return separator; + return ','; // Default separator + } + getExportEncoding() { + const key = 'FILE.CSV.ENCODING'; + const encoding = this.translate.instant(key); + if (encoding !== key) + return encoding; + return 'UTF-8'; // Default encoding + } + uploadFile(file) { + console.info(this.logPrefix + `Importing CSV file ${file.name}...`); + const separator = this.getExportSeparator(); + const encoding = this.getExportEncoding(); + return CsvUtils.parseFile(file, { encoding, separator }) + .pipe(switchMap(event => { + if (event.type === HttpEventType.UploadProgress) { + const loaded = Math.round(event.loaded * 0.8); + return of(Object.assign(Object.assign({}, event), { loaded })); + } + else if (event instanceof FileResponse) { + return this.uploadCsvRows(event.body); + } + // Unknown event: skip + else { + return of(); + } + }), filter(isNotNil)); + } + uploadCsvRows(rows) { + if (!rows || rows.length <= 1) + throw { message: 'FILE.CSV.ERROR.EMPTY_FILE' }; + const $progress = new Subject(); + const headerNames = rows.splice(0, 1)[0]; + const total = rows.length; + console.debug(this.logPrefix + `Importing ${total} rows...`); + // Check headers + if (headerNames.length <= 1) { + const message = this.translate.instant('FILE.CSV.ERROR.NO_HEADER_OR_INVALID_SEPARATOR', { + separator: this.getExportSeparator() + }); + throw { message }; + } + // Check column names + console.debug(this.logPrefix + `Checking headers: ${headerNames.join(',')}`); + const expectedHeaders = this.columnDefinitions.map(def => def.key); + const unknownHeaders = headerNames.filter(h => !expectedHeaders.includes(h)); + if (unknownHeaders.length) { + const message = this.translate.instant('FILE.CSV.ERROR.UNKNOWN_HEADERS', { + headers: unknownHeaders.join(', ') + }); + throw { message }; + } + $progress.next({ type: HttpEventType.UploadProgress, loaded: -1 }); + const headers = headerNames.map(key => this.columnDefinitions.find(def => def.key === key)); + this.parseCsvRowsToEntities(headers, rows) + .then(entities => this.resolveEntitiesFields(headers, entities)) + .then(entities => this.fillEntitiesId(entities)) + .then((entities) => { + $progress.next(new FileResponse({ body: entities })); + $progress.complete(); + }) + .catch(err => $progress.error(err)); + return $progress.asObservable(); + } + parseCsvRowsToEntities(headers, rows) { + return __awaiter(this, void 0, void 0, function* () { + const defaultValue = this.defaultNewRowValue(); + return rows + .filter(cells => (cells === null || cells === void 0 ? void 0 : cells.length) === headers.length) + .map(cells => { + // Convert to object + const source = headers.reduce((res, fieldDef, i) => { + var _a; + const value = cells[i]; + // Parse sub-object + const attributes = (_a = fieldDef.autocomplete) === null || _a === void 0 ? void 0 : _a.attributes; + if (attributes === null || attributes === void 0 ? void 0 : attributes.length) { + res[fieldDef.key] = value === null || value === void 0 ? void 0 : value.split(' - ', attributes.length).reduce((o, v, j) => { + o[attributes[j]] = v; + return o; + }, {}); + } + // Parse simple field + else { + if (fieldDef.type === 'integer') { + res[fieldDef.key] = parseInt(value); + } + else if (fieldDef.type === 'double') { + res[fieldDef.key] = parseFloat(value); + } + else { + res[fieldDef.key] = isNotNilOrBlank(value) ? value : undefined; + } + } + // Remove null value, to force keeping defaultValue + if (isNil(res[fieldDef.key])) { + delete res[fieldDef.key]; + } + return res; + }, {}); + return Object.assign(Object.assign({}, defaultValue), source); + }); + }); + } + resolveEntitiesFields(headers, entities) { + return __awaiter(this, void 0, void 0, function* () { + const autocompleteFields = headers.filter(def => def.autocomplete && (!!def.autocomplete.suggestFn || def.autocomplete.items)); + if (isEmptyArray(autocompleteFields)) + return entities; + // Prepare suggest functions, from autocomplete field + const suggestFns = autocompleteFields + .map(def => def.autocomplete) + .map(autocomplete => autocomplete.suggestFn + || (isObservable(autocomplete.items) + && ((value, opts) => __awaiter(this, void 0, void 0, function* () { + const items = yield firstNotNilPromise(autocomplete.items); + return suggestFromArray(items, value, opts); + }))) + || ((value, opts) => suggestFromArray(autocomplete.items, value, opts))); + const result = []; + // For each entities + for (const entity of entities) { + let incomplete = false; + // For each field to resolve + for (let i = 0; i < autocompleteFields.length; i++) { + const field = autocompleteFields[i]; + const suggestFn = suggestFns[i]; + const attributes = field.autocomplete.attributes || []; + const obj = entity[field.key]; + let resolveObj; + for (const searchAttribute of attributes) { + const searchValue = obj[searchAttribute]; + const res = yield suggestFn(searchValue, Object.assign(Object.assign({}, field.autocomplete.filter), { searchAttribute })); + const matches = res && (Array.isArray(res) ? res : res.data); + if (matches.length === 1) { + resolveObj = matches[0]; + break; + } + } + // Replace existing object + if (resolveObj) { + entity[field.key] = resolveObj; + } + // Not resolved: warn + else { + incomplete = true; + console.warn(this.logPrefix + `Cannot resolve field ${field.key}`, obj); + } + if (incomplete) + break; // Stop if incomplete + } + // If complete entity: add to result + if (!incomplete) + result.push(entity); + } + // Convert to entity + return result.map(source => { + const target = new this.dataType(); + target.fromObject(source); + return target; + }); + }); + } + fillEntitiesId(entities) { + return __awaiter(this, void 0, void 0, function* () { + // TODO: manage pagination - using JobUtils.fetchAllPages() ? + const existingEntities = (yield this.dataSource.getData()); + // DEBUG - DEV only + /*entities.forEach((entity, i) => { + entity.id = -1 as any; // Avoid using ID in equals() + const other = existingEntities[i]; + if (!entity.equals(other)) { + console.debug('[diff] There is diff between: ', entity, other); + DebugUtils.logEntityDiff(entity, other); + } + });*/ + entities.forEach(entity => { + entity.id = -1; // Avoid equals() to use function unique key, instead of id + const existingEntity = existingEntities.find(other => entity.equals(other)); + // Copy ID, or unset + entity.id = isNotNil(existingEntity) ? existingEntity.id : undefined; + }); + return entities; + }); + } + defaultNewRowValue() { + const statusId = this.withStatusId && (this.$status.value || [])[0] || undefined; + return { + statusId + }; + } +}; +__decorate([ + Input(), + __metadata("design:type", String) +], BaseReferentialTable.prototype, "title", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BaseReferentialTable.prototype, "showIdColumn", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BaseReferentialTable.prototype, "canDownload", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BaseReferentialTable.prototype, "canUpload", void 0); +__decorate([ + ViewChild(IonInfiniteScroll), + __metadata("design:type", IonInfiniteScroll) +], BaseReferentialTable.prototype, "infiniteScroll", void 0); +BaseReferentialTable = BaseReferentialTable_1 = __decorate([ + Directive(), + __metadata("design:paramtypes", [Injector, Function, Function, Object, Object, Object]) +], BaseReferentialTable); +export { BaseReferentialTable }; +//# sourceMappingURL=base-referential.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/table/base-referential.table.js.map b/out-tsc/app/app/referential/table/base-referential.table.js.map new file mode 100644 index 000000000..7de8e9f54 --- /dev/null +++ b/out-tsc/app/app/referential/table/base-referential.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"base-referential.table.js","sourceRoot":"","sources":["../../../../../src/app/referential/table/base-referential.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/table/base-select-entity.modal.js b/out-tsc/app/app/referential/table/base-select-entity.modal.js new file mode 100644 index 000000000..07f9631ed --- /dev/null +++ b/out-tsc/app/app/referential/table/base-select-entity.modal.js @@ -0,0 +1,138 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { Directive, Injector, Input, Optional, ViewChild } from '@angular/core'; +import { ModalController } from '@ionic/angular'; +import { AppTable, EntitiesTableDataSource, isNotEmptyArray, isNotNil, LocalSettingsService, toBoolean } from '@sumaris-net/ngx-components'; +import { Subject } from 'rxjs'; +import { environment } from '@environments/environment'; +let BaseSelectEntityModal = class BaseSelectEntityModal { + constructor(injector, dataType, filterType, dataService, options) { + this.injector = injector; + this.dataType = dataType; + this.options = options; + this.$title = new Subject(); + this.showFilter = true; + this.modalCtrl = injector.get(ModalController); + this.dataService = dataService; + this.filterType = filterType; + } + get loading() { + return this.table && this.table.loading; + } + ngOnInit() { + // Init table + if (!this.table) + throw new Error('Missing table child component'); + if (!this.filter) + throw new Error('Missing \'filter\''); + if (!this.dataService) + throw new Error('Missing \'dataService\''); + // Set defaults + this.allowMultipleSelection = toBoolean(this.allowMultipleSelection, false); + this.mobile = isNotNil(this.mobile) ? this.mobile : this.injector.get(LocalSettingsService).mobile; + this.datasource = new EntitiesTableDataSource(this.dataType, this.dataService, null, Object.assign({ prependNewElements: false, suppressErrors: environment.production }, this.options)); + this.table.setDatasource(this.datasource); + this.table.filter = this.filter; + // Compute title + this.updateTitle(); + this.loadData(); + } + loadData() { + // Load data + setTimeout(() => { + this.table.onRefresh.next('modal'); + this.markForCheck(); + }, 200); + } + selectRow(row) { + return __awaiter(this, void 0, void 0, function* () { + const table = this.table; + if (row && table) { + if (!this.allowMultipleSelection) { + table.selection.clear(); + table.selection.select(row); + yield this.close(); + } + else { + table.selection.toggle(row); + } + } + }); + } + close(event) { + return __awaiter(this, void 0, void 0, function* () { + try { + const items = this.table.selectedEntities; + // Leave, only if there is content + if (isNotEmptyArray(items)) { + this.modalCtrl.dismiss(items); + } + return true; + } + catch (err) { + // nothing to do + return false; + } + }); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.modalCtrl.dismiss(); + }); + } + hasSelection() { + var _a; + const selectionCount = ((_a = this.table.selectedEntities) === null || _a === void 0 ? void 0 : _a.length) || 0; + return selectionCount > 0 && (this.allowMultipleSelection || selectionCount === 1); + } + updateTitle() { + return __awaiter(this, void 0, void 0, function* () { + const title = yield this.computeTitle(); + this.$title.next(title); + }); + } + markForCheck() { + // Can be override by subclasses + } +}; +__decorate([ + ViewChild('table', { static: true }), + __metadata("design:type", AppTable) +], BaseSelectEntityModal.prototype, "table", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BaseSelectEntityModal.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BaseSelectEntityModal.prototype, "showFilter", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BaseSelectEntityModal.prototype, "filter", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BaseSelectEntityModal.prototype, "entityName", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BaseSelectEntityModal.prototype, "allowMultipleSelection", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BaseSelectEntityModal.prototype, "dataService", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], BaseSelectEntityModal.prototype, "filterType", void 0); +BaseSelectEntityModal = __decorate([ + Directive() + // tslint:disable-next-line:directive-class-suffix + , + __param(3, Optional()), + __param(4, Optional()), + __metadata("design:paramtypes", [Injector, Function, Function, Object, Object]) +], BaseSelectEntityModal); +export { BaseSelectEntityModal }; +//# sourceMappingURL=base-select-entity.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/table/base-select-entity.modal.js.map b/out-tsc/app/app/referential/table/base-select-entity.modal.js.map new file mode 100644 index 000000000..747b4efa4 --- /dev/null +++ b/out-tsc/app/app/referential/table/base-select-entity.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"base-select-entity.modal.js","sourceRoot":"","sources":["../../../../../src/app/referential/table/base-select-entity.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/table/referential-file.service.js b/out-tsc/app/app/referential/table/referential-file.service.js new file mode 100644 index 000000000..ff28ebc6b --- /dev/null +++ b/out-tsc/app/app/referential/table/referential-file.service.js @@ -0,0 +1,516 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Directive, Injector, Input } from '@angular/core'; +import { isObservable, of, Subject } from 'rxjs'; +import { filter, switchMap } from 'rxjs/operators'; +import { chainPromises, changeCaseToUnderscore, CsvUtils, EntitiesTableDataSource, EntityUtils, FileResponse, FilesUtils, firstNotNilPromise, isEmptyArray, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, JobUtils, JsonUtils, PropertyFormatPipe, ReferentialUtils, suggestFromArray, Toasts, } from '@sumaris-net/ngx-components'; +import { TranslateService } from '@ngx-translate/core'; +import { HttpEventType } from '@angular/common/http'; +import { PopoverController, ToastController } from '@ionic/angular'; +import { AppReferentialUtils } from '@app/core/services/model/referential.utils'; +import { ReferentialService } from '@app/referential/services/referential.service'; +import { ErrorCodes } from '@app/referential/services/errors'; +let ReferentialFileService = class ReferentialFileService { + constructor(injector, dataSource, columnDefinitions, dataService, dataType) { + var _a; + this.dataSource = dataSource; + this.logPrefix = '[referential-csv-helper] '; + this.importPolicy = 'insert-update'; + this.translate = injector.get(TranslateService); + this.toastController = injector.get(ToastController); + this.popoverController = injector.get(PopoverController); + this.propertyFormatPipe = injector.get(PropertyFormatPipe); + this.columnDefinitions = columnDefinitions; + this.dataService = dataService; + this.dataType = dataType; + this.entityName = (_a = new dataType()) === null || _a === void 0 ? void 0 : _a.entityName; + } + exportToCsv(event, opts) { + return __awaiter(this, void 0, void 0, function* () { + const filename = this.getCsvExportFileName(opts === null || opts === void 0 ? void 0 : opts.context); + const separator = this.getCsvExportSeparator(); + const encoding = this.getExportEncoding(); + const headers = this.columnDefinitions.map(def => def.key); + const entities = yield this.loadEntities(opts); + const rows = entities.map(data => this.columnDefinitions.map(definition => { + if (definition.key === 'levelId' && isNotNil(data.levelId) && this.loadLevelById) { + const levelId = this.loadLevelById(data.levelId); + return this.propertyFormatPipe.transform({ levelId }, definition); + } + return this.propertyFormatPipe.transform(data, definition); + })); + CsvUtils.exportToFile(rows, { filename, headers, separator, encoding }); + }); + } + importFromCsv(event, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + let entities; + try { + const { data } = yield FilesUtils.showUploadPopover(this.popoverController, event, { + uniqueFile: true, + fileExtension: '.csv', + uploadFn: (file) => this.uploadCsvFile(file, filter) + }); + entities = (data || []).flatMap(file => { var _a; return ((_a = file.response) === null || _a === void 0 ? void 0 : _a.body) || []; }); + } + catch (err) { + const message = err && err.message || err; + this.showToast({ + type: 'error', + message: 'REFERENTIAL.ERROR.IMPORT_ENTITIES_ERROR', + messageParams: { error: message }, + showCloseButton: true, + duration: -1 + }); + return; + } + yield this.importEntities(entities, opts); + }); + } + getCsvExportFileName(context) { + const key = this.i18nColumnPrefix + 'EXPORT_CSV_FILENAME'; + const filename = this.translate.instant(key, context || {}); + if (filename !== key) + return filename; + return `${changeCaseToUnderscore(this.entityName)}.csv`; // Default filename + } + getCsvExportSeparator() { + const key = 'FILE.CSV.SEPARATOR'; + const separator = this.translate.instant(key); + if (separator !== key) + return separator; + return ','; // Default separator + } + getExportEncoding() { + const key = 'FILE.CSV.ENCODING'; + const encoding = this.translate.instant(key); + if (encoding !== key) + return encoding; + return 'UTF-8'; // Default encoding + } + uploadCsvFile(file, dataFilter) { + console.info(this.logPrefix + `Importing CSV file ${file.name}...`); + const separator = this.getCsvExportSeparator(); + const encoding = this.getExportEncoding(); + return CsvUtils.parseFile(file, { encoding, separator }) + .pipe(switchMap(event => { + if (event.type === HttpEventType.UploadProgress) { + const loaded = Math.round(event.loaded * 0.8); + return of(Object.assign(Object.assign({}, event), { loaded })); + } + else if (event instanceof FileResponse) { + return this.uploadCsvRows(event.body); + } + // Unknown event: skip + else { + return of(); + } + }), filter(isNotNil)); + } + uploadCsvRows(rows) { + if (!rows || rows.length <= 1) + throw { message: 'FILE.CSV.ERROR.EMPTY_FILE' }; + const $progress = new Subject(); + const headerNames = rows.splice(0, 1)[0]; + const total = rows.length; + console.debug(this.logPrefix + `Importing ${total} rows...`); + // Check headers + if (headerNames.length <= 1) { + const message = this.translate.instant('FILE.CSV.ERROR.NO_HEADER_OR_INVALID_SEPARATOR', { + separator: this.getCsvExportSeparator() + }); + throw { message }; + } + // Check column names + console.debug(this.logPrefix + `Checking headers: ${headerNames.join(',')}`); + const expectedHeaders = this.columnDefinitions.map(def => def.key); + const unknownHeaders = headerNames.filter(h => !expectedHeaders.includes(h)); + if (unknownHeaders.length) { + const message = this.translate.instant('FILE.CSV.ERROR.UNKNOWN_HEADERS', { + headers: unknownHeaders.join(', ') + }); + throw { message }; + } + $progress.next({ type: HttpEventType.UploadProgress, loaded: -1 }); + const headers = headerNames.map(key => this.columnDefinitions.find(def => def.key === key)); + this.parseCsvRowsToEntities(headers, rows) + .then(entities => this.resolveCsvEntityColumns(headers, entities)) + .then(entities => this.fillEntitiesId(entities)) + .then((entities) => { + $progress.next(new FileResponse({ body: entities })); + $progress.complete(); + }) + .catch(err => $progress.error(err)); + return $progress.asObservable(); + } + parseCsvRowsToEntities(headers, rows) { + return __awaiter(this, void 0, void 0, function* () { + const defaultValue = this.defaultNewRowValue(); + return rows + .filter(cells => (cells === null || cells === void 0 ? void 0 : cells.length) === headers.length) + .map(cells => { + // Convert to object + const source = headers.reduce((res, fieldDef, i) => { + var _a; + const value = cells[i]; + // Parse sub-object + const attributes = (_a = fieldDef.autocomplete) === null || _a === void 0 ? void 0 : _a.attributes; + if (attributes === null || attributes === void 0 ? void 0 : attributes.length) { + res[fieldDef.key] = value === null || value === void 0 ? void 0 : value.split(' - ', attributes.length).reduce((o, v, j) => { + o[attributes[j]] = v; + return o; + }, {}); + } + // Parse simple field + else { + if (fieldDef.type === 'integer') { + res[fieldDef.key] = parseInt(value); + } + else if (fieldDef.type === 'double') { + res[fieldDef.key] = parseFloat(value); + } + else { + res[fieldDef.key] = isNotNilOrBlank(value) ? value : undefined; + } + } + // Remove null value, to force keeping defaultValue + if (isNil(res[fieldDef.key])) { + delete res[fieldDef.key]; + } + return res; + }, {}); + return Object.assign(Object.assign({}, defaultValue), source); + }); + }); + } + resolveCsvEntityColumns(headers, entities) { + return __awaiter(this, void 0, void 0, function* () { + const autocompleteFields = headers.filter(def => def.autocomplete && (!!def.autocomplete.suggestFn || def.autocomplete.items)); + if (isEmptyArray(autocompleteFields)) + return entities; + // Prepare suggest functions, from autocomplete field + const suggestFns = autocompleteFields + .map(def => def.autocomplete) + .map(autocomplete => autocomplete.suggestFn + || (isObservable(autocomplete.items) + && ((value, opts) => __awaiter(this, void 0, void 0, function* () { + const items = yield firstNotNilPromise(autocomplete.items); + return suggestFromArray(items, value, opts); + }))) + || ((value, opts) => suggestFromArray(autocomplete.items, value, opts))); + const result = []; + // For each entities + for (const entity of entities) { + let incomplete = false; + // For each field to resolve + for (let i = 0; i < autocompleteFields.length; i++) { + const field = autocompleteFields[i]; + const suggestFn = suggestFns[i]; + const attributes = field.autocomplete.attributes || []; + const obj = entity[field.key]; + let resolveObj; + for (const searchAttribute of attributes) { + const searchValue = obj[searchAttribute]; + if (isNotNilOrBlank(searchValue)) { + const res = yield suggestFn(searchValue, Object.assign(Object.assign({}, field.autocomplete.filter), { searchAttribute })); + const matches = res && (Array.isArray(res) ? res : res.data); + if (matches.length === 1) { + resolveObj = matches[0]; + break; + } + } + } + // Replace existing object + if (resolveObj) { + entity[field.key] = resolveObj; + } + // Not resolved: warn + else if (field.key !== 'parent') { + incomplete = true; + console.warn(this.logPrefix + `Cannot resolve field ${field.key}`, obj); + } + if (incomplete) + break; // Stop if incomplete + } + // If complete entity: add to result + if (!incomplete) + result.push(entity); + } + // Convert to entity + return result.map(source => { + const target = new this.dataType(); + target.fromObject(source); + return target; + }); + }); + } + fillEntitiesId(entities) { + return __awaiter(this, void 0, void 0, function* () { + if (this.dataService instanceof ReferentialService) + return entities; + yield JobUtils.fetchAllPages((offset, size) => this.dataSource.dataService.watchAll(offset, size, 'id', 'asc', { + entityName: this.entityName + }).toPromise(), { + onPageLoaded: ({ data }) => { + entities.filter(e => isNil(e.id)) + .forEach(entity => { + // Avoid equals() to use function unique key, instead of id + entity.id = -1; + // Try to find the entity (ignoring id) + const existingEntity = data.find(other => entity.equals(other)); + // Copy ID, or unset + entity.id = isNotNil(existingEntity) ? existingEntity.id : undefined; + }); + } + }); + return entities; + }); + } + getJsonExportFileName(context) { + const key = this.i18nColumnPrefix + 'EXPORT_JSON_FILENAME'; + const filename = this.translate.instant(key, context || {}); + if (filename !== key) + return filename; + return `${changeCaseToUnderscore(this.entityName)}.json`; // Default filename + } + exportToJson(event, opts) { + return __awaiter(this, void 0, void 0, function* () { + const filename = this.getJsonExportFileName(opts === null || opts === void 0 ? void 0 : opts.context); + const entities = yield this.loadEntities(opts); + JsonUtils.exportToFile(entities, { filename }); + }); + } + importFromJson(event) { + return __awaiter(this, void 0, void 0, function* () { + const { data } = yield FilesUtils.showUploadPopover(this.popoverController, event, { + uniqueFile: true, + fileExtension: '.json', + uploadFn: (file) => this.parseJsonFile(file) + }); + const sources = (data || []).flatMap(file => { var _a; return ((_a = file.response) === null || _a === void 0 ? void 0 : _a.body) || []; }); + if (isEmptyArray(sources)) + return; // No entities: skip + return this.importEntities(sources); + }); + } + importEntities(sources, opts) { + return __awaiter(this, void 0, void 0, function* () { + const importPolicy = (opts === null || opts === void 0 ? void 0 : opts.importPolicy) || this.importPolicy || 'insert-update'; + // Remove entities with id, if policy = 'insert only' + if (importPolicy === 'insert-only') { + sources = sources.filter(source => isNil(source.id)); + if (isEmptyArray(sources)) + return; // No new entities + } + // Sort by ID, to be able to import in the same order + sources = EntityUtils.sort(sources, 'id', 'asc'); + console.info(`[referential-table] Importing ${sources.length} entities...`, sources); + let insertCount = 0; + let updateCount = 0; + let skipCount = 0; + const errors = []; + // Save entities, one by one + const entities = ((yield chainPromises(sources + // Keep non exists entities + .filter(source => source + // Check as label + && isNotNilOrBlank(source.label) + // Check expected entity class + && AppReferentialUtils.getEntityName(source) === this.entityName) + .map(source => () => __awaiter(this, void 0, void 0, function* () { + // Clean ids, update_date, etc. + AppReferentialUtils.cleanIdAndDates(source, false); + try { + // Collect all entities + const missingReferences = []; + const allSources = AppReferentialUtils.collectEntities(source); + // For each resource (by not self) + const internalSources = (allSources === null || allSources === void 0 ? void 0 : allSources.slice(1)) || []; + for (const internalSource of internalSources) { + const subEntityName = AppReferentialUtils.getEntityName(internalSource); + const label = internalSource['label']; + if (subEntityName && isNotNilOrBlank(label) && this.isKnownEntityName(subEntityName)) { + const existingTarget = yield this.loadByLabel(label, { entityName: subEntityName }); + if (existingTarget) { + console.debug(`[referential-table] Found match ${subEntityName}#${existingTarget.id} for {label: '${label}'}`); + internalSource.id = existingTarget.id; + } + else { + missingReferences.push(`${subEntityName}#${label}`); + } + } + else { + // Clean ids, update_date, etc. + AppReferentialUtils.cleanIdAndDates(internalSource, false); + } + } + if (missingReferences.length) + throw this.translate.instant('REFERENTIAL.ERROR.MISSING_REFERENCES', { error: missingReferences.join(', ') }); + const levelId = ReferentialUtils.isNotEmpty(source.levelId) ? source.levelId['id'] : source.levelId; + const target = new this.dataType(); + let skip = false; + try { + const existingTarget = yield this.loadByLabel(source.label, { + entityName: this.entityName, levelId + }); + target.fromObject(Object.assign(Object.assign(Object.assign({}, (existingTarget ? existingTarget.asObject() : {})), source), { id: existingTarget === null || existingTarget === void 0 ? void 0 : existingTarget.id, updateDate: existingTarget === null || existingTarget === void 0 ? void 0 : existingTarget.updateDate, creationDate: existingTarget === null || existingTarget === void 0 ? void 0 : existingTarget['creationDate'] })); + } + catch (err) { + // When insert only mode, ignore error when too many reference exists. + if ((err === null || err === void 0 ? void 0 : err.code) === ErrorCodes.TOO_MANY_REFERENCE_FOUND && importPolicy === 'insert-only') { + skip = true; + } + else + throw err; + } + const isNew = isNil(target.id); + skip = skip || (importPolicy === 'insert-only' && !isNew) + || (importPolicy === 'update-only' && isNew); + if (skip) { + skipCount++; + return null; + } + // Check is user can write + if (!this.dataService.canUserWrite(target)) + return; // Cannot write: skip + // Save + const savedTarget = yield this.dataService.save(target); + // Update counter + insertCount += isNew ? 1 : 0; + updateCount += isNew ? 0 : 1; + return savedTarget; + } + catch (err) { + let message = err && err.message || err; + if (typeof message === 'string') + message = this.translate.instant(message); + const fullMessage = this.translate.instant('REFERENTIAL.ERROR.IMPORT_ENTITY_ERROR', { label: source.label, message }); + errors.push(fullMessage); + console.error(fullMessage); + return null; + } + })))) || []).filter(isNotNil); + if (isNotEmptyArray(errors)) { + if (insertCount > 0 || updateCount > 0) { + console.warn(`[referential-table] Importing ${entities.length} entities [OK] with errors:`, errors); + this.showToast({ + type: 'warning', + message: 'REFERENTIAL.INFO.IMPORT_ENTITIES_WARNING', + messageParams: { insertCount, updateCount, skipCount, errorCount: errors.length, error: `
  • ${errors.join('
  • ')}
` }, + showCloseButton: true, + duration: -1 + }); + } + else { + console.error(`[referential-table] Failed to import entities:`, errors); + this.showToast({ + type: 'error', + message: 'REFERENTIAL.ERROR.IMPORT_ENTITIES_ERROR', + messageParams: { error: `
  • ${errors.join('
  • ')}
` }, + showCloseButton: true, + duration: -1 + }); + } + } + else { + console.info(`[referential-table] Importing ${entities.length} entities [OK]`); + this.showToast({ + type: 'info', + message: 'REFERENTIAL.INFO.IMPORT_ENTITIES_SUCCEED', + messageParams: { insertCount, updateCount, skipCount } + }); + } + }); + } + parseJsonFile(file, opts) { + console.info(`[referential-table] Reading JSON file ${file.name}...`); + return JsonUtils.parseFile(file, { encoding: opts === null || opts === void 0 ? void 0 : opts.encoding }) + .pipe(switchMap(event => { + if (event instanceof FileResponse) { + const body = Array.isArray(event.body) ? event.body : [event.body]; + return of(new FileResponse({ body })); + } + // Unknown event: skip + return of(event); + }), filter(isNotNil)); + } + loadEntities(opts) { + return __awaiter(this, void 0, void 0, function* () { + let entities; + // Load by ids + if (isNotEmptyArray(opts === null || opts === void 0 ? void 0 : opts.ids)) { + const loadOpts = { fetchPolicy: 'no-cache', fullLoad: true }; + if (this.dataService instanceof ReferentialService) { + loadOpts.entityName = this.entityName; + } + entities = (yield chainPromises(opts.ids.map(id => () => __awaiter(this, void 0, void 0, function* () { + const entity = yield this.dataService.load(id, loadOpts); + return entity === null || entity === void 0 ? void 0 : entity.asObject({ keepTypename: true }); + })))).filter(isNotNil); + } + // Load from rows + else { + entities = this.dataSource.getRows() + .map(element => element.currentData); + } + return entities; + }); + } + showToast(opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.toastController) + throw new Error('Missing toastController in component\'s constructor'); + return Toasts.show(this.toastController, this.translate, opts); + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", String) +], ReferentialFileService.prototype, "i18nColumnPrefix", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], ReferentialFileService.prototype, "dataType", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ReferentialFileService.prototype, "dataService", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], ReferentialFileService.prototype, "entityName", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], ReferentialFileService.prototype, "columnDefinitions", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], ReferentialFileService.prototype, "defaultNewRowValue", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], ReferentialFileService.prototype, "isKnownEntityName", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], ReferentialFileService.prototype, "loadByLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], ReferentialFileService.prototype, "loadLevelById", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], ReferentialFileService.prototype, "loadStatusById", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], ReferentialFileService.prototype, "importPolicy", void 0); +ReferentialFileService = __decorate([ + Directive(), + __metadata("design:paramtypes", [Injector, + EntitiesTableDataSource, Array, Object, Function]) +], ReferentialFileService); +export { ReferentialFileService }; +//# sourceMappingURL=referential-file.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/table/referential-file.service.js.map b/out-tsc/app/app/referential/table/referential-file.service.js.map new file mode 100644 index 000000000..9670cbe16 --- /dev/null +++ b/out-tsc/app/app/referential/table/referential-file.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential-file.service.js","sourceRoot":"","sources":["../../../../../src/app/referential/table/referential-file.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/table/referential-ref.table.js b/out-tsc/app/app/referential/table/referential-ref.table.js new file mode 100644 index 000000000..ca9841769 --- /dev/null +++ b/out-tsc/app/app/referential/table/referential-ref.table.js @@ -0,0 +1,186 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { AppTable, changeCaseToUnderscore, EntityUtils, isNotEmptyArray, ReferentialUtils, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, StatusById, StatusList, } from '@sumaris-net/ngx-components'; +import { UntypedFormBuilder } from '@angular/forms'; +import { debounceTime, filter } from 'rxjs/operators'; +import { environment } from '@environments/environment'; +import { BehaviorSubject } from 'rxjs'; +import { ReferentialI18nKeys } from '@app/referential/referential.utils'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +let ReferentialRefTable = class ReferentialRefTable extends AppTable { + constructor(injector, formBuilder, referentialRefService, cd) { + super(injector, + // columns + RESERVED_START_COLUMNS + .concat([ + 'label', + 'name', + 'description', + 'status', + 'comments' + ]) + .concat(RESERVED_END_COLUMNS)); + this.referentialRefService = referentialRefService; + this.cd = cd; + this._mode = 'edit'; + this.statusList = StatusList; + this.statusById = StatusById; + this.$levels = new BehaviorSubject(undefined); + this.showFilter = true; + this.showLevelFilter = true; + this.showStatusFilter = true; + this.showToolbar = false; + this.showPaginator = true; + this.i18nColumnPrefix = 'REFERENTIAL.'; + this.inlineEdition = false; + this.autoLoad = false; // waiting dataSource to be set + this.filterForm = formBuilder.group({ + searchText: [null], + level: [null], + statusId: [null] + }); + // Update filter when changes + this.registerSubscription(this.filterForm.valueChanges + .pipe(debounceTime(250), filter(() => this.filterForm.valid)) + // Applying the filter + .subscribe((json) => { + // Copy previous filter + const baseFilter = Object.assign({}, this.filter); + // Override levelId/levelIds, if user choose a level + if (ReferentialUtils.isNotEmpty(json.level)) { + json.levelIds = [json.level.id]; + baseFilter.levelIds = null; + baseFilter.levelId = null; + } + this.setFilter(Object.assign(Object.assign({}, baseFilter), json), { emitEvent: this.mobile || !this.showToolbar }); + })); + this.debug = !environment.production; + } + set entityName(entityName) { + this.setFilter(Object.assign(Object.assign({}, this.filter), { entityName })); + } + get entityName() { + var _a; + return (_a = this.filter) === null || _a === void 0 ? void 0 : _a.entityName; + } + get mode() { + return this._mode; + } + set mode(value) { + this.setTableMode(value); + } + ngOnInit() { + const _super = Object.create(null, { + ngOnInit: { get: () => super.ngOnInit } + }); + return __awaiter(this, void 0, void 0, function* () { + _super.ngOnInit.call(this); + // Level autocomplete + this.registerAutocompleteField('level', { + items: this.$levels, + showAllOnFocus: true, + mobile: this.mobile + }); + // Load levels + yield this.loadLevels(this.entityName); + }); + } + clearControlValue(event, formControl) { + if (event) + event.stopPropagation(); // Avoid to enter input the field + formControl.setValue(null); + return false; + } + /* -- protected methods -- */ + loadLevels(entityName) { + return __awaiter(this, void 0, void 0, function* () { + let levels = yield this.referentialRefService.loadLevels(entityName); + // Filter with input levelIds, if any + const filter = this.filter; + if (levels && isNotEmptyArray(filter === null || filter === void 0 ? void 0 : filter.levelIds)) { + levels = levels.filter(l => filter.levelIds.includes(l.id)); + } + // Sort by label + if (levels) + levels.sort(EntityUtils.sortComparator('label', 'asc')); + this.$levels.next(levels); + if (isNotEmptyArray(levels)) { + const typeName = levels[0].entityName; + const i18nLevelName = 'REFERENTIAL.ENTITY.' + changeCaseToUnderscore(typeName).toUpperCase(); + const levelName = this.translate.instant(i18nLevelName); + this.i18nLevelName = (levelName !== i18nLevelName) ? levelName : ReferentialI18nKeys.DEFAULT_I18N_LEVEL_NAME; + } + else { + this.i18nLevelName = ReferentialI18nKeys.DEFAULT_I18N_LEVEL_NAME; + } + this.showLevelFilter = this.showLevelFilter && isNotEmptyArray(levels); + return levels; + }); + } + markForCheck() { + this.cd.markForCheck(); + } + setTableMode(value) { + this._mode = value; + switch (value) { + case 'select': + this.inlineEdition = false; + this.initPermanentSelection(); + break; + case 'edit': + default: + this.inlineEdition = true; + this.permanentSelection = null; + break; + } + this.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], ReferentialRefTable.prototype, "showFilter", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ReferentialRefTable.prototype, "showLevelFilter", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ReferentialRefTable.prototype, "showStatusFilter", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ReferentialRefTable.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ReferentialRefTable.prototype, "showPaginator", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], ReferentialRefTable.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], ReferentialRefTable.prototype, "entityName", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], ReferentialRefTable.prototype, "mode", null); +ReferentialRefTable = __decorate([ + Component({ + selector: 'app-referential-ref-table', + templateUrl: './referential-ref.table.html', + styleUrls: ['./referential-ref.table.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + UntypedFormBuilder, + ReferentialRefService, + ChangeDetectorRef]) +], ReferentialRefTable); +export { ReferentialRefTable }; +//# sourceMappingURL=referential-ref.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/table/referential-ref.table.js.map b/out-tsc/app/app/referential/table/referential-ref.table.js.map new file mode 100644 index 000000000..9b24adc59 --- /dev/null +++ b/out-tsc/app/app/referential/table/referential-ref.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential-ref.table.js","sourceRoot":"","sources":["../../../../../src/app/referential/table/referential-ref.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/table/referential-simple.table.js b/out-tsc/app/app/referential/table/referential-simple.table.js new file mode 100644 index 000000000..544adbc81 --- /dev/null +++ b/out-tsc/app/app/referential/table/referential-simple.table.js @@ -0,0 +1,218 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { ValidatorService } from '@e-is/ngx-material-table'; +import { AccountService, AppInMemoryTable, InMemoryEntitiesService, isNil, Referential, ReferentialUtils, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, StatusById, StatusList, } from '@sumaris-net/ngx-components'; +import { ReferentialValidatorService } from '../services/validator/referential.validator'; +import { ReferentialFilter } from '../services/filter/referential.filter'; +import { environment } from '@environments/environment'; +import { Popovers } from '@app/shared/popover/popover.utils'; +import { PopoverController } from '@ionic/angular'; +let SimpleReferentialTable = class SimpleReferentialTable extends AppInMemoryTable { + constructor(injector, accountService, validatorService, memoryDataService, cd) { + super(injector, + // columns + RESERVED_START_COLUMNS.concat(['label', 'name', 'description', 'status', 'updateDate', 'comments']).concat(RESERVED_END_COLUMNS), Referential, memoryDataService, validatorService, { + onRowCreated: (row) => this.onRowCreated(row), + prependNewElements: false, + suppressErrors: true, + }, { + entityName: 'Program', + }); + this.accountService = accountService; + this.validatorService = validatorService; + this.memoryDataService = memoryDataService; + this.cd = cd; + this.statusList = StatusList; + this.statusById = StatusById; + this.canEdit = false; + this.canDelete = false; + this.showToolbar = true; + this.showPaginator = false; + this.useSticky = false; + this.popoverController = injector.get(PopoverController); + this.i18nColumnPrefix = 'REFERENTIAL.'; + this.inlineEdition = true; + this.confirmBeforeDelete = true; + this.autoLoad = false; // waiting parent to load + this.showUpdateDateColumn = false; + this.defaultSortBy = 'id'; + this.defaultSortDirection = 'asc'; + this.debug = !environment.production; + } + set entityName(entityName) { + this.setFilter(Object.assign(Object.assign({}, this.filter), { entityName })); + } + get entityName() { + return this.filter.entityName; + } + set showIdColumn(value) { + this.setShowColumn('id', value); + } + get showIdColumn() { + return this.getShowColumn('id'); + } + set showSelectColumn(value) { + this.setShowColumn('select', value); + } + get showSelectColumn() { + return this.getShowColumn('select'); + } + set showUpdateDateColumn(value) { + this.setShowColumn('updateDate', value); + } + get showUpdateDateColumn() { + return this.getShowColumn('updateDate'); + } + set showCommentsColumn(value) { + this.setShowColumn('comments', value); + } + get showCommentsColumn() { + return this.getShowColumn('comments'); + } + ngOnInit() { + if (this.hasRankOrder) { + this.memoryDataService.addSortByReplacement('id', 'rankOrder'); + } + super.ngOnInit(); + } + ngOnDestroy() { + super.ngOnDestroy(); + this.memoryDataService.stop(); + this.memoryDataService = null; + } + openDescriptionPopover(event, row) { + return __awaiter(this, void 0, void 0, function* () { + const placeholder = this.translate.instant(this.i18nColumnPrefix + 'DESCRIPTION'); + const { data } = yield Popovers.showText(this.popoverController, event, { + editing: this.inlineEdition && this.enabled, + autofocus: this.enabled, + multiline: true, + text: row.currentData.description, + placeholder, + }); + // User cancel + if (isNil(data) || this.disabled) + return; + if (this.inlineEdition) { + if (row.validator) { + row.validator.patchValue({ description: data }); + row.validator.markAsDirty(); + } + else { + row.currentData.description = data; + } + } + }); + } + openCommentPopover(event, row) { + return __awaiter(this, void 0, void 0, function* () { + const placeholder = this.translate.instant(this.i18nColumnPrefix + 'COMMENTS'); + const { data } = yield Popovers.showText(this.popoverController, event, { + editing: this.inlineEdition && this.enabled, + autofocus: this.enabled, + multiline: true, + text: row.currentData.comments, + placeholder, + }); + // User cancel + if (isNil(data) || this.disabled) + return; + if (this.inlineEdition) { + if (row.validator) { + row.validator.patchValue({ comments: data }); + row.validator.markAsDirty(); + } + else { + row.currentData.comments = data; + } + } + }); + } + onRowCreated(row) { + const defaultValues = { + entityName: this.entityName, + }; + if (row.validator) { + row.validator.patchValue(defaultValues); + } + else { + Object.assign(row.currentData, defaultValues); + } + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], SimpleReferentialTable.prototype, "entityName", null); +__decorate([ + Input(), + __metadata("design:type", Object) +], SimpleReferentialTable.prototype, "canEdit", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SimpleReferentialTable.prototype, "canDelete", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SimpleReferentialTable.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SimpleReferentialTable.prototype, "showPaginator", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SimpleReferentialTable.prototype, "hasRankOrder", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SimpleReferentialTable.prototype, "useSticky", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SimpleReferentialTable.prototype, "showIdColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SimpleReferentialTable.prototype, "showSelectColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SimpleReferentialTable.prototype, "showUpdateDateColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SimpleReferentialTable.prototype, "showCommentsColumn", null); +SimpleReferentialTable = __decorate([ + Component({ + selector: 'app-simple-referential-table', + templateUrl: 'referential-simple.table.html', + styleUrls: ['referential-simple.table.scss'], + providers: [ + { provide: ValidatorService, useExisting: ReferentialValidatorService }, + { + provide: InMemoryEntitiesService, + useFactory: () => new InMemoryEntitiesService(Referential, ReferentialFilter, { + equals: ReferentialUtils.equals, + }), + }, + ], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + AccountService, + ValidatorService, + InMemoryEntitiesService, + ChangeDetectorRef]) +], SimpleReferentialTable); +export { SimpleReferentialTable }; +//# sourceMappingURL=referential-simple.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/table/referential-simple.table.js.map b/out-tsc/app/app/referential/table/referential-simple.table.js.map new file mode 100644 index 000000000..fe963fb46 --- /dev/null +++ b/out-tsc/app/app/referential/table/referential-simple.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential-simple.table.js","sourceRoot":"","sources":["../../../../../src/app/referential/table/referential-simple.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/table/referential-table.module.js b/out-tsc/app/app/referential/table/referential-table.module.js new file mode 100644 index 000000000..d1bcac49f --- /dev/null +++ b/out-tsc/app/app/referential/table/referential-table.module.js @@ -0,0 +1,42 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { SelectReferentialModal } from './select-referential.modal'; +import { ReferentialRefTable } from './referential-ref.table'; +import { TranslateModule } from '@ngx-translate/core'; +import { TextMaskModule } from 'angular2-text-mask'; +import { CommonModule } from '@angular/common'; +import { SimpleReferentialTable } from './referential-simple.table'; +import { ReferentialTable } from './referential.table'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppReferentialPipesModule } from '@app/referential/pipes/referential-pipes.module'; +let AppReferentialTableModule = class AppReferentialTableModule { +}; +AppReferentialTableModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TextMaskModule, + TranslateModule.forChild(), + AppCoreModule, + // Sub modules + AppReferentialPipesModule + ], + declarations: [ + // Components + ReferentialTable, + SimpleReferentialTable, + ReferentialRefTable, + SelectReferentialModal + ], + exports: [ + TranslateModule, + // Components + ReferentialTable, + SimpleReferentialTable, + ReferentialRefTable, + SelectReferentialModal + ], + }) +], AppReferentialTableModule); +export { AppReferentialTableModule }; +//# sourceMappingURL=referential-table.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/table/referential-table.module.js.map b/out-tsc/app/app/referential/table/referential-table.module.js.map new file mode 100644 index 000000000..5947f695f --- /dev/null +++ b/out-tsc/app/app/referential/table/referential-table.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential-table.module.js","sourceRoot":"","sources":["../../../../../src/app/referential/table/referential-table.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAgCrF,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;CACrC,CAAA;AADY,yBAAyB;IA7BrC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,cAAc;YACd,eAAe,CAAC,QAAQ,EAAE;YAE1B,aAAa;YAEb,cAAc;YACd,yBAAyB;SAC1B;QACD,YAAY,EAAE;YAEZ,aAAa;YACb,gBAAgB;YAChB,sBAAsB;YACtB,mBAAmB;YACnB,sBAAsB;SACvB;QACD,OAAO,EAAE;YACP,eAAe;YAEf,aAAa;YACb,gBAAgB;YAChB,sBAAsB;YACtB,mBAAmB;YACnB,sBAAsB;SACvB;KACF,CAAC;GACW,yBAAyB,CACrC;SADY,yBAAyB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/table/referential.table.js b/out-tsc/app/app/referential/table/referential.table.js new file mode 100644 index 000000000..408763273 --- /dev/null +++ b/out-tsc/app/app/referential/table/referential.table.js @@ -0,0 +1,753 @@ +var ReferentialTable_1; +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { Component, Inject, InjectionToken, Injector, Input, Optional, ViewChild } from '@angular/core'; +import { BehaviorSubject } from 'rxjs'; +import { debounceTime, filter, map, tap } from 'rxjs/operators'; +import { ValidatorService } from '@e-is/ngx-material-table'; +import { ReferentialValidatorService } from '../services/validator/referential.validator'; +import { ReferentialService } from '../services/referential.service'; +import { PopoverController } from '@ionic/angular'; +import { AccountService, changeCaseToUnderscore, EntityUtils, firstNotNilPromise, isNil, isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrBlank, Referential, referentialToString, removeDuplicatesFromArray, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, sleep, slideUpDownAnimation, StatusById, StatusIds, StatusList, toBoolean, } from '@sumaris-net/ngx-components'; +import { UntypedFormBuilder } from '@angular/forms'; +import { TranslateService } from '@ngx-translate/core'; +import { environment } from '@environments/environment'; +import { ReferentialFilter } from '../services/filter/referential.filter'; +import { MatExpansionPanel } from '@angular/material/expansion'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { ReferentialI18nKeys } from '@app/referential/referential.utils'; +import { ParameterService } from '@app/referential/services/parameter.service'; +import { Parameter } from '@app/referential/services/model/parameter.model'; +import { PmfmService } from '@app/referential/services/pmfm.service'; +import { Pmfm } from '@app/referential/services/model/pmfm.model'; +import { TaxonNameService } from '@app/referential/services/taxon-name.service'; +import { TaxonName } from '@app/referential/services/model/taxon-name.model'; +import { Method } from '@app/referential/pmfm/method/method.model'; +import { BaseReferentialTable } from '@app/referential/table/base-referential.table'; +import { MethodValidatorService } from '@app/referential/pmfm/method/method.validator'; +import { AppBaseTable } from '@app/shared/table/base.table'; +import { ReferentialFileService } from '@app/referential/table/referential-file.service'; +import { FullReferential } from '@app/referential/services/model/referential.model'; +import { ErrorCodes } from '@app/referential/services/errors'; +export const BASE_REFERENTIAL_COLUMNS = ['label', 'name', 'parent', 'level', 'status', 'creationDate', 'updateDate', 'comments']; +export const IGNORED_ENTITY_COLUMNS = ['__typename', 'entityName', 'id', 'statusId', 'levelId', 'properties', 'parentId']; +export const REFERENTIAL_TABLE_SETTINGS_ENUM = { + FILTER_KEY: 'filter', + COMPACT_ROWS_KEY: 'compactRows' +}; +export const DATA_TYPE = new InjectionToken('dataType'); +export const FILTER_TYPE = new InjectionToken('filterType'); +export const DATA_SERVICE = new InjectionToken('dataService'); +let ReferentialTable = ReferentialTable_1 = class ReferentialTable extends AppBaseTable { + constructor(injector, accountService, referentialService, referentialRefService, formBuilder, popoverController, translate, dataType, filterType, entityService) { + super(injector, dataType, filterType, + // columns + RESERVED_START_COLUMNS + .concat(BASE_REFERENTIAL_COLUMNS) + .concat(RESERVED_END_COLUMNS), entityService || injector.get(ReferentialService), injector.get(ValidatorService), { + prependNewElements: false, + suppressErrors: environment.production, + saveOnlyDirtyRows: true + }); + this.accountService = accountService; + this.referentialService = referentialService; + this.referentialRefService = referentialRefService; + this.formBuilder = formBuilder; + this.popoverController = popoverController; + this.translate = translate; + this.$selectedEntity = new BehaviorSubject(undefined); + this.$entities = new BehaviorSubject(undefined); + this.$levels = new BehaviorSubject(undefined); + this.detailsPath = { + Program: '/referential/programs/:id', + Software: '/referential/software/:id?label=:label', + Pmfm: '/referential/pmfm/:id?label=:label', + Parameter: '/referential/parameter/:id?label=:label', + Method: '/referential/method/:id?label=:label', + TaxonName: '/referential/taxonName/:id?label=:label', + TaxonGroup: '/referential/taxonGroup/:id?label=:label', + Metier: '/referential/metier/:id?label=:label', + // Extraction (special case) + ExtractionProduct: '/extraction/product/:id?label=:label' + }; + this.dataTypes = { + Parameter, + Pmfm, + TaxonName, + Unit: FullReferential, + Method, + TaxonGroup: FullReferential + }; + this.dataServices = { + Parameter: ParameterService, + Pmfm: PmfmService, + TaxonName: TaxonNameService, + Unit: ReferentialService, + TaxonGroup: ReferentialService + }; + this.dataValidators = { + Method: MethodValidatorService + }; + this.entityNamesWithParent = ['TaxonGroup', 'TaxonName']; + // Pu sub entity class (not editable without a root entity) + this.excludedEntityNames = [ + 'QualitativeValue', 'RoundWeightConversion', 'WeightLengthConversion', 'ProgramPrivilege' + ]; + this.statusList = StatusList; + this.statusById = StatusById; + this.importPolicies = ['insert-update', 'insert-only', 'update-only']; + this.canOpenDetail = false; + this.canDownload = false; + this.canUpload = false; + this.canSelectEntity = true; + this.title = 'REFERENTIAL.LIST.TITLE'; + this.sticky = false; + this.stickyEnd = false; + this.compact = false; + this.i18nColumnPrefix = 'REFERENTIAL.'; + this.allowRowDetail = false; + this.confirmBeforeDelete = true; + // Allow inline edition only if admin + this.inlineEdition = accountService.isAdmin(); + this.canEdit = accountService.isAdmin(); + this.autoLoad = false; // waiting dataSource to be set + const filterConfig = this.getFilterFormConfig(); + this.filterForm = this.formBuilder.group(filterConfig || {}); + // Default hidden columns + this.excludesColumns.push('parent'); + if (this.mobile) + this.excludesColumns.push('updateDate'); + // FOR DEV ONLY + this.debug = true; + } + set showLevelColumn(value) { + this.setShowColumn('level', value); + } + get showLevelColumn() { + return this.getShowColumn('level'); + } + set showParentColumn(value) { + this.setShowColumn('parent', value); + } + get showParentColumn() { + return this.getShowColumn('parent'); + } + set entityName(value) { + if (this._entityName !== value) { + this._entityName = value; + if (!this.loadingSubject.value) { + this.applyEntityName(value, { skipLocationChange: true }); + } + } + } + get entityName() { + return this._entityName; + } + set importPolicy(value) { + if (this.fileService && this.canUpload) + this.fileService.importPolicy = value; + } + get importPolicy() { + var _a; + return ((_a = this.fileService) === null || _a === void 0 ? void 0 : _a.importPolicy) || 'insert-update'; + } + ngOnInit() { + super.ngOnInit(); + // Defaults + this.persistFilterInSettings = toBoolean(this.persistFilterInSettings, this.canSelectEntity); + // Configure autocomplete fields + this.registerAutocompleteField('level', { + items: this.$levels, + mobile: this.mobile + }); + this.registerAutocompleteField('levelId', { + items: this.$levels, + mobile: this.mobile + }); + this.registerAutocompleteField('parent', { + suggestFn: (value, filter) => this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { entityName: this.entityName })), + attributes: ['label', 'name'], + displayWith: referentialToString + }); + // Load entities + this.registerSubscription(this.referentialService.watchTypes() + .pipe(map(types => types + .filter(type => !this.excludedEntityNames.includes(type.id)) + .map(type => ({ + id: type.id, + label: this.getI18nEntityName(type.id), + level: type.level, + levelLabel: this.getI18nEntityName(type.level) + }))), map(types => EntityUtils.sort(types, 'label'))) + .subscribe(types => this.$entities.next(types))); + this.registerSubscription(this.onRefresh.subscribe(() => { + this.filterForm.markAsUntouched(); + this.filterForm.markAsPristine(); + })); + // Update filter when changes + this.registerSubscription(this.filterForm.valueChanges + .pipe(debounceTime(250), filter(() => this.filterForm.valid), tap(value => { + const filter = this.asFilter(value); + this.filterCriteriaCount = filter.countNotEmptyCriteria(); + this.markForCheck(); + // Applying the filter + this.setFilter(filter, { emitEvent: false }); + }), + // Save filter in settings (after a debounce time) + debounceTime(500), tap(json => this.persistFilterInSettings && this.settings.savePageSetting(this.settingsId, json, REFERENTIAL_TABLE_SETTINGS_ENUM.FILTER_KEY))) + .subscribe()); + // Restore compact mode + this.restoreCompactMode(); + if (this.persistFilterInSettings) { + this.restoreFilterOrLoad(); + } + else if (this._entityName) { + this.applyEntityName(this._entityName); + } + } + restoreFilterOrLoad() { + return __awaiter(this, void 0, void 0, function* () { + this.markAsLoading(); + const json = this.settings.getPageSettings(this.settingsId, REFERENTIAL_TABLE_SETTINGS_ENUM.FILTER_KEY); + console.debug('[referentials] Restoring filter from settings...', json); + if (json === null || json === void 0 ? void 0 : json.entityName) { + const filter = this.asFilter(json); + this.filterForm.patchValue(json, { emitEvent: false }); + this.filterCriteriaCount = filter.countNotEmptyCriteria(); + this.markForCheck(); + return this.applyEntityName(filter.entityName); + } + // Check route parameters + const { entity, q, level, status } = this.route.snapshot.queryParams; + if (entity) { + let levelRef; + if (level) { + const levels = yield firstNotNilPromise(this.$levels); + levelRef = levels.find(l => l.id === level); + } + this.filterForm.patchValue({ + entityName: entity, + searchText: q || null, + level: levelRef, + statusId: isNotNil(status) ? +status : null + }, { emitEvent: false }); + return this.applyEntityName(entity, { skipLocationChange: true }); + } + // Load default entity + yield this.applyEntityName(this._entityName || entity || ReferentialTable_1.DEFAULT_ENTITY_NAME); + }); + } + applyEntityName(entityName, opts) { + return __awaiter(this, void 0, void 0, function* () { + opts = Object.assign({ emitEvent: true, skipLocationChange: false }, opts); + this._entityName = entityName; + this.canOpenDetail = false; + this.canDownload = false; + this.canUpload = false; + this.resetError(); + // Wait end of entities loading + if (this.canSelectEntity) { + const entities = yield firstNotNilPromise(this.$entities); + const entity = entities.find(e => e.id === entityName); + if (!entity) { + throw new Error(`[referential] Entity {${entityName}} not found !`); + } + this.$selectedEntity.next(entity); + } + try { + // Load levels + yield this.loadLevels(entityName); + const showLevelColumn = isNotEmptyArray(this.$levels.value); + const showParentColumn = this.entityNamesWithParent.includes(entityName); + const dataType = this.getDataType(entityName); + const validator = this.getValidator(entityName); + const dataService = this.getEntityService(entityName); + const columnDefinitions = this.loadColumnDefinitions(dataType, validator, ['statusId', ...(showLevelColumn && ['levelId'] || [])], [ + ...IGNORED_ENTITY_COLUMNS, + 'creationDate', 'updateDate', + ...(!showParentColumn && ['parent'] || []) + ]); + if (this.fileService) { + this.fileService.columnDefinitions = columnDefinitions; + this.fileService.dataType = dataType; + this.fileService.dataService = dataService; + this.fileService.entityName = entityName; + } + else { + this.fileService = new ReferentialFileService(this.injector, this.dataSource, columnDefinitions, dataService, dataType); + this.fileService.i18nColumnPrefix = this.i18nColumnPrefix; + this.fileService.defaultNewRowValue = () => this.defaultNewRowValue(); + this.fileService.isKnownEntityName = (name) => this.isKnownEntityName(name); + this.fileService.loadByLabel = (label, filter) => this.loadByLabel(label, filter); + this.fileService.entityName = entityName; + this.fileService.loadLevelById = (levelId) => (this.$levels.value || []).find(l => l.id === levelId); + this.fileService.loadStatusById = (statusId) => this.statusById[statusId]; + } + // Load dynamic columns + // TODO enable this + //this.columnDefinitions = this.loadColumnDefinitions(dataType, validator); + this.columnDefinitions = []; + this.displayedColumns = this.getDisplayColumns(); + // Show/Hide some columns (only if entityname can change, otherwise user should show/hide using @Input()) + if (this.canSelectEntity) { + // Level columns + this.showLevelColumn = isNotEmptyArray(this.$levels.value); + // Hide parent columns + this.showParentColumn = this.entityNamesWithParent.includes(entityName); + } + this.canOpenDetail = !!this.detailsPath[entityName]; + this.inlineEdition = !this.canOpenDetail; + this.canDownload = !!this.getEntityService(entityName); + this.canUpload = this.accountService.isAdmin() && this.canDownload && !!this.getDataType(entityName); + this.i18nParentName = this.computeI18nParentName(entityName); + // Applying the filter (will reload if emitEvent = true) + const filter = this.asFilter(Object.assign(Object.assign({}, this.filterForm.value), { level: null, entityName })); + this.filterForm.patchValue({ entityName, level: null }, { emitEvent: false }); + this.setFilter(filter, { emitEvent: opts.emitEvent }); + // Update route location + if (opts.skipLocationChange !== true && this.canSelectEntity) { + this.router.navigate(['.'], { + relativeTo: this.route, + skipLocationChange: false, + queryParams: { + entity: entityName + } + }); + } + } + catch (err) { + console.error(err); + this.setError(err); + } + }); + } + defaultNewRowValue() { + return { entityName: this.entityName, statusId: StatusIds.ENABLE }; + } + onEntityNameChange(entityName) { + return __awaiter(this, void 0, void 0, function* () { + // No change: skip + if (this._entityName === entityName) + return; + this.applyEntityName(entityName); + }); + } + addRow(event) { + const _super = Object.create(null, { + addRow: { get: () => super.addRow } + }); + return __awaiter(this, void 0, void 0, function* () { + // Create new row + const result = yield _super.addRow.call(this, event); + if (!result) + return result; + const row = this.dataSource.getRow(-1); + row.validator.controls['entityName'].setValue(this._entityName); + return true; + }); + } + loadLevels(entityName) { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this.referentialRefService.loadLevels(entityName, { + fetchPolicy: 'network-only' + }); + const levels = (res || []).sort(EntityUtils.sortComparator('label', 'asc')); + this.$levels.next(levels); + if (isNotEmptyArray(levels)) { + const parentEntityName = levels[0].entityName; + const i18nLevelName = 'REFERENTIAL.ENTITY.' + changeCaseToUnderscore(parentEntityName).toUpperCase(); + const levelName = this.translate.instant(i18nLevelName); + this.i18nLevelName = (levelName !== i18nLevelName) ? levelName : ReferentialI18nKeys.DEFAULT_I18N_LEVEL_NAME; + } + else { + this.i18nLevelName = ReferentialI18nKeys.DEFAULT_I18N_LEVEL_NAME; + } + return res; + }); + } + computeI18nParentName(entityName) { + const i18nKey = 'REFERENTIAL.' + changeCaseToUnderscore(entityName).toUpperCase() + '.PARENT'; + const translation = this.translate.instant(i18nKey); + return (translation !== i18nKey) ? translation : ReferentialI18nKeys.DEFAULT_I18N_PARENT_NAME; + } + getI18nEntityName(entityName) { + if (isNil(entityName)) + return undefined; + const tableName = entityName.replace(/([a-z])([A-Z])/g, '$1_$2').toUpperCase(); + const key = `REFERENTIAL.ENTITY.${tableName}`; + let message = this.translate.instant(key); + if (message !== key) + return message; + // No I18n translation: continue + // Use tableName, but replace underscore with space + message = tableName.replace(/[_-]+/g, ' ').toUpperCase() || ''; + // First letter as upper case + if (message.length > 1) { + return message.substring(0, 1) + message.substring(1).toLowerCase(); + } + return message; + } + openRow(id, row) { + const _super = Object.create(null, { + openRow: { get: () => super.openRow } + }); + return __awaiter(this, void 0, void 0, function* () { + const path = this.detailsPath[this._entityName]; + if (isNotNilOrBlank(path)) { + yield this.router.navigateByUrl(path + // Replace the id in the path + .replace(':id', isNotNil(row.currentData.id) ? row.currentData.id.toString() : '') + // Replace the label in the path + .replace(':label', row.currentData.label || '')); + return true; + } + return _super.openRow.call(this, id, row); + }); + } + clearControlValue(event, formControl) { + if (event) + event.stopPropagation(); // Avoid to enter input the field + formControl.setValue(null); + return false; + } + toggleFilterPanelFloating() { + this.filterPanelFloating = !this.filterPanelFloating; + this.markForCheck(); + } + applyFilterAndClosePanel(event) { + this.onRefresh.emit(event); + if (this.filterExpansionPanel && this.filterPanelFloating) + this.filterExpansionPanel.close(); + } + closeFilterPanel() { + if (this.filterExpansionPanel) + this.filterExpansionPanel.close(); + } + resetFilter(event) { + this.filterForm.reset({ entityName: this._entityName }, { emitEvent: true }); + const filter = this.asFilter({}); + this.setFilter(filter, { emitEvent: true }); + this.filterCriteriaCount = 0; + if (this.filterExpansionPanel && this.filterPanelFloating) + this.filterExpansionPanel.close(); + } + patchFilter(partialFilter) { + this.filterForm.patchValue(partialFilter, { emitEvent: true }); + const filter = this.asFilter(this.filterForm.value); + this.setFilter(filter, { emitEvent: true }); + this.filterExpansionPanel.close(); + } + restoreCompactMode(opts) { + if (!this.compact) { + const compact = this.settings.getPageSettings(this.settingsId, REFERENTIAL_TABLE_SETTINGS_ENUM.COMPACT_ROWS_KEY) || false; + if (this.compact !== compact) { + this.compact = compact; + if (!opts || opts.emitEvent !== false) { + this.markForCheck(); + } + } + } + } + toggleCompactMode() { + this.compact = !this.compact; + this.markForCheck(); + this.settings.savePageSetting(this.settingsId, this.compact, REFERENTIAL_TABLE_SETTINGS_ENUM.COMPACT_ROWS_KEY); + } + exportToJson(event) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!this._entityName) + return; // Skip + const ids = this.selection.hasValue() && this.selection.selected.map(row => row.currentData.id); + yield this.fileService.exportToJson(event, { ids, context: (_a = this.filter) === null || _a === void 0 ? void 0 : _a.asObject() }); + }); + } + exportToCsv(event) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!this._entityName) + return; // Skip + const ids = this.selection.hasValue() && this.selection.selected.map(row => row.currentData.id); + yield this.fileService.exportToCsv(event, { ids, context: (_a = this.filter) === null || _a === void 0 ? void 0 : _a.asObject() }); + }); + } + importFromCsv(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.canEdit) + return; // skip + try { + yield this.fileService.importFromCsv(event); + yield sleep(1000); + this.onRefresh.emit(); + } + catch (err) { + console.error(err); + this.setError(err); + } + }); + } + importFromJson(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.canEdit) + return; // skip + try { + yield this.fileService.importFromJson(event); + yield sleep(1000); + this.onRefresh.emit(); + } + catch (err) { + console.error(err); + this.setError(err); + } + }); + } + /* -- protected functions -- */ + loadByLabel(label, filter) { + return __awaiter(this, void 0, void 0, function* () { + if (isNilOrBlank(label)) + throw new Error('Missing required argument \'label\''); + const entityName = filter === null || filter === void 0 ? void 0 : filter.entityName; + if (!entityName) + throw new Error('Missing required argument \'source.entityName\', or \'filter.entityName\''); + const service = this.getEntityService(entityName); + if (!service) + throw new Error('No service defined for the entity name: ' + entityName); + const dataType = this.getDataType(entityName); + if (!dataType) + throw new Error('No dataType defined for the entity name: ' + entityName); + try { + const { data, total } = yield this.referentialService.loadAll(0, 1, 'label', 'asc', Object.assign(Object.assign({}, filter), { entityName, + label })); + if (total === 0) + return undefined; + if (total > 1) + throw { code: ErrorCodes.TOO_MANY_REFERENCE_FOUND, message: `To many match of ${entityName} with label ${label}` }; + const json = data[0]; + const target = new dataType(); + target.fromObject(json); + return target; + } + catch (err) { + const message = err && err.message || err; + console.error(message); + throw err; + } + }); + } + registerAutocompleteFields() { + // Can be overwritten by subclasses + } + loadColumnDefinitions(dataType, validatorService, includedProperties, excludedProperties) { + const properties = BaseReferentialTable.getEntityDisplayProperties(dataType, validatorService, excludedProperties || IGNORED_ENTITY_COLUMNS); + // Force include properties (e.g. level) + if (includedProperties) + includedProperties === null || includedProperties === void 0 ? void 0 : includedProperties.filter(p => !properties.includes(p)).forEach(p => properties.push(p)); + return properties.map(key => this.getColumnDefinition(key)); + } + getColumnDefinition(key) { + if (this.autocompleteFields[key]) { + return { + key, + type: 'entity', + label: (this.i18nColumnPrefix) + changeCaseToUnderscore(key).toUpperCase(), + autocomplete: this.autocompleteFields[key] + }; + } + return { + key, + type: this.getColumnType(key), + label: (this.i18nColumnPrefix) + changeCaseToUnderscore(key).toUpperCase() + }; + } + getColumnType(key) { + if (key === 'id' || key.endsWith('Id')) + return 'integer'; + key = key.toLowerCase(); + if (key.endsWith('date')) + return 'date'; + if (key.endsWith('month') || key.endsWith('year')) + return 'integer'; + if (key.startsWith('is')) + return 'boolean'; + if (key.endsWith('label') || key.endsWith('name') || key.endsWith('code') + || key.endsWith('description') || key.endsWith('comments')) + return 'string'; + return 'string'; + } + getDisplayColumns() { + const columns = removeDuplicatesFromArray(super.getDisplayColumns()) + .filter(key => !RESERVED_END_COLUMNS.includes(key)); + const additionalColumns = (this.columnDefinitions || []).map(col => col.key) + .filter(key => !columns.includes(key)); + return columns + .concat(additionalColumns) + .concat(RESERVED_END_COLUMNS); + } + getFilterFormConfig() { + console.debug('[referential-table] Creating filter form group...'); + // Base form config + const config = { + entityName: [null], + searchText: [null], + level: [null], + parentId: [null], + statusId: [null] + }; + // Add other properties + return Object.keys(new this.filterType()) + .filter(key => !IGNORED_ENTITY_COLUMNS.includes(key) && !config[key]) + .reduce((config, key) => { + console.debug('[referential-table] Adding filter control: ' + key); + config[key] = [null]; + return config; + }, config); + } + getEntityService(entityName) { + entityName = entityName || this._entityName; + if (!entityName) + throw new Error('Missing required argument \'entityName\''); + const serviceToken = this.dataServices[entityName]; + const service = serviceToken && this.injector.get(serviceToken); + if (service && (typeof service.load !== 'function' || typeof service.save !== 'function')) + throw new Error('Not a entities service. Missing load() or save()'); + if (service) + return service; + // Check if can be managed by generic service + if (!this.isKnownEntityName(entityName)) + return undefined; + return this.referentialService; + } + getDataType(entityName) { + entityName = entityName || this._entityName; + const dataType = this.dataTypes[entityName]; + if (dataType) + return dataType; + // Check if can be managed by generic class + if (!this.isKnownEntityName(entityName)) + return undefined; + return Referential; + } + getValidator(entityName) { + entityName = entityName || this._entityName; + const validatorToken = this.dataValidators[entityName]; + const validator = validatorToken && this.injector.get(validatorToken); + if (validator) + return validator; + // Check if can be managed by generic class + if (!this.isKnownEntityName(entityName)) + return undefined; + return this.validatorService; + } + isKnownEntityName(entityName) { + if (!entityName) + return false; + return !!(this.$entities.value || []).find(item => item.id === entityName); + } + openNewRowDetail() { + const _super = Object.create(null, { + openNewRowDetail: { get: () => super.openNewRowDetail } + }); + return __awaiter(this, void 0, void 0, function* () { + const path = this.detailsPath[this._entityName]; + if (path) { + yield this.router.navigateByUrl(path + .replace(':id', 'new') + .replace(':label', '')); + return true; + } + return _super.openNewRowDetail.call(this); + }); + } + asFilter(source) { + return super.asFilter(Object.assign({ entityName: (source === null || source === void 0 ? void 0 : source.entityName) || this._entityName }, source)); + } +}; +ReferentialTable.DEFAULT_ENTITY_NAME = 'Pmfm'; +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], ReferentialTable.prototype, "showLevelColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], ReferentialTable.prototype, "showParentColumn", null); +__decorate([ + Input(), + __metadata("design:type", Object) +], ReferentialTable.prototype, "canOpenDetail", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ReferentialTable.prototype, "canDownload", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ReferentialTable.prototype, "canUpload", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ReferentialTable.prototype, "canSelectEntity", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], ReferentialTable.prototype, "persistFilterInSettings", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ReferentialTable.prototype, "title", void 0); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], ReferentialTable.prototype, "entityName", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], ReferentialTable.prototype, "importPolicy", null); +__decorate([ + Input(), + __metadata("design:type", Object) +], ReferentialTable.prototype, "sticky", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ReferentialTable.prototype, "stickyEnd", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ReferentialTable.prototype, "compact", void 0); +__decorate([ + ViewChild(MatExpansionPanel, { static: true }), + __metadata("design:type", MatExpansionPanel) +], ReferentialTable.prototype, "filterExpansionPanel", void 0); +ReferentialTable = ReferentialTable_1 = __decorate([ + Component({ + selector: 'app-referential-page', + templateUrl: 'referential.table.html', + styleUrls: ['referential.table.scss'], + providers: [ + { provide: ValidatorService, useExisting: ReferentialValidatorService }, + { provide: DATA_TYPE, useValue: Referential }, + { provide: FILTER_TYPE, useValue: ReferentialFilter }, + { provide: DATA_SERVICE, useExisting: ReferentialService }, + ], + animations: [slideUpDownAnimation] + }), + __param(7, Optional()), + __param(7, Inject(DATA_TYPE)), + __param(8, Optional()), + __param(8, Inject(FILTER_TYPE)), + __param(9, Optional()), + __param(9, Inject(DATA_SERVICE)), + __metadata("design:paramtypes", [Injector, + AccountService, + ReferentialService, + ReferentialRefService, + UntypedFormBuilder, + PopoverController, + TranslateService, Function, Function, Object]) +], ReferentialTable); +export { ReferentialTable }; +//# sourceMappingURL=referential.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/table/referential.table.js.map b/out-tsc/app/app/referential/table/referential.table.js.map new file mode 100644 index 000000000..7aa20f49f --- /dev/null +++ b/out-tsc/app/app/referential/table/referential.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"referential.table.js","sourceRoot":"","sources":["../../../../../src/app/referential/table/referential.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/table/select-referential.modal.js b/out-tsc/app/app/referential/table/select-referential.modal.js new file mode 100644 index 000000000..f684ba00e --- /dev/null +++ b/out-tsc/app/app/referential/table/select-referential.modal.js @@ -0,0 +1,52 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { changeCaseToUnderscore, isNilOrBlank, ReferentialRef } from '@sumaris-net/ngx-components'; +import { ReferentialRefService } from '../services/referential-ref.service'; +import { BaseSelectEntityModal } from './base-select-entity.modal'; +import { ReferentialRefFilter } from '@app/referential/services/filter/referential-ref.filter'; +let SelectReferentialModal = class SelectReferentialModal extends BaseSelectEntityModal { + constructor(injector, dataService, cd) { + super(injector, ReferentialRef, ReferentialRefFilter, dataService); + this.cd = cd; + this.showLevelFilter = true; + } + ngOnInit() { + var _a; + this.filter = ReferentialRefFilter.fromObject(Object.assign({ entityName: this.entityName }, this.filter)); + if (isNilOrBlank((_a = this.filter) === null || _a === void 0 ? void 0 : _a.entityName)) + throw new Error('Missing \'entityName\' or \'filter.entityName\''); + super.ngOnInit(); + } + computeTitle() { + return __awaiter(this, void 0, void 0, function* () { + return 'REFERENTIAL.ENTITY.' + changeCaseToUnderscore(this.filter.entityName).toUpperCase(); + }); + } + markForCheck() { + this.cd.markForCheck(); + } + onRowClick(row) { + if (this.allowMultipleSelection) { + this.table.selection.toggle(row); + } + else { + this.close(); + } + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], SelectReferentialModal.prototype, "showLevelFilter", void 0); +SelectReferentialModal = __decorate([ + Component({ + selector: 'app-select-referential-modal', + templateUrl: './select-referential.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + ReferentialRefService, + ChangeDetectorRef]) +], SelectReferentialModal); +export { SelectReferentialModal }; +//# sourceMappingURL=select-referential.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/table/select-referential.modal.js.map b/out-tsc/app/app/referential/table/select-referential.modal.js.map new file mode 100644 index 000000000..ec12f0413 --- /dev/null +++ b/out-tsc/app/app/referential/table/select-referential.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"select-referential.modal.js","sourceRoot":"","sources":["../../../../../src/app/referential/table/select-referential.modal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAU,MAAM,eAAe,CAAC;AAC/G,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAEnG,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAiC,MAAM,4BAA4B,CAAC;AAClG,OAAO,EAAE,oBAAoB,EAAE,MAAM,yDAAyD,CAAC;AAYxF,IAAM,sBAAsB,GAA5B,MAAM,sBACX,SAAQ,qBAA2D;IAKnE,YACE,QAAkB,EAClB,WAAkC,EACxB,EAAqB;QAE/B,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,oBAAoB,EAAE,WAAW,CAAC,CAAC;QAFzD,OAAE,GAAF,EAAE,CAAmB;QALxB,oBAAe,GAAG,IAAI,CAAC;IAQhC,CAAC;IAED,QAAQ;;QACN,IAAI,CAAC,MAAM,GAAG,oBAAoB,CAAC,UAAU,iBAAE,UAAU,EAAE,IAAI,CAAC,UAAU,IAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7F,IAAI,YAAY,CAAC,MAAA,IAAI,CAAC,MAAM,0CAAE,UAAU,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QAE9G,KAAK,CAAC,QAAQ,EAAE,CAAC;IAEnB,CAAC;IAEe,YAAY;;YAC1B,OAAO,qBAAqB,GAAG,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9F,CAAC;KAAA;IAES,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;IAES,UAAU,CAAC,GAAiC;QACpD,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAClC;aACI;YACH,IAAI,CAAC,KAAK,EAAE,CAAC;SACd;IACH,CAAC;CACF,CAAA;AAlCC;IAAC,KAAK,EAAE;;+DAAwB;AAJrB,sBAAsB;IALlC,SAAS,CAAC;QACT,QAAQ,EAAE,8BAA8B;QACxC,WAAW,EAAE,iCAAiC;QAC9C,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAQY,QAAQ;QACL,qBAAqB;QACpB,iBAAiB;GATtB,sBAAsB,CAsClC;SAtCY,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion-ref.service.js b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion-ref.service.js new file mode 100644 index 000000000..8f5e61ce1 --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion-ref.service.js @@ -0,0 +1,107 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { BaseEntityService, CryptoService, EntitiesStorage, GraphqlService, isEmptyArray, isNil, NetworkService, PlatformService } from '@sumaris-net/ngx-components'; +import { Injectable } from '@angular/core'; +import { RoundWeightConversion, RoundWeightConversionRef } from '@app/referential/taxon-group/round-weight-conversion/round-weight-conversion.model'; +import { gql } from '@apollo/client/core'; +import { RoundWeightConversionFragments } from '@app/referential/taxon-group/round-weight-conversion/round-weight-conversion.fragments'; +import { RoundWeightConversionFilter } from '@app/referential/taxon-group/round-weight-conversion/round-weight-conversion.filter'; +import { CacheService } from 'ionic-cache'; +const QUERIES = { + loadAll: gql `query RoundWeightConversions($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: RoundWeightConversionFilterVOInput){ + data: roundWeightConversions(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...RoundWeightConversionRefFragment + } + } + ${RoundWeightConversionFragments.reference}`, + loadAllWithTotal: gql `query RoundWeightConversionsWithTotal($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: RoundWeightConversionFilterVOInput){ + data: roundWeightConversions(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...RoundWeightConversionRefFragment + } + total: roundWeightConversionsCount(filter: $filter) + } + ${RoundWeightConversionFragments.reference}` +}; +const CacheKeys = { + CACHE_GROUP: RoundWeightConversion.TYPENAME, + LOAD: 'roundWeightConversionByFilter', + EMPTY_VALUE: new RoundWeightConversionRef() +}; +let RoundWeightConversionRefService = class RoundWeightConversionRefService extends BaseEntityService { + constructor(graphql, platform, cache, network, entities) { + super(graphql, platform, RoundWeightConversionRef, RoundWeightConversionFilter, { + queries: QUERIES + }); + this.graphql = graphql; + this.platform = platform; + this.cache = cache; + this.network = network; + this.entities = entities; + } + /** + * Convert an alive weight, into the expected dressing/preservation state + * + * @param conversion + * @param value + */ + inverseAliveWeight(conversion, value) { + if (isNil(value) || !conversion) + return undefined; + // Apply round weight (inverse) conversion + return value / conversion.conversionCoefficient; + } + loadByFilter(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + filter = this.asFilter(filter); + // Use cache + if (!opts || opts.cache !== false) { + // Create a unique hash, from args + const cacheKey = [ + CacheKeys.LOAD, + CryptoService.sha256(JSON.stringify(filter.asObject())).substring(0, 8) + ].join('|'); + return this.cache.getOrSetItem(cacheKey, () => this.loadByFilter(filter, Object.assign(Object.assign({}, opts), { cache: false })) + .then(c => c || CacheKeys.EMPTY_VALUE), // Cache not allowed nil value + CacheKeys.CACHE_GROUP) + // map EMPTY to undefined + .then(c => RoundWeightConversionRef.isNotNilOrBlank(c) ? c : undefined); + } + const size = 1; + const res = yield this.loadAll(0, size, 'startDate', 'desc', filter, { withTotal: false, toEntity: false }); + // Not found + if (isEmptyArray(res === null || res === void 0 ? void 0 : res.data)) { + console.debug(this._logPrefix + 'No conversion found!'); + return null; + } + return res.data[0]; + }); + } + loadAll(offset, size, sortBy, sortDirection, filter, opts) { + filter = this.asFilter(filter); + const offline = this.network.offline && (!opts || opts.fetchPolicy !== 'network-only'); + if (offline) { + return this.entities.loadAll(RoundWeightConversion.TYPENAME, { + offset, size, sortBy, sortDirection, + filter: filter.asFilterFn() + }); + } + return super.loadAll(offset, size, sortBy, sortDirection, filter, opts); + } + clearCache() { + return __awaiter(this, void 0, void 0, function* () { + console.info('[round-weight-conversion-ref-service] Clearing cache...'); + yield this.cache.clearGroup(CacheKeys.CACHE_GROUP); + }); + } +}; +RoundWeightConversionRefService = __decorate([ + Injectable({ providedIn: 'root' }) + // @ts-ignore + , + __metadata("design:paramtypes", [GraphqlService, + PlatformService, + CacheService, + NetworkService, + EntitiesStorage]) +], RoundWeightConversionRefService); +export { RoundWeightConversionRefService }; +//# sourceMappingURL=round-weight-conversion-ref.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion-ref.service.js.map b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion-ref.service.js.map new file mode 100644 index 000000000..5a5761129 --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion-ref.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"round-weight-conversion-ref.service.js","sourceRoot":"","sources":["../../../../../../src/app/referential/taxon-group/round-weight-conversion/round-weight-conversion-ref.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.filter.js b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.filter.js new file mode 100644 index 000000000..1eeae797b --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.filter.js @@ -0,0 +1,83 @@ +import { __decorate } from "tslib"; +import { EntityClass, EntityFilter, fromDateISOString, isNil, isNotEmptyArray, isNotNil } from '@sumaris-net/ngx-components'; +import { isMoment } from 'moment'; +let RoundWeightConversionFilter = class RoundWeightConversionFilter extends EntityFilter { + constructor() { + super(...arguments); + this.date = null; + this.taxonGroupId = null; + this.locationId = null; + this.dressingId = null; + this.preservingId = null; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.date = fromDateISOString(source.date); + this.statusIds = source.statusIds; + this.taxonGroupId = source.taxonGroupId; + this.taxonGroupIds = source.taxonGroupIds; + this.locationId = source.locationId; + this.locationIds = source.locationIds; + this.dressingId = source.dressingId; + this.dressingIds = source.dressingIds; + this.preservingId = source.preservingId; + this.preservingIds = source.preservingIds; + } + asObject(opts) { + const target = super.asObject(opts); + if (opts && opts.minify) { + target.taxonGroupIds = isNotNil(this.taxonGroupId) ? [this.taxonGroupId] : this.taxonGroupIds; + delete target.taxonGroupId; + target.locationIds = isNotNil(this.locationId) ? [this.locationId] : this.locationIds; + delete target.locationId; + target.dressingIds = isNotNil(this.dressingId) ? [this.dressingId] : this.dressingIds; + delete target.dressingId; + target.preservingIds = isNotNil(this.preservingId) ? [this.preservingId] : this.preservingIds; + delete target.preservingId; + } + else { + target.taxonGroupId = this.taxonGroupId; + target.taxonGroupIds = this.taxonGroupIds; + target.locationId = this.locationId; + target.locationIds = this.locationIds; + target.dressingId = this.dressingId; + target.dressingIds = this.dressingIds; + target.preservingId = this.preservingId; + target.preservingIds = this.preservingIds; + } + return target; + } + buildFilter() { + const filterFns = super.buildFilter(); + // Sex + const dressingId = this.dressingId; + if (isNotNil(dressingId)) { + filterFns.push(t => t.id === dressingId); + } + // Status + const statusIds = this.statusIds; + if (isNotEmptyArray(statusIds)) { + filterFns.push(t => statusIds.includes(t.statusId)); + } + // Location + const locationId = this.locationId; + if (isNotNil(locationId)) { + filterFns.push(t => (t.locationId === locationId)); + } + // Taxon group + const taxonGroupId = this.taxonGroupId; + if (isNotNil(taxonGroupId)) { + filterFns.push(t => (t.taxonGroupId === taxonGroupId)); + } + // Date + if (this.date && isMoment(this.date)) { + filterFns.push(t => this.date.isSameOrAfter(t.startDate) && (isNil(t.endDate) || this.date.isSameOrBefore(t.endDate))); + } + return filterFns; + } +}; +RoundWeightConversionFilter = __decorate([ + EntityClass({ typename: 'RoundWeightConversionFilterVO' }) +], RoundWeightConversionFilter); +export { RoundWeightConversionFilter }; +//# sourceMappingURL=round-weight-conversion.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.filter.js.map b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.filter.js.map new file mode 100644 index 000000000..7f723bff5 --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"round-weight-conversion.filter.js","sourceRoot":"","sources":["../../../../../../src/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.filter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.fragments.js b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.fragments.js new file mode 100644 index 000000000..013b296ef --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.fragments.js @@ -0,0 +1,43 @@ +import { gql } from '@apollo/client/core'; +import { ReferentialFragments } from '@app/referential/services/referential.fragments'; +export const RoundWeightConversionFragments = { + reference: gql `fragment RoundWeightConversionRefFragment on RoundWeightConversionVO { + id + updateDate + startDate + endDate + conversionCoefficient + locationId + taxonGroupId + dressingId + preservingId + statusId + }`, + full: gql `fragment RoundWeightConversionFragment on RoundWeightConversionVO { + id + updateDate + startDate + endDate + conversionCoefficient + taxonGroupId + locationId + location { + ...LocationFragment + } + dressingId + dressing { + ...LightReferentialFragment + } + preservingId + preserving { + ...LightReferentialFragment + } + statusId + description + comments + creationDate + } + ${ReferentialFragments.location} + ${ReferentialFragments.lightReferential}` +}; +//# sourceMappingURL=round-weight-conversion.fragments.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.fragments.js.map b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.fragments.js.map new file mode 100644 index 000000000..7b400015d --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.fragments.js.map @@ -0,0 +1 @@ +{"version":3,"file":"round-weight-conversion.fragments.js","sourceRoot":"","sources":["../../../../../../src/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.fragments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAEvF,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,SAAS,EAAE,GAAG,CAAA;;;;;;;;;;;IAWZ;IAEF,IAAI,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;IAwBP,oBAAoB,CAAC,QAAQ;IAC7B,oBAAoB,CAAC,gBAAgB,EAAE;CAC1C,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.model.js b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.model.js new file mode 100644 index 000000000..c2669859e --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.model.js @@ -0,0 +1,108 @@ +var RoundWeightConversionRef_1, RoundWeightConversion_1; +import { __decorate, __metadata } from "tslib"; +import { DateUtils, Entity, EntityClass, fromDateISOString, isNotNil, ReferentialRef, ReferentialUtils, toDateISOString, toFloat, toInt } from '@sumaris-net/ngx-components'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +export class BaseRoundWeightConversion extends Entity { + constructor(__typename) { + super(__typename); + this.startDate = null; + this.endDate = null; + this.conversionCoefficient = null; + this.taxonGroupId = null; + this.statusId = null; + this.description = null; + this.comments = null; + this.creationDate = null; + } + fromObject(source, opts) { + var _a, _b; + super.fromObject(source, opts); + // WARN: round to hour, because CSV import can have +1 second (e.g. local time '01/01/1970' can become '01/01/1970 00:00:01') + this.startDate = (_a = fromDateISOString(source.startDate)) === null || _a === void 0 ? void 0 : _a.startOf('day'); + this.endDate = (_b = fromDateISOString(source.endDate)) === null || _b === void 0 ? void 0 : _b.startOf('day'); + this.conversionCoefficient = toFloat(source.conversionCoefficient); + this.taxonGroupId = toInt(source.taxonGroupId); + this.description = source.description; + this.comments = source.comments; + this.statusId = source.statusId; + this.creationDate = fromDateISOString(source.creationDate); + } + asObject(opts) { + const target = super.asObject(opts); + target.creationDate = toDateISOString(this.creationDate); + if (opts === null || opts === void 0 ? void 0 : opts.minify) { + // Convert statusId object into integer + target.statusId = (typeof this.statusId === 'object') ? this.statusId['id'] : this.statusId; + } + return target; + } +} +let RoundWeightConversionRef = RoundWeightConversionRef_1 = class RoundWeightConversionRef extends BaseRoundWeightConversion { + constructor() { + super(RoundWeightConversionRef_1.TYPENAME); + this.locationId = null; + this.dressingId = null; + this.preservingId = null; + } + static isNotNilOrBlank(source) { + return source && isNotNil(source.conversionCoefficient); + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.locationId = source.locationId; + this.dressingId = source.dressingId; + this.preservingId = source.preservingId; + } +}; +RoundWeightConversionRef = RoundWeightConversionRef_1 = __decorate([ + EntityClass({ typename: 'RoundWeightConversionVO' }), + __metadata("design:paramtypes", []) +], RoundWeightConversionRef); +export { RoundWeightConversionRef }; +let RoundWeightConversion = RoundWeightConversion_1 = class RoundWeightConversion extends BaseRoundWeightConversion { + constructor() { + super(RoundWeightConversion_1.TYPENAME); + this.location = null; + this.dressing = null; + this.preserving = null; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.location = source.location && ReferentialRef.fromObject(source.location); + this.dressing = source.dressing && ReferentialRef.fromObject(source.dressing); + this.preserving = source.preserving && ReferentialRef.fromObject(source.preserving); + } + asObject(opts) { + var _a, _b, _c; + const target = super.asObject(opts); + target.location = ((_a = this.location) === null || _a === void 0 ? void 0 : _a.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))) || undefined; + target.dressing = ((_b = this.dressing) === null || _b === void 0 ? void 0 : _b.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))) || undefined; + target.preserving = ((_c = this.preserving) === null || _c === void 0 ? void 0 : _c.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))) || undefined; + if (opts === null || opts === void 0 ? void 0 : opts.minify) { + // + } + return target; + } + equals(other) { + // -- DEV only + /*if (this.conversionCoefficient !== other.conversionCoefficient) console.debug('DIFF conversionCoefficient'); + if (!DateUtils.isSame(this.startDate, other.startDate)) console.debug('DIFF startDate'); + if (!DateUtils.isSame(this.endDate, other.endDate)) console.debug('DIFF endDate'); + if (!ReferentialUtils.equals(this.location, other.location)) console.debug('DIFF location'); + if (!ReferentialUtils.equals(this.dressing, other.dressing)) console.debug('DIFF dressing'); + if (!ReferentialUtils.equals(this.preserving, other.preserving)) console.debug('DIFF preserving');*/ + return (super.equals(other) && isNotNil(this.id)) || + // Functional unique key + ((this.taxonGroupId === other.taxonGroupId) + && DateUtils.isSame(this.startDate, other.startDate) + && ReferentialUtils.equals(this.location, other.location) + && ReferentialUtils.equals(this.dressing, other.dressing) + && ReferentialUtils.equals(this.preserving, other.preserving)); + } +}; +RoundWeightConversion = RoundWeightConversion_1 = __decorate([ + EntityClass({ typename: 'RoundWeightConversionVO' }), + __metadata("design:paramtypes", []) +], RoundWeightConversion); +export { RoundWeightConversion }; +//# sourceMappingURL=round-weight-conversion.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.model.js.map b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.model.js.map new file mode 100644 index 000000000..3d591db5e --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"round-weight-conversion.model.js","sourceRoot":"","sources":["../../../../../../src/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.service.js b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.service.js new file mode 100644 index 000000000..482acde6a --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.service.js @@ -0,0 +1,57 @@ +import { __decorate, __metadata } from "tslib"; +import { BaseEntityService, GraphqlService, PlatformService } from '@sumaris-net/ngx-components'; +import { Injectable } from '@angular/core'; +import { RoundWeightConversion } from './round-weight-conversion.model'; +import { RoundWeightConversionFilter } from './round-weight-conversion.filter'; +import { gql } from '@apollo/client/core'; +import { RoundWeightConversionFragments } from './round-weight-conversion.fragments'; +import { MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +const QUERIES = { + loadAll: gql `query RoundWeightConversions($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: RoundWeightConversionFilterVOInput){ + data: roundWeightConversions(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...RoundWeightConversionFragment + } + } + ${RoundWeightConversionFragments.full}`, + loadAllWithTotal: gql `query RoundWeightConversionsWithTotal($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: RoundWeightConversionFilterVOInput){ + data: roundWeightConversions(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...RoundWeightConversionFragment + } + total: roundWeightConversionsCount(filter: $filter) + } + ${RoundWeightConversionFragments.full}` +}; +const MUTATIONS = { + saveAll: gql `mutation SaveRoundWeightConversions($data: [RoundWeightConversionVOInput]!){ + data: saveRoundWeightConversions(data: $data){ + ...RoundWeightConversionFragment + } + } + ${RoundWeightConversionFragments.full}`, + deleteAll: gql `mutation DeleteRoundWeightConversions($ids: [Int]!){ + deleteRoundWeightConversions(ids: $ids) + }`, +}; +let RoundWeightConversionService = class RoundWeightConversionService extends BaseEntityService { + constructor(graphql, platform) { + super(graphql, platform, RoundWeightConversion, RoundWeightConversionFilter, { + queries: QUERIES, + mutations: MUTATIONS + }); + this.graphql = graphql; + this.platform = platform; + } + asObject(entity, opts) { + // Can be override by subclasses + return entity.asObject(Object.assign(Object.assign({}, MINIFY_OPTIONS), opts)); + } +}; +RoundWeightConversionService = __decorate([ + Injectable({ providedIn: 'root' }) + // @ts-ignore + , + __metadata("design:paramtypes", [GraphqlService, + PlatformService]) +], RoundWeightConversionService); +export { RoundWeightConversionService }; +//# sourceMappingURL=round-weight-conversion.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.service.js.map b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.service.js.map new file mode 100644 index 000000000..351e9d06e --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"round-weight-conversion.service.js","sourceRoot":"","sources":["../../../../../../src/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAGL,iBAAiB,EAEjB,cAAc,EAGd,eAAe,EAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAE5E,MAAM,OAAO,GAA6B;IACxC,OAAO,EAAE,GAAG,CAAA;;;;;IAKV,8BAA8B,CAAC,IAAI,EAAE;IAEvC,gBAAgB,EAAE,GAAG,CAAA;;;;;;IAMnB,8BAA8B,CAAC,IAAI,EAAE;CACxC,CAAC;AAGF,MAAM,SAAS,GAA+B;IAC5C,OAAO,EAAE,GAAG,CAAA;;;;;IAKV,8BAA8B,CAAC,IAAI,EAAE;IAEvC,SAAS,EAAE,GAAG,CAAA;;IAEZ;CACH,CAAC;AAGK,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,iBAA6E;IAG7H,YACY,OAAuB,EACvB,QAAyB;QAEnC,KAAK,CAAC,OAAO,EAAE,QAAQ,EACrB,qBAAqB,EAAE,2BAA2B,EAClD;YACE,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,SAAS;SACrB,CAAC,CAAC;QARK,YAAO,GAAP,OAAO,CAAgB;QACvB,aAAQ,GAAR,QAAQ,CAAiB;IAQrC,CAAC;IAES,QAAQ,CAAC,MAA6B,EAAE,IAA4B;QAC5E,gCAAgC;QAChC,OAAO,MAAM,CAAC,QAAQ,iCAAK,cAAc,GAAK,IAAI,EAAE,CAAC;IACvD,CAAC;CACF,CAAA;AAnBY,4BAA4B;IAFxC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;IACjC,aAAa;;qCAKU,cAAc;QACb,eAAe;GAL1B,4BAA4B,CAmBxC;SAnBY,4BAA4B"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.table.js b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.table.js new file mode 100644 index 000000000..f366731ea --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.table.js @@ -0,0 +1,109 @@ +import { __decorate, __metadata } from "tslib"; +import { RoundWeightConversion } from './round-weight-conversion.model'; +import { RoundWeightConversionFilter } from './round-weight-conversion.filter'; +import { Component, Injector, Input } from '@angular/core'; +import { BaseReferentialTable } from '@app/referential/table/base-referential.table'; +import { RoundWeightConversionService } from './round-weight-conversion.service'; +import { Validators } from '@angular/forms'; +import { StatusIds } from '@sumaris-net/ngx-components'; +import { RoundWeightConversionValidatorService } from './round-weight-conversion.validator'; +import moment from 'moment'; +import { LocationLevelIds, ParameterLabelGroups } from '@app/referential/services/model/model.enum'; +let RoundWeightConversionTable = class RoundWeightConversionTable extends BaseReferentialTable { + get taxonGroupIdControl() { + return this.filterForm.get('taxonGroupId'); + } + set taxonGroupId(value) { + if (this.taxonGroupIdControl.value !== value) { + this.taxonGroupIdControl.setValue(value); + } + } + get taxonGroupId() { + return this.taxonGroupIdControl.value; + } + set showTaxonGroupIdColumn(show) { + this.setShowColumn('taxonGroupId', show); + } + get showTaxonGroupIdColumn() { + return this.getShowColumn('taxonGroupId'); + } + constructor(injector, entityService, validatorService) { + super(injector, RoundWeightConversion, RoundWeightConversionFilter, entityService, validatorService, { + i18nColumnPrefix: 'REFERENTIAL.TAXON_GROUP.ROUND_WEIGHT_CONVERSION.', + canUpload: true, + }); + this.showTitle = false; + this.showIdColumn = false; + this.autoLoad = false; // Wait filter + this.sticky = true; + this.logPrefix = '[round-weight-conversion-table] '; + } + ngOnInit() { + super.ngOnInit(); + } + registerAutocompleteFields() { + // Location + this.registerAutocompleteField('location', { + showAllOnFocus: false, + service: this.referentialRefService, + filter: { + entityName: 'Location', + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE], + levelIds: [LocationLevelIds.COUNTRY], + }, + mobile: this.mobile, + }); + // Dressing + this.registerAutocompleteField('dressing', { + showAllOnFocus: false, + suggestFn: (value, filter) => this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { levelLabels: ParameterLabelGroups.DRESSING })), + filter: { + entityName: 'QualitativeValue', + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], + }, + mobile: this.mobile, + }); + // Preserving + this.registerAutocompleteField('preserving', { + showAllOnFocus: false, + suggestFn: (value, filter) => this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { levelLabels: ParameterLabelGroups.PRESERVATION })), + filter: { + entityName: 'QualitativeValue', + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], + }, + mobile: this.mobile, + }); + } + getFilterFormConfig() { + console.debug(this.logPrefix + ' Creating filter form group...'); + return { + taxonGroupId: [null, Validators.required], + }; + } + defaultNewRowValue() { + const creationDate = moment(new Date()); + return Object.assign(Object.assign({}, super.defaultNewRowValue()), { startDate: null, endDate: null, taxonGroupId: this.taxonGroupId, creationDate }); + } +}; +__decorate([ + Input(), + __metadata("design:type", Number), + __metadata("design:paramtypes", [Number]) +], RoundWeightConversionTable.prototype, "taxonGroupId", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], RoundWeightConversionTable.prototype, "showTaxonGroupIdColumn", null); +RoundWeightConversionTable = __decorate([ + Component({ + selector: 'app-round-weight-conversion-table', + templateUrl: '../../table/base-referential.table.html', + styleUrls: ['../../table/base-referential.table.scss'], + }) + // @ts-ignore + , + __metadata("design:paramtypes", [Injector, RoundWeightConversionService, RoundWeightConversionValidatorService]) +], RoundWeightConversionTable); +export { RoundWeightConversionTable }; +//# sourceMappingURL=round-weight-conversion.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.table.js.map b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.table.js.map new file mode 100644 index 000000000..60ed79ccc --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"round-weight-conversion.table.js","sourceRoot":"","sources":["../../../../../../src/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.validator.js b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.validator.js new file mode 100644 index 000000000..206a02690 --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.validator.js @@ -0,0 +1,36 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { AppValidatorService, SharedValidators } from '@sumaris-net/ngx-components'; +let RoundWeightConversionValidatorService = class RoundWeightConversionValidatorService extends AppValidatorService { + constructor(formBuilder) { + super(formBuilder); + this.formBuilder = formBuilder; + } + getRowValidator() { + return this.getFormGroup(); + } + getFormGroupConfig(data, opts) { + return { + id: [data && data.id || null], + startDate: [(data === null || data === void 0 ? void 0 : data.startDate) || null, Validators.compose([Validators.required, SharedValidators.validDate])], + endDate: [(data === null || data === void 0 ? void 0 : data.endDate) || null, SharedValidators.validDate], + conversionCoefficient: [(data === null || data === void 0 ? void 0 : data.conversionCoefficient) || null, Validators.compose([Validators.required, Validators.min(0)])], + taxonGroupId: [(data === null || data === void 0 ? void 0 : data.taxonGroupId) || null], + location: [(data === null || data === void 0 ? void 0 : data.location) || null, Validators.compose([Validators.required, SharedValidators.entity])], + dressing: [(data === null || data === void 0 ? void 0 : data.dressing) || null, Validators.compose([Validators.required, SharedValidators.entity])], + preserving: [(data === null || data === void 0 ? void 0 : data.preserving) || null, Validators.compose([Validators.required, SharedValidators.entity])], + description: [(data === null || data === void 0 ? void 0 : data.description) || null], + comments: [(data === null || data === void 0 ? void 0 : data.comments) || null], + updateDate: [(data === null || data === void 0 ? void 0 : data.updateDate) || null], + creationDate: [(data === null || data === void 0 ? void 0 : data.creationDate) || null], + statusId: [(data === null || data === void 0 ? void 0 : data.statusId) || null, Validators.required] + }; + } +}; +RoundWeightConversionValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder]) +], RoundWeightConversionValidatorService); +export { RoundWeightConversionValidatorService }; +//# sourceMappingURL=round-weight-conversion.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.validator.js.map b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.validator.js.map new file mode 100644 index 000000000..558c7172d --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"round-weight-conversion.validator.js","sourceRoot":"","sources":["../../../../../../src/app/referential/taxon-group/round-weight-conversion/round-weight-conversion.validator.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAoB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAI7E,IAAM,qCAAqC,GAA3C,MAAM,qCAAsC,SAAQ,mBAA0C;IAEnG,YACY,WAA+B;QAEzC,KAAK,CAAC,WAAW,CAAC,CAAC;QAFT,gBAAW,GAAX,WAAW,CAAoB;IAG3C,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED,kBAAkB,CAAC,IAA4B,EAAE,IAAS;QACxD,OAAO;YACL,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC;YAC7B,SAAS,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,KAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;YAC3G,OAAO,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,KAAI,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC;YAC5D,qBAAqB,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,qBAAqB,KAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1H,YAAY,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,KAAI,IAAI,CAAC;YAC1C,QAAQ,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YACtG,QAAQ,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YACtG,UAAU,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,KAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1G,WAAW,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,KAAI,IAAI,CAAC;YACxC,QAAQ,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,IAAI,CAAC;YAClC,UAAU,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,KAAI,IAAI,CAAC;YACtC,YAAY,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,KAAI,IAAI,CAAC;YAC1C,QAAQ,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;SACxD,CAAC;IACJ,CAAC;CAEF,CAAA;AA9BY,qCAAqC;IADjD,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAIN,kBAAkB;GAHhC,qCAAqC,CA8BjD;SA9BY,qCAAqC"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/taxon-group-routing.module.js b/out-tsc/app/app/referential/taxon-group/taxon-group-routing.module.js new file mode 100644 index 000000000..d8216d13e --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/taxon-group-routing.module.js @@ -0,0 +1,28 @@ +import { __decorate } from "tslib"; +import { RouterModule } from '@angular/router'; +import { NgModule } from '@angular/core'; +import { TaxonGroupPage } from '@app/referential/taxon-group/taxon-group.page'; +import { AppTaxonGroupModule } from '@app/referential/taxon-group/taxon-group.module'; +const routes = [ + { + path: ':id', + pathMatch: 'full', + component: TaxonGroupPage, + data: { + profile: 'ADMIN' + } + } +]; +let AppTaxonGroupRoutingModule = class AppTaxonGroupRoutingModule { +}; +AppTaxonGroupRoutingModule = __decorate([ + NgModule({ + imports: [ + AppTaxonGroupModule, + RouterModule.forChild(routes) + ], + exports: [RouterModule] + }) +], AppTaxonGroupRoutingModule); +export { AppTaxonGroupRoutingModule }; +//# sourceMappingURL=taxon-group-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/taxon-group-routing.module.js.map b/out-tsc/app/app/referential/taxon-group/taxon-group-routing.module.js.map new file mode 100644 index 000000000..cc17bae3b --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/taxon-group-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"taxon-group-routing.module.js","sourceRoot":"","sources":["../../../../../src/app/referential/taxon-group/taxon-group-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAEtF,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,cAAc;QACzB,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO;SACjB;KACF;CACF,CAAC;AASK,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;CAAI,CAAA;AAA9B,0BAA0B;IAPtC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,mBAAmB;YACnB,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC9B;QACD,OAAO,EAAE,CAAC,YAAY,CAAC;KACxB,CAAC;GACW,0BAA0B,CAAI;SAA9B,0BAA0B"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/taxon-group.module.js b/out-tsc/app/app/referential/taxon-group/taxon-group.module.js new file mode 100644 index 000000000..053a6f86e --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/taxon-group.module.js @@ -0,0 +1,37 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { TranslateModule } from '@ngx-translate/core'; +import { TextMaskModule } from 'angular2-text-mask'; +import { CommonModule } from '@angular/common'; +import { AppCoreModule } from '@app/core/core.module'; +import { TaxonGroupPage } from './taxon-group.page'; +import { RoundWeightConversionTable } from './round-weight-conversion/round-weight-conversion.table'; +import { AppReferentialFormModule } from '@app/referential/form/referential-form.module'; +import { AppReferentialPipesModule } from '@app/referential/pipes/referential-pipes.module'; +let AppTaxonGroupModule = class AppTaxonGroupModule { +}; +AppTaxonGroupModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TextMaskModule, + TranslateModule.forChild(), + AppCoreModule, + // Sub modules + AppReferentialFormModule, + AppReferentialPipesModule + ], + declarations: [ + // Components + RoundWeightConversionTable, + TaxonGroupPage + ], + exports: [ + TranslateModule, + // Components + TaxonGroupPage + ], + }) +], AppTaxonGroupModule); +export { AppTaxonGroupModule }; +//# sourceMappingURL=taxon-group.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/taxon-group.module.js.map b/out-tsc/app/app/referential/taxon-group/taxon-group.module.js.map new file mode 100644 index 000000000..789fd5eb2 --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/taxon-group.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"taxon-group.module.js","sourceRoot":"","sources":["../../../../../src/app/referential/taxon-group/taxon-group.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,yDAAyD,CAAC;AACrG,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AA2BrF,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;CAC/B,CAAA;AADY,mBAAmB;IAzB/B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,cAAc;YACd,eAAe,CAAC,QAAQ,EAAE;YAE1B,aAAa;YAEb,cAAc;YACd,wBAAwB;YACxB,yBAAyB;SAC1B;QACD,YAAY,EAAE;YAEZ,aAAa;YACb,0BAA0B;YAC1B,cAAc;SACf;QACD,OAAO,EAAE;YACP,eAAe;YAEf,aAAa;YACb,cAAc;SACf;KACF,CAAC;GACW,mBAAmB,CAC/B;SADY,mBAAmB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/taxon-group.page.js b/out-tsc/app/app/referential/taxon-group/taxon-group.page.js new file mode 100644 index 000000000..5baf1254c --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/taxon-group.page.js @@ -0,0 +1,95 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, ViewChild } from '@angular/core'; +import { isNotNil, joinPropertiesPath, Referential } from '@sumaris-net/ngx-components'; +import { ReferentialService } from '@app/referential/services/referential.service'; +import { RoundWeightConversionTable } from '@app/referential/taxon-group/round-weight-conversion/round-weight-conversion.table'; +import { TaxonGroupValidatorService } from '@app/referential/taxon-group/taxon-group.validator'; +import { AppReferentialEditor } from '@app/referential/form/referential-editor.class'; +import { ReferentialForm } from '@app/referential/form/referential.form'; +import { TaxonGroupRef } from '@app/referential/services/model/taxon-group.model'; +let TaxonGroupPage = class TaxonGroupPage extends AppReferentialEditor { + constructor(injector, dataService, validatorService) { + super(injector, Referential, dataService, validatorService.getFormGroup(), { + entityName: TaxonGroupRef.ENTITY_NAME, + uniqueLabel: false, + withLevels: true, + tabCount: 2, + }); + } + ngOnInit() { + super.ngOnInit(); + // Set entity name (required for referential form validator) + this.referentialForm.entityName = TaxonGroupRef.ENTITY_NAME; + const autocompleteConfig = { + suggestFn: (value, opts) => this.referentialRefService.suggest(value, opts), + displayWith: (value) => value && joinPropertiesPath(value, ['label', 'name']), + attributes: ['label', 'name'], + columnSizes: [6, 6], + }; + this.registerFieldDefinition({ + key: 'level', + label: `REFERENTIAL.TAXON_GROUP.TAXON_GROUP_TYPE`, + type: 'entity', + autocomplete: { + items: this.$levels, + displayWith: (value) => value && joinPropertiesPath(value, ['label', 'name']), + attributes: ['label', 'name'], + columnSizes: [6, 6], + }, + }); + this.registerFieldDefinition({ + key: 'parent', + label: `REFERENTIAL.TAXON_GROUP.PARENT`, + type: 'entity', + autocomplete: Object.assign(Object.assign({}, autocompleteConfig), { filter: { entityName: 'TaxonGroup', statusIds: [0, 1] } }), + }); + } + /* -- protected methods -- */ + registerForms() { + this.addChildForms([this.referentialForm, this.rwcTable]); + } + setValue(data) { + super.setValue(data); + // Set table filter + if (isNotNil(data === null || data === void 0 ? void 0 : data.id)) { + this.rwcTable.setFilter({ + taxonGroupId: data.id, + }); + this.rwcTable.markAsReady(); + } + } + onEntitySaved(data) { + return __awaiter(this, void 0, void 0, function* () { + // Save table + if (this.rwcTable.dirty) { + yield this.rwcTable.save(); + } + }); + } + getFirstInvalidTabIndex() { + if (this.referentialForm.invalid) + return 0; + if (this.rwcTable.invalid) + return 1; + return -1; + } +}; +__decorate([ + ViewChild('referentialForm', { static: true }), + __metadata("design:type", ReferentialForm) +], TaxonGroupPage.prototype, "referentialForm", void 0); +__decorate([ + ViewChild('rwcTable', { static: true }), + __metadata("design:type", RoundWeightConversionTable) +], TaxonGroupPage.prototype, "rwcTable", void 0); +TaxonGroupPage = __decorate([ + Component({ + selector: 'app-taxon-group', + templateUrl: 'taxon-group.page.html', + styleUrls: ['taxon-group.page.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, ReferentialService, TaxonGroupValidatorService]) +], TaxonGroupPage); +export { TaxonGroupPage }; +//# sourceMappingURL=taxon-group.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/taxon-group.page.js.map b/out-tsc/app/app/referential/taxon-group/taxon-group.page.js.map new file mode 100644 index 000000000..8cd7fcde2 --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/taxon-group.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"taxon-group.page.js","sourceRoot":"","sources":["../../../../../src/app/referential/taxon-group/taxon-group.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/taxon-group.validator.js b/out-tsc/app/app/referential/taxon-group/taxon-group.validator.js new file mode 100644 index 000000000..688a4b145 --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/taxon-group.validator.js @@ -0,0 +1,24 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder } from '@angular/forms'; +import { SharedValidators } from '@sumaris-net/ngx-components'; +import { ReferentialValidatorService } from '@app/referential/services/validator/referential.validator'; +let TaxonGroupValidatorService = class TaxonGroupValidatorService extends ReferentialValidatorService { + constructor(formBuilder) { + super(formBuilder); + this.formBuilder = formBuilder; + } + getRowValidator() { + return this.getFormGroup(); + } + getFormGroupConfig(data, opts) { + const config = super.getFormGroupConfig(data, opts); + return Object.assign(Object.assign({}, config), { parent: [data && data.parentId || null, SharedValidators.entity] }); + } +}; +TaxonGroupValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder]) +], TaxonGroupValidatorService); +export { TaxonGroupValidatorService }; +//# sourceMappingURL=taxon-group.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-group/taxon-group.validator.js.map b/out-tsc/app/app/referential/taxon-group/taxon-group.validator.js.map new file mode 100644 index 000000000..dbb1425d6 --- /dev/null +++ b/out-tsc/app/app/referential/taxon-group/taxon-group.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"taxon-group.validator.js","sourceRoot":"","sources":["../../../../../src/app/referential/taxon-group/taxon-group.validator.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAoB,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAe,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,2DAA2D,CAAC;AAGjG,IAAM,0BAA0B,GAAhC,MAAM,0BAA2B,SAAQ,2BAA2B;IAEzE,YACY,WAA+B;QAEzC,KAAK,CAAC,WAAW,CAAC,CAAC;QAFT,gBAAW,GAAX,WAAW,CAAoB;IAG3C,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED,kBAAkB,CAAC,IAAkB,EAAE,IAA4D;QACjG,MAAM,MAAM,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpD,uCACK,MAAM,KACT,MAAM,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,IAChE;IACJ,CAAC;CAEF,CAAA;AApBY,0BAA0B;IADtC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAIN,kBAAkB;GAHhC,0BAA0B,CAoBtC;SApBY,0BAA0B"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-name/taxon-name-routing.module.js b/out-tsc/app/app/referential/taxon-name/taxon-name-routing.module.js new file mode 100644 index 000000000..b66593e9d --- /dev/null +++ b/out-tsc/app/app/referential/taxon-name/taxon-name-routing.module.js @@ -0,0 +1,28 @@ +import { __decorate } from "tslib"; +import { RouterModule } from '@angular/router'; +import { NgModule } from '@angular/core'; +import { AppTaxonNameModule } from '@app/referential/taxon-name/taxon-name.module'; +import { TaxonNamePage } from '@app/referential/taxon-name/taxon-name.page'; +const routes = [ + { + path: ':id', + pathMatch: 'full', + component: TaxonNamePage, + data: { + profile: 'ADMIN' + } + } +]; +let AppTaxonNameRoutingModule = class AppTaxonNameRoutingModule { +}; +AppTaxonNameRoutingModule = __decorate([ + NgModule({ + imports: [ + AppTaxonNameModule, + RouterModule.forChild(routes) + ], + exports: [RouterModule] + }) +], AppTaxonNameRoutingModule); +export { AppTaxonNameRoutingModule }; +//# sourceMappingURL=taxon-name-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-name/taxon-name-routing.module.js.map b/out-tsc/app/app/referential/taxon-name/taxon-name-routing.module.js.map new file mode 100644 index 000000000..162f57bdd --- /dev/null +++ b/out-tsc/app/app/referential/taxon-name/taxon-name-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"taxon-name-routing.module.js","sourceRoot":"","sources":["../../../../../src/app/referential/taxon-name/taxon-name-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAE5E,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,aAAa;QACxB,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO;SACjB;KACF;CACF,CAAC;AASK,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;CAAI,CAAA;AAA7B,yBAAyB;IAPrC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,kBAAkB;YAClB,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC9B;QACD,OAAO,EAAE,CAAC,YAAY,CAAC;KACxB,CAAC;GACW,yBAAyB,CAAI;SAA7B,yBAAyB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-name/taxon-name.module.js b/out-tsc/app/app/referential/taxon-name/taxon-name.module.js new file mode 100644 index 000000000..27bd4fe28 --- /dev/null +++ b/out-tsc/app/app/referential/taxon-name/taxon-name.module.js @@ -0,0 +1,35 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { TranslateModule } from '@ngx-translate/core'; +import { CommonModule } from '@angular/common'; +import { TaxonNamePage } from './taxon-name.page'; +import { AppCoreModule } from '@app/core/core.module'; +import { WeightLengthConversionTable } from './weight-length-conversion/weight-length-conversion.table'; +import { AppReferentialFormModule } from '@app/referential/form/referential-form.module'; +import { AppReferentialPipesModule } from '@app/referential/pipes/referential-pipes.module'; +let AppTaxonNameModule = class AppTaxonNameModule { +}; +AppTaxonNameModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TranslateModule.forChild(), + AppCoreModule, + // Sub modules + AppReferentialFormModule, + AppReferentialPipesModule + ], + declarations: [ + // Components + WeightLengthConversionTable, + TaxonNamePage + ], + exports: [ + TranslateModule, + // Components + TaxonNamePage + ], + }) +], AppTaxonNameModule); +export { AppTaxonNameModule }; +//# sourceMappingURL=taxon-name.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-name/taxon-name.module.js.map b/out-tsc/app/app/referential/taxon-name/taxon-name.module.js.map new file mode 100644 index 000000000..611bf24af --- /dev/null +++ b/out-tsc/app/app/referential/taxon-name/taxon-name.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"taxon-name.module.js","sourceRoot":"","sources":["../../../../../src/app/referential/taxon-name/taxon-name.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,2DAA2D,CAAC;AACxG,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AA0BrF,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;CAC9B,CAAA;AADY,kBAAkB;IAxB9B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,eAAe,CAAC,QAAQ,EAAE;YAE1B,aAAa;YAEb,cAAc;YACd,wBAAwB;YACxB,yBAAyB;SAC1B;QACD,YAAY,EAAE;YAEZ,aAAa;YACb,2BAA2B;YAC3B,aAAa;SACd;QACD,OAAO,EAAE;YACP,eAAe;YAEf,aAAa;YACb,aAAa;SACd;KACF,CAAC;GACW,kBAAkB,CAC9B;SADY,kBAAkB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-name/taxon-name.page.js b/out-tsc/app/app/referential/taxon-name/taxon-name.page.js new file mode 100644 index 000000000..03b846e80 --- /dev/null +++ b/out-tsc/app/app/referential/taxon-name/taxon-name.page.js @@ -0,0 +1,159 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, ViewChild } from '@angular/core'; +import { isNotNil, joinPropertiesPath } from '@sumaris-net/ngx-components'; +import { TaxonName } from '../services/model/taxon-name.model'; +import { TaxonNameService } from '../services/taxon-name.service'; +import { TaxonNameValidatorService } from '../services/validator/taxon-name.validator'; +import { WeightLengthConversionTable } from '@app/referential/taxon-name/weight-length-conversion/weight-length-conversion.table'; +import { AppReferentialEditor } from '@app/referential/form/referential-editor.class'; +import { ReferentialForm } from '@app/referential/form/referential.form'; +let TaxonNamePage = class TaxonNamePage extends AppReferentialEditor { + constructor(injector, dataService, validatorService) { + super(injector, TaxonName, dataService, validatorService.getFormGroup(), { + entityName: TaxonName.ENTITY_NAME, + tabCount: 2, + }); + this.injector = injector; + } + get useExistingReferenceTaxon() { + return this.form.controls.useExistingReferenceTaxon.value; + } + ngOnInit() { + super.ngOnInit(); + const autocompleteConfig = { + suggestFn: (value, opts) => this.referentialRefService.suggest(value, opts), + displayWith: (value) => value && joinPropertiesPath(value, ['label', 'name']), + attributes: ['label', 'name'], + columnSizes: [6, 6], + }; + this.registerFieldDefinition({ + key: 'parentTaxonName', + label: `REFERENTIAL.TAXON_NAME.PARENT`, + type: 'entity', + autocomplete: Object.assign(Object.assign({}, autocompleteConfig), { filter: { entityName: 'TaxonName', statusIds: [0, 1] } }), + }); + this.registerFieldDefinition({ + key: `taxonomicLevel`, + label: `REFERENTIAL.TAXON_NAME.TAXONOMIC_LEVEL`, + type: 'entity', + autocomplete: Object.assign(Object.assign({}, autocompleteConfig), { filter: { entityName: 'TaxonomicLevel' } }), + }); + this.registerFieldDefinition({ + key: `isReferent`, + label: `REFERENTIAL.TAXON_NAME.IS_REFERENT`, + type: 'boolean', + }); + this.registerFieldDefinition({ + key: `isNaming`, + label: `REFERENTIAL.TAXON_NAME.IS_NAMING`, + type: 'boolean', + }); + this.registerFieldDefinition({ + key: `isVirtual`, + label: `REFERENTIAL.TAXON_NAME.IS_VIRTUAL`, + type: 'boolean', + }); + } + enable() { + //When reload after save new Taxon name, super.enable() set referenceTaxonId to null, that why we save the value before. + const referenceTaxonId = this.form.get('referenceTaxonId').value; + super.enable(); + if (!this.isNewData) { + this.form.get('referenceTaxonId').setValue(referenceTaxonId); + this.form.get('referenceTaxonId').disable(); + } + } + /* -- protected methods -- */ + registerForms() { + this.addChildForms([this.referentialForm, this.wlcTable]); + } + setValue(data) { + if (!data) + return; // Skip + super.setValue(data); + // Set table's filter + if (isNotNil(data.referenceTaxonId)) { + this.wlcTable.setFilter({ + referenceTaxonId: data.referenceTaxonId, + }); + this.wlcTable.markAsReady(); + } + } + getValue() { + const _super = Object.create(null, { + getValue: { get: () => super.getValue } + }); + return __awaiter(this, void 0, void 0, function* () { + const data = yield _super.getValue.call(this); + // Re add reference taxon (field can be disabled) + data.referenceTaxonId = this.form.get('referenceTaxonId').value; + return data; + }); + } + onEntitySaved(data) { + return __awaiter(this, void 0, void 0, function* () { + // Save table + if (this.wlcTable.dirty) { + yield this.wlcTable.save(); + } + }); + } + getFirstInvalidTabIndex() { + if (this.referentialForm.invalid) + return 0; + if (this.wlcTable.invalid) + return 1; + return -1; + } + onNewEntity(data, options) { + const _super = Object.create(null, { + onNewEntity: { get: () => super.onNewEntity } + }); + return __awaiter(this, void 0, void 0, function* () { + // Check Reference Taxon exists + this.form.get('referenceTaxonId').setAsyncValidators((control) => __awaiter(this, void 0, void 0, function* () { + const useExistingReferenceTaxon = this.form.get('useExistingReferenceTaxon').value; + if (this.isNewData && useExistingReferenceTaxon) { + const referenceTaxon = control.enabled && control.value; + if (!referenceTaxon) { + return { required: true }; + } + else if (!(yield this.dataService.referenceTaxonExists(referenceTaxon))) { + return { not_exist: true }; + } + } + return null; + })); + this.form.get('useExistingReferenceTaxon').setAsyncValidators((control) => __awaiter(this, void 0, void 0, function* () { + const useExistingReferenceTaxon = this.form.controls['useExistingReferenceTaxon'].value; + if (useExistingReferenceTaxon) { + this.form.get('referenceTaxonId').updateValueAndValidity(); + } + else { + this.form.get('referenceTaxonId').setValue(null); + } + return null; + })); + yield _super.onNewEntity.call(this, data, options); + }); + } +}; +__decorate([ + ViewChild('referentialForm', { static: true }), + __metadata("design:type", ReferentialForm) +], TaxonNamePage.prototype, "referentialForm", void 0); +__decorate([ + ViewChild('wlcTable', { static: true }), + __metadata("design:type", WeightLengthConversionTable) +], TaxonNamePage.prototype, "wlcTable", void 0); +TaxonNamePage = __decorate([ + Component({ + selector: 'app-taxon-name', + templateUrl: 'taxon-name.page.html', + styleUrls: ['taxon-name.page.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, TaxonNameService, TaxonNameValidatorService]) +], TaxonNamePage); +export { TaxonNamePage }; +//# sourceMappingURL=taxon-name.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-name/taxon-name.page.js.map b/out-tsc/app/app/referential/taxon-name/taxon-name.page.js.map new file mode 100644 index 000000000..991e449fe --- /dev/null +++ b/out-tsc/app/app/referential/taxon-name/taxon-name.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"taxon-name.page.js","sourceRoot":"","sources":["../../../../../src/app/referential/taxon-name/taxon-name.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion-ref.service.js b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion-ref.service.js new file mode 100644 index 000000000..93e43ca82 --- /dev/null +++ b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion-ref.service.js @@ -0,0 +1,166 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { BaseEntityService, CryptoService, EntitiesStorage, GraphqlService, isNil, isNotEmptyArray, isNotNil, NetworkService, PlatformService, toNumber } from '@sumaris-net/ngx-components'; +import { Injectable } from '@angular/core'; +import { WeightLengthConversion, WeightLengthConversionRef } from './weight-length-conversion.model'; +import { WeightLengthConversionFilter } from '@app/referential/services/filter/weight-length-conversion.filter'; +import { gql } from '@apollo/client/core'; +import { WeightLengthConversionFragments } from './weight-length-conversion.fragments'; +import { CacheService } from 'ionic-cache'; +import { LengthMeterConversion, WeightKgConversion } from '@app/referential/services/model/model.enum'; +const QUERIES = { + loadAll: gql `query WeightLengthConversions($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: WeightLengthConversionFilterVOInput){ + data: weightLengthConversions(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...WeightLengthConversionRefFragment + } + } + ${WeightLengthConversionFragments.reference}`, + loadAllWithTotal: gql `query WeightLengthConversionsWithTotal($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: WeightLengthConversionFilterVOInput){ + data: weightLengthConversions(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...WeightLengthConversionRefFragment + } + total: weightLengthConversionsCount(filter: $filter) + } + ${WeightLengthConversionFragments.reference}` +}; +const CacheKeys = { + CACHE_GROUP: WeightLengthConversion.TYPENAME, + LOAD: 'weightLengthConversionByFilter', + EMPTY_VALUE: new WeightLengthConversionRef() +}; +let WeightLengthConversionRefService = class WeightLengthConversionRefService extends BaseEntityService { + constructor(graphql, platform, network, cache, entities) { + super(graphql, platform, WeightLengthConversionRef, WeightLengthConversionFilter, { + queries: QUERIES + }); + this.graphql = graphql; + this.platform = platform; + this.network = network; + this.cache = cache; + this.entities = entities; + this._logPrefix = '[weight-length-conversion-ref-service] '; + } + /** + * Apply a conversion, using this formula : weight = coefA * length ^ coefB + * + * @param conversion + * @param length + * @param opts + * */ + computeWeight(conversion, length, opts) { + var _a, _b; + if (isNil(length) || !WeightLengthConversionRef.isNotNilOrBlank(conversion)) + return undefined; + const lengthPrecision = toNumber(opts === null || opts === void 0 ? void 0 : opts.lengthPrecision, 1); + // Find length conversion coefficient + let lengthUnitConversion = 1; + if (opts.lengthUnit !== ((_a = conversion.lengthUnit) === null || _a === void 0 ? void 0 : _a.label)) { + if (!opts.lengthUnit) + throw new Error(`Unknown unit of length value '${length}'. Cannot compute weight`); + if (!((_b = conversion.lengthUnit) === null || _b === void 0 ? void 0 : _b.label)) + throw new Error(`Unknown conversion length unit, while received length in '${opts.lengthUnit}'. Cannot apply conversion`); + // actual -> meter (pivot) -> expected + lengthUnitConversion = LengthMeterConversion[conversion.lengthUnit.label] / LengthMeterConversion[opts.lengthUnit]; + } + length = length * lengthUnitConversion + // Round to HALP_UP Pmfm's precision - see Allegro implementation (source: CalculatedQuantification.drl) + + 0.5 * lengthPrecision * lengthUnitConversion; + // Apply Weight/Length conversion + const weightKg = conversion.conversionCoefficientA + * Math.pow(length, conversion.conversionCoefficientB) + * toNumber(opts === null || opts === void 0 ? void 0 : opts.individualCount, 1); + // Applying weight conversion + if (opts && opts.weightUnit !== 'kg') { + const unitConversion = WeightKgConversion[opts.weightUnit]; + if (isNil(unitConversion)) { + console.warn(`Unknown weight unit '${opts === null || opts === void 0 ? void 0 : opts.weightUnit}'. Will use 'kg'`); + return weightKg; + } + // Apply inverse conversion, from kg to expected unit + return weightKg / unitConversion; + } + return weightKg; + } + /** + * Get the best fit weight-length conversion. + * Will try to load using this order + *
    + *
  • pmfmId + year + month
  • + *
  • pmfmId + year (without month)
  • + *
  • pmfmId + month (without year)
  • + *
  • TODO: Loop using parameterId (without pmfmId). If found, will convert unit
  • + *
+ * + * @param filter + * @param page + * @param fetchOptions + * @return + */ + loadByFilter(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + filter = this.asFilter(filter); + // Use cache + if (!opts || opts.cache !== false) { + const cacheKey = [ + CacheKeys.LOAD, + CryptoService.sha256(JSON.stringify(filter.asObject())).substring(0, 8) + ].join('|'); + return this.cache.getOrSetItem(cacheKey, () => this.loadByFilter(filter, Object.assign(Object.assign({}, opts), { cache: false })) + .then(c => c || CacheKeys.EMPTY_VALUE), // Cache not allowed nil value + CacheKeys.CACHE_GROUP) + // map EMPTY to undefined + .then(c => WeightLengthConversionRef.isNotNilOrBlank(c) ? c : undefined); + } + const size = 1; + const loadOptions = { withTotal: false, toEntity: false }; + const sortBy = isNil(filter.year) ? 'year' : 'startMonth'; + // First, try with full filter + let res = yield this.loadAll(0, size, sortBy, 'desc', filter, loadOptions); + if (isNotEmptyArray(res === null || res === void 0 ? void 0 : res.data)) + return res.data[0]; + if (isNotNil(filter.month) && isNotNil(filter.year)) { + // Retry on year only (without month) + console.debug(this._logPrefix + 'No conversion found, for [month, year]. Retrying with year only.'); + res = yield this.loadAll(0, size, sortBy, 'desc', Object.assign(Object.assign({}, filter), { month: undefined }), loadOptions); + if (isNotEmptyArray(res === null || res === void 0 ? void 0 : res.data)) + return res.data[0]; + // Retry on month only (without year) + console.debug(this._logPrefix + 'No conversion found, for [year]. Retrying without month only.'); + res = yield this.loadAll(0, size, 'year', 'desc', Object.assign(Object.assign({}, filter), { year: undefined }), loadOptions); + if (isNotEmptyArray(res === null || res === void 0 ? void 0 : res.data)) + return res.data[0]; + } + // Not found + console.debug(this._logPrefix + 'No conversion found!'); + return null; + }); + } + loadAll(offset, size, sortBy, sortDirection, filter, opts) { + filter = this.asFilter(filter); + const offline = this.network.offline && (!opts || opts.fetchPolicy !== 'network-only'); + if (offline) { + return this.entities.loadAll(WeightLengthConversion.TYPENAME, { + offset, size, sortBy, sortDirection, + filter: filter.asFilterFn() + }); + } + return super.loadAll(offset, size, sortBy, sortDirection, filter, opts); + } + clearCache() { + return __awaiter(this, void 0, void 0, function* () { + console.info('[weight-length-conversion-ref-service] Clearing cache...'); + yield this.cache.clearGroup(CacheKeys.CACHE_GROUP); + }); + } +}; +WeightLengthConversionRefService = __decorate([ + Injectable({ providedIn: 'root' }) + // @ts-ignore + , + __metadata("design:paramtypes", [GraphqlService, + PlatformService, + NetworkService, + CacheService, + EntitiesStorage]) +], WeightLengthConversionRefService); +export { WeightLengthConversionRefService }; +//# sourceMappingURL=weight-length-conversion-ref.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion-ref.service.js.map b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion-ref.service.js.map new file mode 100644 index 000000000..422cf56a3 --- /dev/null +++ b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion-ref.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"weight-length-conversion-ref.service.js","sourceRoot":"","sources":["../../../../../../src/app/referential/taxon-name/weight-length-conversion/weight-length-conversion-ref.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.fragments.js b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.fragments.js new file mode 100644 index 000000000..3b322f2c0 --- /dev/null +++ b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.fragments.js @@ -0,0 +1,59 @@ +import { gql } from '@apollo/client/core'; +import { ReferentialFragments } from '@app/referential/services/referential.fragments'; +export const WeightLengthConversionFragments = { + reference: gql `fragment WeightLengthConversionRefFragment on WeightLengthConversionVO { + id + updateDate + year + startMonth + endMonth + conversionCoefficientA + conversionCoefficientB + referenceTaxonId + lengthPmfmIds + lengthPmfmIds + lengthParameterId + lengthUnit { + id + label + entityName + __typename + } + sexId + statusId + rectangleLabels + }`, + full: gql `fragment WeightLengthConversionFragment on WeightLengthConversionVO { + id + updateDate + year + startMonth + endMonth + conversionCoefficientA + conversionCoefficientB + referenceTaxonId + locationId + location { + ...LocationFragment + } + sexId + sex { + ...LightReferentialFragment + } + lengthParameterId + lengthParameter { + ...LightReferentialFragment + } + lengthUnitId + lengthUnit { + ...LightReferentialFragment + } + statusId + description + comments + creationDate + } + ${ReferentialFragments.location} + ${ReferentialFragments.lightReferential}` +}; +//# sourceMappingURL=weight-length-conversion.fragments.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.fragments.js.map b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.fragments.js.map new file mode 100644 index 000000000..1a92b0659 --- /dev/null +++ b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.fragments.js.map @@ -0,0 +1 @@ +{"version":3,"file":"weight-length-conversion.fragments.js","sourceRoot":"","sources":["../../../../../../src/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.fragments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAEvF,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,SAAS,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;IAqBZ;IAEF,IAAI,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8BP,oBAAoB,CAAC,QAAQ;IAC7B,oBAAoB,CAAC,gBAAgB,EAAE;CAC1C,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.model.js b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.model.js new file mode 100644 index 000000000..df5d47c22 --- /dev/null +++ b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.model.js @@ -0,0 +1,113 @@ +var WeightLengthConversionRef_1, WeightLengthConversion_1; +import { __decorate, __metadata } from "tslib"; +import { Entity, EntityClass, fromDateISOString, isNotNil, ReferentialRef, ReferentialUtils, toDateISOString, toNumber } from '@sumaris-net/ngx-components'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +export class BaseWeightLengthConversion extends Entity { + constructor(__typename) { + super(__typename); + this.year = null; + this.startMonth = null; + this.endMonth = null; + this.conversionCoefficientA = null; + this.conversionCoefficientB = null; + this.referenceTaxonId = null; + this.statusId = null; + this.description = null; + this.comments = null; + this.creationDate = null; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.year = source.year; + this.startMonth = source.startMonth; + this.endMonth = source.endMonth; + this.conversionCoefficientA = source.conversionCoefficientA; + this.conversionCoefficientB = source.conversionCoefficientB; + this.referenceTaxonId = source.referenceTaxonId; + this.description = source.description; + this.comments = source.comments; + this.statusId = source.statusId; + this.creationDate = fromDateISOString(source.creationDate); + } + asObject(opts) { + const target = super.asObject(opts); + target.creationDate = toDateISOString(this.creationDate); + if (opts === null || opts === void 0 ? void 0 : opts.minify) { + // Convert statusId object into integer + target.statusId = (typeof this.statusId === 'object') ? this.statusId['id'] : this.statusId; + } + return target; + } +} +let WeightLengthConversionRef = WeightLengthConversionRef_1 = class WeightLengthConversionRef extends BaseWeightLengthConversion { + constructor() { + super(WeightLengthConversionRef_1.TYPENAME); + this.locationId = null; + this.lengthParameterId = null; + this.lengthUnitId = null; + this.lengthUnit = null; + this.sexId = null; + this.lengthPmfmIds = null; + } + static isNotNilOrBlank(source) { + return source && isNotNil(source.conversionCoefficientA) && isNotNil(source.conversionCoefficientB); + } + fromObject(source, opts) { + var _a; + super.fromObject(source, opts); + this.locationId = source.locationId; + this.lengthParameterId = source.lengthParameterId; + this.lengthUnitId = toNumber(source.lengthUnitId, (_a = source.lengthUnit) === null || _a === void 0 ? void 0 : _a.id); + this.lengthUnit = source.lengthUnit && ReferentialRef.fromObject(source.lengthUnit); + this.sexId = source.sexId; + this.rectangleLabels = source.rectangleLabels; + this.lengthPmfmIds = source.lengthPmfmIds; + } +}; +WeightLengthConversionRef = WeightLengthConversionRef_1 = __decorate([ + EntityClass({ typename: 'WeightLengthConversionVO' }), + __metadata("design:paramtypes", []) +], WeightLengthConversionRef); +export { WeightLengthConversionRef }; +let WeightLengthConversion = WeightLengthConversion_1 = class WeightLengthConversion extends BaseWeightLengthConversion { + constructor() { + super(WeightLengthConversion_1.TYPENAME); + this.location = null; + this.sex = null; + this.lengthParameter = null; + this.lengthUnit = null; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.location = source.location && ReferentialRef.fromObject(source.location); + this.sex = source.sex && ReferentialRef.fromObject(source.sex); + this.lengthParameter = source.lengthParameter && ReferentialRef.fromObject(source.lengthParameter); + this.lengthUnit = source.lengthUnit && ReferentialRef.fromObject(source.lengthUnit); + } + asObject(opts) { + const target = super.asObject(opts); + target.location = this.location && this.location.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS)) || undefined; + target.sex = this.sex && this.sex.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS)) || undefined; + target.lengthParameter = this.lengthParameter && this.lengthParameter.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS)) || undefined; + target.lengthUnit = this.lengthUnit && this.lengthUnit.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS)) || undefined; + return target; + } + equals(other) { + return (super.equals(other) && isNotNil(this.id)) || + // Function unique key + ((this.referenceTaxonId === other.referenceTaxonId) + && (this.year === other.year) + && (this.startMonth === other.startMonth) + && (this.endMonth === other.endMonth) + && ReferentialUtils.equals(this.location, other.location) + && ReferentialUtils.equals(this.sex, other.sex) + && ReferentialUtils.equals(this.lengthParameter, other.lengthParameter) + && ReferentialUtils.equals(this.lengthUnit, other.lengthUnit)); + } +}; +WeightLengthConversion = WeightLengthConversion_1 = __decorate([ + EntityClass({ typename: 'WeightLengthConversionVO' }), + __metadata("design:paramtypes", []) +], WeightLengthConversion); +export { WeightLengthConversion }; +//# sourceMappingURL=weight-length-conversion.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.model.js.map b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.model.js.map new file mode 100644 index 000000000..b1906a518 --- /dev/null +++ b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"weight-length-conversion.model.js","sourceRoot":"","sources":["../../../../../../src/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.service.js b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.service.js new file mode 100644 index 000000000..1e6b8af9e --- /dev/null +++ b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.service.js @@ -0,0 +1,56 @@ +import { __decorate, __metadata } from "tslib"; +import { BaseEntityService, GraphqlService, PlatformService } from '@sumaris-net/ngx-components'; +import { Injectable } from '@angular/core'; +import { WeightLengthConversion } from '@app/referential/taxon-name/weight-length-conversion/weight-length-conversion.model'; +import { WeightLengthConversionFilter } from '@app/referential/services/filter/weight-length-conversion.filter'; +import { gql } from '@apollo/client/core'; +import { WeightLengthConversionFragments } from '@app/referential/taxon-name/weight-length-conversion/weight-length-conversion.fragments'; +import { MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +const Queries = { + loadAll: gql `query WeightLengthConversions($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: WeightLengthConversionFilterVOInput){ + data: weightLengthConversions(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...WeightLengthConversionFragment + } + } + ${WeightLengthConversionFragments.full}`, + loadAllWithTotal: gql `query WeightLengthConversionsWithTotal($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: WeightLengthConversionFilterVOInput){ + data: weightLengthConversions(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...WeightLengthConversionFragment + } + total: weightLengthConversionsCount(filter: $filter) + } + ${WeightLengthConversionFragments.full}` +}; +const Mutations = { + saveAll: gql `mutation SaveWeightLengthConversions($data: [WeightLengthConversionVOInput]!){ + data: saveWeightLengthConversions(data: $data){ + ...WeightLengthConversionFragment + } + } + ${WeightLengthConversionFragments.full}`, + deleteAll: gql `mutation DeleteWeightLengthConversions($ids: [Int]!){ + deleteWeightLengthConversions(ids: $ids) + }`, +}; +let WeightLengthConversionService = class WeightLengthConversionService extends BaseEntityService { + constructor(graphql, platform) { + super(graphql, platform, WeightLengthConversion, WeightLengthConversionFilter, { + queries: Queries, + mutations: Mutations + }); + this.graphql = graphql; + this.platform = platform; + } + asObject(entity, opts) { + return super.asObject(entity, Object.assign(Object.assign({}, MINIFY_OPTIONS), opts)); + } +}; +WeightLengthConversionService = __decorate([ + Injectable({ providedIn: 'root' }) + // @ts-ignore + , + __metadata("design:paramtypes", [GraphqlService, + PlatformService]) +], WeightLengthConversionService); +export { WeightLengthConversionService }; +//# sourceMappingURL=weight-length-conversion.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.service.js.map b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.service.js.map new file mode 100644 index 000000000..b83696ec1 --- /dev/null +++ b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"weight-length-conversion.service.js","sourceRoot":"","sources":["../../../../../../src/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAwD,iBAAiB,EAAyB,cAAc,EAAkB,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9L,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qFAAqF,CAAC;AAC7H,OAAO,EAAE,4BAA4B,EAAE,MAAM,kEAAkE,CAAC;AAChH,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,+BAA+B,EAAE,MAAM,yFAAyF,CAAC;AAC1I,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAE5E,MAAM,OAAO,GAA6B;IACxC,OAAO,EAAE,GAAG,CAAA;;;;;IAKV,+BAA+B,CAAC,IAAI,EAAE;IAExC,gBAAgB,EAAE,GAAG,CAAA;;;;;;IAMnB,+BAA+B,CAAC,IAAI,EAAE;CACzC,CAAC;AAGF,MAAM,SAAS,GAA+B;IAC5C,OAAO,EAAE,GAAG,CAAA;;;;;IAKV,+BAA+B,CAAC,IAAI,EAAE;IAExC,SAAS,EAAE,GAAG,CAAA;;IAEZ;CACH,CAAC;AAIK,IAAM,6BAA6B,GAAnC,MAAM,6BAA8B,SAAQ,iBAA+E;IAGhI,YACY,OAAuB,EACvB,QAAyB;QAEnC,KAAK,CAAC,OAAO,EAAE,QAAQ,EACrB,sBAAsB,EAAE,4BAA4B,EACpD;YACE,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,SAAS;SACrB,CAAC,CAAC;QARK,YAAO,GAAP,OAAO,CAAgB;QACvB,aAAQ,GAAR,QAAQ,CAAiB;IAQrC,CAAC;IAES,QAAQ,CAAC,MAA8B,EAAE,IAA4B;QAC7E,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,kCAAM,cAAc,GAAK,IAAI,EAAE,CAAC;IAC9D,CAAC;CACF,CAAA;AAlBY,6BAA6B;IAFzC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;IACjC,aAAa;;qCAKU,cAAc;QACb,eAAe;GAL1B,6BAA6B,CAkBzC;SAlBY,6BAA6B"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.table.js b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.table.js new file mode 100644 index 000000000..ac0b2d06b --- /dev/null +++ b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.table.js @@ -0,0 +1,165 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { WeightLengthConversion } from './weight-length-conversion.model'; +import { WeightLengthConversionFilter } from '../../services/filter/weight-length-conversion.filter'; +import { Component, Injector, Input } from '@angular/core'; +import { BaseReferentialTable } from '@app/referential/table/base-referential.table'; +import { WeightLengthConversionService } from '@app/referential/taxon-name/weight-length-conversion/weight-length-conversion.service'; +import { Validators } from '@angular/forms'; +import { DateUtils, firstNotNilPromise, StatusIds } from '@sumaris-net/ngx-components'; +import { WeightLengthConversionValidatorService } from '@app/referential/taxon-name/weight-length-conversion/weight-length-conversion.validator'; +import moment from 'moment'; +import { LocationLevelGroups, ParameterLabelGroups, UnitLabelGroups } from '@app/referential/services/model/model.enum'; +import { ParameterService } from '@app/referential/services/parameter.service'; +import { BehaviorSubject } from 'rxjs'; +let WeightLengthConversionTable = class WeightLengthConversionTable extends BaseReferentialTable { + constructor(injector, entityService, validatorService, parameterService) { + super(injector, WeightLengthConversion, WeightLengthConversionFilter, entityService, validatorService, { + i18nColumnPrefix: 'REFERENTIAL.TAXON_NAME.WEIGHT_LENGTH_CONVERSION.', + canUpload: true, + }); + this.parameterService = parameterService; + this._$lengthParameters = new BehaviorSubject([]); + this._$lengthUnits = new BehaviorSubject([]); + this.showTitle = false; + this.showIdColumn = false; + this.autoLoad = false; // Wait filter + this.sticky = true; + this.logPrefix = '[weight-length-conversion-table] '; + } + get referenceTaxonIdControl() { + return this.filterForm.get('referenceTaxonId'); + } + set referenceTaxonId(value) { + if (this.referenceTaxonIdControl.value !== value) { + this.referenceTaxonIdControl.setValue(value); + } + } + get referenceTaxonId() { + return this.referenceTaxonIdControl.value; + } + set showReferenceTaxonIdColumn(show) { + this.setShowColumn('referenceTaxonId', show); + } + get showReferenceTaxonIdColumn() { + return this.getShowColumn('referenceTaxonId'); + } + ngOnInit() { + super.ngOnInit(); + this.loadLengthParameters(); + } + ready() { + const _super = Object.create(null, { + ready: { get: () => super.ready } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.ready.call(this); + yield firstNotNilPromise(this._$lengthParameters); + }); + } + registerAutocompleteFields() { + // Location + this.registerAutocompleteField('location', { + showAllOnFocus: false, + suggestFn: (value, filter) => this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { levelIds: this._locationLevelIds })), + filter: { + entityName: 'Location', + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE, StatusIds.DISABLE /*CIEM division are disabled*/], + }, + mobile: this.mobile, + }); + // Sex + this.registerAutocompleteField('sex', { + showAllOnFocus: false, + suggestFn: (value, filter) => this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { searchAttributes: ['name'], levelLabels: ParameterLabelGroups.SEX })), + filter: { + entityName: 'QualitativeValue', + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY, StatusIds.DISABLE /*Non sexe*/], + }, + attributes: ['name'], + mobile: this.mobile, + }); + // Length parameter + this.registerAutocompleteField('lengthParameter', { + showAllOnFocus: false, + items: this._$lengthParameters, + attributes: this.settings.getFieldDisplayAttributes('parameter'), + mobile: this.mobile, + }); + // Length unit + this.registerAutocompleteField('lengthUnit', { + showAllOnFocus: false, + items: this._$lengthUnits, + attributes: ['label'], + mobile: this.mobile, + }); + } + getFilterFormConfig() { + console.debug(this.logPrefix + ' Creating filter form group...'); + return { + // Not used + //year: [null, Validators.compose([SharedValidators.integer, Validators.min(1970)])], + referenceTaxonId: [null, Validators.required], + }; + } + defaultNewRowValue() { + const creationDate = moment(new Date()); + const year = creationDate.get('year'); + return Object.assign(Object.assign({}, super.defaultNewRowValue()), { referenceTaxonId: this.referenceTaxonId, year, startMonth: 1, endMonth: 12, creationDate }); + } + parseCsvRowsToEntities(headers, rows) { + const _super = Object.create(null, { + parseCsvRowsToEntities: { get: () => super.parseCsvRowsToEntities } + }); + return __awaiter(this, void 0, void 0, function* () { + const entities = yield _super.parseCsvRowsToEntities.call(this, headers, rows); + // Force referenceTaxonId + const creationDate = DateUtils.moment(); + entities.forEach((e) => { + e.referenceTaxonId = this.referenceTaxonId; + e.creationDate = creationDate; + }); + return entities; + }); + } + loadLengthParameters() { + return __awaiter(this, void 0, void 0, function* () { + // Make sure service uis ready (e.g. enumerations has been overridden) + yield this.referentialRefService.ready(); + // Set the location levels used to filter + this._locationLevelIds = LocationLevelGroups.WEIGHT_LENGTH_CONVERSION_AREA; + // Length parameters + yield this.parameterService + .loadAllByLabels(ParameterLabelGroups.LENGTH, { toEntity: false }) + .then((items) => this._$lengthParameters.next(items)); + // Length units + yield this.referentialRefService + .loadAllByLabels(UnitLabelGroups.LENGTH, 'Unit', { statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] }) + .then((items) => this._$lengthUnits.next(items)); + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", Number), + __metadata("design:paramtypes", [Number]) +], WeightLengthConversionTable.prototype, "referenceTaxonId", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], WeightLengthConversionTable.prototype, "showReferenceTaxonIdColumn", null); +WeightLengthConversionTable = __decorate([ + Component({ + selector: 'app-weight-length-conversion-table', + templateUrl: '../../table/base-referential.table.html', + styleUrls: ['../../table/base-referential.table.scss'], + }) + // @ts-ignore + , + __metadata("design:paramtypes", [Injector, + WeightLengthConversionService, + WeightLengthConversionValidatorService, + ParameterService]) +], WeightLengthConversionTable); +export { WeightLengthConversionTable }; +//# sourceMappingURL=weight-length-conversion.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.table.js.map b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.table.js.map new file mode 100644 index 000000000..215494a0a --- /dev/null +++ b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"weight-length-conversion.table.js","sourceRoot":"","sources":["../../../../../../src/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.validator.js b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.validator.js new file mode 100644 index 000000000..ed0c36beb --- /dev/null +++ b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.validator.js @@ -0,0 +1,40 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { AppValidatorService } from '@sumaris-net/ngx-components'; +import { SharedValidators } from '@sumaris-net/ngx-components'; +let WeightLengthConversionValidatorService = class WeightLengthConversionValidatorService extends AppValidatorService { + constructor(formBuilder) { + super(formBuilder); + this.formBuilder = formBuilder; + } + getRowValidator() { + return this.getFormGroup(); + } + getFormGroupConfig(data, opts) { + return { + id: [data && data.id || null], + year: [(data === null || data === void 0 ? void 0 : data.year) || null, Validators.compose([Validators.required, Validators.min(1970)])], + startMonth: [(data === null || data === void 0 ? void 0 : data.startMonth) || null, Validators.compose([Validators.required, Validators.min(1), Validators.max(12)])], + endMonth: [(data === null || data === void 0 ? void 0 : data.endMonth) || null, Validators.compose([Validators.required, Validators.min(1), Validators.max(12)])], + conversionCoefficientA: [(data === null || data === void 0 ? void 0 : data.conversionCoefficientA) || null, Validators.compose([Validators.required, Validators.min(0)])], + conversionCoefficientB: [(data === null || data === void 0 ? void 0 : data.conversionCoefficientB) || null, Validators.compose([Validators.required, Validators.min(0)])], + referenceTaxonId: [(data === null || data === void 0 ? void 0 : data.referenceTaxonId) || null], + location: [(data === null || data === void 0 ? void 0 : data.location) || null, Validators.compose([Validators.required, SharedValidators.entity])], + sex: [(data === null || data === void 0 ? void 0 : data.sex) || null, Validators.compose([Validators.required, SharedValidators.entity])], + lengthParameter: [(data === null || data === void 0 ? void 0 : data.lengthParameter) || null, Validators.compose([Validators.required, SharedValidators.entity])], + lengthUnit: [(data === null || data === void 0 ? void 0 : data.lengthUnit) || null, Validators.compose([Validators.required, SharedValidators.entity])], + description: [(data === null || data === void 0 ? void 0 : data.description) || null], + comments: [(data === null || data === void 0 ? void 0 : data.comments) || null], + updateDate: [(data === null || data === void 0 ? void 0 : data.updateDate) || null], + creationDate: [(data === null || data === void 0 ? void 0 : data.creationDate) || null], + statusId: [(data === null || data === void 0 ? void 0 : data.statusId) || null, Validators.required] + }; + } +}; +WeightLengthConversionValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder]) +], WeightLengthConversionValidatorService); +export { WeightLengthConversionValidatorService }; +//# sourceMappingURL=weight-length-conversion.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.validator.js.map b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.validator.js.map new file mode 100644 index 000000000..a1f631f24 --- /dev/null +++ b/out-tsc/app/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"weight-length-conversion.validator.js","sourceRoot":"","sources":["../../../../../../src/app/referential/taxon-name/weight-length-conversion/weight-length-conversion.validator.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,kBAAkB,EAAoB,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAGhF,OAAO,EAAE,mBAAmB,EAAa,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AAItD,IAAM,sCAAsC,GAA5C,MAAM,sCAAuC,SAAQ,mBAA2C;IAErG,YACY,WAA+B;QAEzC,KAAK,CAAC,WAAW,CAAC,CAAC;QAFT,gBAAW,GAAX,WAAW,CAAoB;IAG3C,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED,kBAAkB,CAAC,IAA6B,EAAE,IAAS;QACzD,OAAO;YACL,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC;YAC7B,IAAI,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,KAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3F,UAAU,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,KAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxH,QAAQ,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpH,sBAAsB,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,sBAAsB,KAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5H,sBAAsB,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,sBAAsB,KAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5H,gBAAgB,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,KAAI,IAAI,CAAC;YAClD,QAAQ,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YACtG,GAAG,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,KAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5F,eAAe,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,eAAe,KAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YACpH,UAAU,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,KAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1G,WAAW,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,KAAI,IAAI,CAAC;YACxC,QAAQ,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,IAAI,CAAC;YAClC,UAAU,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,KAAI,IAAI,CAAC;YACtC,YAAY,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,KAAI,IAAI,CAAC;YAC1C,QAAQ,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;SACxD,CAAC;IACJ,CAAC;CAEF,CAAA;AAjCY,sCAAsC;IADlD,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAIN,kBAAkB;GAHhC,sCAAsC,CAiClD;SAjCY,sCAAsC"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/transcribing/modal/transcribing-items.modal.js b/out-tsc/app/app/referential/transcribing/modal/transcribing-items.modal.js new file mode 100644 index 000000000..a731374cd --- /dev/null +++ b/out-tsc/app/app/referential/transcribing/modal/transcribing-items.modal.js @@ -0,0 +1,66 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Component, Input, ViewChild } from '@angular/core'; +import { ModalController } from '@ionic/angular'; +import { LocalSettingsService, toBoolean } from '@sumaris-net/ngx-components'; +import { TranscribingItemTable } from '@app/referential/transcribing/transcribing-item.table'; +let TranscribingItemsModal = class TranscribingItemsModal { + constructor(modalCtrl, settings) { + this.modalCtrl = modalCtrl; + this.settings = settings; + } + get loading() { + var _a; + return (_a = this.table) === null || _a === void 0 ? void 0 : _a.loading; + } + ngOnInit() { + this.mobile = toBoolean(this.mobile, this.settings.mobile); + this.table.value = this.data; + } + cancel() { + this.modalCtrl.dismiss(); + } + onSubmit(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.disabled) + return this.cancel(); + if (this.table.dirty) { + const saved = yield this.table.save(); + if (!saved) + return; // Stop + } + this.data = this.table.value; + return this.modalCtrl.dismiss(this.data); + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", String) +], TranscribingItemsModal.prototype, "title", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], TranscribingItemsModal.prototype, "data", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], TranscribingItemsModal.prototype, "disabled", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], TranscribingItemsModal.prototype, "mobile", void 0); +__decorate([ + ViewChild('table', { static: true }), + __metadata("design:type", TranscribingItemTable) +], TranscribingItemsModal.prototype, "table", void 0); +TranscribingItemsModal = __decorate([ + Component({ + selector: 'app-modal', + templateUrl: './transcribing-items.modal.html', + styleUrls: ['./transcribing-items.modal.scss'] + }), + __metadata("design:paramtypes", [ModalController, + LocalSettingsService]) +], TranscribingItemsModal); +export { TranscribingItemsModal }; +//# sourceMappingURL=transcribing-items.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/transcribing/modal/transcribing-items.modal.js.map b/out-tsc/app/app/referential/transcribing/modal/transcribing-items.modal.js.map new file mode 100644 index 000000000..158de7536 --- /dev/null +++ b/out-tsc/app/app/referential/transcribing/modal/transcribing-items.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"transcribing-items.modal.js","sourceRoot":"","sources":["../../../../../../src/app/referential/transcribing/modal/transcribing-items.modal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,SAAS,EAAE,KAAK,EAAU,SAAS,EAAC,MAAM,eAAe,CAAC;AAElE,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAC,oBAAoB,EAAE,SAAS,EAAC,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAC,qBAAqB,EAAC,MAAM,uDAAuD,CAAC;AAarF,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAajC,YACY,SAA0B,EAC1B,QAA8B;QAD9B,cAAS,GAAT,SAAS,CAAiB;QAC1B,aAAQ,GAAR,QAAQ,CAAsB;IACtC,CAAC;IATL,IAAI,OAAO;;QACT,OAAO,MAAA,IAAI,CAAC,KAAK,0CAAE,OAAO,CAAC;IAC7B,CAAC;IASD,QAAQ;QACN,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE3D,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;IAC/B,CAAC;IAES,MAAM;QACd,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAEK,QAAQ,CAAC,KAAa;;YAC1B,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YAExC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;gBACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACtC,IAAI,CAAC,KAAK;oBAAE,OAAO,CAAC,OAAO;aAC5B;YAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;KAAA;CAEF,CAAA;AAtCC;IAAC,KAAK,EAAE;;qDAAe;AACvB;IAAC,KAAK,EAAE;;oDAA0B;AAClC;IAAC,KAAK,EAAE;;wDAAmB;AAC3B;IAAC,KAAK,EAAE;;sDAAiB;AAMzB;IAAC,SAAS,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;8BAAQ,qBAAqB;qDAAC;AAXxD,sBAAsB;IALlC,SAAS,CAAC;QACT,QAAQ,EAAE,WAAW;QACrB,WAAW,EAAE,iCAAiC;QAC9C,SAAS,EAAE,CAAC,iCAAiC,CAAC;KAC/C,CAAC;qCAeuB,eAAe;QAChB,oBAAoB;GAf/B,sBAAsB,CAwClC;SAxCY,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/transcribing/transcribing-item.table.js b/out-tsc/app/app/referential/transcribing/transcribing-item.table.js new file mode 100644 index 000000000..8df2b0df2 --- /dev/null +++ b/out-tsc/app/app/referential/transcribing/transcribing-item.table.js @@ -0,0 +1,128 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, Component, Inject, InjectionToken, Injector, Input, Self } from '@angular/core'; +import { ValidatorService } from '@e-is/ngx-material-table'; +import { StrategyValidatorService } from '@app/referential/services/validator/strategy.validator'; +import { TranscribingItem, TranscribingItemFilter, TranscribingItemType } from '@app/referential/transcribing/transcribing.model'; +import { BaseReferentialTable } from '@app/referential/table/base-referential.table'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { TranscribingItemValidatorService } from '@app/referential/transcribing/transcribing-item.validator'; +import { DateUtils, EntityUtils, InMemoryEntitiesService, SharedValidators, StatusIds } from '@sumaris-net/ngx-components'; +import { Validators } from '@angular/forms'; +import { RxState } from '@rx-angular/state'; +export const TRANSCRIBING_ITEM_DATA_SERVICE_TOKEN = new InjectionToken('TranscribingItemService'); +let TranscribingItemTable = class TranscribingItemTable extends BaseReferentialTable { + constructor(injector, dataService, validatorService, referentialRefService, state) { + super(injector, TranscribingItem, TranscribingItemFilter, dataService, validatorService, { + i18nColumnPrefix: 'REFERENTIAL.TRANSCRIBING_ITEM.', + canUpload: true + }); + this.referentialRefService = referentialRefService; + this.state = state; + this.showTitle = false; + this.showIdColumn = false; + this.autoLoad = false; // Wait filter + this.sticky = true; + this.logPrefix = '[transcribing-item-table] '; + } + set value(data) { + this.memoryDataService.value = data; + } + get value() { + return this.memoryDataService.value; + } + set objectFilter(value) { + this.state.set('objectFilter', _ => value); + } + get objectFilter() { + return this.state.get('objectFilter'); + } + set type(value) { + this.state.set('type', _ => value); + } + get type() { + return this.state.get('type'); + } + ngOnInit() { + super.ngOnInit(); + } + registerAutocompleteFields() { + // Type + this.registerAutocompleteField('type', { + showAllOnFocus: false, + service: this.referentialRefService, + filter: { + entityName: TranscribingItemType.ENTITY_NAME, + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE] + }, + mobile: this.mobile + }); + // Object + this.registerAutocompleteField('object', { + showAllOnFocus: false, + suggestFn: (value, filter) => this.suggestObject(value, filter), + filter: { + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] + }, + mobile: this.mobile + }); + } + getFilterFormConfig() { + console.debug(this.logPrefix + ' Creating filter form group...'); + return { + searchText: [null], + type: [null, Validators.compose([SharedValidators.entity, Validators.required])] + }; + } + defaultNewRowValue() { + return Object.assign(Object.assign({}, super.defaultNewRowValue()), { type: this.type, creationDate: DateUtils.moment() }); + } + suggestObject(value, filter) { + return __awaiter(this, void 0, void 0, function* () { + return this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), this.objectFilter)); + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], TranscribingItemTable.prototype, "value", null); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], TranscribingItemTable.prototype, "objectFilter", null); +__decorate([ + Input(), + __metadata("design:type", TranscribingItemType), + __metadata("design:paramtypes", [TranscribingItemType]) +], TranscribingItemTable.prototype, "type", null); +TranscribingItemTable = __decorate([ + Component({ + selector: 'app-transcribing-item-table', + templateUrl: '../table/base-referential.table.html', + styleUrls: [ + '../table/base-referential.table.scss', + './transcribing-item.table.scss' + ], + providers: [ + { provide: ValidatorService, useExisting: StrategyValidatorService }, + { + provide: TRANSCRIBING_ITEM_DATA_SERVICE_TOKEN, + useFactory: () => new InMemoryEntitiesService(TranscribingItem, TranscribingItemFilter, { + equals: TranscribingItem.equals, + onSort: (data, sortBy = 'label', sortDirection) => EntityUtils.sort(data, sortBy, sortDirection), + }) + }, + RxState + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __param(1, Self()), + __param(1, Inject(TRANSCRIBING_ITEM_DATA_SERVICE_TOKEN)), + __metadata("design:paramtypes", [Injector, Object, TranscribingItemValidatorService, + ReferentialRefService, + RxState]) +], TranscribingItemTable); +export { TranscribingItemTable }; +//# sourceMappingURL=transcribing-item.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/transcribing/transcribing-item.table.js.map b/out-tsc/app/app/referential/transcribing/transcribing-item.table.js.map new file mode 100644 index 000000000..d398d0596 --- /dev/null +++ b/out-tsc/app/app/referential/transcribing/transcribing-item.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"transcribing-item.table.js","sourceRoot":"","sources":["../../../../../src/app/referential/transcribing/transcribing-item.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/transcribing/transcribing-item.validator.js b/out-tsc/app/app/referential/transcribing/transcribing-item.validator.js new file mode 100644 index 000000000..1b7d92de8 --- /dev/null +++ b/out-tsc/app/app/referential/transcribing/transcribing-item.validator.js @@ -0,0 +1,24 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { SharedValidators, toNumber } from '@sumaris-net/ngx-components'; +import { ReferentialValidatorService } from '@app/referential/services/validator/referential.validator'; +let TranscribingItemValidatorService = class TranscribingItemValidatorService extends ReferentialValidatorService { + constructor(formBuilder) { + super(formBuilder); + this.formBuilder = formBuilder; + } + getRowValidator() { + return this.getFormGroup(); + } + getFormGroupConfig(data, opts) { + const config = super.getFormGroupConfig(data, opts); + return Object.assign(Object.assign({}, config), { objectId: [toNumber(data === null || data === void 0 ? void 0 : data.objectId, null), Validators.compose([SharedValidators.integer, Validators.min(0)])], object: [(data === null || data === void 0 ? void 0 : data.object) || null, SharedValidators.entity], type: [(data === null || data === void 0 ? void 0 : data.type) || null, SharedValidators.entity] }); + } +}; +TranscribingItemValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder]) +], TranscribingItemValidatorService); +export { TranscribingItemValidatorService }; +//# sourceMappingURL=transcribing-item.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/transcribing/transcribing-item.validator.js.map b/out-tsc/app/app/referential/transcribing/transcribing-item.validator.js.map new file mode 100644 index 000000000..1e1b8d502 --- /dev/null +++ b/out-tsc/app/app/referential/transcribing/transcribing-item.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"transcribing-item.validator.js","sourceRoot":"","sources":["../../../../../src/app/referential/transcribing/transcribing-item.validator.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAoB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAe,gBAAgB,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAE,2BAA2B,EAAE,MAAM,2DAA2D,CAAC;AAIjG,IAAM,gCAAgC,GAAtC,MAAM,gCAAiC,SAAQ,2BAA6C;IAEjG,YACY,WAA+B;QAEzC,KAAK,CAAC,WAAW,CAAC,CAAC;QAFT,gBAAW,GAAX,WAAW,CAAoB;IAG3C,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED,kBAAkB,CAAC,IAAuB,EAAE,IAA4D;QACtG,MAAM,MAAM,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpD,uCACK,MAAM,KACT,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC7G,MAAM,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,KAAI,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EACvD,IAAI,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,KAAI,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,IACnD;IACJ,CAAC;CAEF,CAAA;AAtBY,gCAAgC;IAD5C,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAIN,kBAAkB;GAHhC,gCAAgC,CAsB5C;SAtBY,gCAAgC"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/transcribing/transcribing.model.js b/out-tsc/app/app/referential/transcribing/transcribing.model.js new file mode 100644 index 000000000..6b21b8f4d --- /dev/null +++ b/out-tsc/app/app/referential/transcribing/transcribing.model.js @@ -0,0 +1,115 @@ +var TranscribingItemType_1, TranscribingItem_1; +import { __decorate, __metadata } from "tslib"; +import { BaseReferential, EntityClass, isNotNil, isNotNilOrBlank, ReferentialRef, toNumber, } from '@sumaris-net/ngx-components'; +import { BaseReferentialFilter } from '@app/referential/services/filter/referential.filter'; +let TranscribingItemType = TranscribingItemType_1 = class TranscribingItemType extends BaseReferential { + constructor() { + super(TranscribingItemType_1.TYPENAME); + } + fromObject(source) { + super.fromObject(source); + this.objectType = source.objectType && ReferentialRef.fromObject(source.objectType); + this.system = source.system && ReferentialRef.fromObject(source.system); + this.items = source.items && source.items.map((item) => TranscribingItem.fromObject(item)); + } + asObject(opts) { + var _a, _b, _c, _d; + const target = super.asObject(opts); + target.objectType = (_a = this.objectType) === null || _a === void 0 ? void 0 : _a.asObject(opts); + target.items = (_b = this.items) === null || _b === void 0 ? void 0 : _b.map((item) => item.asObject(opts)); + target.systemId = toNumber(this.systemId, (_c = this.system) === null || _c === void 0 ? void 0 : _c.id); + if (opts === null || opts === void 0 ? void 0 : opts.minify) { + delete target.items; + delete target.system; + } + else { + target.system = (_d = this.system) === null || _d === void 0 ? void 0 : _d.asObject(opts); + } + return target; + } +}; +TranscribingItemType.ENTITY_NAME = 'TranscribingItemType'; +TranscribingItemType = TranscribingItemType_1 = __decorate([ + EntityClass({ typename: 'TranscribingItemTypeVO' }), + __metadata("design:paramtypes", []) +], TranscribingItemType); +export { TranscribingItemType }; +let TranscribingItem = TranscribingItem_1 = class TranscribingItem extends BaseReferential { + constructor() { + super(TranscribingItem_1.TYPENAME); + this.type = null; + this.object = null; + // Properties to expose (detected by Object.keys()) + // Used to create columns in base referential table + this.statusId = null; + this.label = null; + } + static equals(o1, o2) { + var _a, _b, _c, _d; + return o1 && o2 && o1.id === o2.id + // Or + || ( + // Same label + (o1.label === o2.label) + // Same object id + && (toNumber(o1.objectId, (_a = o1.object) === null || _a === void 0 ? void 0 : _a.id) === toNumber(o2.objectId, (_b = o2.object) === null || _b === void 0 ? void 0 : _b.id)) + // Same type id + && (toNumber(o1.typeId, (_c = o1.type) === null || _c === void 0 ? void 0 : _c.id) === toNumber(o2.typeId, (_d = o2.type) === null || _d === void 0 ? void 0 : _d.id))); + } + fromObject(source) { + var _a, _b; + super.fromObject(source); + this.typeId = toNumber(source.typeId, (_a = source.type) === null || _a === void 0 ? void 0 : _a.id); + this.type = source.object && ReferentialRef.fromObject(source.type); + this.objectId = toNumber(source.objectId, (_b = source.object) === null || _b === void 0 ? void 0 : _b.id); + this.object = source.object && ReferentialRef.fromObject(source.object); + } + asObject(opts) { + var _a, _b; + const target = super.asObject(opts); + target.type = (_a = this.type) === null || _a === void 0 ? void 0 : _a.asObject(opts); + target.object = (_b = this.object) === null || _b === void 0 ? void 0 : _b.asObject(opts); + return target; + } +}; +TranscribingItem.ENTITY_NAME = 'TranscribingItem'; +TranscribingItem = TranscribingItem_1 = __decorate([ + EntityClass({ typename: 'TranscribingItemVO' }), + __metadata("design:paramtypes", []) +], TranscribingItem); +export { TranscribingItem }; +let TranscribingItemFilter = class TranscribingItemFilter extends BaseReferentialFilter { + fromObject(source) { + var _a; + super.fromObject(source); + this.typeId = toNumber(source.typeId, (_a = source.type) === null || _a === void 0 ? void 0 : _a.id); + this.type = source.object && ReferentialRef.fromObject(source.type); + } + asObject(opts) { + var _a; + const target = super.asObject(opts); + target.type = (_a = this.type) === null || _a === void 0 ? void 0 : _a.asObject(opts); + return target; + } + buildFilter() { + var _a, _b; + const filterFns = super.buildFilter(); + // Type + const typeId = toNumber(this.typeId, (_a = this.type) === null || _a === void 0 ? void 0 : _a.id); + if (isNotNil(typeId)) { + filterFns.push(t => { var _a; return t.typeId === typeId || ((_a = t.type) === null || _a === void 0 ? void 0 : _a.id) === typeId; }); + } + else { + const typeLabel = (_b = this.type) === null || _b === void 0 ? void 0 : _b.label; + if (isNotNilOrBlank(typeLabel)) { + filterFns.push(t => { var _a; return ((_a = t.type) === null || _a === void 0 ? void 0 : _a.label) === typeLabel; }); + } + } + return filterFns; + } +}; +TranscribingItemFilter = __decorate([ + EntityClass({ typename: 'TranscribingItemVO' }) +], TranscribingItemFilter); +export { TranscribingItemFilter }; +//# sourceMappingURL=transcribing.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/transcribing/transcribing.model.js.map b/out-tsc/app/app/referential/transcribing/transcribing.model.js.map new file mode 100644 index 000000000..6c564ae59 --- /dev/null +++ b/out-tsc/app/app/referential/transcribing/transcribing.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"transcribing.model.js","sourceRoot":"","sources":["../../../../../src/app/referential/transcribing/transcribing.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/referential/transcribing/transcribing.module.js b/out-tsc/app/app/referential/transcribing/transcribing.module.js new file mode 100644 index 000000000..1b310bd75 --- /dev/null +++ b/out-tsc/app/app/referential/transcribing/transcribing.module.js @@ -0,0 +1,35 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { TranslateModule } from '@ngx-translate/core'; +import { TextMaskModule } from 'angular2-text-mask'; +import { CommonModule } from '@angular/common'; +import { AppCoreModule } from '@app/core/core.module'; +import { TranscribingItemTable } from '@app/referential/transcribing/transcribing-item.table'; +import { TranscribingItemsModal } from '@app/referential/transcribing/modal/transcribing-items.modal'; +let AppTranscribingModule = class AppTranscribingModule { +}; +AppTranscribingModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TextMaskModule, + TranslateModule.forChild(), + AppCoreModule + ], + declarations: [ + // Pipes + // Components + TranscribingItemsModal, + TranscribingItemTable + ], + exports: [ + TranslateModule, + // Pipes + // Components + TranscribingItemTable, + TranscribingItemsModal + ], + }) +], AppTranscribingModule); +export { AppTranscribingModule }; +//# sourceMappingURL=transcribing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/referential/transcribing/transcribing.module.js.map b/out-tsc/app/app/referential/transcribing/transcribing.module.js.map new file mode 100644 index 000000000..a99e2f18c --- /dev/null +++ b/out-tsc/app/app/referential/transcribing/transcribing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"transcribing.module.js","sourceRoot":"","sources":["../../../../../src/app/referential/transcribing/transcribing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uDAAuD,CAAC;AAC9F,OAAO,EAAC,sBAAsB,EAAC,MAAM,8DAA8D,CAAC;AA2B7F,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;CACjC,CAAA;AADY,qBAAqB;IAzBjC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,cAAc;YACd,eAAe,CAAC,QAAQ,EAAE;YAE1B,aAAa;SACd;QACD,YAAY,EAAE;YACZ,QAAQ;YAER,aAAa;YACb,sBAAsB;YACtB,qBAAqB;SACtB;QACD,OAAO,EAAE;YACP,eAAe;YAEf,QAAQ;YAER,aAAa;YACb,qBAAqB;YACrB,sBAAsB;SACvB;KACF,CAAC;GACW,qBAAqB,CACjC;SADY,qBAAqB"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/bluetooth/bluetooth-serial.errors.js b/out-tsc/app/app/shared/bluetooth/bluetooth-serial.errors.js new file mode 100644 index 000000000..964b97948 --- /dev/null +++ b/out-tsc/app/app/shared/bluetooth/bluetooth-serial.errors.js @@ -0,0 +1,5 @@ +export const BluetoothErrorCodes = { + BLUETOOTH_DISABLED: 800, + BLUETOOTH_CONNECTION_ERROR: 801 +}; +//# sourceMappingURL=bluetooth-serial.errors.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/bluetooth/bluetooth-serial.errors.js.map b/out-tsc/app/app/shared/bluetooth/bluetooth-serial.errors.js.map new file mode 100644 index 000000000..180670577 --- /dev/null +++ b/out-tsc/app/app/shared/bluetooth/bluetooth-serial.errors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bluetooth-serial.errors.js","sourceRoot":"","sources":["../../../../../src/app/shared/bluetooth/bluetooth-serial.errors.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IAEjC,kBAAkB,EAAE,GAAG;IAEvB,0BAA0B,EAAE,GAAG;CAEhC,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/bluetooth/bluetooth.icon.js b/out-tsc/app/app/shared/bluetooth/bluetooth.icon.js new file mode 100644 index 000000000..2087f7bfc --- /dev/null +++ b/out-tsc/app/app/shared/bluetooth/bluetooth.icon.js @@ -0,0 +1,300 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, InjectionToken, Injector, Input, Optional, Output } from '@angular/core'; +import { RxState } from '@rx-angular/state'; +import { BluetoothService } from '@app/shared/bluetooth/bluetooth.service'; +import { distinctUntilKeyChanged, map } from 'rxjs/operators'; +import { equals, isEmptyArray, isNil, toBoolean } from '@sumaris-net/ngx-components'; +import { PopoverController } from '@ionic/angular'; +import { BluetoothPopover } from '@app/shared/bluetooth/bluetooth.popover'; +import { timer } from 'rxjs'; +export class BluetoothMatIconRef { +} +export const APP_BLUETOOTH_ICON_DEFAULT_STATE = new InjectionToken('BluetoothIconState'); +let AppBluetoothIcon = class AppBluetoothIcon { + constructor(injector, bluetoothService, _state, state) { + this.bluetoothService = bluetoothService; + this._state = _state; + this._popoverOpened = false; + this._forceDisabled = false; + this.icon$ = this._state.select('icon'); + this.title = 'SHARED.BLUETOOTH.TITLE'; + this.selectedDeviceIcon = { icon: 'information-circle' }; + this.connectedDevicesChanges = this._state.$.pipe(distinctUntilKeyChanged('connectedDevices'), map(s => s.connectedDevices)); + this.badgeSize = 'small'; + this.badgePosition = 'above after'; + this.badgeHidden = false; + this.cd = injector.get(ChangeDetectorRef); + this.popoverController = injector.get(PopoverController); + this._state.set(Object.assign({ icon: { matIcon: 'bluetooth', badge: null } }, state)); + } + set icon(value) { + this._state.set('icon', _ => value); + } + get icon() { + return this._state.get('icon'); + } + set autoConnect(value) { + this._state.set('autoConnect', _ => value); + } + get autoConnect() { + return this._state.get('autoConnect'); + } + set deviceFilter(value) { + this._state.set('deviceFilter', _ => value); + } + get deviceFilter() { + return this._state.get('deviceFilter'); + } + set devices(value) { + this._state.set('devices', _ => value); + } + get devices() { + return this._state.get('devices'); + } + set deviceCheck(value) { + this._state.set('deviceCheck', _ => value); + } + get deviceCheck() { + return this._state.get('deviceCheck'); + } + set disabled(value) { + this._forceDisabled = value; + this.cd.markForCheck(); + } + get disabled() { + return this._forceDisabled; + } + get enabled() { + return this._state.get('enabled'); + } + ngOnInit() { + // Default values + this.autoConnect = toBoolean(this.autoConnect, false); + this.deviceFilter = this.deviceFilter || ((device) => !!device.address); + // Enabled state + this._state.connect('enabled', this.bluetoothService.enabled$); + this._state.connect('connecting', this.bluetoothService.connecting$); + // Devices + this._state.connect('devices', this.bluetoothService.connectedDevices$.pipe(map(devices => devices === null ? null : devices.map(d => this.asDevice(d))))); + // Connected devices + this._state.connect('connectedDevices', this._state.select(['enabled', 'devices', 'deviceFilter'], s => s) + .pipe(map(({ enabled, devices, deviceFilter }) => { + // DEBUG + //console.debug(`[bluetooth-icon] Receiving state changes: ${JSON.stringify({enabled, devices})}`); + // If disabled: no devices + if (!enabled || !devices) + return null; + // No filter function: all devices + if (typeof deviceFilter !== 'function') + return devices; + // DEBUG + //console.debug(`[bluetooth-icon] Filtering devices: [${devices?.map(d => d.address).join(', ')}]`); + // Filtering devices + return devices.filter(d => deviceFilter(d)); + }))); + // Refresh icon, when enabled or connected devices changed + this._state.hold(this._state.select(['enabled', 'connectedDevices', 'connecting'], s => s), s => this.updateView(s)); + } + updateView(state) { + state = state || { enabled: null, connectedDevices: null, connecting: null }; + // DEBUG + //console.debug('[bluetooth-icon] Updating view: ' + JSON.stringify(state)); + let matIcon; + let color; + let badge; + let badgeIcon; + let badgeMatIcon; + let badgeColor; + let badgeBlink = false; + let badgeFill = 'solid'; + // Starting + if (isNil(state.enabled)) { + matIcon = 'bluetooth_disabled'; + color = 'light'; + badge = '…'; + badgeColor = 'accent'; + badgeBlink = true; + } + // Disabled + else if (state.enabled !== true) { + matIcon = 'bluetooth_disabled'; + color = 'light'; + badge = ''; + } + // Enabled, connecting (or waiting devices) + else if (this.bluetoothService.starting || state.connecting) { + matIcon = 'bluetooth'; + color = 'tertiary'; + badge = '…'; + badgeColor = 'accent'; + badgeBlink = true; + } + // Enabled, never had a devices + else if (isNil(state.connectedDevices)) { + matIcon = 'bluetooth'; + color = 'tertiary'; + } + // Enabled, no devices anymore (but had some) + else if (isEmptyArray(state.connectedDevices)) { + matIcon = 'bluetooth'; + color = 'tertiary'; + badgeIcon = 'alert'; + badgeColor = 'danger'; + badgeFill = 'clear'; + } + // Enabled, has connected devices + else { + matIcon = 'bluetooth_connected'; + color = 'tertiary'; + badgeColor = 'success'; + badge = state.connectedDevices.length; + } + // Set icon + const icon = { color, matIcon, badge, badgeIcon, badgeColor, badgeFill, badgeMatIcon }; + if (!equals(this.icon, icon)) { + // DEBUG + //console.debug('[bluetooth-icon] Changing icon to: ' + JSON.stringify(icon)); + this._state.set('icon', () => icon); + } + // Blink animation + if (badgeBlink) + this.startBlinkAnimation(); + else + this.stopBlinkAnimation(); + } + asDevice(device) { + return device; + } + openPopover(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this._popoverOpened || event.defaultPrevented) + return; // Already opened + event.preventDefault(); + this._popoverOpened = true; + try { + const connectedDevices = this._state.get('connectedDevices'); + const checkAfterConnectFn = typeof this.checkAfterConnect === 'function' ? (device) => this.checkAfterConnect(device) : undefined; + const popover = yield this.popoverController.create({ + component: BluetoothPopover, + componentProps: { + titleI18n: this.title, + deviceFilter: this.deviceFilter, + connectedDevices, + selectedDevicesIcon: this.selectedDeviceIcon, + checkAfterConnect: checkAfterConnectFn + }, + backdropDismiss: true, + keyboardClose: true, + event, + translucent: true, + cssClass: 'popover-large popover-bluetooth' + }); + yield popover.present(); + const { data, role } = yield popover.onDidDismiss(); + const devices = data ? (Array.isArray(data) ? data : [data]) : undefined; + if (devices) + this.devices = devices; + } + finally { + this._popoverOpened = false; + } + }); + } + startBlinkAnimation() { + if (!this._blinkSubscription && !this.badgeHidden) { + this._blinkSubscription = timer(500, 500) + .subscribe(() => { + this.badgeHidden = !this.badgeHidden; + this.cd.markForCheck(); + }); + this._blinkSubscription.add(() => { + this._blinkSubscription = null; + // Restore initial value (before timer) + if (this.badgeHidden) { + this.badgeHidden = false; + this.cd.markForCheck(); + } + }); + } + } + stopBlinkAnimation() { + var _a; + (_a = this._blinkSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], AppBluetoothIcon.prototype, "title", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppBluetoothIcon.prototype, "selectedDeviceIcon", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], AppBluetoothIcon.prototype, "checkAfterConnect", void 0); +__decorate([ + Input(), + __metadata("design:type", BluetoothMatIconRef), + __metadata("design:paramtypes", [BluetoothMatIconRef]) +], AppBluetoothIcon.prototype, "icon", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], AppBluetoothIcon.prototype, "autoConnect", null); +__decorate([ + Input(), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Function]) +], AppBluetoothIcon.prototype, "deviceFilter", null); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], AppBluetoothIcon.prototype, "devices", null); +__decorate([ + Input(), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Function]) +], AppBluetoothIcon.prototype, "deviceCheck", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], AppBluetoothIcon.prototype, "disabled", null); +__decorate([ + Output(), + __metadata("design:type", Object) +], AppBluetoothIcon.prototype, "connectedDevicesChanges", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], AppBluetoothIcon.prototype, "badgeSize", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], AppBluetoothIcon.prototype, "badgePosition", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppBluetoothIcon.prototype, "badgeHidden", void 0); +AppBluetoothIcon = __decorate([ + Component({ + selector: 'app-bluetooth-icon', + templateUrl: './bluetooth.icon.html', + providers: [ + { provide: APP_BLUETOOTH_ICON_DEFAULT_STATE, useValue: { matIcon: 'bluetooth' } }, + RxState + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __param(3, Optional()), + __param(3, Inject(APP_BLUETOOTH_ICON_DEFAULT_STATE)), + __metadata("design:paramtypes", [Injector, + BluetoothService, + RxState, Object]) +], AppBluetoothIcon); +export { AppBluetoothIcon }; +//# sourceMappingURL=bluetooth.icon.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/bluetooth/bluetooth.icon.js.map b/out-tsc/app/app/shared/bluetooth/bluetooth.icon.js.map new file mode 100644 index 000000000..7e00b2863 --- /dev/null +++ b/out-tsc/app/app/shared/bluetooth/bluetooth.icon.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bluetooth.icon.js","sourceRoot":"","sources":["../../../../../src/app/shared/bluetooth/bluetooth.icon.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/bluetooth/bluetooth.module.js b/out-tsc/app/app/shared/bluetooth/bluetooth.module.js new file mode 100644 index 000000000..3e112ac8e --- /dev/null +++ b/out-tsc/app/app/shared/bluetooth/bluetooth.module.js @@ -0,0 +1,30 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { AppIconModule, SharedModule } from '@sumaris-net/ngx-components'; +import { AppBluetoothIcon } from './bluetooth.icon'; +import { TranslateModule } from '@ngx-translate/core'; +import { BluetoothPopover } from '@app/shared/bluetooth/bluetooth.popover'; +import { RxStateModule } from '@app/shared/rx-state.module'; +let AppBluetoothModule = class AppBluetoothModule { +}; +AppBluetoothModule = __decorate([ + NgModule({ + imports: [ + SharedModule, + TranslateModule.forChild(), + RxStateModule, + AppIconModule + ], + declarations: [ + AppBluetoothIcon, + BluetoothPopover + ], + exports: [ + TranslateModule, + AppBluetoothIcon, + BluetoothPopover + ] + }) +], AppBluetoothModule); +export { AppBluetoothModule }; +//# sourceMappingURL=bluetooth.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/bluetooth/bluetooth.module.js.map b/out-tsc/app/app/shared/bluetooth/bluetooth.module.js.map new file mode 100644 index 000000000..4b2121399 --- /dev/null +++ b/out-tsc/app/app/shared/bluetooth/bluetooth.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bluetooth.module.js","sourceRoot":"","sources":["../../../../../src/app/shared/bluetooth/bluetooth.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAc,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAmBrD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;CAE9B,CAAA;AAFY,kBAAkB;IAjB9B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,eAAe,CAAC,QAAQ,EAAE;YAC1B,aAAa;YACb,aAAa;SACd;QACD,YAAY,EAAE;YACZ,gBAAgB;YAChB,gBAAgB;SACjB;QACD,OAAO,EAAE;YACP,eAAe;YACf,gBAAgB;YAChB,gBAAgB;SACjB;KACF,CAAC;GACW,kBAAkB,CAE9B;SAFY,kBAAkB"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/bluetooth/bluetooth.popover.js b/out-tsc/app/app/shared/bluetooth/bluetooth.popover.js new file mode 100644 index 000000000..5bb350780 --- /dev/null +++ b/out-tsc/app/app/shared/bluetooth/bluetooth.popover.js @@ -0,0 +1,315 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core'; +import { PopoverController } from '@ionic/angular'; +import { BluetoothService, removeByAddress } from '@app/shared/bluetooth/bluetooth.service'; +import { chainPromises, isEmptyArray, isNotEmptyArray, isNotNil, removeDuplicatesFromArray, sleep } from '@sumaris-net/ngx-components'; +import { RxState } from '@rx-angular/state'; +import { bluetoothClassToMatIcon } from '@app/shared/bluetooth/bluetooth.utils'; +import { map } from 'rxjs/operators'; +let BluetoothPopover = class BluetoothPopover { + constructor(cd, popoverController, service, state) { + this.cd = cd; + this.popoverController = popoverController; + this.service = service; + this.state = state; + this.enabled$ = this.service.enabled$; + this.loading$ = this.state.select('loading'); + this.devices$ = this.state.select('devices'); + this.deviceCount$ = this.devices$.pipe(map(v => v.length)); + this.connectedDevices$ = this.state.select('connectedDevices'); + this.connecting$ = this.state.select('connecting'); + this.debug = false; + this.selectedDevicesIcon = { icon: 'information-circle' }; + } + set devices(value) { + this.state.set('devices', _ => value); + } + get devices() { + return this.state.get('devices'); + } + set connectedDevices(value) { + this.state.set('connectedDevices', _ => value); + } + get connectedDevices() { + return this.state.get('connectedDevices'); + } + set connecting(value) { + this.state.set('connecting', _ => value); + } + get connecting() { + return this.state.get('connecting'); + } + ngOnInit() { + this.checkEnabledAndScan(); + } + checkEnabledAndScan() { + return __awaiter(this, void 0, void 0, function* () { + let enabled; + try { + yield this.service.ready(); + enabled = yield this.service.enable(); + } + catch (err) { + console.error(`[bluetooth-popover] Error trying to enable bluetooth: ${(err === null || err === void 0 ? void 0 : err.message) || err}`, err); + enabled = false; // Continue + } + // If enabled + if (enabled) { + this.state.set('enabled', _ => enabled); + let connectedDevices = this.connectedDevices || []; + let devices = this.devices || []; + // Try to reconnect all connected devices + if (isNotEmptyArray(connectedDevices)) { + this.markAsConnecting(); + connectedDevices = (yield chainPromises(connectedDevices.map(d => () => this.connect(null, d, { dismiss: false }) + .catch(_ => false) + .then(connected => { + if (connected) { + devices = removeByAddress(devices, d); + return d; + } + devices = removeDuplicatesFromArray([d, ...devices], 'address'); + return null; // Will be excluded in the next filter() + })))).filter(isNotNil); + this.state.set({ enabled, devices, connectedDevices }); + this.markAsConnected(); + this.markAsLoaded(); + } + else { + this.connectedDevices = []; + yield this.scan(); + this.markAsConnecting(); + } + } + else { + this.markAsConnecting(); + this.markAsLoaded(); + } + }); + } + toggleBluetooth() { + return __awaiter(this, void 0, void 0, function* () { + const enabled = yield this.service.isEnabled(); + if (enabled) { + yield this.disable(); + } + else { + const enabled = yield this.enable(); + if (enabled) { + // Start a scan + yield this.scan(); + } + } + }); + } + enable() { + return __awaiter(this, void 0, void 0, function* () { + const enabled = yield this.service.enable(); + this.state.set('enabled', _ => enabled); + return enabled; + }); + } + disable() { + return __awaiter(this, void 0, void 0, function* () { + this.devices = []; + yield this.disconnectAll({ addToDevices: false }); + const disabled = yield this.service.disable(); + this.state.set('enabled', _ => !disabled); + }); + } + scan() { + return __awaiter(this, void 0, void 0, function* () { + try { + // Mark as loading + this.markAsLoading(); + // Clear devices + this.state.set('devices', _ => []); + // Enable if need + const enabled = yield this.service.enable(); + if (!enabled) + return; + let devices = yield this.service.scan(); + // Apply filter + if (this.deviceFilter) { + devices = (devices || []).filter(this.deviceFilter); + } + // Apply result + this.state.set('devices', _ => devices); + } + catch (err) { + console.error('[bluetooth-popover] Error while scanning devices: ' + ((err === null || err === void 0 ? void 0 : err.message) || '') + ' ' + JSON.stringify(err)); + } + finally { + this.markAsLoaded(); + } + }); + } + connect(event, device, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (event === null || event === void 0 ? void 0 : event.defaultPrevented) + return false; + event === null || event === void 0 ? void 0 : event.preventDefault(); + console.info(`[bluetooth-popover] Connecting to: {${device.address}}`); + let connected = false; + try { + // Add to connectedDevices + this.state.set('connectedDevices', s => removeDuplicatesFromArray([...s.connectedDevices, device], 'address')); + connected = yield this.service.isConnected(device); + if (connected) + return true; // Already connected + // Connect + this.markAsConnecting(); + connected = yield this.service.connect(device); + // Cannot connect + if (!connected) + return false; + if (typeof this.checkAfterConnect !== 'function') { + console.debug('[bluetooth-popover] Cannot check if connection is valid: input \'checkAfterConnect\' not set'); + } + else { + // Check connection is valid + console.debug('[bluetooth-popover] Calling checkAfterConnect()...'); + try { + const deviceOrConnected = yield this.checkAfterConnect(device); + connected = !!deviceOrConnected; + if (!connected) { + console.warn('[bluetooth-popover] Not a valid device!', deviceOrConnected); + } + else { + if (typeof deviceOrConnected === 'object') { + // Update device (with updated device received) + const device = deviceOrConnected; + this.state.set('connectedDevices', s => removeDuplicatesFromArray([device, ...s.connectedDevices], 'address')); + } + // Remove from available devices + this.state.set('devices', s => removeByAddress(s.devices, device)); + } + } + catch (e) { + console.error('[bluetooth-popover] Failed during checkAfterConnect(): ' + ((e === null || e === void 0 ? void 0 : e.message) || e)); + connected = false; + } + } + this.cd.markForCheck(); + // Dismiss, if connected + if (!opts || opts.dismiss !== false) { + yield sleep(500); + this.dismiss(this.connectedDevices); + } + return true; + } + catch (err) { + console.error(err); + return false; + } + finally { + if (connected) { + this.markAsConnected(); + } + else { + yield this.disconnect(device); + } + } + }); + } + disconnectAll(opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const selectedDevices = (_a = this.connectedDevices) === null || _a === void 0 ? void 0 : _a.slice(); + if (isEmptyArray(selectedDevices)) + return; // Skip if empty + yield chainPromises(selectedDevices.map(d => () => this.disconnect(d, { addToDevices: false }) + .catch(_ => { }))); + if ((opts === null || opts === void 0 ? void 0 : opts.addToDevices) !== false) { + this.devices = selectedDevices; + } + }); + } + disconnect(device, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!(device === null || device === void 0 ? void 0 : device.address)) + throw new Error('Missing device'); + console.debug(`[bluetooth-popover] Disconnecting {${device.address}} ...`); + yield this.service.disconnect(device); + this.state.set('connectedDevices', s => removeByAddress(s.connectedDevices, device)); + if ((opts === null || opts === void 0 ? void 0 : opts.addToDevices) !== false) { + this.state.set('devices', s => removeDuplicatesFromArray([device, ...s.devices], 'address')); + } + this.markAsConnecting(); + }); + } + dismiss(data, role) { + this.popoverController.dismiss(data, role); + } + trackByFn(index, device) { + return device.address; + } + getDeviceMatIcon(device) { + return bluetoothClassToMatIcon((device === null || device === void 0 ? void 0 : device.class) || 0); + } + markForCheck() { + this.cd.markForCheck(); + } + markAsLoading() { + this.state.set('loading', _ => true); + } + markAsLoaded() { + this.state.set('loading', _ => false); + } + markAsConnecting() { + this.state.set('connecting', _ => true); + } + markAsConnected() { + this.state.set('connecting', _ => false); + } +}; +__decorate([ + Input(), + __metadata("design:type", Function) +], BluetoothPopover.prototype, "checkAfterConnect", void 0); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], BluetoothPopover.prototype, "devices", null); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], BluetoothPopover.prototype, "connectedDevices", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BluetoothPopover.prototype, "connecting", null); +__decorate([ + Input(), + __metadata("design:type", Object) +], BluetoothPopover.prototype, "debug", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BluetoothPopover.prototype, "titleI18n", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], BluetoothPopover.prototype, "deviceFilter", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BluetoothPopover.prototype, "selectedDevicesIcon", void 0); +BluetoothPopover = __decorate([ + Component({ + selector: 'app-bluetooth-popover', + templateUrl: './bluetooth.popover.html', + styleUrls: ['./bluetooth.popover.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + providers: [RxState] + }), + __metadata("design:paramtypes", [ChangeDetectorRef, + PopoverController, + BluetoothService, + RxState]) +], BluetoothPopover); +export { BluetoothPopover }; +//# sourceMappingURL=bluetooth.popover.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/bluetooth/bluetooth.popover.js.map b/out-tsc/app/app/shared/bluetooth/bluetooth.popover.js.map new file mode 100644 index 000000000..c2f3ddbfd --- /dev/null +++ b/out-tsc/app/app/shared/bluetooth/bluetooth.popover.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bluetooth.popover.js","sourceRoot":"","sources":["../../../../../src/app/shared/bluetooth/bluetooth.popover.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/bluetooth/bluetooth.service.js b/out-tsc/app/app/shared/bluetooth/bluetooth.service.js new file mode 100644 index 000000000..db6b6aab7 --- /dev/null +++ b/out-tsc/app/app/shared/bluetooth/bluetooth.service.js @@ -0,0 +1,389 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { Inject, Injectable, Optional } from '@angular/core'; +import { Platform } from '@ionic/angular'; +import { APP_LOGGING_SERVICE, chainPromises, isEmptyArray, isNotNilOrBlank, sleep, StartableService, } from '@sumaris-net/ngx-components'; +import { BluetoothSerial } from '@e-is/capacitor-bluetooth-serial'; +import { EMPTY, from, fromEventPattern } from 'rxjs'; +import { catchError, filter, finalize, map, mergeMap, switchMap, takeUntil } from 'rxjs/operators'; +import { BluetoothErrorCodes } from '@app/shared/bluetooth/bluetooth-serial.errors'; +import { RxState } from '@rx-angular/state'; +export function removeByAddress(devices, device) { + if (!(device === null || device === void 0 ? void 0 : device.address)) + return devices; // skip + return devices === null || devices === void 0 ? void 0 : devices.reduce((res, d) => (d.address !== device.address) ? res.concat(d) : res, []); +} +let BluetoothService = class BluetoothService extends StartableService { + constructor(platform, loggingService) { + super(platform); + this.platform = platform; + this._state = new RxState(); + this.enabled$ = this._state.select('enabled'); + this.connecting$ = this._state.select('connecting'); + this.connectedDevices$ = this._state.select('connectedDevices'); + this._state.set({ enabled: null }); + this._logger = loggingService === null || loggingService === void 0 ? void 0 : loggingService.getLogger('bluetooth'); + } + get connectedDevices() { + return this._state.get('connectedDevices'); + } + get enabled() { + return this._state.get('enabled') || false; + } + isApp() { + return this.platform.is('cordova'); + } + ngOnStart(opts) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[bluetooth] Starting service...'); + const enabled = yield this.isEnabled(); + console.info(`[bluetooth] Init state with: {enabled: ${enabled}}`); + this._state.set({ enabled, connectedDevices: null, connecting: false }); + // Listen enabled state + if (this.isApp()) { + console.debug('[bluetooth] Listening enable notifications...'); + try { + yield BluetoothSerial.startEnabledNotifications(); + this._state.connect('enabled', this.on('onEnabledChanged') + .pipe(finalize(() => BluetoothSerial.stopEnabledNotifications())), (_, { enabled }) => { + console.info(`[bluetooth] State changed: {enabled: ${enabled}}`); + if (!enabled) { + this.disconnectAll(); + } + return enabled; + }); + } + catch (err) { + console.error(`[bluetooth] Error while trying to listen enable notifications: ${(err === null || err === void 0 ? void 0 : err.message) || err}`, err); + // Continue, because Android API <= 28 can fail + } + } + // Because a pause will disconnect all devices, we should reconnect on resume + this.registerSubscription(this.platform.resume.subscribe(() => __awaiter(this, void 0, void 0, function* () { + if (yield this.isEnabled()) { + yield this.reconnectAll(); + } + }))); + return Promise.resolve(undefined); + }); + } + ngOnStop() { + this._state.set({ enabled: null, connectedDevices: null, connecting: false }); + return super.ngOnStop(); + } + ngOnDestroy() { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[bluetooth] Destroying...'); + // Will stop listeners (see use of stopSubject in the on() function) + if (this.started) { + yield this.stop(); + } + this._state.ngOnDestroy(); + }); + } + /** + * Register to an event + * + * @param eventType + */ + on(eventType) { + let listenerHandle; + return fromEventPattern((handler) => __awaiter(this, void 0, void 0, function* () { + listenerHandle = yield BluetoothSerial.addListener(eventType, handler); + })) + .pipe(takeUntil(this.stopSubject), map(data => data), finalize(() => listenerHandle === null || listenerHandle === void 0 ? void 0 : listenerHandle.remove())); + } + isEnabled() { + return __awaiter(this, void 0, void 0, function* () { + const { enabled } = yield BluetoothSerial.isEnabled(); + return enabled; + }); + } + isDisabled() { + return __awaiter(this, void 0, void 0, function* () { + return !(yield this.isEnabled()); + }); + } + enable() { + return __awaiter(this, void 0, void 0, function* () { + let enabled = yield this.isEnabled(); + if (!enabled) { + console.debug(`[bluetooth] Enabling ...`); + enabled = (yield BluetoothSerial.enable()).enabled; + console.debug(`[bluetooth] ${enabled ? 'Enabled' : 'Disabled'}`); + if (enabled) + this._state.set('enabled', () => enabled); + } + else { + // Update the state to enabled, in case bluetooth has been enabled but not using this service + this._state.set('enabled', () => enabled); + } + return enabled; + }); + } + disable() { + return __awaiter(this, void 0, void 0, function* () { + let enabled = yield this.isEnabled(); + if (enabled) { + console.debug(`[bluetooth] Disabling ...`); + enabled = (yield BluetoothSerial.disable()).enabled; + console.debug(`[bluetooth] ${enabled ? 'Enabled' : 'Disabled'}`); + if (!enabled) + this._state.set('enabled', () => enabled); + } + return !enabled; + }); + } + scan(opts) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const enabled = yield this.isEnabled(); + if (!enabled) { + // Try to enable bluetooth + if (!opts || opts.autoEnabled !== false) { + console.debug(`[bluetooth] Trying to enable, before scanning...`); + // Enable, then loop + return this.enable() + .then(_ => this.scan({ autoEnabled: false })); + } + throw { code: BluetoothErrorCodes.BLUETOOTH_DISABLED, message: 'SHARED.BLUETOOTH.ERROR.DISABLED' }; + } + console.debug(`[bluetooth] Scan devices...`); + try { + const { devices } = yield BluetoothSerial.scan(); + const logMessage = `Found ${(devices === null || devices === void 0 ? void 0 : devices.length) || 0} device(s): ${(devices || []).map(d => d.address).join(', ')}`; + console.debug(`[bluetooth] ${logMessage}`); + (_a = this._logger) === null || _a === void 0 ? void 0 : _a.debug('scan', logMessage); + return devices; + } + catch (err) { + const logMessage = `Error while scanning: ${(err === null || err === void 0 ? void 0 : err.message) || err}`; + console.debug(`[bluetooth] ${logMessage}`); + (_b = this._logger) === null || _b === void 0 ? void 0 : _b.error('scan', logMessage); + } + }); + } + isConnected(device) { + return __awaiter(this, void 0, void 0, function* () { + const { connected } = (yield BluetoothSerial.isConnected({ address: device.address })); + return connected; + }); + } + /** + * Wait device to get really connected (isConnected() should return true) + * + * @param device + * @param opts + */ + waitIsConnected(device, opts) { + return __awaiter(this, void 0, void 0, function* () { + const timeout = (opts === null || opts === void 0 ? void 0 : opts.timeout) || 1000; // 1s by default + let connected = false; + // Start a timeout + let timeoutReached = false; + setTimeout(() => timeoutReached = !connected && true, timeout); + do { + connected = yield this.isConnected(device); + if (!connected) + yield sleep(200); + } while (!connected || timeoutReached); + // Fail (timeout reached) + if (timeoutReached) { + console.error(`[bluetooth] Device {${device.address}} not connected, after ${timeout}ms`); + return false; + } + return true; + }); + } + connect(device, opts) { + return __awaiter(this, void 0, void 0, function* () { + const connected = yield this.isConnected(device); + if (connected) { + console.debug(`[bluetooth] Connecting to {${device.address}}: skipped (already connected)`); + this.registerDevice(device); + return true; + } + else { + if (!opts || opts.markAsConnecting !== false) { + this.markAsConnecting(); + } + try { + console.info(`[bluetooth] Connecting to {${device.address}}...`); + yield BluetoothSerial.connect({ address: device.address }); + console.info(`[bluetooth] Connecting to {${device.address}} [OK]`); + this.registerDevice(device); + return true; + } + catch (err) { + console.debug(`[bluetooth] Failed to connect to {${device.address}}`, err); + return false; + } + finally { + if (!opts || opts.markAsConnecting !== false) { + this.markAsNotConnecting(); + } + } + } + }); + } + connectIfNeed(device, opts) { + return __awaiter(this, void 0, void 0, function* () { + let connected = yield this.isConnected(device); + if (!connected) { + this.markAsConnecting(); + try { + connected = yield this.connect(device, { markAsConnecting: false }); + // Wait device is really connected (will wait isConnected() to return true) + if (connected && (opts === null || opts === void 0 ? void 0 : opts.timeout)) { + connected = yield this.waitIsConnected(device, opts); + } + // Update connected state + if (!opts || opts.emitEvent !== false) { + if (connected) + this.registerDevice(device); + else + this.unregisterDevice(device); + } + } + finally { + this.markAsNotConnecting(); + } + } + return connected; + }); + } + disconnect(device, opts) { + return __awaiter(this, void 0, void 0, function* () { + try { + const connected = yield this.isConnected(device); + if (connected) { + console.debug(`[bluetooth] Disconnecting to {${device.address}}...`, device); + yield BluetoothSerial.disconnect({ address: device.address }); + } + } + finally { + if (!opts || opts.emitEvent !== false) { + this.unregisterDevice(device); + } + } + }); + } + watch(device, options) { + let listenerHandle; + let wasConnected; + console.info(`[bluetooth] Start watching values from device '${device.address}'...`); + return from(this.isConnected(device)) + .pipe(mergeMap((connected) => __awaiter(this, void 0, void 0, function* () { + console.info(`[bluetooth] Will start watch device '${device.address}' (${connected ? 'Connected' : 'Disconnected'})...`); + wasConnected = connected; + // Connect (if need) + if (connected) + return true; + return this.connect(device); + })), + // Filter if connection succeed + filter(connected => connected === true), + // Start to listen notification + mergeMap(_ => from(BluetoothSerial.startNotifications({ address: device.address, delimiter: options.delimiter }))), catchError(err => { + console.error(`[bluetooth] Error while connecting a bluetooth device: ${(err === null || err === void 0 ? void 0 : err.message) || ''}, before watching it`, err); + return EMPTY; + }), switchMap(_ => fromEventPattern((handler) => __awaiter(this, void 0, void 0, function* () { + listenerHandle = yield BluetoothSerial.addListener('onRead', handler); + }))), map((res) => { + const value = res === null || res === void 0 ? void 0 : res.value; + console.debug(`[bluetooth] Read a value: ${value}`); + return value; + }), filter(isNotNilOrBlank), finalize(() => __awaiter(this, void 0, void 0, function* () { + console.debug(`[bluetooth] Stop watching values from {${device.address}}`); + listenerHandle === null || listenerHandle === void 0 ? void 0 : listenerHandle.remove(); + yield BluetoothSerial.stopNotifications({ address: device.address }); + // Disconnect (if connect() was call here) + if (!wasConnected) { + console.debug(`[bluetooth] Disconnecting device {${device.address}}, after watch end`); + yield this.disconnect(device); + } + }))); + } + disconnectAll() { + return __awaiter(this, void 0, void 0, function* () { + const devices = this.connectedDevices; + if (isEmptyArray(devices)) + return; // Skip + console.debug(`[bluetooth] Disconnecting ${devices.length} devices...`); + yield chainPromises(devices.map(d => () => this.disconnect(d).catch(err => { }))); + }); + } + reconnectAll() { + return __awaiter(this, void 0, void 0, function* () { + const devices = this.connectedDevices; + if (isEmptyArray(devices)) + return; // Skip + try { + this.markAsConnecting(); + // Reconnect one by one + yield chainPromises(devices.map(d => () => __awaiter(this, void 0, void 0, function* () { + const connected = yield this.connect(d, { markAsConnecting: false }).catch(_ => false); + // Forget the device, if reconnection failed + if (!connected) + this.unregisterDevice(d); + }))); + } + finally { + this.markAsNotConnecting(); + } + }); + } + disconnectIfNeed(device, opts) { + return __awaiter(this, void 0, void 0, function* () { + try { + const connected = yield this.isConnected(device); + if (connected) { + console.debug(`[bluetooth] Disconnecting to {${device.address}}...`, device); + yield BluetoothSerial.disconnect({ address: device.address }); + } + } + finally { + if (!opts || opts.emitEvent !== false) { + this.unregisterDevice(device); + } + } + }); + } + /* -- internal functions -- */ + registerDevice(device) { + if (!device.address) + throw new Error('Missing device with address'); + // Add to list, if not exists yet + this._state.set('connectedDevices', s => { + const index = (s.connectedDevices || []).findIndex(d => d.address === device.address); + // Already exists: update + if (index !== -1) { + console.debug(`[bluetooth] Updating connected device {${device.address}}`); + const connectedDevices = s.connectedDevices.slice(); // Create a copy + connectedDevices[index] = device; + return connectedDevices; + } + // Add to list + console.debug(`[bluetooth] Register new connected device {${device.address}}`); + return (s.connectedDevices || []).concat(device); + }); + } + unregisterDevice(device) { + if (!device.address) + throw new Error('Missing device with address'); + this._state.set('connectedDevices', s => removeByAddress(s.connectedDevices, device)); + } + markAsConnecting() { + this._state.set('connecting', () => true); + } + markAsNotConnecting() { + this._state.set('connecting', () => false); + } +}; +BluetoothService = __decorate([ + Injectable({ providedIn: 'root' }), + __param(1, Optional()), + __param(1, Inject(APP_LOGGING_SERVICE)), + __metadata("design:paramtypes", [Platform, Object]) +], BluetoothService); +export { BluetoothService }; +//# sourceMappingURL=bluetooth.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/bluetooth/bluetooth.service.js.map b/out-tsc/app/app/shared/bluetooth/bluetooth.service.js.map new file mode 100644 index 000000000..f24986343 --- /dev/null +++ b/out-tsc/app/app/shared/bluetooth/bluetooth.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bluetooth.service.js","sourceRoot":"","sources":["../../../../../src/app/shared/bluetooth/bluetooth.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/bluetooth/bluetooth.utils.js b/out-tsc/app/app/shared/bluetooth/bluetooth.utils.js new file mode 100644 index 000000000..9eb639e19 --- /dev/null +++ b/out-tsc/app/app/shared/bluetooth/bluetooth.utils.js @@ -0,0 +1,27 @@ +export function bluetoothClassToMatIcon(bluetoothClass) { + // eslint-disable-next-line no-bitwise + const majorDeviceClass = (bluetoothClass & 0x1F00) >> 8; + switch (majorDeviceClass) { + case 1: // Computer + return 'computer'; + case 2: // Phone + return 'smartphone'; + case 3: // Networking + return 'router'; + case 4: // Audio/Video + return 'headset'; + case 5: // Peripheral + return 'keyboard'; + case 6: // Imaging + return 'photo_camera'; + case 7: // Wearable + return 'watch'; + case 8: // Toy + return 'toys'; + case 9: // Health + return 'fitness_center'; + default: + return 'device_unknown'; + } +} +//# sourceMappingURL=bluetooth.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/bluetooth/bluetooth.utils.js.map b/out-tsc/app/app/shared/bluetooth/bluetooth.utils.js.map new file mode 100644 index 000000000..33d541b81 --- /dev/null +++ b/out-tsc/app/app/shared/bluetooth/bluetooth.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bluetooth.utils.js","sourceRoot":"","sources":["../../../../../src/app/shared/bluetooth/bluetooth.utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,uBAAuB,CAAC,cAAsB;IAC5D,sCAAsC;IACtC,MAAM,gBAAgB,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAExD,QAAQ,gBAAgB,EAAE;QACxB,KAAK,CAAC,EAAE,WAAW;YACjB,OAAO,UAAU,CAAC;QACpB,KAAK,CAAC,EAAE,QAAQ;YACd,OAAO,YAAY,CAAC;QACtB,KAAK,CAAC,EAAE,aAAa;YACnB,OAAO,QAAQ,CAAC;QAClB,KAAK,CAAC,EAAE,cAAc;YACpB,OAAO,SAAS,CAAC;QACnB,KAAK,CAAC,EAAE,aAAa;YACnB,OAAO,UAAU,CAAC;QACpB,KAAK,CAAC,EAAE,UAAU;YAChB,OAAO,cAAc,CAAC;QACxB,KAAK,CAAC,EAAE,WAAW;YACjB,OAAO,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM;YACZ,OAAO,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,SAAS;YACf,OAAO,gBAAgB,CAAC;QAC1B;YACE,OAAO,gBAAgB,CAAC;KAC3B;AACH,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/bluetooth/testing/bluetooth.testing.js b/out-tsc/app/app/shared/bluetooth/testing/bluetooth.testing.js new file mode 100644 index 000000000..e0363e636 --- /dev/null +++ b/out-tsc/app/app/shared/bluetooth/testing/bluetooth.testing.js @@ -0,0 +1,38 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core'; +import { RxState } from '@rx-angular/state'; +import { Platform } from '@ionic/angular'; +import { BluetoothService } from '@app/shared/bluetooth/bluetooth.service'; +let BluetoothTestingPage = class BluetoothTestingPage { + constructor(platform, bluetoothService, cd) { + this.platform = platform; + this.bluetoothService = bluetoothService; + this.cd = cd; + } + disconnectAll() { + return __awaiter(this, void 0, void 0, function* () { + yield this.bluetoothService.disconnectAll(); + }); + } + disconnect(item) { + return __awaiter(this, void 0, void 0, function* () { + yield this.bluetoothService.disconnect(item); + }); + } +}; +BluetoothTestingPage = __decorate([ + Component({ + selector: 'app-bluetooth-testing', + templateUrl: './bluetooth.testing.html', + styleUrls: [ + './bluetooth.testing.scss' + ], + providers: [RxState], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Platform, + BluetoothService, + ChangeDetectorRef]) +], BluetoothTestingPage); +export { BluetoothTestingPage }; +//# sourceMappingURL=bluetooth.testing.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/bluetooth/testing/bluetooth.testing.js.map b/out-tsc/app/app/shared/bluetooth/testing/bluetooth.testing.js.map new file mode 100644 index 000000000..e70c63d13 --- /dev/null +++ b/out-tsc/app/app/shared/bluetooth/testing/bluetooth.testing.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bluetooth.testing.js","sourceRoot":"","sources":["../../../../../../src/app/shared/bluetooth/testing/bluetooth.testing.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAoBpE,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAE/B,YACY,QAAkB,EAClB,gBAAkC,EACpC,EAAqB;QAFnB,aAAQ,GAAR,QAAQ,CAAU;QAClB,qBAAgB,GAAhB,gBAAgB,CAAkB;QACpC,OAAE,GAAF,EAAE,CAAmB;IAG/B,CAAC;IAEK,aAAa;;YACjB,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC;QAC9C,CAAC;KAAA;IAEK,UAAU,CAAC,IAAqB;;YACpC,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;KAAA;CACF,CAAA;AAjBY,oBAAoB;IAThC,SAAS,CAAC;QACT,QAAQ,EAAE,uBAAuB;QACjC,WAAW,EAAE,0BAA0B;QACvC,SAAS,EAAE;YACT,0BAA0B;SAC3B;QACD,SAAS,EAAE,CAAC,OAAO,CAAC;QACpB,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAIsB,QAAQ;QACA,gBAAgB;QAChC,iBAAiB;GALpB,oBAAoB,CAiBhC;SAjBY,oBAAoB"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/bluetooth/testing/bluetooth.testing.module.js b/out-tsc/app/app/shared/bluetooth/testing/bluetooth.testing.module.js new file mode 100644 index 000000000..35231c530 --- /dev/null +++ b/out-tsc/app/app/shared/bluetooth/testing/bluetooth.testing.module.js @@ -0,0 +1,41 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { CommonModule } from '@angular/common'; +import { CoreModule } from '@sumaris-net/ngx-components'; +import { TranslateModule } from '@ngx-translate/core'; +import { AppSharedModule } from '@app/shared/shared.module'; +import { BluetoothTestingPage } from '@app/shared/bluetooth/testing/bluetooth.testing'; +import { AppBluetoothModule } from '@app/shared/bluetooth/bluetooth.module'; +export const BLUETOOTH_TESTING_PAGES = [ + { label: 'Bluetooth', page: '/testing/shared/bluetooth' } +]; +const routes = [ + { + path: '', + pathMatch: 'full', + component: BluetoothTestingPage + } +]; +let AppBluetoothTestingModule = class AppBluetoothTestingModule { +}; +AppBluetoothTestingModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + AppSharedModule, + CoreModule, + TranslateModule.forChild(), + RouterModule.forChild(routes), + AppBluetoothModule + ], + declarations: [ + BluetoothTestingPage + ], + exports: [ + BluetoothTestingPage + ] + }) +], AppBluetoothTestingModule); +export { AppBluetoothTestingModule }; +//# sourceMappingURL=bluetooth.testing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/bluetooth/testing/bluetooth.testing.module.js.map b/out-tsc/app/app/shared/bluetooth/testing/bluetooth.testing.module.js.map new file mode 100644 index 000000000..7c5288861 --- /dev/null +++ b/out-tsc/app/app/shared/bluetooth/testing/bluetooth.testing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bluetooth.testing.module.js","sourceRoot":"","sources":["../../../../../../src/app/shared/bluetooth/testing/bluetooth.testing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAe,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAE5E,MAAM,CAAC,MAAM,uBAAuB,GAAkB;IACpD,EAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,2BAA2B,EAAC;CACxD,CAAC;AAEF,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,oBAAoB;KAChC;CACF,CAAC;AAkBK,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;CAErC,CAAA;AAFY,yBAAyB;IAhBrC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,eAAe;YACf,UAAU;YACV,eAAe,CAAC,QAAQ,EAAE;YAC1B,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,kBAAkB;SACnB;QACD,YAAY,EAAE;YACZ,oBAAoB;SACrB;QACD,OAAO,EAAE;YACP,oBAAoB;SACrB;KACF,CAAC;GACW,yBAAyB,CAErC;SAFY,yBAAyB"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/chartsjs.utils.js b/out-tsc/app/app/shared/chartsjs.utils.js new file mode 100644 index 000000000..a74c4b0b6 --- /dev/null +++ b/out-tsc/app/app/shared/chartsjs.utils.js @@ -0,0 +1,229 @@ +import { BarController, BarElement, CategoryScale, Chart, DoughnutController, LinearScale, LineController, LineElement, LogarithmicScale, PointElement, Title, } from 'chart.js'; +import { ColorScale, isNil } from '@sumaris-net/ngx-components'; +import chartTrendline from 'chartjs-plugin-trendline'; +import { BoxAndWiskers, BoxPlotController } from '@sgratzl/chartjs-chart-boxplot'; +export const ChartJsPluginThresholdLine = { + id: 'thresholdline', + afterDraw(chart) { + function computeStop(scale, value) { + var _a; + if (!scale || isNil(value)) + throw new Error(`Missing required argument 'scale' or 'value'`); + const lengthType = ((_a = scale['id']) === null || _a === void 0 ? void 0 : _a[0]) === 'y' ? 'height' : 'width'; + if (isNil(scale[lengthType])) + throw new Error(`Missing 'scale.${lengthType}'!`); + switch (scale.type) { + case 'category': + if (isNil(scale['maxIndex'])) + throw new Error(`Missing 'scale.maxIndex'!`); + return (scale[lengthType] / (scale['maxIndex'] + 1)) * value; + case 'linear': + if (isNil(scale['max'])) + throw new Error(`Missing 'scale.max'!`); + return Math.round(scale[lengthType] * (value / scale['max'])); + default: + throw new Error(`Scale type ${scale.type} not implemented`); + } + } + // DEBUG + //console.debug(`[ChartJsPluginTresholdLine]`, arguments); + if (chart.options.plugins.thresholdLine === undefined) + return; + if (chart.options.plugins.thresholdLine.value === undefined) { + console.warn(`[ChartJsPluginThresholdLine] called without value`); + return; + } + const param = { + color: chart.options.plugins.thresholdLine.color || '#000000', + style: chart.options.plugins.thresholdLine.style || 'solid', + width: chart.options.plugins.thresholdLine.width || 3, + value: chart.options.plugins.thresholdLine.value, + orientation: chart.options.plugins.thresholdLine.orientation || 'x', + }; + let scale; + for (const i in chart['scales']) { + if (i[0] === param.orientation) + scale = chart['scales'][i]; + if (scale) + break; + } + if (!scale) { + console.warn(`[ChartJsPluginThresholdLine] no scale found for orientation ${orientation}`); + return; + } + let stopVal; + try { + stopVal = computeStop(scale, param.value); + } + catch (e) { + console.error('Error while trying to compute the stopVal: ' + (e === null || e === void 0 ? void 0 : e.message), e); + return; + } + let xStart = 0; + let xStop = 0; + let yStart = 0; + let yStop = 0; + if (param.orientation === 'y') { + yStart = yStop = chart.chartArea.bottom - stopVal; + xStart = chart.chartArea.left; + xStop = chart.chartArea.right; + } + else { + yStart = chart.chartArea.top; + yStop = chart.chartArea.bottom; + xStart = xStop = chart.chartArea.left + stopVal; + } + for (const s in chart['scales']) { + if (s[0] === param.orientation) + scale = chart['scales'][s]; + if (scale) + break; + } + if (!scale) { + console.warn(`[ChartJsPluginThresholdLine] no scale found for orientation ${orientation}`); + return; + } + // Draw thresholdLine + const ctx = chart.ctx; + ctx.lineWidth = param.width; + if (param.style === 'dashed') + ctx.setLineDash([8, 8]); + ctx.beginPath(); + ctx.moveTo(xStart, yStart); + ctx.lineTo(xStop, yStop); + ctx.strokeStyle = param.color; + ctx.stroke(); + }, +}; +export const ChartJsPluginMedianLine = { + id: 'medianline', + afterDraw(chart) { + function getStartStopFromOrientation(area, scales, orientation) { + const res = { start: { x: 0, y: 0 }, stop: { x: 0, y: 0 } }; + let median = 0; + switch (orientation) { + case 'x': + median = scales.y['height'] / 2; + res.start.x = area.left; + res.start.y = area.top + median; + res.stop.x = area.right; + res.stop.y = area.top + median; + break; + case 'y': + median = scales.x['width'] / 2; + res.start.x = area.left + median; + res.start.y = area.top; + res.stop.x = area.left + median; + res.stop.y = area.bottom; + break; + case 'b': + res.start.x = area.left; + res.start.y = area.bottom; + res.stop.x = area.right; + res.stop.y = area.top; + break; + } + return res; + } + // DEBUG + //console.debug(`[ChartJsPluginMedianLine.getStartSropFromOrientation]`, arguments); + if (chart.options.plugins.medianLine === undefined) + return; + const param = { + color: chart.options.plugins.medianLine.color || '#000000', + style: chart.options.plugins.medianLine.style || 'solid', + width: chart.options.plugins.medianLine.width || 3, + orientation: chart.options.plugins.medianLine.orientation || 'x', + }; + // Get the first x and y scale on the chart + const scales = ((scales) => { + const { x, y } = scales; + return { x, y }; + })(chart['scales']); + if (Object.entries(scales).find(s => s === undefined)) { + console.warn(`[ChartJsPluginMedianLine.getStartStopFromOrientation] least one scale (x,y) is undefined`, scales); + } + // Draw median + const ctx = chart.ctx; + const lineStartStop = getStartStopFromOrientation(chart.chartArea, scales, param.orientation); + ctx.lineWidth = param.width; + if (param.style === 'dashed') + ctx.setLineDash([8, 8]); + ctx.beginPath(); + ctx.moveTo(lineStartStop.start.x, lineStartStop.start.y); + ctx.lineTo(lineStartStop.stop.x, lineStartStop.stop.y); + ctx.strokeStyle = param.color; + ctx.stroke(); + }, +}; +export class ChartJsUtils { + static register() { + this.registerCommons(); + this.registerPlugins(); + } + static registerCommons() { + if (this._commonsRegistered) + return; // Skip + Chart.register(LineController, LineElement, PointElement, BarElement, BarController, DoughnutController, Title, LinearScale, LogarithmicScale, CategoryScale); + this._commonsRegistered = true; + } + static registerPlugins() { + if (this._pluginsRegistered) + return; // Skip + Chart.register(chartTrendline); + Chart.register(ChartJsPluginThresholdLine); + Chart.register(ChartJsPluginMedianLine); + // Box plot (see https://github.com/sgratzl/chartjs-chart-boxplot) + Chart.register(BoxPlotController, BoxAndWiskers); + this._pluginsRegistered = true; + } + static computeChartPoints(values, radius = 6) { + return values.map(s => ({ x: s[0], y: s[1], r: radius })); + } + static computeColorsScaleFromLabels(labels, options) { + const count = labels.length; + const colorScale = ColorScale.custom(count, Object.assign({ min: 1, max: labels.length }, options)); + return labels.map((label, index) => ({ + label, + color: colorScale.getLegendAtIndex(index).color, + })); + } + static getMinMaxOfSetsOfDataSets(setOfDataset) { + const flatten = setOfDataset.flat(); + return { min: Math.min(...flatten), max: Math.max(...flatten) }; + } + static pushLabels(chart, labels) { + chart.data = chart.data || { datasets: [] }; + if (isNil(chart.data.labels)) { + chart.data.labels = labels; + } + else { + chart.data.labels.push(...labels); + } + } + static setLabels(chart, labels) { + chart.data = chart.data || { datasets: undefined }; + chart.data.labels = labels; + } + static pushDataSet(chart, dataset) { + chart.data = chart.data || { datasets: [] }; + if (isNil(chart.data.datasets)) + chart.data.datasets = [dataset]; + else + chart.data.datasets.push(dataset); + } + static setSingleDataSet(chart, dataset) { + chart.data = chart.data || { datasets: undefined }; + chart.data.datasets = [dataset]; + } +} +ChartJsUtils._commonsRegistered = false; +ChartJsUtils._pluginsRegistered = false; +export class ChartJsUtilsColor { + static getDerivativeColor(color, count) { + return ColorScale.custom(count, { mainColor: color.rgb }) + .legend.items + .map(legendItem => legendItem.color); + } +} +//# sourceMappingURL=chartsjs.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/chartsjs.utils.js.map b/out-tsc/app/app/shared/chartsjs.utils.js.map new file mode 100644 index 000000000..de9af5465 --- /dev/null +++ b/out-tsc/app/app/shared/chartsjs.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"chartsjs.utils.js","sourceRoot":"","sources":["../../../../src/app/shared/chartsjs.utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/colors.utils.js b/out-tsc/app/app/shared/colors.utils.js new file mode 100644 index 000000000..21639c7db --- /dev/null +++ b/out-tsc/app/app/shared/colors.utils.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=colors.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/colors.utils.js.map b/out-tsc/app/app/shared/colors.utils.js.map new file mode 100644 index 000000000..a4e107443 --- /dev/null +++ b/out-tsc/app/app/shared/colors.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"colors.utils.js","sourceRoot":"","sources":["../../../../src/app/shared/colors.utils.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/out-tsc/app/app/shared/context.service.js b/out-tsc/app/app/shared/context.service.js new file mode 100644 index 000000000..243bba6e8 --- /dev/null +++ b/out-tsc/app/app/shared/context.service.js @@ -0,0 +1,58 @@ +import { __decorate, __metadata, __param } from "tslib"; +import { Inject, Injectable, InjectionToken, Optional } from '@angular/core'; +import { DateUtils, fromDateISOString } from '@sumaris-net/ngx-components'; +import { RxState } from '@rx-angular/state'; +export const CONTEXT_DEFAULT_STATE = new InjectionToken('ContextDefaultState'); +let ContextService = class ContextService extends RxState { + constructor(defaultState) { + super(); + this.defaultState = defaultState; + this.reset(); + } + setValue(key, value) { + // DEBUG + //console.debug(`[context-service] Set '${String(key)}'`, value); + this.set(key, _ => value); + } + getObservable(key) { + return this.select(key); + } + getValue(key) { + return this.get(key); + } + resetValue(key) { + this.set(key, () => this.defaultState[key]); + } + reset() { + this.set(this.defaultState); + } + getValueAsDate(key) { + return fromDateISOString(this.getValue(key)); + } + get clipboard() { + return this.get('clipboard'); + } + set clipboard(value) { + this.set('clipboard', _ => (Object.assign(Object.assign({}, value), { updateDate: DateUtils.moment() }))); + } + get program() { + return this.get('program'); + } + set program(value) { + this.set('clipboard', _ => value); + } + get strategy() { + return this.get('strategy'); + } + set strategy(value) { + this.set('strategy', _ => value); + } +}; +ContextService = __decorate([ + Injectable(), + __param(0, Optional()), + __param(0, Inject(CONTEXT_DEFAULT_STATE)), + __metadata("design:paramtypes", [Object]) +], ContextService); +export { ContextService }; +//# sourceMappingURL=context.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/context.service.js.map b/out-tsc/app/app/shared/context.service.js.map new file mode 100644 index 000000000..2bd2e296e --- /dev/null +++ b/out-tsc/app/app/shared/context.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"context.service.js","sourceRoot":"","sources":["../../../../src/app/shared/context.service.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAC,SAAS,EAAE,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAe1C,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,cAAc,CAAsB,qBAAqB,CAAC,CAAC;AAI7F,IAAM,cAAc,GAApB,MAAM,cAA6D,SAAQ,OAAU;IAE1F,YAAiE,YAAe;QAC9E,KAAK,EAAE,CAAC;QADuD,iBAAY,GAAZ,YAAY,CAAG;QAE9E,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,QAAQ,CAAoB,GAAM,EAAE,KAAW;QAE7C,QAAQ;QACR,iEAAiE;QAEjE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,aAAa,CAAoB,GAAM;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,QAAQ,CAAoB,GAAM;QAChC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,UAAU,CAAoB,GAAM;QAClC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9B,CAAC;IAED,cAAc,CAAoB,GAAM;QACtC,OAAO,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAiB,CAAC;IAC/C,CAAC;IAED,IAAI,SAAS,CAAC,KAA+B;QAC3C,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,iCAAK,KAAK,KAAE,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,OAAO,CAAC,KAAwB;QAClC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,QAAQ,CAAC,KAAyB;QACpC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;CACF,CAAA;AA1DY,cAAc;IAD1B,UAAU,EAAE;IAGE,WAAA,QAAQ,EAAE,CAAA;IAAE,WAAA,MAAM,CAAC,qBAAqB,CAAC,CAAA;;GAF3C,cAAc,CA0D1B;SA1DY,cAAc"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/flags.utils.js b/out-tsc/app/app/shared/flags.utils.js new file mode 100644 index 000000000..b3159c5cd --- /dev/null +++ b/out-tsc/app/app/shared/flags.utils.js @@ -0,0 +1,16 @@ +import { isNotNilOrNaN } from '@sumaris-net/ngx-components'; +export function flagsToString(flags, flagMap, separator) { + return (Object.keys(flagMap) + // eslint-disable-next-line no-bitwise + .map((key) => ((flags & flagMap[key]) !== 0 ? key : null)) + .filter(isNotNilOrNaN) + .join(separator || ',')); +} +export function hasFlag(value, flag) { + // eslint-disable-next-line no-bitwise + return (value & flag) === flag; +} +export function removeFlag(value, flag) { + return hasFlag(value, flag) ? (value - flag) : value; +} +//# sourceMappingURL=flags.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/flags.utils.js.map b/out-tsc/app/app/shared/flags.utils.js.map new file mode 100644 index 000000000..5083a7e5f --- /dev/null +++ b/out-tsc/app/app/shared/flags.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"flags.utils.js","sourceRoot":"","sources":["../../../../src/app/shared/flags.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAa,MAAM,6BAA6B,CAAC;AAEvE,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,OAAgC,EAAE,SAAkB;IAC/F,OAAO,CACL,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QAClB,sCAAsC;SACrC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACzD,MAAM,CAAC,aAAa,CAAC;SACrB,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,CAC1B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,IAAY;IACjD,sCAAsC;IACtC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,IAAY;IACpD,OAAO,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACvD,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/forms.utils.js b/out-tsc/app/app/shared/forms.utils.js new file mode 100644 index 000000000..7ab0bc952 --- /dev/null +++ b/out-tsc/app/app/shared/forms.utils.js @@ -0,0 +1,39 @@ +/** + * See AbstractControl.status + * + * The validation status of the control. There are four possible + * validation status values: + * + * * **VALID**: This control has passed all validation checks. + * * **INVALID**: This control has failed at least one validation check. + * * **PENDING**: This control is in the midst of conducting a validation check. + * * **DISABLED**: This control is exempt from validation checks. + * + * These status values are mutually exclusive, so a control cannot be + * both valid AND invalid or invalid AND disabled. + */ +import { FormArray, FormGroup } from '@angular/forms'; +export class AppSharedFormUtils { + static dumpForm(form) { + let target; + if (form instanceof FormGroup) { + target = { controls: {} }; + Object.keys(form.controls).forEach(key => { + const control = form.controls[key]; + target.controls[key] = this.dumpForm(control); + }); + } + else if (form instanceof FormArray) { + target = []; + for (let i = 0; i < form.length; i++) { + const control = form.at(i); + target[i] = this.dumpForm(control); + } + } + else { + target = { value: form.value, status: form.status }; + } + return target; + } +} +//# sourceMappingURL=forms.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/forms.utils.js.map b/out-tsc/app/app/shared/forms.utils.js.map new file mode 100644 index 000000000..96b7ff89b --- /dev/null +++ b/out-tsc/app/app/shared/forms.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"forms.utils.js","sourceRoot":"","sources":["../../../../src/app/shared/forms.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAmB,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAKvE,MAAM,OAAO,kBAAkB;IAC7B,MAAM,CAAC,QAAQ,CAAC,IAAqB;QACnC,IAAI,MAAW,CAAC;QAEhB,IAAI,IAAI,YAAY,SAAS,EAAE;YAC7B,MAAM,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACvC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACnC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;SACJ;aACI,IAAI,IAAI,YAAY,SAAS,EAAE;YAClC,MAAM,GAAG,EAAE,CAAC;YACZ,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aACpC;SACF;aACI;YACH,MAAM,GAAG,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC;SACnD;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/functions.js b/out-tsc/app/app/shared/functions.js new file mode 100644 index 000000000..2356f717f --- /dev/null +++ b/out-tsc/app/app/shared/functions.js @@ -0,0 +1,121 @@ +// TODO: remove after then updating to last version of ngx-components +import { isEmptyArray, isNil, isNotNil } from '@sumaris-net/ngx-components'; +export function isNilOrNaN(obj) { + return obj === undefined || obj === null || (typeof obj === 'number' && isNaN(obj)); +} +export function mergeLoadResult(res1, res2) { + var _a, _b; + return { + data: (res1.data || []).concat(...res2.data), + total: ((res1.total || ((_a = res1.data) === null || _a === void 0 ? void 0 : _a.length) || 0) + (res2.total || ((_b = res2.data) === null || _b === void 0 ? void 0 : _b.length) || 0)) + }; +} +/** + * Arrondi une valeur décimal à demi-valeur supérieur, suivant le nombre de décimales demandé.
+ * Exemples: + *
    + *
  • round(0.01, 1) => '0.0' + *
  • round(0.08, 1) => '0.1' + *
+ * + * @param value + * @param maxDecimals + */ +export function roundHalfUp(value, maxDecimals) { + if (isNil(maxDecimals)) + return Math.trunc(+value + 0.5); + const divider = maxDecimals ? Math.pow(10, maxDecimals) : 1; + return Math.trunc(+value * divider + 0.5) / divider; +} +// Compare two items +export function equals(item1, item2) { + // Get the object type + const itemType = Object.prototype.toString.call(item1); + // If an object or array, compare recursively + if (['[object Array]', '[object Object]'].indexOf(itemType) >= 0) { + return arrayEquals(item1, item2); + } + // Otherwise, do a simple comparison + // If the two items are not the same type, return false + if (itemType !== Object.prototype.toString.call(item2)) + return false; + // Else if it's a function, convert to a string and compare + if (itemType === '[object Function]') { + return item1.toString() === item2.toString(); + } + // Otherwise, just compare + return item1 === item2; +} +export function arrayEquals(value, other) { + // Get the value type + const type = Object.prototype.toString.call(value); + // If the two objects are not the same type, return false + if (type !== Object.prototype.toString.call(other)) + return false; + // If items are not an object or array, return false + if (['[object Array]', '[object Object]'].indexOf(type) < 0) + return false; + // Compare the length of the length of the two items + const valueLen = type === '[object Array]' ? value.length : Object.keys(value).length; + const otherLen = type === '[object Array]' ? other.length : Object.keys(other).length; + if (valueLen !== otherLen) + return false; + // Compare properties + if (type === '[object Array]') { + for (let i = 0; i < valueLen; i++) { + if (equals(value[i], other[i]) === false) + return false; + } + } + else { + for (const key in value) { + if (!equals(value[key], other[key])) + return false; + } + } + // If nothing failed, return true + return true; +} +export function arrayPluck(array, key, omitNil) { + return (omitNil !== true) ? + (array || []).map(value => value && value[key]) : + (array || []).map(value => value && value[key]).filter(isNotNil); +} +/** + * Count how many times a search string occur + * + * @param value + * @param searchString + */ +export function countSubString(value, searchString) { + return value.split(searchString).length - 1; +} +/** + * Split an array, into a map of array, group by property + */ +export function collectByFunction(values, getKey) { + return (values || []).reduce((res, item) => { + const key = getKey(item); + if (typeof key === 'number' || typeof key === 'string') { + res[key] = res[key] || []; + res[key].push(item); + } + return res; + }, {}); +} +export function intersectArrays(values) { + if (isEmptyArray(values)) + return []; + // Utilise la méthode reduce pour obtenir l'intersection des tableaux + return values.reduce((acc, curr) => acc.filter(x => curr.includes(x)), values[0].slice()); +} +export function noHtml(value) { + if (value && typeof value === 'string') { + // Use regular expression to remove all HTML tags + return value.replace(/<[^>]*>.*?<\/[^>]*>|<[^>]+>/g, ''); + } + else { + return value; + } +} +//# sourceMappingURL=functions.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/functions.js.map b/out-tsc/app/app/shared/functions.js.map new file mode 100644 index 000000000..0d79e5676 --- /dev/null +++ b/out-tsc/app/app/shared/functions.js.map @@ -0,0 +1 @@ +{"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../../src/app/shared/functions.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/geometries.utils.js b/out-tsc/app/app/shared/geometries.utils.js new file mode 100644 index 000000000..8ec4f7710 --- /dev/null +++ b/out-tsc/app/app/shared/geometries.utils.js @@ -0,0 +1,137 @@ +import { isNilOrBlank, isNotNilOrBlank } from '@sumaris-net/ngx-components'; +export class Geometries { + /** + * Create a polygon from 2 points : bottom left, and top right + * + * @param bottomLeftX + * @param bottomLeftY + * @param topRightX + * @param topRightY + * @param returnHasMultiPolygon + * @return + */ + static createRectangleGeometry(bottomLeftX, bottomLeftY, topRightX, topRightY, useMultiPolygon) { + const coordinates = [ + [bottomLeftX, bottomLeftY], + [topRightX, bottomLeftY], + [topRightX, topRightY], + [bottomLeftX, topRightY] + ]; + if (useMultiPolygon) { + return { + type: 'MultiPolygon', + coordinates: [[coordinates]] + }; + } + return { + type: 'Polygon', + coordinates: [coordinates] + }; + } + static isLineString(geometry) { + return geometry && geometry.type === 'LineString'; + } + static isPolygon(geometry) { + return geometry && geometry.type === 'Polygon'; + } + static isMultiPolygon(geometry) { + return geometry && geometry.type === 'MultiPolygon'; + } + static parseAsBBox(value) { + value = value && value.trim(); + if (isNilOrBlank(value)) + return undefined; + let coords; + try { + if (value.startsWith('[') && value.endsWith(']')) { + coords = JSON.parse(value); + } + else if (value.indexOf(',') !== -1) { + coords = value.split(',') + .filter(isNotNilOrBlank) + .map(str => parseFloat(str)); + } + } + catch (err) { + throw new Error(`Cannot parse BBox value '${value}' : ${err}`); + } + if (this.checkBBox(coords)) { + return Geometries.normalizeBBox(coords); + } + throw new Error(`Invalid BBox value '${value}'. Expected an array of 4 (or 6) numbers`); + } + /** + * Make sure that the first point has lower latitude and longitude, and the second point upper values + * + * @param coords + */ + static normalizeBBox(coords) { + if ((coords === null || coords === void 0 ? void 0 : coords.length) !== 4 && coords.length !== 6) { + throw new Error(`Invalid BBox value '${coords}'. Expected an array of 4 (or 6) numbers`); + } + const lastOffset = coords.length / 2; + // 2 dimensions + if (coords.length === 4) { + return [ + Math.min(coords[0], coords[lastOffset]), + Math.min(coords[1], coords[lastOffset + 1]), + Math.max(coords[0], coords[lastOffset]), + Math.max(coords[1], coords[lastOffset + 1]) + ]; + } + // 3 dimensions + return [ + Math.min(coords[0], coords[lastOffset]), + Math.min(coords[1], coords[lastOffset + 1]), + Math.min(coords[2], coords[lastOffset + 2]), + Math.max(coords[0], coords[lastOffset]), + Math.max(coords[1], coords[lastOffset + 1]), + Math.max(coords[2], coords[lastOffset + 2]) + ]; + } + static checkBBox(coords) { + if (!coords || !Array.isArray(coords) || (coords.length !== 4 && coords.length !== 6)) { + return false; + } + const lastOffset = coords.length / 2; + // Check longitude + if (coords[0] < -180 || coords[0] > 180 || coords[lastOffset] < -180 || coords[lastOffset] > 180) { + return false; + } + // Check latitude + if (coords[1] < -90 || coords[1] > 90 || coords[lastOffset + 1] < -90 || coords[lastOffset + 1] > 90) { + return false; + } + return true; + } + /** + * @return true if the first object is entirely within the second object and the object boundaries do not touch; otherwise, returns FALSE. + */ + static isBBoxInside(bbox, upperBBox) { + if ((bbox === null || bbox === void 0 ? void 0 : bbox.length) !== (upperBBox === null || upperBBox === void 0 ? void 0 : upperBBox.length)) + throw Error('Invalid bbox. should have same dimension (2 or 3)'); + const lastOffset = bbox.length / 2; + // Longitude + return bbox[0] >= upperBBox[0] && bbox[lastOffset] <= upperBBox[lastOffset] + // Latitude + && bbox[1] >= upperBBox[1] && bbox[lastOffset + 1] <= upperBBox[lastOffset + 1]; + } + static isNotNilBBox(coords) { + return this.checkBBox(coords); + } + /** + * @return true if the first object is entirely within the second object and the object boundaries do not touch; otherwise, returns FALSE. + */ + static isPositionInsideBBox(position, bbox) { + if ((position === null || position === void 0 ? void 0 : position.length) !== (bbox === null || bbox === void 0 ? void 0 : bbox.length) / 2) + throw Error('Invalid coordinate or bbox. Should have same dimension (2 or 3)'); + const lastOffset = position.length; // 2 or 3 dimensions + // Longitude + return position[0] >= bbox[0] && position[0] <= bbox[lastOffset] + // Latitude + && position[1] >= bbox[1] && position[1] <= bbox[lastOffset + 1] + // Altitude + && (lastOffset !== 3 || (position[2] >= bbox[2] && position[2] <= bbox[lastOffset + 2])); + } +} +//# sourceMappingURL=geometries.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/geometries.utils.js.map b/out-tsc/app/app/shared/geometries.utils.js.map new file mode 100644 index 000000000..ba3931765 --- /dev/null +++ b/out-tsc/app/app/shared/geometries.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"geometries.utils.js","sourceRoot":"","sources":["../../../../src/app/shared/geometries.utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/ichthyometer/gwaleen/ichthyometer.gwaleen.js b/out-tsc/app/app/shared/ichthyometer/gwaleen/ichthyometer.gwaleen.js new file mode 100644 index 000000000..6426032b6 --- /dev/null +++ b/out-tsc/app/app/shared/ichthyometer/gwaleen/ichthyometer.gwaleen.js @@ -0,0 +1,333 @@ +var GwaleenIchthyometer_1; +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { Directive, Inject, InjectionToken, Injector } from '@angular/core'; +import { RxState } from '@rx-angular/state'; +import { BluetoothService } from '@app/shared/bluetooth/bluetooth.service'; +import { debounceTime, filter, finalize, map, mergeMap, switchMap, tap } from 'rxjs/operators'; +import { BluetoothSerial } from '@e-is/capacitor-bluetooth-serial'; +import { APP_LOGGING_SERVICE, firstNotNilPromise, isNil, isNilOrBlank, isNotNilOrBlank, LocalSettingsService, StartableService } from '@sumaris-net/ngx-components'; +import { combineLatest, EMPTY, from, merge, race, Subject, timer } from 'rxjs'; +import { ICHTHYOMETER_LOCAL_SETTINGS_OPTIONS } from '@app/shared/ichthyometer/ichthyometer.config'; +import { BluetoothErrorCodes } from '@app/shared/bluetooth/bluetooth-serial.errors'; +export const APP_ICHTYOMETER_DEVICE = new InjectionToken('IchthyometerDevice'); +let GwaleenIchthyometer = GwaleenIchthyometer_1 = class GwaleenIchthyometer extends StartableService { + constructor(injector, device) { + var _a; + super(injector.get(BluetoothService)); + this.injector = injector; + this._state = new RxState(); + this._readSubject = new Subject(); + this.enabled$ = this._state.select('enabled'); + this.connected$ = this._state.select('connected'); + this.usageCount$ = this._state.select('usageCount'); + this.bluetoothService = injector.get(BluetoothService); + this.settings = injector.get(LocalSettingsService); + if (!this.bluetoothService) + throw new Error('Missing BluetoothService provider'); + if (isNilOrBlank(device === null || device === void 0 ? void 0 : device.address)) + throw new Error('Missing device address'); + this.device = Object.assign(Object.assign({}, device), { meta: Object.assign(Object.assign({}, device.meta), { type: GwaleenIchthyometer_1.TYPE }) }); + // Connected 'enabled' property to the bluetooth's enabled state AND connected state + this._state.connect('enabled', combineLatest([this.bluetoothService.enabled$, this.connected$]), (s, [enabled, connected]) => enabled && connected); + // Auto disconnect + this._state.hold(merge(from(this.settings.ready()), this.settings.onChange) + .pipe( + // Get auto disconnect idle time, from local settings + map(_ => this.settings.getPropertyAsInt(ICHTHYOMETER_LOCAL_SETTINGS_OPTIONS.AUTO_DISCONNECT_IDLE_TIME)), switchMap(autoDisconnectIdleTime => { + if (autoDisconnectIdleTime <= 0) + return EMPTY; // Auto-disconnect has been disabled + // Watch the usage count + return this.usageCount$ + .pipe( + // DEBUG + tap(usageCount => usageCount === 0 && this.started && console.debug(`[gwaleen] Start idle - Waiting ${autoDisconnectIdleTime}ms...`)), + // Wait the idle time + debounceTime(autoDisconnectIdleTime), + // Then recheck usage + filter(usageCount => usageCount === 0 && this.started), map(_ => { + const usageDuration = Date.now() - (this.startTime || 0) - autoDisconnectIdleTime; + return { usageDuration, autoDisconnectIdleTime }; + })); + })), ({ usageDuration, autoDisconnectIdleTime }) => __awaiter(this, void 0, void 0, function* () { + var _b; + // DEBUG + const logMessage = `Silently disconnecting device after ${autoDisconnectIdleTime}ms of inactivity - last usage duration: ${usageDuration}ms`; + console.debug('[gwaleen] ' + logMessage); + (_b = this._logger) === null || _b === void 0 ? void 0 : _b.debug(logMessage); + // Stop, to make sure ready() will start (and then connect) + yield this.stop(); + })); + // Logger + this._logger = (_a = injector.get(APP_LOGGING_SERVICE)) === null || _a === void 0 ? void 0 : _a.getLogger('gwaleen'); + } + get id() { + return this.device.name; + } + get name() { + return this.device.name; + } + get class() { + return this.device.class; + } + get address() { + return this.device.address; + } + get uuid() { + return this.device.uuid; + } + get rssi() { + return this.device.rssi; + } + get meta() { + return this.device.meta; + } + get usageCount() { + return this._state.get('usageCount'); + } + get startTime() { + return this._state.get('startTime'); + } + ngOnStart(opts) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[gwaleen] Starting gwaleen ...'); + yield this.connect(); + this._state.set({ startTime: Date.now() }); + return Promise.resolve(undefined); + }); + } + ngOnStop() { + const _super = Object.create(null, { + ngOnStop: { get: () => super.ngOnStop } + }); + return __awaiter(this, void 0, void 0, function* () { + console.debug('[gwaleen] Stopping gwaleen ...'); + yield this.disconnect(); + this._state.set({ enabled: null, connected: null, usageCount: null, startTime: null }); + return _super.ngOnStop.call(this); + }); + } + ngOnDestroy() { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[bluetooth] Destroying...'); + // Will stop listeners (see use of stopSubject in the on() function) + if (this.started) { + yield this.stop(); + } + this._state.ngOnDestroy(); + }); + } + isEnabled() { + return __awaiter(this, void 0, void 0, function* () { + return this._state.get('enabled'); + }); + } + connect() { + return __awaiter(this, void 0, void 0, function* () { + const connected = this.connectIfNeed({ emitEvent: false }); + return connected; + }); + } + disconnect() { + return this.disconnectIfNeed(); + } + ping() { + return __awaiter(this, void 0, void 0, function* () { + const connected = yield this.connectIfNeed(); + if (!connected) + return false; // Not connected + const acknowledge = yield this.doPing(); + // Continue: get model and version + if (acknowledge) { + this.markAsConnected(); + const meta = yield this.getModelAndVersion(); + // Update device with meta + this.device.meta = Object.assign(Object.assign({}, this.device.meta), meta); + return this.device; + } + return acknowledge; + }); + } + watch(opts) { + // Start if need + if (!this.started) { + // DEBUG + //console.debug(`[gwaleen] Waiting to be started on device {${this.address}}...`) + return from(this.ready()) + .pipe(switchMap(() => this.watch(Object.assign(Object.assign({}, opts), { checkConnection: false /*already checked*/ })))); + } + // Make sure the device is still connected (e.g. if disconnected on the device) + if (!opts || opts.checkConnection !== false) { + return from(this.connectIfNeed()) + .pipe(map((connected) => { + if (!connected) { + console.error('[gwaleen] Failed to connect to the device'); + // Stop the ichthyometer + this.stop(); + // Propage a connection error to observable + throw { code: BluetoothErrorCodes.BLUETOOTH_CONNECTION_ERROR, message: 'Failed to connect to the device' }; + } + return connected; + }), switchMap(() => this.watch(Object.assign(Object.assign({}, opts), { checkConnection: false /*avoid infinite loop*/ })))); + } + this.incrementUsage(); + console.info(`[gwaleen] Watching values from device {${this.address}} (usageCount: ${this.usageCount})...`); + return this.bluetoothService.watch(this.device, { delimiter: '#' }) + .pipe(map((value) => { + // Length + if ((value === null || value === void 0 ? void 0 : value.startsWith(GwaleenIchthyometer_1.VALUE_LENGTH_PREFIX)) && value.endsWith(GwaleenIchthyometer_1.END_DELIMITER)) { + const numericalValue = value.substring(GwaleenIchthyometer_1.VALUE_LENGTH_PREFIX.length, value.length - 1); + console.debug(`[gwaleen] Received numerical value '${numericalValue}' from device '${this.address}'`); + return numericalValue; + } + // Any other value (e.g. ping ack) + else if (isNotNilOrBlank(value)) { + this._readSubject.next(value); + } + return undefined; // Will be excluded + }), filter(isNotNilOrBlank), finalize(() => { + this.decrementUsage(); + console.info(`[gwaleen] Stop watching values from device {${this.address}}. (usageCount: ${this.usageCount})`); + })); + } + watchLength() { + return this.watch() + .pipe(filter(isNotNilOrBlank), map(strValue => ({ + value: parseFloat(strValue), + unit: 'mm' + }))); + } + doPing() { + var _a, _b, _c, _d, _e; + return __awaiter(this, void 0, void 0, function* () { + const now = Date.now(); + { + const logMessage = `Sending ping to {${this.address}}...`; + console.debug('[gwaleen] ' + logMessage); + (_a = this._logger) === null || _a === void 0 ? void 0 : _a.debug('ping', logMessage); + } + try { + yield this.write(GwaleenIchthyometer_1.PING_COMMAND); + const value = yield this.read({ timeout: GwaleenIchthyometer_1.PING_TIMEOUT_MS }); + const acknowledge = value === GwaleenIchthyometer_1.PING_ACKNOWLEDGE; + if (!acknowledge) { + console.debug(`[gwaleen] Received invalid ping result: '${value}'`); + (_b = this._logger) === null || _b === void 0 ? void 0 : _b.debug('ping', `Received invalid ping result: '${value}'`); + } + if (!acknowledge) { + const logMessage = `Ping failed: timeout reached after ${GwaleenIchthyometer_1.PING_TIMEOUT_MS}ms`; + console.warn('[gwaleen] ' + logMessage); + (_c = this._logger) === null || _c === void 0 ? void 0 : _c.debug('ping', logMessage); + } + else { + const logMessage = `Sending ping to {${this.address}} [OK] in ${Date.now() - now}ms`; + console.info('[gwaleen] ' + logMessage); + (_d = this._logger) === null || _d === void 0 ? void 0 : _d.debug('ping', logMessage); + } + return acknowledge; + } + catch (err) { + const logMessage = `Failed send ping to {${this.device.address}}: ${(err === null || err === void 0 ? void 0 : err.message) || ''}`; + console.error('[gwaleen] ' + logMessage, err); + (_e = this._logger) === null || _e === void 0 ? void 0 : _e.debug('ping', logMessage); + throw err; + } + }); + } + getModelAndVersion() { + var _a, _b, _c, _d; + return __awaiter(this, void 0, void 0, function* () { + const connected = yield this.connectIfNeed({ emitEvent: false }); + if (!connected) + return; // Not connected + const now = Date.now(); + console.debug(`[gwaleen] Asking info to {${this.device.address}}...`); + (_a = this._logger) === null || _a === void 0 ? void 0 : _a.debug('getInfo', `Asking info to {${this.device.address}}...`); + const result = { model: undefined, version: undefined }; + try { + yield BluetoothSerial.write({ address: this.device.address, value: GwaleenIchthyometer_1.INFO_COMMAND }); + const value = yield this.read({ timeout: GwaleenIchthyometer_1.INFO_TIMEOUT_MS }); + if ((value === null || value === void 0 ? void 0 : value.startsWith(GwaleenIchthyometer_1.INFO_RESULT_PREFIX)) && value.endsWith(GwaleenIchthyometer_1.END_DELIMITER)) { + const parts = value.substring(GwaleenIchthyometer_1.INFO_RESULT_PREFIX.length, value.length - 1).split(','); + result.model = parts[0]; + result.version = parts[1]; + } + if (result === null || result === void 0 ? void 0 : result.model) { + console.info(`[gwaleen] Asking info to {${this.device.address}} [OK] in ${Date.now() - now}ms - {model: '${result.model}', version: '${result.version}'}`); + (_b = this._logger) === null || _b === void 0 ? void 0 : _b.info('getInfo', `Asking info to {${this.device.address}} [OK] in ${Date.now() - now}ms - {model: '${result.model}', version: '${result.version}'}`); + } + else { + console.warn(`[gwaleen] Asking info failed: timeout reached after ${GwaleenIchthyometer_1.INFO_TIMEOUT_MS}ms`); + (_c = this._logger) === null || _c === void 0 ? void 0 : _c.warn('getInfo', `Asking info failed: timeout reached after ${GwaleenIchthyometer_1.INFO_TIMEOUT_MS}ms`); + } + } + catch (err) { + console.error(`[gwaleen] Failed asking info to {${this.device.address}}: ${(err === null || err === void 0 ? void 0 : err.message) || ''}`, err); + (_d = this._logger) === null || _d === void 0 ? void 0 : _d.error('getInfo', `Failed asking info to {${this.device.address}}: ${(err === null || err === void 0 ? void 0 : err.message) || ''}`); + } + return result; + }); + } + /* -- internal functions -- */ + connectIfNeed(opts) { + return __awaiter(this, void 0, void 0, function* () { + const connected = yield this.bluetoothService.connectIfNeed(this.device, Object.assign(Object.assign({}, opts), { timeout: GwaleenIchthyometer_1.CONNECTION_TIMEOUT_MS })); + // Update connected state + if (!opts || opts.emitEvent !== false) { + this._state.set('connected', _ => connected); + } + return connected; + }); + } + disconnectIfNeed(opts) { + return __awaiter(this, void 0, void 0, function* () { + yield this.bluetoothService.disconnect(this.device, opts); + // Update connected state + if (!opts || opts.emitEvent !== false) { + this._state.set('connected', _ => false); + } + }); + } + write(value) { + return BluetoothSerial.write({ address: this.device.address, value }); + } + read(opts) { + return firstNotNilPromise(race([ + timer(0, 200) + .pipe(mergeMap(() => BluetoothSerial.readUntil({ address: this.device.address, delimiter: GwaleenIchthyometer_1.END_DELIMITER })), map(({ value }) => value), filter(isNotNilOrBlank)), + this._readSubject.pipe(filter(isNotNilOrBlank)) + ]), { + timeout: (opts === null || opts === void 0 ? void 0 : opts.timeout) || GwaleenIchthyometer_1.READ_TIMEOUT_MS, + stop: this.stopSubject + }); + } + markAsConnected() { + this._state.set('connected', _ => true); + } + markAsDisconnected() { + this._state.set('connected', _ => false); + } + incrementUsage() { + this._state.set('usageCount', s => isNil(s.usageCount) ? 1 : s.usageCount + 1); + } + decrementUsage() { + this._state.set('usageCount', s => Math.max(0, s.usageCount - 1)); + } +}; +GwaleenIchthyometer.TYPE = 'gwaleen'; +GwaleenIchthyometer.READ_TIMEOUT_MS = 1000; // 1s timeout +GwaleenIchthyometer.END_DELIMITER = '#'; +GwaleenIchthyometer.PING_TIMEOUT_MS = 3000; // 3s timeout +GwaleenIchthyometer.PING_COMMAND = 'a#'; +GwaleenIchthyometer.PING_ACKNOWLEDGE = '%a:e#'; +GwaleenIchthyometer.INFO_COMMAND = 'b#'; +GwaleenIchthyometer.INFO_TIMEOUT_MS = 4000; // 4s timeout +GwaleenIchthyometer.INFO_RESULT_PREFIX = '%b:'; +GwaleenIchthyometer.VALUE_LENGTH_PREFIX = '%l,'; +GwaleenIchthyometer.CONNECTION_TIMEOUT_MS = 2000; // 2s timeout +GwaleenIchthyometer = GwaleenIchthyometer_1 = __decorate([ + Directive(), + __param(1, Inject(APP_ICHTYOMETER_DEVICE)), + __metadata("design:paramtypes", [Injector, Object]) +], GwaleenIchthyometer); +export { GwaleenIchthyometer }; +//# sourceMappingURL=ichthyometer.gwaleen.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/ichthyometer/gwaleen/ichthyometer.gwaleen.js.map b/out-tsc/app/app/shared/ichthyometer/gwaleen/ichthyometer.gwaleen.js.map new file mode 100644 index 000000000..89151e753 --- /dev/null +++ b/out-tsc/app/app/shared/ichthyometer/gwaleen/ichthyometer.gwaleen.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ichthyometer.gwaleen.js","sourceRoot":"","sources":["../../../../../../src/app/shared/ichthyometer/gwaleen/ichthyometer.gwaleen.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/ichthyometer/ichthyometer.config.js b/out-tsc/app/app/shared/ichthyometer/ichthyometer.config.js new file mode 100644 index 000000000..a794e7b31 --- /dev/null +++ b/out-tsc/app/app/shared/ichthyometer/ichthyometer.config.js @@ -0,0 +1,26 @@ +export const ICHTHYOMETER_LOCAL_SETTINGS_OPTIONS = { + DEVICES: { + key: 'sumaris.ichthyometer.devices', + label: 'SHARED.ICHTHYOMETER.SETTINGS.DEVICES', + type: 'entities', + autocomplete: { + attributes: ['name', 'address'], + columnNames: ['SHARED.BLUETOOTH.NAME', 'SHARED.BLUETOOTH.ADDRESS'], + showAllOnFocus: false, + showPanelOnFocus: false, + displayWith: device => (device === null || device === void 0 ? void 0 : device.name) || (device === null || device === void 0 ? void 0 : device.address) || '?', + // /!\ suggest function set inside the app.components.ts, to be able to use the ichthyometer service + // suggestFn // replace by ichthyometer service + }, + defaultValue: undefined + }, + AUTO_DISCONNECT_IDLE_TIME: { + key: 'sumaris.ichthyometer.autoDisconnect.idleTime', + label: 'SHARED.ICHTHYOMETER.SETTINGS.AUTO_DISCONNECT', + type: 'enum', + maxValue: 600000, + values: [-1, 60000, 300000, 600000].map(key => ({ key: '' + key, value: `SHARED.ICHTHYOMETER.SETTINGS.AUTO_DISCONNECT_ENUM.${key}` })), + defaultValue: '60000' // 1 min, by default + } +}; +//# sourceMappingURL=ichthyometer.config.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/ichthyometer/ichthyometer.config.js.map b/out-tsc/app/app/shared/ichthyometer/ichthyometer.config.js.map new file mode 100644 index 000000000..90ff7e769 --- /dev/null +++ b/out-tsc/app/app/shared/ichthyometer/ichthyometer.config.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ichthyometer.config.js","sourceRoot":"","sources":["../../../../../src/app/shared/ichthyometer/ichthyometer.config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mCAAmC,GAAG;IACjD,OAAO,EAAuB;QAC5B,GAAG,EAAE,8BAA8B;QACnC,KAAK,EAAE,sCAAsC;QAC7C,IAAI,EAAE,UAAU;QAChB,YAAY,EAAE;YACZ,UAAU,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;YAC/B,WAAW,EAAE,CAAC,uBAAuB,EAAE,0BAA0B,CAAC;YAClE,cAAc,EAAE,KAAK;YACrB,gBAAgB,EAAE,KAAK;YACvB,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,MAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,CAAA,IAAI,GAAG;YAC7D,oGAAoG;YACpG,+CAA+C;SAChD;QACD,YAAY,EAAE,SAAS;KACxB;IACD,yBAAyB,EAAuB;QAC9C,GAAG,EAAE,8CAA8C;QACnD,KAAK,EAAE,8CAA8C;QACrD,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAC,GAAG,EAAE,EAAE,GAAC,GAAG,EAAE,KAAK,EAAE,qDAAqD,GAAG,EAAE,EAAC,CAAC,CAAC;QAClI,YAAY,EAAE,OAAO,CAAC,oBAAoB;KAC3C;CACF,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/ichthyometer/ichthyometer.icon.js b/out-tsc/app/app/shared/ichthyometer/ichthyometer.icon.js new file mode 100644 index 000000000..5500c4305 --- /dev/null +++ b/out-tsc/app/app/shared/ichthyometer/ichthyometer.icon.js @@ -0,0 +1,53 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { IchthyometerService } from '@app/shared/ichthyometer/ichthyometer.service'; +import { isNotEmptyArray } from '@sumaris-net/ngx-components'; +let AppIchthyometerIcon = class AppIchthyometerIcon { + constructor(ichthyometerService) { + this.ichthyometerService = ichthyometerService; + this.title = 'SHARED.ICHTHYOMETER.TITLE'; + this.selectedDeviceIcon = { matIcon: 'straighten' }; + } + ngOnInit() { + const ichthyometerService = this.ichthyometerService; + this.checkAfterConnect = this.checkAfterConnect || ((device) => ichthyometerService.checkAfterConnect(device)); + // Auto start the service + this.ichthyometerService.ready(); + } + deviceFilter(device) { + return !!device.address; + } + onConnectedDevicesChanges(devices) { + // Check if there is some connected devices, and if to restart the ichthyometerService service + if (isNotEmptyArray(devices) && !this.ichthyometerService.started) { + // Restart the service (can have been stopped if devices all have been disconnected) + this.ichthyometerService.ready(); + } + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], AppIchthyometerIcon.prototype, "title", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], AppIchthyometerIcon.prototype, "type", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppIchthyometerIcon.prototype, "selectedDeviceIcon", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], AppIchthyometerIcon.prototype, "checkAfterConnect", void 0); +AppIchthyometerIcon = __decorate([ + Component({ + selector: 'app-ichthyometer-icon', + templateUrl: './ichthyometer.icon.html', + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [IchthyometerService]) +], AppIchthyometerIcon); +export { AppIchthyometerIcon }; +//# sourceMappingURL=ichthyometer.icon.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/ichthyometer/ichthyometer.icon.js.map b/out-tsc/app/app/shared/ichthyometer/ichthyometer.icon.js.map new file mode 100644 index 000000000..d5b9c7f65 --- /dev/null +++ b/out-tsc/app/app/shared/ichthyometer/ichthyometer.icon.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ichthyometer.icon.js","sourceRoot":"","sources":["../../../../../src/app/shared/ichthyometer/ichthyometer.icon.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,KAAK,EAAU,MAAM,eAAe,CAAC;AAElF,OAAO,EAAE,mBAAmB,EAAoB,MAAM,+CAA+C,CAAC;AACtG,OAAO,EAAW,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAQhE,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAM9B,YAAoB,mBAAwC;QAAxC,wBAAmB,GAAnB,mBAAmB,CAAqB;QALnD,UAAK,GAAG,2BAA2B,CAAC;QAEpC,uBAAkB,GAAY,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAGF,CAAC;IAEhE,QAAQ;QACN,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAErD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;QAE/G,yBAAyB;QACzB,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,YAAY,CAAC,MAAuB;QAClC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IAC1B,CAAC;IAED,yBAAyB,CAAC,OAA0B;QAClD,8FAA8F;QAC9F,IAAI,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE;YACjE,oFAAoF;YACpF,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;SAClC;IACH,CAAC;CACF,CAAA;AA3BC;IAAC,KAAK,EAAE;;kDAAqC;AAC7C;IAAC,KAAK,EAAE;;iDAAwB;AAChC;IAAC,KAAK,EAAE;;+DAAyD;AACjE;IAAC,KAAK,EAAE;;8DAA2C;AAJxC,mBAAmB;IAL/B,SAAS,CAAC;QACT,QAAQ,EAAE,uBAAuB;QACjC,WAAW,EAAE,0BAA0B;QACvC,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAOyC,mBAAmB;GANjD,mBAAmB,CA4B/B;SA5BY,mBAAmB"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/ichthyometer/ichthyometer.module.js b/out-tsc/app/app/shared/ichthyometer/ichthyometer.module.js new file mode 100644 index 000000000..1fd7ffa87 --- /dev/null +++ b/out-tsc/app/app/shared/ichthyometer/ichthyometer.module.js @@ -0,0 +1,26 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { AppIconModule, SharedModule } from '@sumaris-net/ngx-components'; +import { AppIchthyometerIcon } from '@app/shared/ichthyometer/ichthyometer.icon'; +import { AppBluetoothModule } from '@app/shared/bluetooth/bluetooth.module'; +import { RxStateModule } from '@app/shared/rx-state.module'; +let AppIchthyometerModule = class AppIchthyometerModule { +}; +AppIchthyometerModule = __decorate([ + NgModule({ + imports: [ + SharedModule, + RxStateModule, + AppIconModule, + AppBluetoothModule + ], + declarations: [ + AppIchthyometerIcon + ], + exports: [ + AppIchthyometerIcon + ] + }) +], AppIchthyometerModule); +export { AppIchthyometerModule }; +//# sourceMappingURL=ichthyometer.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/ichthyometer/ichthyometer.module.js.map b/out-tsc/app/app/shared/ichthyometer/ichthyometer.module.js.map new file mode 100644 index 000000000..55b816e9d --- /dev/null +++ b/out-tsc/app/app/shared/ichthyometer/ichthyometer.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ichthyometer.module.js","sourceRoot":"","sources":["../../../../../src/app/shared/ichthyometer/ichthyometer.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAgBrD,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;CAEjC,CAAA;AAFY,qBAAqB;IAdjC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,aAAa;YACb,aAAa;YACb,kBAAkB;SACnB;QACD,YAAY,EAAE;YACZ,mBAAmB;SACpB;QACD,OAAO,EAAE;YACP,mBAAmB;SACpB;KACF,CAAC;GACW,qBAAqB,CAEjC;SAFY,qBAAqB"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/ichthyometer/ichthyometer.service.js b/out-tsc/app/app/shared/ichthyometer/ichthyometer.service.js new file mode 100644 index 000000000..cfac414bd --- /dev/null +++ b/out-tsc/app/app/shared/ichthyometer/ichthyometer.service.js @@ -0,0 +1,318 @@ +var IchthyometerService_1; +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { Inject, Injectable, Injector, Optional } from '@angular/core'; +import { RxState } from '@rx-angular/state'; +import { BluetoothService } from '@app/shared/bluetooth/bluetooth.service'; +import { GwaleenIchthyometer } from '@app/shared/ichthyometer/gwaleen/ichthyometer.gwaleen'; +import { EMPTY, from, merge, Subject } from 'rxjs'; +import { APP_LOGGING_SERVICE, AudioProvider, chainPromises, isEmptyArray, isNotEmptyArray, isNotNil, isNotNilOrBlank, LocalSettingsService, removeDuplicatesFromArray, StartableService, suggestFromArray } from '@sumaris-net/ngx-components'; +import { catchError, debounceTime, filter, finalize, mergeMap, switchMap, takeUntil, tap } from 'rxjs/operators'; +import { ICHTHYOMETER_LOCAL_SETTINGS_OPTIONS } from '@app/shared/ichthyometer/ichthyometer.config'; +import { AudioManagement } from '@ionic-native/audio-management/ngx'; +import { Platform } from '@ionic/angular'; +import { BluetoothErrorCodes } from '@app/shared/bluetooth/bluetooth-serial.errors'; +let IchthyometerService = IchthyometerService_1 = class IchthyometerService extends StartableService { + constructor(injector, platform, settings, bluetoothService, audioProvider, loggingService) { + super(bluetoothService); + this.injector = injector; + this.platform = platform; + this.settings = settings; + this.bluetoothService = bluetoothService; + this.audioProvider = audioProvider; + this._cache = new Map(); + this._state = new RxState(); + this._restoring = false; + this.enabled$ = this.bluetoothService.enabled$; + this.ichthyometers$ = this._state.select('ichthyometers'); + if (this.isApp()) { + this._logger = loggingService === null || loggingService === void 0 ? void 0 : loggingService.getLogger('ichthyometer'); + this.registerSettingsOptions(); + } + } + get ichthyometers() { + return this._state.get('ichthyometers'); + } + get knownDevices() { + return this._state.get('knownDevices'); + } + set knownDevices(value) { + this._state.set('knownDevices', _ => value); + } + ngOnStart(opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!this.isApp()) + throw new Error('Ichthyometer service cannot start: no web implementation'); + console.info('[ichthyometer] Starting...'); + (_a = this._logger) === null || _a === void 0 ? void 0 : _a.debug('Starting...'); + // Make sure audio is on normal mode (and not silent mode) + yield this.checkAudioMode(); + let canAutoStop = false; + this.registerSubscription(this.bluetoothService.connectedDevices$ + .pipe(mergeMap(devices => this.getAll(devices))) + .subscribe(ichthyometers => { + // DEBUG + //console.debug('[ichthyometer] Updated ichthyometers: ' + ichthyometers.map(d => d?.address).join(',')); + this._state.set('ichthyometers', _ => ichthyometers); + if (isNotEmptyArray(ichthyometers)) { + canAutoStop = true; + } + else if (canAutoStop) { + console.debug('[ichthyometer] Not more ichthyometers: will stop...'); + this.stop(); + } + })); + this.registerSubscription(this.ichthyometers$ + .pipe(filter(_ => !this._restoring), debounceTime(1000), filter(isNotEmptyArray) // Skip if no more devices (.g. auto disconnected) + ) + // Save into settings + .subscribe(devices => this.saveToSettings(devices))); + yield this.restoreFromSettings(); + }); + } + ngOnStop() { + var _a; + console.debug('[ichthyometer] Stopping...'); + (_a = this._logger) === null || _a === void 0 ? void 0 : _a.debug('Stopping...'); + // Reset state + this._state.set({ ichthyometers: null, knownDevices: null }); + return super.ngOnStop(); + } + ngOnDestroy() { + console.debug('[ichthyometer] Destroying...'); + this.disconnectAll(); + this._state.ngOnDestroy(); + } + isEnabled() { + return __awaiter(this, void 0, void 0, function* () { + return this.bluetoothService.isEnabled(); + }); + } + isConnected() { + return isNotEmptyArray(this.ichthyometers); + } + checkAudioMode() { + return __awaiter(this, void 0, void 0, function* () { + try { + yield this.audioProvider.setAudioMode(AudioManagement.AudioMode.NORMAL); + } + catch (err) { + // Continue + } + }); + } + watchLength() { + // Wait service to be started (e.g. if all ichthyometer has been disconnected, then we should restart the service) + if (!this.started) { + return from(this.ready()) + .pipe(switchMap(() => this.watchLength())); // Loop + } + const stopSubject = new Subject(); + console.info('[ichthyometer] Watching length values...'); + return this.ichthyometers$ + .pipe( + // DEBUG + //tap(ichthyometers => console.debug(`[ichthyometer] Watching length values from ${ichthyometers?.length || 0} devices`)), + filter(isNotEmptyArray), switchMap(ichthyometers => merge(...(ichthyometers.map(ichthyometer => ichthyometer.watchLength() + .pipe(takeUntil(stopSubject), tap(({ value, unit }) => console.info(`[ichthyometer] Received value '${value} ${unit}' from device '${ichthyometer.address}'`)), catchError(err => { + console.error(`[ichthyometer] Error while watching length values from device '${ichthyometer.address}': ${(err === null || err === void 0 ? void 0 : err.message) || ''}`); + if ((err === null || err === void 0 ? void 0 : err.code) === BluetoothErrorCodes.BLUETOOTH_CONNECTION_ERROR) { + this.bluetoothService.disconnect(ichthyometer); + } + else if ((err === null || err === void 0 ? void 0 : err.code) === BluetoothErrorCodes.BLUETOOTH_DISABLED) { + this.stop(); + } + return EMPTY; + })))))), finalize(() => { + console.info('[ichthyometer] Stop watching length values...'); + stopSubject.next(); + })); + } + disconnectAll() { + return __awaiter(this, void 0, void 0, function* () { + yield Promise.all(Array.from(this._cache.values()) + .map(instance => instance.disconnect() + .catch(_ => { }))); + }); + } + disconnect(device) { + return __awaiter(this, void 0, void 0, function* () { + yield device.disconnect(); + }); + } + getAll(devices) { + return __awaiter(this, void 0, void 0, function* () { + if (isEmptyArray(devices)) + return []; + console.debug(`[ichthyometer] Trying to find ichthyometers, from device(s): ${JSON.stringify(devices.map(d => d.address))}`); + const instances = (yield Promise.all(devices.map((device) => __awaiter(this, void 0, void 0, function* () { + try { + return this.get(device); + } + catch (err) { + console.error(`[ichthyometer] Cannot find an ichthyometer from device {${device === null || device === void 0 ? void 0 : device.address}}: ${(err === null || err === void 0 ? void 0 : err.message) || err}`); + return null; // Skip + } + })))) + .filter(isNotNil); + console.debug(`[ichthyometer] ${instances.length} ichthyometer(s) - device(s): ${JSON.stringify(instances.map(d => d.address))}`); + return instances; + }); + } + get(device, type, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + type = ((_a = device === null || device === void 0 ? void 0 : device.meta) === null || _a === void 0 ? void 0 : _a.type) || type || IchthyometerService_1.DEFAULT_TYPE; + if (!(device === null || device === void 0 ? void 0 : device.address)) + throw new Error('Missing device address'); + if (!type) + throw new Error('Missing device type'); + // Check if exists from the cache + if (!opts || opts.cache !== false) { + const cacheKey = `${type}|${device.address}`; + let target = this._cache.get(cacheKey); + // Not found in cache + if (!target) { + target = yield this.get(device, type, { cache: false }); + this._cache.set(cacheKey, target); + } + return target; + } + console.debug(`[ichthyometer] Getting ${type} ichthyometer from device {${device.address}} ...`); + // Not found in cache: create new instance + return this.create(device, type); + }); + } + checkAfterConnect(device) { + return __awaiter(this, void 0, void 0, function* () { + try { + const ichthyometer = yield this.get(device); + const result = yield ichthyometer.ping(); + if (!result) + console.debug('[ichthyometer] Ping failed!'); + return result; + } + catch (err) { + console.error('[ichthyometer] Error while send ping: ' + ((err === null || err === void 0 ? void 0 : err.message) || err), err); + return false; // Continue + } + }); + } + suggest(value, filter) { + return __awaiter(this, void 0, void 0, function* () { + console.info('[ichthyometer] call suggest() with value: ' + value); + if (value && typeof value === 'object' && isNotNilOrBlank(value.address)) + return { data: [value] }; + // Wait service started + if (!this.started) + yield this.ready(); + // Use completion from known devices list + return suggestFromArray(this.knownDevices || [], value, filter); + }); + } + isApp() { + return this.platform.is('cordova'); + } + registerSettingsOptions() { + const options = Object.values(ICHTHYOMETER_LOCAL_SETTINGS_OPTIONS) + .map(definition => { + // Replace the devices suggest function + if (definition === ICHTHYOMETER_LOCAL_SETTINGS_OPTIONS.DEVICES) { + return Object.assign(Object.assign({}, ICHTHYOMETER_LOCAL_SETTINGS_OPTIONS.DEVICES), { autocomplete: Object.assign(Object.assign({}, ICHTHYOMETER_LOCAL_SETTINGS_OPTIONS.DEVICES.autocomplete), { suggestFn: (value, filter) => this.suggest(value, filter) }) }); + } + return definition; + }); + this.settings.registerOptions(options); + } + /** + * Create a new Ichthyometer instance, from the given type + * + * @param device + * @param type + * @private + */ + create(device, type) { + switch (type) { + case GwaleenIchthyometer.TYPE: { + return new GwaleenIchthyometer(this.injector, device); + } + } + throw new Error('Unknown ichthyometer type: ' + type); + } + restoreFromSettings() { + return __awaiter(this, void 0, void 0, function* () { + this._restoring = true; + try { + yield this.settings.ready(); + console.info('[ichthyometer] Restoring ichthyometers from settings...'); + const devices = this.settings.getPropertyAsObjects(ICHTHYOMETER_LOCAL_SETTINGS_OPTIONS.DEVICES); + // DEBUG + //console.debug('[ichthyometer] Devices settings value: ' + JSON.stringify(devices)); + if (!Array.isArray(devices) || isEmptyArray(devices)) { + console.info(`[ichthyometer] No ichthyometers found in settings`); + } + else { + const now = Date.now(); + console.info(`[ichthyometer] Restoring ${devices.length} ichthyometers...`); + const count = (yield chainPromises(devices.map(d => () => this.bluetoothService.connect(d) + .catch(_ => false /*continue*/)))) + .filter(connected => connected) + .length; + console.info(`[ichthyometer] Restored ${count} ichthyometers in ${Date.now() - now}ms`); + } + } + catch (err) { + console.error('[ichthyometer] Error while restoring devices from settings: ' + (err === null || err === void 0 ? void 0 : err.message) || err, err); + } + finally { + this._restoring = false; + } + }); + } + saveToSettings(devices) { + return __awaiter(this, void 0, void 0, function* () { + if (this._restoring) + return; // Skip + const knownDevices = this.knownDevices || []; + devices = (devices || []) + .filter(isNotNil) + // Serialize to JSON + .map(device => ({ name: device.name, address: device.address, meta: device.meta })) + // Append existing + .concat(...knownDevices); + // Remove duplicated devices (keep newer) + devices = removeDuplicatesFromArray(devices, 'address'); + // No new device: skip (avoid to change settings) + if (knownDevices.length === devices.length) + return; + this.knownDevices = devices; + try { + console.info(`[ichthyometer] Saving ${(devices === null || devices === void 0 ? void 0 : devices.length) || 0} devices into local settings`); + // Apply settings + if (isEmptyArray(devices)) { + this.settings.setProperty(ICHTHYOMETER_LOCAL_SETTINGS_OPTIONS.DEVICES, null, { immediate: true }); + } + else { + this.settings.setProperty(ICHTHYOMETER_LOCAL_SETTINGS_OPTIONS.DEVICES, JSON.stringify(devices)); + } + } + catch (err) { + console.error(`[ichthyometer] Failed to save devices into local settings: ${(err === null || err === void 0 ? void 0 : err.message) || ''}`); + // Continue + } + }); + } +}; +IchthyometerService.DEFAULT_TYPE = GwaleenIchthyometer.TYPE; +IchthyometerService = IchthyometerService_1 = __decorate([ + Injectable({ providedIn: 'root' }), + __param(5, Optional()), + __param(5, Inject(APP_LOGGING_SERVICE)), + __metadata("design:paramtypes", [Injector, + Platform, + LocalSettingsService, + BluetoothService, + AudioProvider, Object]) +], IchthyometerService); +export { IchthyometerService }; +//# sourceMappingURL=ichthyometer.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/ichthyometer/ichthyometer.service.js.map b/out-tsc/app/app/shared/ichthyometer/ichthyometer.service.js.map new file mode 100644 index 000000000..eca7a6a04 --- /dev/null +++ b/out-tsc/app/app/shared/ichthyometer/ichthyometer.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ichthyometer.service.js","sourceRoot":"","sources":["../../../../../src/app/shared/ichthyometer/ichthyometer.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/ichthyometer/testing/ichthyometer.testing.js b/out-tsc/app/app/shared/ichthyometer/testing/ichthyometer.testing.js new file mode 100644 index 000000000..3e1018496 --- /dev/null +++ b/out-tsc/app/app/shared/ichthyometer/testing/ichthyometer.testing.js @@ -0,0 +1,53 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core'; +import { RxState } from '@rx-angular/state'; +import { Platform } from '@ionic/angular'; +import { IchthyometerService } from '@app/shared/ichthyometer/ichthyometer.service'; +import { BluetoothService } from '@app/shared/bluetooth/bluetooth.service'; +import { sleep } from '@sumaris-net/ngx-components'; +let IchthyometerTestingPage = class IchthyometerTestingPage { + constructor(platform, bluetoothService, ichthyometerService, cd, _state) { + this.platform = platform; + this.bluetoothService = bluetoothService; + this.ichthyometerService = ichthyometerService; + this.cd = cd; + this._state = _state; + this.loading$ = this._state.select('loading'); + this.values$ = this._state.select('values'); + this._state.set({ + loading: false, + values: [] + }); + this._state.connect('values', this.ichthyometerService.watchLength(), (s, value) => ([...(s.values || []), value])); + } + disconnectAll() { + return __awaiter(this, void 0, void 0, function* () { + yield this.ichthyometerService.disconnectAll(); + yield sleep(1000); + yield this.ichthyometerService.restart(); + }); + } + disconnect(item) { + return __awaiter(this, void 0, void 0, function* () { + yield this.ichthyometerService.disconnect(item); + }); + } +}; +IchthyometerTestingPage = __decorate([ + Component({ + selector: 'app-ichthyometer-testing', + templateUrl: './ichthyometer.testing.html', + styleUrls: [ + './ichthyometer.testing.scss' + ], + providers: [RxState], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Platform, + BluetoothService, + IchthyometerService, + ChangeDetectorRef, + RxState]) +], IchthyometerTestingPage); +export { IchthyometerTestingPage }; +//# sourceMappingURL=ichthyometer.testing.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/ichthyometer/testing/ichthyometer.testing.js.map b/out-tsc/app/app/shared/ichthyometer/testing/ichthyometer.testing.js.map new file mode 100644 index 000000000..a46f0f8cb --- /dev/null +++ b/out-tsc/app/app/shared/ichthyometer/testing/ichthyometer.testing.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ichthyometer.testing.js","sourceRoot":"","sources":["../../../../../../src/app/shared/ichthyometer/testing/ichthyometer.testing.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAgB,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAE3E,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAgB7C,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAKlC,YACY,QAAkB,EAClB,gBAAkC,EAClC,mBAAwC,EAC1C,EAAqB,EACrB,MAAyC;QAJvC,aAAQ,GAAR,QAAQ,CAAU;QAClB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,wBAAmB,GAAnB,mBAAmB,CAAqB;QAC1C,OAAE,GAAF,EAAE,CAAmB;QACrB,WAAM,GAAN,MAAM,CAAmC;QAR1C,aAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzC,YAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAU9C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YACd,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,EAAE;SACX,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,EACjE,CAAC,CAAC,EAAE,KAAK,EAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAEK,aAAa;;YACjB,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,CAAC;YAE/C,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;YAElB,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;QAC3C,CAAC;KAAA;IAEK,UAAU,CAAC,IAAkB;;YACjC,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC;KAAA;CACF,CAAA;AAhCY,uBAAuB;IATnC,SAAS,CAAC;QACT,QAAQ,EAAE,0BAA0B;QACpC,WAAW,EAAE,6BAA6B;QAC1C,SAAS,EAAE;YACT,6BAA6B;SAC9B;QACD,SAAS,EAAE,CAAC,OAAO,CAAC;QACpB,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAOsB,QAAQ;QACA,gBAAgB;QACb,mBAAmB;QACtC,iBAAiB;QACb,OAAO;GAVd,uBAAuB,CAgCnC;SAhCY,uBAAuB"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/ichthyometer/testing/ichthyometer.testing.module.js b/out-tsc/app/app/shared/ichthyometer/testing/ichthyometer.testing.module.js new file mode 100644 index 000000000..66aeb86ea --- /dev/null +++ b/out-tsc/app/app/shared/ichthyometer/testing/ichthyometer.testing.module.js @@ -0,0 +1,43 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { CommonModule } from '@angular/common'; +import { CoreModule } from '@sumaris-net/ngx-components'; +import { TranslateModule } from '@ngx-translate/core'; +import { IchthyometerTestingPage } from '@app/shared/ichthyometer/testing/ichthyometer.testing'; +import { AppIchthyometerModule } from '@app/shared/ichthyometer/ichthyometer.module'; +import { AppSharedModule } from '@app/shared/shared.module'; +import { AppBluetoothModule } from '@app/shared/bluetooth/bluetooth.module'; +export const ICHTHYOMETER_TESTING_PAGES = [ + { label: 'Ichthyometer', page: '/testing/shared/ichthyometer' } +]; +const routes = [ + { + path: '', + pathMatch: 'full', + component: IchthyometerTestingPage + } +]; +let AppIchthyometerTestingModule = class AppIchthyometerTestingModule { +}; +AppIchthyometerTestingModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + AppSharedModule, + CoreModule, + TranslateModule.forChild(), + RouterModule.forChild(routes), + AppIchthyometerModule, + AppBluetoothModule + ], + declarations: [ + IchthyometerTestingPage + ], + exports: [ + IchthyometerTestingPage + ] + }) +], AppIchthyometerTestingModule); +export { AppIchthyometerTestingModule }; +//# sourceMappingURL=ichthyometer.testing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/ichthyometer/testing/ichthyometer.testing.module.js.map b/out-tsc/app/app/shared/ichthyometer/testing/ichthyometer.testing.module.js.map new file mode 100644 index 000000000..2eaf78e5e --- /dev/null +++ b/out-tsc/app/app/shared/ichthyometer/testing/ichthyometer.testing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ichthyometer.testing.module.js","sourceRoot":"","sources":["../../../../../../src/app/shared/ichthyometer/testing/ichthyometer.testing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAe,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uDAAuD,CAAC;AAChG,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAE5E,MAAM,CAAC,MAAM,0BAA0B,GAAkB;IACvD,EAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,8BAA8B,EAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,uBAAuB;KACnC;CACF,CAAC;AAmBK,IAAM,4BAA4B,GAAlC,MAAM,4BAA4B;CAExC,CAAA;AAFY,4BAA4B;IAjBxC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,eAAe;YACf,UAAU;YACV,eAAe,CAAC,QAAQ,EAAE;YAC1B,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,qBAAqB;YACrB,kBAAkB;SACnB;QACD,YAAY,EAAE;YACZ,uBAAuB;SACxB;QACD,OAAO,EAAE;YACP,uBAAuB;SACxB;KACF,CAAC;GACW,4BAA4B,CAExC;SAFY,4BAA4B"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/map/base-map.class.js b/out-tsc/app/app/shared/map/base-map.class.js new file mode 100644 index 000000000..e1cdbd185 --- /dev/null +++ b/out-tsc/app/app/shared/map/base-map.class.js @@ -0,0 +1,214 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectorRef, Directive, Injector, Input, NgZone, Optional } from '@angular/core'; +import { BehaviorSubject, Subject, Subscription } from 'rxjs'; +import { debounceTime, map } from 'rxjs/operators'; +import { L } from '@app/shared/map/leaflet'; +import { ConfigService, firstNotNilPromise, isEmptyArray, LocalSettingsService, sleep } from '@sumaris-net/ngx-components'; +import { environment } from '@environments/environment'; +import { MapGraticule } from '@app/shared/map/map.graticule'; +import { v4 as uuidv4 } from 'uuid'; +import { MapUtils } from '@app/shared/map/map.utils'; +import { RxState } from '@rx-angular/state'; +import { TranslateService } from '@ngx-translate/core'; +import { SelectionModel } from '@angular/cdk/collections'; +let BaseMap = class BaseMap { + constructor(injector, _state, options, initialState) { + this._state = _state; + this._logPrefix = `[${this.constructor.name}] : `; + this.subscription = new Subscription(); + this.destroySubject = new Subject(); + this.center$ = this._state.select('center'); + this.loading$ = this._state.select('loading'); + // -- Map Layers -- + this.osmBaseLayer = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + maxZoom: MapUtils.MAX_ZOOM, + attribution: 'Open Street Map' + }); + this.sextantBaseLayer = L.tileLayer('https://sextant.ifremer.fr/geowebcache/service/wmts' + + '?Service=WMTS&Layer=sextant&Style=&TileMatrixSet=EPSG:3857&Request=GetTile&Version=1.0.0&Format=image/png&TileMatrix=EPSG:3857:{z}&TileCol={x}&TileRow={y}', { + maxZoom: MapUtils.MAX_ZOOM, + attribution: 'Sextant' + }); + this.options = { + layers: [this.sextantBaseLayer], + maxZoom: MapUtils.MAX_ZOOM, + }; + this.layersControl = { + baseLayers: { + 'Sextant (Ifremer)': this.sextantBaseLayer, + 'Open Street Map': this.osmBaseLayer + }, + overlays: {} + }; + this.$onOverFeature = new Subject(); + this.$onOutFeature = new Subject(); + this.$selectedFeature = new BehaviorSubject(null); + this.$fitToBounds = new Subject(); + this.selection = new SelectionModel(false, []); + this.flyToBoundsDelay = 450; + this.flyToBoundsDuration = 1; // seconds + this.showGraticule = false; + this.zone = injector.get(NgZone); + this.translate = injector.get(TranslateService); + this.configService = injector.get(ConfigService); + this.settings = injector.get(LocalSettingsService); + this.cd = injector.get(ChangeDetectorRef); + this.mobile = this.settings.mobile; + this._maxZoom = (options === null || options === void 0 ? void 0 : options.maxZoom) || MapUtils.MAX_ZOOM; + this._debug = !environment.production; + if (this._maxZoom !== MapUtils.MAX_ZOOM) { + this.options.maxZoom = this._maxZoom; + this.osmBaseLayer.options.maxZoom = this._maxZoom; + this.sextantBaseLayer.options.maxZoom = this._maxZoom; + } + this._state.set(initialState || { loading: true }); + } + get loading() { + return this._state.get('loading'); + } + ngOnInit() { + // Default values + this.latLongPattern = this.latLongPattern || this.settings.latLongFormat; + this.mapId = uuidv4(); + this._state.connect('center', this.configService.config.pipe(map(config => MapUtils.getMapCenter(config)))); + } + ngOnDestroy() { + this.subscription.unsubscribe(); + this.destroySubject.next(); + this.destroySubject.unsubscribe(); + } + setError(err) { + this.error = (err === null || err === void 0 ? void 0 : err.message) || err; + console.error(err); + this.markForCheck(); + } + onMapReady(map) { + return __awaiter(this, void 0, void 0, function* () { + console.info(this._logPrefix + 'Leaflet map is ready', map); + // Create graticule + if (this.showGraticule) { + this.graticule = new MapGraticule({ latLngPattern: this.latLongPattern }); + this.graticule.addTo(map); + } + // Center map + const { center, zoom } = yield firstNotNilPromise(this.center$, { stop: this.destroySubject }); + // Call ready in a timeout to let leaflet map to initialize + setTimeout(() => { + if (this.flyToBoundsDelay > 0 || this.flyToBoundsDuration > 0) { + if (center && (center.lat !== 0 || center.lng !== 0)) { + console.debug(`[extraction-map] Center: `, center); + map.setView(center, zoom); + } + else { + map.fitWorld(); + } + } + this.map = map; + this.load(); + }); + }); + } + onEachFeature(feature, layer) { + layer.on('mouseover', (_) => this.zone.run(() => this.$onOverFeature.next(feature))); + layer.on('mouseout', (_) => this.zone.run(() => this.$onOutFeature.next(feature))); + layer.on('click', (_) => this.zone.run(() => this.onFeatureClick(feature))); + } + cleanMapLayers() { + (this.layers || []).forEach((layer) => this.map.removeLayer(layer)); + this.layers = []; + } + flyToBounds(opts = { skipDebounce: false }) { + return __awaiter(this, void 0, void 0, function* () { + if (!opts.skipDebounce && this.flyToBoundsDelay > 0) { + if (!this.$fitToBounds.observers.length) { + this.subscription.add(this.$fitToBounds + .pipe(debounceTime(this.flyToBoundsDelay)) + .subscribe(b => this.flyToBounds({ skipDebounce: true }))); + } + this.$fitToBounds.next(); + // Wait end of fit + return sleep(this.flyToBoundsDelay + this.flyToBoundsDuration); + } + if (isEmptyArray(this.layers)) { + console.debug('[operations-map] Skip fit to bounds (no layers)'); + return; + } + // Create bounds, from layers + let bounds; + this.layers + .filter((layer) => layer instanceof L.GeoJSON) + .forEach((layer) => { + const layerBounds = layer.getBounds(); + if (layerBounds.isValid()) { + bounds = !bounds ? layerBounds : bounds.extend(layerBounds); + } + }); + this.goTo(bounds); + }); + } + goTo(bounds) { + console.debug('[operations-map] Go to bounds:', bounds); + if (bounds && bounds.isValid()) { + if (this.flyToBoundsDuration <= 0) { + this.map.fitBounds(bounds, { maxZoom: this._maxZoom }); + return; + } + else { + try { + this.map.flyToBounds(bounds, { maxZoom: this._maxZoom, duration: this.flyToBoundsDuration }); + return; + } + catch (err) { + console.error('Cannot go to bounds: ' + (err && err.message || err), bounds); + } + } + } + this.map.fitWorld(); + } + registerSubscription(sub) { + this.subscription.add(sub); + } + unregisterSubscription(sub) { + this.subscription.remove(sub); + } + markAsLoading(opts) { + this._state.set('loading', () => true); + if (!opts || opts.emitEvent !== false) { + this.markForCheck(); + } + } + markAsLoaded(opts) { + this._state.set('loading', () => false); + if (!opts || opts.emitEvent !== false) { + this.markForCheck(); + } + } + markForCheck() { + var _a; + (_a = this.cd) === null || _a === void 0 ? void 0 : _a.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", String) +], BaseMap.prototype, "latLongPattern", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BaseMap.prototype, "flyToBoundsDelay", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BaseMap.prototype, "flyToBoundsDuration", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BaseMap.prototype, "showGraticule", void 0); +BaseMap = __decorate([ + Directive(), + __param(2, Optional()), + __metadata("design:paramtypes", [Injector, + RxState, Object, Object]) +], BaseMap); +export { BaseMap }; +//# sourceMappingURL=base-map.class.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/map/base-map.class.js.map b/out-tsc/app/app/shared/map/base-map.class.js.map new file mode 100644 index 000000000..ed577e1e4 --- /dev/null +++ b/out-tsc/app/app/shared/map/base-map.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"base-map.class.js","sourceRoot":"","sources":["../../../../../src/app/shared/map/base-map.class.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/map/leaflet.js b/out-tsc/app/app/shared/map/leaflet.js new file mode 100644 index 000000000..6cf348b3c --- /dev/null +++ b/out-tsc/app/app/shared/map/leaflet.js @@ -0,0 +1,6 @@ +// Import leaflet +import * as L from 'leaflet'; +import '@bepo65/leaflet.fullscreen'; +import 'leaflet-easybutton'; +export { L }; +//# sourceMappingURL=leaflet.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/map/leaflet.js.map b/out-tsc/app/app/shared/map/leaflet.js.map new file mode 100644 index 000000000..c6f951409 --- /dev/null +++ b/out-tsc/app/app/shared/map/leaflet.js.map @@ -0,0 +1 @@ +{"version":3,"file":"leaflet.js","sourceRoot":"","sources":["../../../../../src/app/shared/map/leaflet.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAC7B,OAAO,4BAA4B,CAAC;AACpC,OAAO,oBAAoB,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/map/map.graticule.js b/out-tsc/app/app/shared/map/map.graticule.js new file mode 100644 index 000000000..9ce01d5e6 --- /dev/null +++ b/out-tsc/app/app/shared/map/map.graticule.js @@ -0,0 +1,404 @@ +/** + * Create a Canvas as ImageOverlay to draw the Lat/Lon Graticule, + * and show the axis tick label on the edge of the map. + * Author: lanwei@cloudybay.com.tw + */ +import * as L from 'leaflet'; +import { formatLatitude, formatLongitude } from '@sumaris-net/ngx-components'; +const defaultOptions = { + showLabel: true, + opacity: 1, + weight: 0.8, + color: '#aaa', + lngLineCurved: 0, + latLineCurved: 0, + font: '12px Roboto, Helvetica, Arial, sans-serif', + fontColor: 'black', + zoomInterval: [ + { start: 1, end: 2, interval: 40 }, + { start: 3, end: 3, interval: 20 }, + { start: 4, end: 4, interval: 10 }, + { start: 5, end: 7, interval: 5 }, + { start: 8, end: 9, interval: 1 }, + { start: 10, end: 10, interval: 0.5 }, + { start: 11, end: 11, interval: 0.25 }, + { start: 12, end: 12, interval: 0.1 }, + { start: 13, end: 13, interval: 0.05 }, + { start: 14, end: 14, interval: 0.025 }, + { start: 15, end: 15, interval: 0.01 }, + { start: 16, end: 16, interval: 0.005 }, + { start: 17, end: 17, interval: 0.0025 }, + { start: 18, end: 18, interval: 0.001 } + ], +}; +export class MapGraticule extends L.GeoJSON { + constructor(options) { + super(undefined, Object.assign(Object.assign({}, defaultOptions), options)); + this.graticuleOptions = Object.assign(Object.assign({}, defaultOptions), options); + this._formatOptions = { pattern: options === null || options === void 0 ? void 0 : options.latLngPattern, placeholderChar: '' }; + const _ff = this.graticuleOptions.font.split(' '); + if (_ff.length < 2) { + this.graticuleOptions.font += ' Verdana'; + } + this.graticuleOptions.fontColor = this.graticuleOptions.fontColor || this.graticuleOptions.color; + this.graticuleOptions.latitudeInterval = this.graticuleOptions.latitudeInterval || this.graticuleOptions.zoomInterval; + this.graticuleOptions.longitudeInterval = this.graticuleOptions.longitudeInterval || this.graticuleOptions.zoomInterval; + } + onAdd(map) { + super.onAdd(map); + if (!this._container) { + this._initCanvas(); + } + map.getPanes().overlayPane.appendChild(this._container); + map.on('viewreset', this._reset, this); + map.on('move', this._reset, this); + map.on('moveend', this._reset, this); + this._reset(); + return this; + } + onRemove(map) { + map.getPanes().overlayPane.removeChild(this._container); + map.off('viewreset', this._reset, this); + map.off('move', this._reset, this); + map.off('moveend', this._reset, this); + return super.onRemove(map); + } + setOpacity(opacity) { + this.graticuleOptions.opacity = opacity; + this._updateOpacity(); + return this; + } + bringToFront() { + if (this._canvas) { + this._map.getPanes().overlayPane.appendChild(this._canvas); + } + return this; + } + bringToBack() { + const pane = this._map.getPanes().overlayPane; + if (this._canvas) { + pane.insertBefore(this._canvas, pane.firstChild); + } + return this; + } + getAttribution() { + return this.options.attribution; + } + _initCanvas() { + this._container = L.DomUtil.create('div', 'leaflet-image-layer'); + this._canvas = L.DomUtil.create('canvas', ''); + if (this._map.options.zoomAnimation && L.Browser.any3d) { + L.DomUtil.addClass(this._canvas, 'leaflet-zoom-animated'); + } + else { + L.DomUtil.addClass(this._canvas, 'leaflet-zoom-hide'); + } + this._updateOpacity(); + this._container.appendChild(this._canvas); + L.extend(this._canvas, { + onselectstart: L.Util.falseFn, + onmousemove: L.Util.falseFn, + onload: L.bind(this._onCanvasLoad, this), + }); + } + _reset() { + const container = this._container; + const canvas = this._canvas; + const size = this._map.getSize(); + const lt = this._map.containerPointToLayerPoint([0, 0]); + L.DomUtil.setPosition(container, lt); + container.style.width = size.x + 'px'; + container.style.height = size.y + 'px'; + canvas.width = size.x; + canvas.height = size.y; + canvas.style.width = size.x + 'px'; + canvas.style.height = size.y + 'px'; + this._calcInterval(); + this._draw(true); + } + _onCanvasLoad() { + this.fire('load'); + } + _updateOpacity() { + L.DomUtil.setOpacity(this._canvas, this.graticuleOptions.opacity); + } + _formatLat(lat) { + return formatLatitude(lat, this._formatOptions); + } + _formatLng(lng) { + if (lng > 180) { + lng = 360 - lng; + } + else if (lng < -180) { + lng = 360 + lng; + } + return formatLongitude(lng, this._formatOptions); + } + _calcInterval() { + const zoom = this._map.getZoom(); + if (this._currZoom !== zoom) { + this._currLngInterval = 0; + this._currLatInterval = 0; + this._currZoom = zoom; + } + if (!this._currLngInterval) { + try { + for (const interval of this.graticuleOptions.longitudeInterval) { + if (interval.start <= zoom) { + if (interval.end && interval.end >= zoom) { + this._currLngInterval = interval.interval; + break; + } + } + } + } + catch (e) { + this._currLngInterval = 0; + } + } + if (!this._currLatInterval) { + try { + for (const interval of this.graticuleOptions.latitudeInterval) { + if (interval.start <= zoom) { + if (interval.end && interval.end >= zoom) { + this._currLatInterval = interval.interval; + break; + } + } + } + } + catch (e) { + this._currLatInterval = 0; + } + } + } + _draw(label) { + const _parsePx2Int = (txt) => { + if (txt.length > 2) { + if (txt.charAt(txt.length - 2) === 'p') { + txt = txt.substr(0, txt.length - 2); + } + } + try { + return parseInt(txt, 10); + } + catch (e) { } + return 0; + }; + const canvas = this._canvas; + const map = this._map; + const curvedLon = this.graticuleOptions.lngLineCurved; + const curvedLat = this.graticuleOptions.latLineCurved; + if (L.Browser.canvas && map) { + if (!this._currLngInterval || !this._currLatInterval) { + this._calcInterval(); + } + const latInterval = this._currLatInterval; + const lngInterval = this._currLngInterval; + const ctx = canvas.getContext('2d'); + ctx.clearRect(0, 0, canvas.width, canvas.height); + ctx.lineWidth = this.graticuleOptions.weight; + ctx.strokeStyle = this.graticuleOptions.color; + ctx.fillStyle = this.graticuleOptions.fontColor; + if (this.graticuleOptions.font) { + ctx.font = this.graticuleOptions.font; + } + let txtWidth = ctx.measureText('0').width; + let txtHeight = 12; + try { + txtHeight = _parsePx2Int(ctx.font.split(' ')[0]); + } + catch (e) { } + const ww = canvas.width; + const hh = canvas.height; + const lt = map.containerPointToLatLng(L.point(0, 0)); + const rt = map.containerPointToLatLng(L.point(ww, 0)); + const rb = map.containerPointToLatLng(L.point(ww, hh)); + let _latB = rb.lat; + let _latT = lt.lat; + let _lonL = lt.lng; + let _lonR = rt.lng; + let _pointPerLat = (_latT - _latB) / (hh * 0.2); + if (_pointPerLat < 1) { + _pointPerLat = 1; + } + if (_latB < -90) { + _latB = -90; + } + else { + _latB = _latB - _pointPerLat; + } + if (_latT > 90) { + _latT = 90; + } + else { + _latT = _latT + _pointPerLat; + } + let _pointPerLon = (_lonR - _lonL) / (ww * 0.2); + if (_pointPerLon < 1) { + _pointPerLon = 1; + } + if (_lonL > 0 && _lonR < 0) { + _lonR += 360; + } + _lonR = _lonR + _pointPerLon; + _lonL = _lonL - _pointPerLon; + let ll; + let latstr; + let lngstr; + let _lonDelta = 0.5; + const _drawLatLine = (self, latTick) => { + let _y; + let _s; + let rr; + let _lonLeft; + let _lonRight; + ll = map.latLngToContainerPoint(L.latLng(latTick, _lonL)); + latstr = self._formatLat(latTick); + txtWidth = ctx.measureText(latstr).width; + if (curvedLat) { + if (typeof curvedLat == 'number') { + _lonDelta = curvedLat; + } + _lonLeft = _lonL; + _lonRight = _lonR; + if (ll.x > 0) { + _lonLeft = map.containerPointToLatLng(L.point(0, ll.y)); + _lonLeft = _lonLeft.lng - _pointPerLon; + ll.x = 0; + } + rr = map.latLngToContainerPoint(L.latLng(latTick, _lonRight)); + if (rr.x < ww) { + _lonRight = map.containerPointToLatLng(L.point(ww, rr.y)); + _lonRight = _lonRight.lng + _pointPerLon; + if (_lonLeft > 0 && _lonRight < 0) { + _lonRight += 360; + } + } + ctx.beginPath(); + ctx.moveTo(ll.x, ll.y); + let _prevP = null; + for (let j = _lonLeft; j <= _lonRight; j += _lonDelta) { + rr = map.latLngToContainerPoint(L.latLng(latTick, j)); + ctx.lineTo(rr.x, rr.y); + if (self.graticuleOptions.showLabel && label && _prevP != null) { + if (_prevP.x < 0 && rr.x >= 0) { + _s = (rr.x - 0) / (rr.x - _prevP.x); + _y = rr.y - (rr.y - _prevP.y) * _s; + ctx.fillText(latstr, 0, _y + txtHeight / 2); + } + else if (_prevP.x <= ww - txtWidth && rr.x > ww - txtWidth) { + _s = (rr.x - ww) / (rr.x - _prevP.x); + _y = rr.y - (rr.y - _prevP.y) * _s; + ctx.fillText(latstr, ww - txtWidth, _y + txtHeight / 2 - 2); + } + } + _prevP = { x: rr.x, y: rr.y, lon: j, lat: latTick }; + } + ctx.stroke(); + } + else { + _lonRight = _lonR; + rr = map.latLngToContainerPoint(L.latLng(latTick, _lonRight)); + if (curvedLon) { + _lonRight = map.containerPointToLatLng(L.point(0, rr.y)); + _lonRight = _lonRight.lng; + rr = map.latLngToContainerPoint(L.latLng(latTick, _lonRight)); + _lonLeft = map.containerPointToLatLng(L.point(ww, rr.y)); + _lonLeft = _lonLeft.lng; + ll = map.latLngToContainerPoint(L.latLng(latTick, _lonLeft)); + } + ctx.beginPath(); + ctx.moveTo(ll.x + 1, ll.y); + ctx.lineTo(rr.x - 1, rr.y); + ctx.stroke(); + if (self.options.showLabel && label) { + const _yy = ll.y + txtHeight / 2 - 2; + ctx.fillText(latstr, 0, _yy); + ctx.fillText(latstr, ww - txtWidth, _yy); + } + } + }; + if (latInterval > 0) { + let i; + for (i = latInterval; i <= _latT; i += latInterval) { + if (i >= _latB) { + _drawLatLine(this, i); + } + } + for (i = 0; i >= _latB; i -= latInterval) { + if (i <= _latT) { + _drawLatLine(this, i); + } + } + } + const _drawLonLine = (self, lonTick) => { + let tt; + lngstr = self._formatLng(lonTick); + txtWidth = ctx.measureText(lngstr).width; + let bb = map.latLngToContainerPoint(L.latLng(_latB, lonTick)); + if (curvedLon) { + let _latDelta; + if (typeof curvedLon == 'number') { + _latDelta = curvedLon; + } + ctx.beginPath(); + ctx.moveTo(bb.x, bb.y); + let _prevP = null; + for (let j = _latB; j < _latT; j += _latDelta) { + tt = map.latLngToContainerPoint(L.latLng(j, lonTick)); + ctx.lineTo(tt.x, tt.y); + if (self.options.showLabel && label && _prevP != null) { + if (_prevP.y > 8 && tt.y <= 8) { + ctx.fillText(lngstr, tt.x - txtWidth / 2, txtHeight); + } + else if (_prevP.y >= hh && tt.y < hh) { + ctx.fillText(lngstr, tt.x - txtWidth / 2, hh - 2); + } + } + _prevP = { x: tt.x, y: tt.y, lon: lonTick, lat: j }; + } + ctx.stroke(); + } + else { + let _latTop = _latT; + tt = map.latLngToContainerPoint(L.latLng(_latTop, lonTick)); + if (curvedLat) { + _latTop = map.containerPointToLatLng(L.point(tt.x, 0)).lat; + if (_latTop > 90) { + _latTop = 90; + } + tt = map.latLngToContainerPoint(L.latLng(_latTop, lonTick)); + let _latBottom = map.containerPointToLatLng(L.point(bb.x, hh)).lat; + if (_latBottom < -90) { + _latBottom = -90; + } + bb = map.latLngToContainerPoint(L.latLng(_latBottom, lonTick)); + } + ctx.beginPath(); + ctx.moveTo(tt.x, tt.y + 1); + ctx.lineTo(bb.x, bb.y - 1); + ctx.stroke(); + if (self.options.showLabel && label) { + ctx.fillText(lngstr, tt.x - txtWidth / 2, txtHeight + 1); + ctx.fillText(lngstr, bb.x - txtWidth / 2, hh - 3); + } + } + }; + if (lngInterval > 0) { + let i; + for (i = lngInterval; i <= _lonR; i += lngInterval) { + if (i >= _lonL) { + _drawLonLine(this, i); + } + } + for (i = 0; i >= _lonL; i -= lngInterval) { + if (i <= _lonR) { + _drawLonLine(this, i); + } + } + } + } + } +} +//# sourceMappingURL=map.graticule.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/map/map.graticule.js.map b/out-tsc/app/app/shared/map/map.graticule.js.map new file mode 100644 index 000000000..8ec6cbf88 --- /dev/null +++ b/out-tsc/app/app/shared/map/map.graticule.js.map @@ -0,0 +1 @@ +{"version":3,"file":"map.graticule.js","sourceRoot":"","sources":["../../../../../src/app/shared/map/map.graticule.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/map/map.utils.js b/out-tsc/app/app/shared/map/map.utils.js new file mode 100644 index 000000000..58478fb2f --- /dev/null +++ b/out-tsc/app/app/shared/map/map.utils.js @@ -0,0 +1,20 @@ +/** + * Create a Canvas as ImageOverlay to draw the Lat/Lon Graticule, + * and show the axis tick label on the edge of the map. + * Author: lanwei@cloudybay.com.tw + */ +import * as L from 'leaflet'; +import { EXTRACTION_CONFIG_OPTIONS } from '@app/extraction/common/extraction.config'; +export class MapUtils { + static getMapCenter(config) { + let centerCoords = config.getPropertyAsNumbers(EXTRACTION_CONFIG_OPTIONS.EXTRACTION_MAP_CENTER_LAT_LNG); + centerCoords = ((centerCoords === null || centerCoords === void 0 ? void 0 : centerCoords.length) === 2) ? centerCoords : [0, 0]; + const zoom = config.getPropertyAsInt(EXTRACTION_CONFIG_OPTIONS.EXTRACTION_MAP_CENTER_ZOOM); + return { + center: L.latLng(centerCoords), + zoom: zoom || this.MAX_ZOOM + }; + } +} +MapUtils.MAX_ZOOM = 12; +//# sourceMappingURL=map.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/map/map.utils.js.map b/out-tsc/app/app/shared/map/map.utils.js.map new file mode 100644 index 000000000..771625d96 --- /dev/null +++ b/out-tsc/app/app/shared/map/map.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"map.utils.js","sourceRoot":"","sources":["../../../../../src/app/shared/map/map.utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAG7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AAOrF,MAAM,OAAO,QAAQ;IAGnB,MAAM,CAAC,YAAY,CAAC,MAAqB;QACvC,IAAI,YAAY,GAAG,MAAM,CAAC,oBAAoB,CAAC,yBAAyB,CAAC,6BAA6B,CAAC,CAAC;QACxG,YAAY,GAAG,CAAC,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,MAAK,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,0BAA0B,CAAC,CAAC;QAC3F,OAAkB;YAChB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,YAAgC,CAAC;YAClD,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ;SAC5B,CAAC;IACJ,CAAC;;AAVM,iBAAQ,GAAG,EAAE,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/markdown/markdown-anchor.directive.js b/out-tsc/app/app/shared/markdown/markdown-anchor.directive.js new file mode 100644 index 000000000..7482b5a3a --- /dev/null +++ b/out-tsc/app/app/shared/markdown/markdown-anchor.directive.js @@ -0,0 +1,37 @@ +import { __decorate, __metadata } from "tslib"; +import { Directive, ElementRef, HostListener } from '@angular/core'; +import { MarkdownAnchorService } from '@app/shared/markdown/markdown-anchor.service'; +import { Subscription } from 'rxjs'; +let MarkdownAnchorDirective = class MarkdownAnchorDirective { + constructor(service, element) { + this.service = service; + this.element = element; + this._subscription = new Subscription(); + } + processAnchors() { + const listener = (event) => this.service.interceptClick(event); + const links = this.element.nativeElement.querySelectorAll('a'); + links.forEach((link) => { + link.addEventListener('click', listener); + this._subscription.add(() => link.removeEventListener('click', listener)); + }); + } + ngOnDestroy() { + this._subscription.unsubscribe(); + } +}; +__decorate([ + HostListener('ready'), + __metadata("design:type", Function), + __metadata("design:paramtypes", []), + __metadata("design:returntype", void 0) +], MarkdownAnchorDirective.prototype, "processAnchors", null); +MarkdownAnchorDirective = __decorate([ + Directive({ + // tslint:disable-next-line: directive-selector + selector: 'markdown,[markdown]', + }), + __metadata("design:paramtypes", [MarkdownAnchorService, ElementRef]) +], MarkdownAnchorDirective); +export { MarkdownAnchorDirective }; +//# sourceMappingURL=markdown-anchor.directive.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/markdown/markdown-anchor.directive.js.map b/out-tsc/app/app/shared/markdown/markdown-anchor.directive.js.map new file mode 100644 index 000000000..c62bcac66 --- /dev/null +++ b/out-tsc/app/app/shared/markdown/markdown-anchor.directive.js.map @@ -0,0 +1 @@ +{"version":3,"file":"markdown-anchor.directive.js","sourceRoot":"","sources":["../../../../../src/app/shared/markdown/markdown-anchor.directive.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAa,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAM7B,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAGlC,YAAoB,OAA8B,EAAU,OAAgC;QAAxE,YAAO,GAAP,OAAO,CAAuB;QAAU,YAAO,GAAP,OAAO,CAAyB;QAFpF,kBAAa,GAAG,IAAI,YAAY,EAAE,CAAC;IAEoD,CAAC;IAGzF,cAAc;QACnB,MAAM,QAAQ,GAAG,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC/D,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrB,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACzC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW;QACT,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;IACnC,CAAC;CACF,CAAA;AAbC;IAAC,YAAY,CAAC,OAAO,CAAC;;;;6DAQrB;AAbU,uBAAuB;IAJnC,SAAS,CAAC;QACT,+CAA+C;QAC/C,QAAQ,EAAE,qBAAqB;KAChC,CAAC;qCAI6B,qBAAqB,EAAmB,UAAU;GAHpE,uBAAuB,CAkBnC;SAlBY,uBAAuB"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/markdown/markdown-anchor.service.js b/out-tsc/app/app/shared/markdown/markdown-anchor.service.js new file mode 100644 index 000000000..dccc77e85 --- /dev/null +++ b/out-tsc/app/app/shared/markdown/markdown-anchor.service.js @@ -0,0 +1,70 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { NavController } from '@ionic/angular'; +import { LocationStrategy } from '@angular/common'; +import { UrlUtils } from '@app/shared/markdown/markdown-anchor.utils'; +let MarkdownAnchorService = class MarkdownAnchorService { + constructor(route, router, locationStrategy, navController) { + this.route = route; + this.router = router; + this.locationStrategy = locationStrategy; + this.navController = navController; + } + isInternalUrl(href) { + return UrlUtils.isInternalUrl(href); + } + getUrlTree(url) { + const urlPath = UrlUtils.stripFragmentAndQuery(url) || UrlUtils.stripFragmentAndQuery(this.router.url); + const parsedUrl = this.router.parseUrl(url); + const fragment = parsedUrl.fragment; + const queryParams = parsedUrl.queryParams; + return this.router.createUrlTree([urlPath], { relativeTo: this.route, fragment, queryParams }); + } + navigate(url, replaceUrl = false) { + const urlTree = this.getUrlTree(url); + this.router.navigated = false; + this.navController.navigateForward(urlTree, { replaceUrl }); + } + interceptClick(event) { + const element = event.target; + if (!(element instanceof HTMLAnchorElement)) { + return; + } + let routerLink = element.getAttribute('routerLink'); + if (routerLink) { + event.preventDefault(); + this.navController.navigateForward(routerLink); + return; + } + const href = element.getAttribute('href'); + if (UrlUtils.isInternalUrl(href)) { + const urlTree = this.getUrlTree(href.startsWith('/') ? href : `/${href}`); + event.preventDefault(); + this.router.navigated = false; + this.navController.navigateForward(urlTree); + } + } + /** + * Transform a relative URL to its absolute representation according to current router state. + * @param url Relative URL path. + * @return Absolute URL based on the current route. + */ + normalizeExternalUrl(url) { + if (UrlUtils.isExternalUrl(url)) { + return url; + } + const urlTree = this.getUrlTree(url); + const serializedUrl = this.router.serializeUrl(urlTree); + return this.locationStrategy.prepareExternalUrl(serializedUrl); + } +}; +MarkdownAnchorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [ActivatedRoute, + Router, + LocationStrategy, + NavController]) +], MarkdownAnchorService); +export { MarkdownAnchorService }; +//# sourceMappingURL=markdown-anchor.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/markdown/markdown-anchor.service.js.map b/out-tsc/app/app/shared/markdown/markdown-anchor.service.js.map new file mode 100644 index 000000000..0a09f155b --- /dev/null +++ b/out-tsc/app/app/shared/markdown/markdown-anchor.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"markdown-anchor.service.js","sourceRoot":"","sources":["../../../../../src/app/shared/markdown/markdown-anchor.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/markdown/markdown-anchor.utils.js b/out-tsc/app/app/shared/markdown/markdown-anchor.utils.js new file mode 100644 index 000000000..6da622d46 --- /dev/null +++ b/out-tsc/app/app/shared/markdown/markdown-anchor.utils.js @@ -0,0 +1,21 @@ +export class UrlUtils { + static isInternalUrl(href) { + if (!href) + return false; + if (href.startsWith(window.location.origin)) + return true; + return !href.startsWith('http:') && !href.startsWith('https:') && !href.startsWith('mailto:') && !href.startsWith('tel:'); + } + static isExternalUrl(href) { + if (!href) + return false; + return !this.isInternalUrl(href); + } + static stripQuery(url) { + return /[^?]*/.exec(url)[0]; + } + static stripFragmentAndQuery(url) { + return this.stripQuery(/[^#]*/.exec(url)[0]); + } +} +//# sourceMappingURL=markdown-anchor.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/markdown/markdown-anchor.utils.js.map b/out-tsc/app/app/shared/markdown/markdown-anchor.utils.js.map new file mode 100644 index 000000000..c71767477 --- /dev/null +++ b/out-tsc/app/app/shared/markdown/markdown-anchor.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"markdown-anchor.utils.js","sourceRoot":"","sources":["../../../../../src/app/shared/markdown/markdown-anchor.utils.ts"],"names":[],"mappings":"AAAA,MAAM,OAAgB,QAAQ;IAE5B,MAAM,CAAC,aAAa,CAAC,IAAmB;QACtC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAA;QACxD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5H,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,IAAmB;QACtC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,GAAW;QAC3B,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,qBAAqB,CAAC,GAAW;QACtC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;CACF"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/markdown/markdown.module.js b/out-tsc/app/app/shared/markdown/markdown.module.js new file mode 100644 index 000000000..84fdf2bbe --- /dev/null +++ b/out-tsc/app/app/shared/markdown/markdown.module.js @@ -0,0 +1,56 @@ +var AppMarkdownModule_1; +import { __decorate } from "tslib"; +// function that returns `MarkedOptions` with renderer override +import { MarkdownModule, MarkedOptions } from 'ngx-markdown'; +import { NgModule, SecurityContext } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { MarkdownRenderer } from '@app/shared/markdown/markdown.render'; +import { MarkdownAnchorService } from '@app/shared/markdown/markdown-anchor.service'; +import { MarkdownAnchorDirective } from '@app/shared/markdown/markdown-anchor.directive'; +export function markedOptionsFactory(markdownAnchorService) { + return { + renderer: new MarkdownRenderer(markdownAnchorService), + gfm: true, + breaks: false, + pedantic: false, + smartLists: true, + smartypants: false, + }; +} +let AppMarkdownModule = AppMarkdownModule_1 = class AppMarkdownModule { + static forRoot() { + console.debug('[app-markdown] Creating module (root)'); + return { + ngModule: AppMarkdownModule_1, + providers: [ + MarkdownAnchorService, + ...MarkdownModule.forRoot({ + loader: HttpClient, + sanitize: SecurityContext.NONE, + markedOptions: { + provide: MarkedOptions, + deps: [MarkdownAnchorService], + useFactory: (s) => markedOptionsFactory(s), + } + }).providers + ], + }; + } +}; +AppMarkdownModule = AppMarkdownModule_1 = __decorate([ + NgModule({ + imports: [ + MarkdownModule.forChild() + ], + declarations: [ + // Directive + MarkdownAnchorDirective + ], + exports: [ + MarkdownModule, + MarkdownAnchorDirective + ], + }) +], AppMarkdownModule); +export { AppMarkdownModule }; +//# sourceMappingURL=markdown.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/markdown/markdown.module.js.map b/out-tsc/app/app/shared/markdown/markdown.module.js.map new file mode 100644 index 000000000..f0084f52e --- /dev/null +++ b/out-tsc/app/app/shared/markdown/markdown.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"markdown.module.js","sourceRoot":"","sources":["../../../../../src/app/shared/markdown/markdown.module.ts"],"names":[],"mappings":";;AAAA,+DAA+D;AAC/D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAuB,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AAEzF,MAAM,UAAU,oBAAoB,CAAC,qBAA4C;IAC/E,OAAO;QACL,QAAQ,EAAE,IAAI,gBAAgB,CAAC,qBAAqB,CAAC;QACrD,GAAG,EAAE,IAAI;QACT,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,KAAK;QACf,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,KAAK;KACnB,CAAC;AACJ,CAAC;AAgBM,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAC5B,MAAM,CAAC,OAAO;QACZ,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAEvD,OAAO;YACL,QAAQ,EAAE,mBAAiB;YAC3B,SAAS,EAAE;gBACT,qBAAqB;gBACrB,GAAG,cAAc,CAAC,OAAO,CAAC;oBACxB,MAAM,EAAE,UAAU;oBAClB,QAAQ,EAAE,eAAe,CAAC,IAAI;oBAC9B,aAAa,EAAE;wBACb,OAAO,EAAE,aAAa;wBACtB,IAAI,EAAE,CAAC,qBAAqB,CAAC;wBAC7B,UAAU,EAAE,CAAC,CAAwB,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;qBAClE;iBACF,CAAC,CAAC,SAAS;aACb;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AApBY,iBAAiB;IAd7B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,cAAc,CAAC,QAAQ,EAAE;SAC1B;QACD,YAAY,EAAE;YACZ,YAAY;YACZ,uBAAuB;SACxB;QACD,OAAO,EAAE;YACP,cAAc;YAEd,uBAAuB;SACxB;KACF,CAAC;GACW,iBAAiB,CAoB7B;SApBY,iBAAiB"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/markdown/markdown.render.js b/out-tsc/app/app/shared/markdown/markdown.render.js new file mode 100644 index 000000000..0aef85336 --- /dev/null +++ b/out-tsc/app/app/shared/markdown/markdown.render.js @@ -0,0 +1,17 @@ +// function that returns `MarkedOptions` with renderer override +import { MarkedRenderer } from 'ngx-markdown'; +export class MarkdownRenderer extends MarkedRenderer { + constructor(service) { + super(); + this.service = service; + } + // Override link construction + link(href, title, text) { + if (this.service.isInternalUrl(href)) { + const externalUrl = this.service.normalizeExternalUrl(href); + return `${text}`; + } + return `${text}`; + } +} +//# sourceMappingURL=markdown.render.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/markdown/markdown.render.js.map b/out-tsc/app/app/shared/markdown/markdown.render.js.map new file mode 100644 index 000000000..6b5aa4156 --- /dev/null +++ b/out-tsc/app/app/shared/markdown/markdown.render.js.map @@ -0,0 +1 @@ +{"version":3,"file":"markdown.render.js","sourceRoot":"","sources":["../../../../../src/app/shared/markdown/markdown.render.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IAClD,YAAoB,OAA8B;QAChD,KAAK,EAAE,CAAC;QADU,YAAO,GAAP,OAAO,CAAuB;IAElD,CAAC;IAED,6BAA6B;IAC7B,IAAI,CAAC,IAAmB,EAAE,KAAoB,EAAE,IAAY;QAC1D,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YACpC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC5D,OAAO,YAAY,WAAW,iBAAiB,IAAI,YAAY,KAAK,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC;SAC3F;QACD,OAAO,YAAY,IAAI,IAAI,EAAE,YAAY,KAAK,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC;IACtE,CAAC;CACF"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/material/material.animation.js b/out-tsc/app/app/shared/material/material.animation.js new file mode 100644 index 000000000..09c44fc87 --- /dev/null +++ b/out-tsc/app/app/shared/material/material.animation.js @@ -0,0 +1,50 @@ +// import the required animation functions from the angular animations module +import { animate, state, style, transition, trigger } from '@angular/animations'; +import { createAnimation } from '@ionic/core'; +// TODO move this to ngx component ? +export const slideDownAnimation = +// trigger name for attaching this animation to an element using the [@triggerName] syntax +trigger('slideDownAnimation', [ + // end state styles for route container (host) + state('*', style({ + transform: 'translateY(0)', + opacity: 1 + })), + // route 'enter' transition + transition(':enter', [ + // styles at start of transition + style({ + transform: 'translateY(-400%)', + opacity: 0 + }), + // animation and styles at end of transition + animate('.3s ease-in-out', style({ + transform: 'translateY(0)', + opacity: 1 + })) + ]), + // route 'leave' transition + transition(':leave', [ + // animation and styles at end of transition + style({ + transform: 'translateY(-400%)', + opacity: 0 + }) + ]) +]); +export const ionFadeInTransition = (_, opts) => { + const baseAnimation = createAnimation(); + const enteringAnimation = createAnimation() + .addElement(opts.enteringEl) + .duration(500) + .fromTo('opacity', 0, 1); + if (opts.leavingEl) { + const leavingAnimation = createAnimation() + .addElement(opts.leavingEl) + .duration(500) + .fromTo('opacity', 1, 0); + return baseAnimation.addAnimation([enteringAnimation, leavingAnimation]); + } + return baseAnimation.addAnimation(enteringAnimation); +}; +//# sourceMappingURL=material.animation.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/material/material.animation.js.map b/out-tsc/app/app/shared/material/material.animation.js.map new file mode 100644 index 000000000..50d5e0639 --- /dev/null +++ b/out-tsc/app/app/shared/material/material.animation.js.map @@ -0,0 +1 @@ +{"version":3,"file":"material.animation.js","sourceRoot":"","sources":["../../../../../src/app/shared/material/material.animation.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAa,eAAe,EAAE,MAAM,aAAa,CAAC;AAEzD,oCAAoC;AACpC,MAAM,CAAC,MAAM,kBAAkB;AAC7B,0FAA0F;AAC1F,OAAO,CAAC,oBAAoB,EAAE;IAE5B,8CAA8C;IAC9C,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;QACf,SAAS,EAAE,eAAe;QAC1B,OAAO,EAAE,CAAC;KACX,CAAC,CAAC;IAEH,2BAA2B;IAC3B,UAAU,CAAC,QAAQ,EAAE;QAEnB,gCAAgC;QAChC,KAAK,CAAC;YACJ,SAAS,EAAE,mBAAmB;YAC9B,OAAO,EAAE,CAAC;SACX,CAAC;QAEF,4CAA4C;QAC5C,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC;YAC/B,SAAS,EAAE,eAAe;YAC1B,OAAO,EAAE,CAAC;SACX,CAAC,CAAC;KACJ,CAAC;IAEF,2BAA2B;IAC3B,UAAU,CAAC,QAAQ,EAAE;QACnB,4CAA4C;QAC5C,KAAK,CAAC;YACJ,SAAS,EAAE,mBAAmB;YAC9B,OAAO,EAAE,CAAC;SACX,CAAC;KACH,CAAC;CACH,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,CAAc,EACd,IAGC,EACU,EAAE;IACb,MAAM,aAAa,GAAG,eAAe,EAAE,CAAC;IAExC,MAAM,iBAAiB,GAAG,eAAe,EAAE;SACxC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;SAC3B,QAAQ,CAAC,GAAG,CAAC;SACb,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3B,IAAI,IAAI,CAAC,SAAS,EAAE;QAClB,MAAM,gBAAgB,GAAG,eAAe,EAAE;aACvC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;aAC1B,QAAQ,CAAC,GAAG,CAAC;aACb,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,OAAO,aAAa,CAAC,YAAY,CAAC,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC;KAC1E;IAED,OAAO,aAAa,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;AACvD,CAAC,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/material/material.testing.module.js b/out-tsc/app/app/shared/material/material.testing.module.js new file mode 100644 index 000000000..6586efe9b --- /dev/null +++ b/out-tsc/app/app/shared/material/material.testing.module.js @@ -0,0 +1,39 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { CommonModule } from '@angular/common'; +import { SharedModule } from '@sumaris-net/ngx-components'; +import { TranslateModule } from '@ngx-translate/core'; +import { AppSamplingRatioTestPage } from '@app/shared/material/sampling-ratio/testing/sampling-ratio.test'; +import { MatSamplingRatioFieldModule } from '@app/shared/material/sampling-ratio/material.sampling-ratio.module'; +export const MATERIAL_TESTING_PAGES = [ + { label: 'Sampling ratio field', page: '/testing/shared/material/samplingRatio' } +]; +const routes = [ + { + path: 'samplingRatio', + pathMatch: 'full', + component: AppSamplingRatioTestPage + } +]; +let AppSharedMaterialTestingModule = class AppSharedMaterialTestingModule { +}; +AppSharedMaterialTestingModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + SharedModule, + TranslateModule.forChild(), + RouterModule.forChild(routes), + MatSamplingRatioFieldModule + ], + declarations: [ + AppSamplingRatioTestPage + ], + exports: [ + AppSamplingRatioTestPage + ] + }) +], AppSharedMaterialTestingModule); +export { AppSharedMaterialTestingModule }; +//# sourceMappingURL=material.testing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/material/material.testing.module.js.map b/out-tsc/app/app/shared/material/material.testing.module.js.map new file mode 100644 index 000000000..771eedf74 --- /dev/null +++ b/out-tsc/app/app/shared/material/material.testing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"material.testing.module.js","sourceRoot":"","sources":["../../../../../src/app/shared/material/material.testing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAe,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iEAAiE,CAAC;AAC3G,OAAO,EAAE,2BAA2B,EAAE,MAAM,oEAAoE,CAAC;AAEjH,MAAM,CAAC,MAAM,sBAAsB,GAAkB;IACnD,EAAC,KAAK,EAAE,sBAAsB,EAAE,IAAI,EAAE,wCAAwC,EAAC;CAChF,CAAC;AAEF,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,wBAAwB;KACpC;CACF,CAAC;AAiBK,IAAM,8BAA8B,GAApC,MAAM,8BAA8B;CAE1C,CAAA;AAFY,8BAA8B;IAf1C,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,YAAY;YACZ,eAAe,CAAC,QAAQ,EAAE;YAC1B,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,2BAA2B;SAC5B;QACD,YAAY,EAAE;YACZ,wBAAwB;SACzB;QACD,OAAO,EAAE;YACP,wBAAwB;SACzB;KACF,CAAC;GACW,8BAA8B,CAE1C;SAFY,8BAA8B"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/material/sampling-ratio/material.sampling-ratio.js b/out-tsc/app/app/shared/material/sampling-ratio/material.sampling-ratio.js new file mode 100644 index 000000000..72f462189 --- /dev/null +++ b/out-tsc/app/app/shared/material/sampling-ratio/material.sampling-ratio.js @@ -0,0 +1,300 @@ +import { __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, Input, Optional } from '@angular/core'; +import { FormGroupDirective, NG_VALUE_ACCESSOR, UntypedFormBuilder, UntypedFormControl } from '@angular/forms'; +import { Subscription } from 'rxjs'; +import { AppFormUtils, isNil, isNotNilOrNaN } from '@sumaris-net/ngx-components'; +import { filter } from 'rxjs/operators'; +import { isNilOrNaN, roundHalfUp } from '@app/shared/functions'; +const noop = () => { }; +const DEFAULT_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => MatSamplingRatioField), + multi: true +}; +export const DEFAULT_MAX_DECIMALS = 6; +let MatSamplingRatioField = class MatSamplingRatioField { + constructor(formBuilder, cd, formGroupDir) { + this.formBuilder = formBuilder; + this.cd = cd; + this.formGroupDir = formGroupDir; + this._onChangeCallback = noop; + this._onTouchedCallback = noop; + this._subscription = new Subscription(); + this._disabling = false; + this._writing = true; // Will be changed to 'false' by ngOnInit() + this._readonly = false; + this._format = '%'; + this.required = false; + this.floatLabel = 'auto'; + this.maxDecimals = DEFAULT_MAX_DECIMALS; + this.selectInputContent = AppFormUtils.selectInputContent; + } + get disabled() { + return this.formControl.disabled; + } + set readonly(value) { + if (this._readonly !== value) { + this._readonly = value; + this.markForCheck(); + } + } + get readonly() { + return this._readonly; + } + set placeholder(value) { + if (this._placeholder !== value) { + this._placeholder = value; + this.markForCheck(); + } + } + get placeholder() { + return this._placeholder || this._defaultPlaceholder; + } + set format(value) { + if (this._format !== value) { + this._format = value; + this._onFormatChanged(); + this.markForCheck(); + } + } + get format() { + return this._format; + } + ngOnInit() { + this.format = this.format || '%'; + if (isNil(this.maxDecimals)) { + this.maxDecimals = DEFAULT_MAX_DECIMALS; + } + else if (this.maxDecimals < 0) { + console.error('Invalid attribute \'maxDecimals\'. Must a positive value.'); + this.maxDecimals = DEFAULT_MAX_DECIMALS; + } + this.formControl = this.formControl || this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName); + if (!this.formControl) + throw new Error('Missing mandatory attribute \'formControl\' or \'formControlName\' in .'); + this._inputFormControl = this.formBuilder.control([null]); + this._onFormatChanged(); + this._subscription.add(this._inputFormControl.valueChanges + .subscribe((value) => this._onFormChange(value))); + // Listen status changes (when done outside the component - e.g. when setErrors() is calling on the formControl) + this._subscription.add(this.formControl.statusChanges + .pipe(filter((_) => !this._readonly && !this._writing && !this._disabling) // Skip + ) + .subscribe((_) => this.markForCheck())); + this._writing = false; + } + ngOnDestroy() { + this._subscription.unsubscribe(); + } + writeValue(obj) { + if (this._writing) + return; // Skip + this._writing = true; + try { + const value = (typeof obj === 'string') ? parseFloat(obj.replace(/,/g, '.')) : obj; + const formValue = this.toFormValue(value); + // DEBUG + //console.debug("[mat-sampling-ratio] formValue: " + formValue); + this._inputFormControl.patchValue(formValue, { emitEvent: false }); + } + finally { + this._writing = false; + this.markForCheck(); + } + } + registerOnChange(fn) { + this._onChangeCallback = fn; + } + registerOnTouched(fn) { + this._onTouchedCallback = fn; + } + setDisabledState(isDisabled) { + if (this._disabling) + return; // Skip + this._disabling = true; + // DEBUG + console.debug('[mat-sampling-ratio] setDisabledState() with isDisabled=' + isDisabled); + if (isDisabled) { + this._inputFormControl.disable({ emitEvent: false }); + } + else { + this._inputFormControl.enable({ emitEvent: false }); + } + this._disabling = false; + this.markForCheck(); + } + displayValue(modelValue) { + const formValue = this.toFormValue(modelValue); + if (isNotNilOrNaN(modelValue)) { + switch (this._format) { + case '1/w': + return `1/${formValue}`; + case '%': + default: + return '' + formValue; + } + } + return ''; + } + clear() { + this.formControl.setValue(null); + this.markAsTouched(); + this.markAsDirty(); + } + /* -- protected functions -- */ + _onFormatChanged() { + switch (this._format) { + case '1/w': + this._inputMaxDecimals = Math.max(0, this.maxDecimals - 2); + const ngDigits = Math.max(3, this.maxDecimals); + this._pattern = `[0-9]{1,${ngDigits}}([.][0-9]{0,${this._inputMaxDecimals}})?`; + this._defaultPlaceholder = 'TRIP.BATCH.EDIT.SAMPLING_COEFFICIENT'; + break; + case '%': + default: + // max 2 decimals + this._inputMaxDecimals = Math.min(2, Math.max(0, this.maxDecimals - 2)); + this._pattern = `(100|[0-9]{1,2}([.][0-9]{0,${this._inputMaxDecimals}})?)`; + this._defaultPlaceholder = 'TRIP.BATCH.EDIT.SAMPLING_RATIO_PCT'; + break; + } + } + _onFormChange(value) { + if (this._writing) + return; // Skip if call by self + this._writing = true; + if (this._inputFormControl.invalid) { + this.formControl.markAsPending(); + this.formControl.setErrors(Object.assign(Object.assign({}, this.formControl.errors), this._inputFormControl.errors)); + this._writing = false; + this._checkIfTouched(); + return; + } + let modelValue = null; + if (isNotNilOrNaN(value)) { + switch (this._format) { + case '1/w': + modelValue = roundHalfUp(1 / value, this.maxDecimals); + break; + case '%': + default: + modelValue = Math.min(1, roundHalfUp(value / 100, this.maxDecimals)); + break; + } + } + // DEBUG + //console.debug('[mat-sampling-ratio] modelValue=', modelValue); + // Set model value + this.emitChange(modelValue); + this._writing = false; + this.markForCheck(); + } + emitChange(value) { + if (this.formControl.value !== value) { + // DEBUG + //console.debug('[mat-sampling-ratio] Emit new value: ' + value); + // Changes come from inside function: use the callback + this._onChangeCallback(value); + // Check if need to update controls + this._checkIfTouched(); + } + } + _checkIfTouched() { + if (this.formControl.touched || this._inputFormControl.touched) { + this.markForCheck(); + this._onTouchedCallback(); + return true; + } + return false; + } + toFormValue(value) { + if (isNilOrNaN(value)) + return null; + switch (this._format) { + case '1/w': + return roundHalfUp(1 / value, this._inputMaxDecimals); + case '%': + default: + return Math.min(100, roundHalfUp(value * 100, this._inputMaxDecimals)); + } + } + markAsTouched(opts) { + this._inputFormControl.markAsTouched(opts); + this._onTouchedCallback(); + this.markForCheck(); + } + markAsDirty(opts) { + this.formControl.markAsDirty(opts); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", UntypedFormControl) +], MatSamplingRatioField.prototype, "formControl", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], MatSamplingRatioField.prototype, "formControlName", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], MatSamplingRatioField.prototype, "required", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], MatSamplingRatioField.prototype, "floatLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], MatSamplingRatioField.prototype, "appearance", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], MatSamplingRatioField.prototype, "tabindex", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], MatSamplingRatioField.prototype, "maxDecimals", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], MatSamplingRatioField.prototype, "autofocus", void 0); +__decorate([ + Input('class'), + __metadata("design:type", String) +], MatSamplingRatioField.prototype, "classList", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], MatSamplingRatioField.prototype, "readonly", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], MatSamplingRatioField.prototype, "placeholder", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], MatSamplingRatioField.prototype, "format", null); +MatSamplingRatioField = __decorate([ + Component({ + selector: 'mat-sampling-ratio-field', + templateUrl: './material.sampling-ratio.html', + styleUrls: ['./material.sampling-ratio.scss'], + providers: [ + DEFAULT_VALUE_ACCESSOR + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __param(2, Optional()), + __metadata("design:paramtypes", [UntypedFormBuilder, + ChangeDetectorRef, + FormGroupDirective]) +], MatSamplingRatioField); +export { MatSamplingRatioField }; +//# sourceMappingURL=material.sampling-ratio.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/material/sampling-ratio/material.sampling-ratio.js.map b/out-tsc/app/app/shared/material/sampling-ratio/material.sampling-ratio.js.map new file mode 100644 index 000000000..922d2b94b --- /dev/null +++ b/out-tsc/app/app/shared/material/sampling-ratio/material.sampling-ratio.js.map @@ -0,0 +1 @@ +{"version":3,"file":"material.sampling-ratio.js","sourceRoot":"","sources":["../../../../../../src/app/shared/material/sampling-ratio/material.sampling-ratio.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/material/sampling-ratio/material.sampling-ratio.module.js b/out-tsc/app/app/shared/material/sampling-ratio/material.sampling-ratio.module.js new file mode 100644 index 000000000..b294fd882 --- /dev/null +++ b/out-tsc/app/app/shared/material/sampling-ratio/material.sampling-ratio.module.js @@ -0,0 +1,21 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { SharedModule } from '@sumaris-net/ngx-components'; +import { MatSamplingRatioField } from '@app/shared/material/sampling-ratio/material.sampling-ratio'; +let MatSamplingRatioFieldModule = class MatSamplingRatioFieldModule { +}; +MatSamplingRatioFieldModule = __decorate([ + NgModule({ + imports: [ + SharedModule + ], + declarations: [ + MatSamplingRatioField + ], + exports: [ + MatSamplingRatioField + ] + }) +], MatSamplingRatioFieldModule); +export { MatSamplingRatioFieldModule }; +//# sourceMappingURL=material.sampling-ratio.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/material/sampling-ratio/material.sampling-ratio.module.js.map b/out-tsc/app/app/shared/material/sampling-ratio/material.sampling-ratio.module.js.map new file mode 100644 index 000000000..f477a82cb --- /dev/null +++ b/out-tsc/app/app/shared/material/sampling-ratio/material.sampling-ratio.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"material.sampling-ratio.module.js","sourceRoot":"","sources":["../../../../../../src/app/shared/material/sampling-ratio/material.sampling-ratio.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6DAA6D,CAAC;AAa7F,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;CAEvC,CAAA;AAFY,2BAA2B;IAXvC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;SACb;QACD,YAAY,EAAE;YACZ,qBAAqB;SACtB;QACD,OAAO,EAAE;YACP,qBAAqB;SACtB;KACF,CAAC;GACW,2BAA2B,CAEvC;SAFY,2BAA2B"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/material/sampling-ratio/testing/sampling-ratio.test.js b/out-tsc/app/app/shared/material/sampling-ratio/testing/sampling-ratio.test.js new file mode 100644 index 000000000..7cb0ec097 --- /dev/null +++ b/out-tsc/app/app/shared/material/sampling-ratio/testing/sampling-ratio.test.js @@ -0,0 +1,71 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +let AppSamplingRatioTestPage = class AppSamplingRatioTestPage { + constructor(formBuilder, cd) { + this.formBuilder = formBuilder; + this.cd = cd; + this.maxDecimals = 6; + this.format = '%'; + this.formats = ProgramProperties.TRIP_BATCH_SAMPLING_RATIO_FORMAT.values; + this.floatLabels = ['never', 'auto', 'always']; + this.reload = true; + this.form = formBuilder.group({ + empty: [null, Validators.required], + enable: [0.15], + disable: [0.15] + }); + this.form.get('disable').disable(); + // Copy enable value to disable form + this.form.get('enable').valueChanges + .subscribe(value => this.form.get('disable').setValue(value)); + } + ngOnInit() { + setTimeout(() => this.loadData(), 250); + } + setFormat(type) { + this.format = type; + this.refresh(); + } + setMaxDecimals(maxDecimals) { + this.maxDecimals = maxDecimals; + this.refresh(); + } + setFloatLabel(type) { + this.floatLabel = type; + this.refresh(); + } + refresh() { + this.reload = false; + setTimeout(() => { + this.reload = true; + this.cd.markForCheck(); + }, 100); + } + // Load the form with data + loadData() { + return __awaiter(this, void 0, void 0, function* () { + const data = { + empty: null, + enable: 0.15, + disable: 0.15, + }; + this.form.setValue(data); + }); + } + doSubmit(event) { + console.debug('Validate form: ', this.form.value); + } +}; +AppSamplingRatioTestPage = __decorate([ + Component({ + selector: 'app-sampling-ratio-test', + templateUrl: './sampling-ratio.test.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [UntypedFormBuilder, + ChangeDetectorRef]) +], AppSamplingRatioTestPage); +export { AppSamplingRatioTestPage }; +//# sourceMappingURL=sampling-ratio.test.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/material/sampling-ratio/testing/sampling-ratio.test.js.map b/out-tsc/app/app/shared/material/sampling-ratio/testing/sampling-ratio.test.js.map new file mode 100644 index 000000000..9357ae760 --- /dev/null +++ b/out-tsc/app/app/shared/material/sampling-ratio/testing/sampling-ratio.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sampling-ratio.test.js","sourceRoot":"","sources":["../../../../../../../src/app/shared/material/sampling-ratio/testing/sampling-ratio.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAS,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAC,kBAAkB,EAAoB,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAC,iBAAiB,EAAC,MAAM,iDAAiD,CAAC;AAW3E,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAUnC,YACY,WAA+B,EAC/B,EAAqB;QADrB,gBAAW,GAAX,WAAW,CAAoB;QAC/B,OAAE,GAAF,EAAE,CAAmB;QATjC,gBAAW,GAAG,CAAC,CAAC;QAChB,WAAM,GAAwB,GAAG,CAAC;QAClC,YAAO,GAAG,iBAAiB,CAAC,gCAAgC,CAAC,MAAoB,CAAC;QAElF,gBAAW,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAwC1C,WAAM,GAAG,IAAI,CAAC;QAjCZ,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;YAC5B,KAAK,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;YAClC,MAAM,EAAE,CAAC,IAAI,CAAC;YACd,OAAO,EAAE,CAAC,IAAI,CAAC;SAChB,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QAEnC,oCAAoC;QACpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,YAAY;aACjC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,QAAQ;QAEN,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,SAAS,CAAC,IAAyB;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,cAAc,CAAC,WAAmB;QAChC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,aAAa,CAAC,IAAoB;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAID,OAAO;QACL,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;QACzB,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;IAED,0BAA0B;IACpB,QAAQ;;YACZ,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,IAAI;aACd,CAAC;YAEF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;KAAA;IAED,QAAQ,CAAC,KAAK;QACZ,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;CAIF,CAAA;AA1EY,wBAAwB;IALpC,SAAS,CAAC;QACT,QAAQ,EAAE,yBAAyB;QACnC,WAAW,EAAE,4BAA4B;QACzC,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAYyB,kBAAkB;QAC3B,iBAAiB;GAZtB,wBAAwB,CA0EpC;SA1EY,wBAAwB"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/material/skeleton/form-fields-skeleton.js b/out-tsc/app/app/shared/material/skeleton/form-fields-skeleton.js new file mode 100644 index 000000000..0908a8857 --- /dev/null +++ b/out-tsc/app/app/shared/material/skeleton/form-fields-skeleton.js @@ -0,0 +1,17 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +let MatFormFieldsSkeleton = class MatFormFieldsSkeleton { +}; +__decorate([ + Input(), + __metadata("design:type", String) +], MatFormFieldsSkeleton.prototype, "count", void 0); +MatFormFieldsSkeleton = __decorate([ + Component({ + selector: 'mat-form-fields-skeleton', + templateUrl: 'form-fields-skeleton.html', + changeDetection: ChangeDetectionStrategy.OnPush + }) +], MatFormFieldsSkeleton); +export { MatFormFieldsSkeleton }; +//# sourceMappingURL=form-fields-skeleton.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/material/skeleton/form-fields-skeleton.js.map b/out-tsc/app/app/shared/material/skeleton/form-fields-skeleton.js.map new file mode 100644 index 000000000..03c911157 --- /dev/null +++ b/out-tsc/app/app/shared/material/skeleton/form-fields-skeleton.js.map @@ -0,0 +1 @@ +{"version":3,"file":"form-fields-skeleton.js","sourceRoot":"","sources":["../../../../../../src/app/shared/material/skeleton/form-fields-skeleton.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAQnE,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;CAEjC,CAAA;AADC;IAAC,KAAK,EAAE;;oDAAe;AADZ,qBAAqB;IALjC,SAAS,CAAC;QACT,QAAQ,EAAE,0BAA0B;QACpC,WAAW,EAAE,2BAA2B;QACxC,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;GACW,qBAAqB,CAEjC;SAFY,qBAAqB"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/material/skeleton/form-fields-skeleton.module.js b/out-tsc/app/app/shared/material/skeleton/form-fields-skeleton.module.js new file mode 100644 index 000000000..652406847 --- /dev/null +++ b/out-tsc/app/app/shared/material/skeleton/form-fields-skeleton.module.js @@ -0,0 +1,25 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { MatFormFieldsSkeleton } from '@app/shared/material/skeleton/form-fields-skeleton'; +import { IonicModule } from '@ionic/angular'; +import { MatFormFieldModule } from '@angular/material/form-field'; +let MatFormFieldsSkeletonModule = class MatFormFieldsSkeletonModule { +}; +MatFormFieldsSkeletonModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + IonicModule, + MatFormFieldModule + ], + declarations: [ + MatFormFieldsSkeleton + ], + exports: [ + MatFormFieldsSkeleton + ] + }) +], MatFormFieldsSkeletonModule); +export { MatFormFieldsSkeletonModule }; +//# sourceMappingURL=form-fields-skeleton.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/material/skeleton/form-fields-skeleton.module.js.map b/out-tsc/app/app/shared/material/skeleton/form-fields-skeleton.module.js.map new file mode 100644 index 000000000..b6c36ea69 --- /dev/null +++ b/out-tsc/app/app/shared/material/skeleton/form-fields-skeleton.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"form-fields-skeleton.module.js","sourceRoot":"","sources":["../../../../../../src/app/shared/material/skeleton/form-fields-skeleton.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAe3D,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;CAEvC,CAAA;AAFY,2BAA2B;IAbvC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,WAAW;YACX,kBAAkB;SACnB;QACD,YAAY,EAAE;YACZ,qBAAqB;SACtB;QACD,OAAO,EAAE;YACP,qBAAqB;SACtB;KACF,CAAC;GACW,2BAA2B,CAEvC;SAFY,2BAA2B"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/math.utils.js b/out-tsc/app/app/shared/math.utils.js new file mode 100644 index 000000000..6f34db71f --- /dev/null +++ b/out-tsc/app/app/shared/math.utils.js @@ -0,0 +1,71 @@ +import { isNotNilOrNaN } from '@sumaris-net/ngx-components'; +import { Decimal } from 'decimal.js'; +export class MathUtils { + /** + * Calcul la moyenne d'un tableau de nombres + */ + static average(numbers) { + const sum = numbers.reduce((a, b) => a + b, 0); + return sum / numbers.length; + } + /** + * Calcul l'écart type d'un tableau de nombres + */ + static standardDerivation(numbers, average) { + const avg = isNotNilOrNaN(average) ? average : this.average(numbers); + const diffPow2 = numbers.map((x) => Math.pow((x - avg), 2)); + const variance = this.average(diffPow2); + return Math.sqrt(variance); + } + /** + * Calcul l'écart type en pourcentage d'un tableau de nombres + */ + static standardDerivationPercentage(numbers, average) { + const avg = isNotNilOrNaN(average) ? average : this.average(numbers); + const stdDev = this.standardDerivation(numbers, average); + const percentage = (stdDev / avg) * 100; + return percentage; + } + /** + * Calcul les bornes + * 95% des éléments de la série statistique sont compris entre (x − 2σ) et (x + 2σ); + * + * @param numbers + * @param average + * @param standardDerivation + */ + static confidenceInterval95(numbers, average, standardDerivation) { + const avg = isNotNilOrNaN(average) ? average : this.average(numbers); + const stdDev = isNotNilOrNaN(standardDerivation) ? standardDerivation : this.standardDerivation(numbers, avg); + const n = numbers.length; + const stdError = stdDev / Math.sqrt(n); + // TODO enable mathjs + // const t = math.invStudentt(0.975, n - 1); + // Utilisation d'une approximation pour les degrés de liberté supérieurs à 30 + const t = 1.96; + const marginOfError = t * stdError; + const lowerBound = avg - marginOfError; + const upperBound = avg + marginOfError; + return { lowerBound, upperBound }; + } + /** + * Calcul la moyenne, l'écart type, l'écart type en pourcentage et l'interval de confiance à 95% + */ + static averageWithDetails(numbers) { + const n = numbers.length; + const avg = this.average(numbers); + const stdDev = this.standardDerivation(numbers, avg); + const stdDevPct = (stdDev / avg) * 100; + const stdError = stdDev / Math.sqrt(n); + const confidenceInterval95 = this.confidenceInterval95(numbers, avg, stdDev); + return { avg, stdDev, stdDevPct, stdError, confidenceInterval95 }; + } + /** + * Allow to multiply to number, without floating point error (.e.g 1.00055 * 1000 = 1000.55) + */ + static multiply(a, b) { + const result = new Decimal(a).times(new Decimal(b)); + return result.toNumber(); + } +} +//# sourceMappingURL=math.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/math.utils.js.map b/out-tsc/app/app/shared/math.utils.js.map new file mode 100644 index 000000000..d585a3707 --- /dev/null +++ b/out-tsc/app/app/shared/math.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"math.utils.js","sourceRoot":"","sources":["../../../../src/app/shared/math.utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/pipes/arrays.pipe.js b/out-tsc/app/app/shared/pipes/arrays.pipe.js new file mode 100644 index 000000000..59b72b829 --- /dev/null +++ b/out-tsc/app/app/shared/pipes/arrays.pipe.js @@ -0,0 +1,34 @@ +import { __decorate } from "tslib"; +import { Pipe } from '@angular/core'; +let SplitArrayInChunksPipe = class SplitArrayInChunksPipe { + transform(value, chunkSize) { + if (!(value === null || value === void 0 ? void 0 : value.length)) + return []; + if (chunkSize === -1) + return [value]; // Only one page + if (!chunkSize || isNaN(chunkSize) || chunkSize < 1) { + throw '[splitArrayInChunks] Number of row must be a positive number !'; + } + if (value.length <= chunkSize) { + return [value]; + } + let length = Math.round(value.length / chunkSize + 0.5); + if (value.length === (length - 1) * chunkSize) { + length = length - 1; + } + const result = new Array(length); + for (let i = 0; i < length; i++) { + const start = i * chunkSize; + const end = Math.min(value.length, start + chunkSize); + result[i] = value.slice(start, end); + } + return result; + } +}; +SplitArrayInChunksPipe = __decorate([ + Pipe({ + name: 'splitArrayInChunks', + }) +], SplitArrayInChunksPipe); +export { SplitArrayInChunksPipe }; +//# sourceMappingURL=arrays.pipe.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/pipes/arrays.pipe.js.map b/out-tsc/app/app/shared/pipes/arrays.pipe.js.map new file mode 100644 index 000000000..21025375d --- /dev/null +++ b/out-tsc/app/app/shared/pipes/arrays.pipe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"arrays.pipe.js","sourceRoot":"","sources":["../../../../../src/app/shared/pipes/arrays.pipe.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAiB,MAAM,eAAe,CAAC;AAK7C,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACjC,SAAS,CAAI,KAAU,EAAE,SAAiB;QACxC,IAAI,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAA;YAAE,OAAO,EAAE,CAAC;QAC9B,IAAI,SAAS,KAAK,CAAC,CAAC;YAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB;QACtD,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE;YACnD,MAAM,gEAAgE,CAAC;SACxE;QACD,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE;YAC7B,OAAO,CAAC,KAAK,CAAC,CAAC;SAChB;QACD,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC;QACxD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE;YAC7C,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;SACrB;QACD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;YAC/B,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG,SAAS,CAAC,CAAC;YACtD,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SACrC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAA;AAtBY,sBAAsB;IAHlC,IAAI,CAAC;QACJ,IAAI,EAAE,oBAAoB;KAC3B,CAAC;GACW,sBAAsB,CAsBlC;SAtBY,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/pipes/delay.pipe.js b/out-tsc/app/app/shared/pipes/delay.pipe.js new file mode 100644 index 000000000..8877a6a4b --- /dev/null +++ b/out-tsc/app/app/shared/pipes/delay.pipe.js @@ -0,0 +1,21 @@ +import { __decorate } from "tslib"; +import { Injectable, Pipe } from '@angular/core'; +import { isObservable, of } from 'rxjs'; +import { delay } from 'rxjs/operators'; +import { isNil } from '@sumaris-net/ngx-components'; +let DelayPipe = class DelayPipe { + transform(value, delayMs) { + const obs = isObservable(value) ? value : of(value); + if (isNil(delayMs) || delayMs <= 0) + return obs; + return obs.pipe(delay(delayMs)); + } +}; +DelayPipe = __decorate([ + Pipe({ + name: 'delay' + }), + Injectable({ providedIn: 'root' }) +], DelayPipe); +export { DelayPipe }; +//# sourceMappingURL=delay.pipe.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/pipes/delay.pipe.js.map b/out-tsc/app/app/shared/pipes/delay.pipe.js.map new file mode 100644 index 000000000..75771464f --- /dev/null +++ b/out-tsc/app/app/shared/pipes/delay.pipe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"delay.pipe.js","sourceRoot":"","sources":["../../../../../src/app/shared/pipes/delay.pipe.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAiB,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,YAAY,EAAc,EAAE,EAAE,MAAM,MAAM,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAM7C,IAAM,SAAS,GAAf,MAAM,SAAS;IAEpB,SAAS,CAAC,KAA0B,EAAE,OAAe;QACnD,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC;YAAE,OAAO,GAAG,CAAC;QAC/C,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAClC,CAAC;CACF,CAAA;AAPY,SAAS;IAJrB,IAAI,CAAC;QACJ,IAAI,EAAE,OAAO;KACd,CAAC;IACD,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;GACpB,SAAS,CAOrB;SAPY,SAAS"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/pipes/display-with.pipe.js b/out-tsc/app/app/shared/pipes/display-with.pipe.js new file mode 100644 index 000000000..e8821b269 --- /dev/null +++ b/out-tsc/app/app/shared/pipes/display-with.pipe.js @@ -0,0 +1,18 @@ +import { __decorate } from "tslib"; +import { Injectable, Pipe } from '@angular/core'; +import { isNil } from '@sumaris-net/ngx-components'; +let DisplayWithPipe = class DisplayWithPipe { + transform(value, displayFn) { + if (isNil(value) || !displayFn) + return ''; + return displayFn(value); + } +}; +DisplayWithPipe = __decorate([ + Pipe({ + name: 'displayWith' + }), + Injectable({ providedIn: 'root' }) +], DisplayWithPipe); +export { DisplayWithPipe }; +//# sourceMappingURL=display-with.pipe.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/pipes/display-with.pipe.js.map b/out-tsc/app/app/shared/pipes/display-with.pipe.js.map new file mode 100644 index 000000000..6d940f12b --- /dev/null +++ b/out-tsc/app/app/shared/pipes/display-with.pipe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"display-with.pipe.js","sourceRoot":"","sources":["../../../../../src/app/shared/pipes/display-with.pipe.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAiB,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,KAAK,EAA0E,MAAM,6BAA6B,CAAC;AAMrH,IAAM,eAAe,GAArB,MAAM,eAAe;IAE1B,SAAS,CAAC,KAAU,EAAE,SAA0B;QAC9C,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;CACF,CAAA;AANY,eAAe;IAJ3B,IAAI,CAAC;QACJ,IAAI,EAAE,aAAa;KACpB,CAAC;IACD,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;GACpB,eAAe,CAM3B;SANY,eAAe"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/pipes/html.pipes.js b/out-tsc/app/app/shared/pipes/html.pipes.js new file mode 100644 index 000000000..f60a74bf2 --- /dev/null +++ b/out-tsc/app/app/shared/pipes/html.pipes.js @@ -0,0 +1,18 @@ +import { __decorate } from "tslib"; +import { Pipe } from '@angular/core'; +import { noHtml } from '@app/shared/functions'; +let NoHtmlPipe = class NoHtmlPipe { + transform(value) { + return noHtml(value); + } +}; +NoHtmlPipe = __decorate([ + Pipe({ + name: 'noHtml', + }) + /** + * Remove all HTML tags, from an input string + */ +], NoHtmlPipe); +export { NoHtmlPipe }; +//# sourceMappingURL=html.pipes.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/pipes/html.pipes.js.map b/out-tsc/app/app/shared/pipes/html.pipes.js.map new file mode 100644 index 000000000..54e7edf6b --- /dev/null +++ b/out-tsc/app/app/shared/pipes/html.pipes.js.map @@ -0,0 +1 @@ +{"version":3,"file":"html.pipes.js","sourceRoot":"","sources":["../../../../../src/app/shared/pipes/html.pipes.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAiB,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAQxC,IAAM,UAAU,GAAhB,MAAM,UAAU;IACrB,SAAS,CAAC,KAAa;QACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;CACF,CAAA;AAJY,UAAU;IANtB,IAAI,CAAC;QACJ,IAAI,EAAE,QAAQ;KACf,CAAC;IACF;;OAEG;GACU,UAAU,CAItB;SAJY,UAAU"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/pipes/pagination.pipe.js b/out-tsc/app/app/shared/pipes/pagination.pipe.js new file mode 100644 index 000000000..0244dc5d7 --- /dev/null +++ b/out-tsc/app/app/shared/pipes/pagination.pipe.js @@ -0,0 +1,21 @@ +import { __decorate } from "tslib"; +import { Pipe } from '@angular/core'; +let PaginationToStringPipe = class PaginationToStringPipe { + transform(pageIndex, pageCount, parenthesis) { + if (pageCount === 1) + return ''; + const prefix = parenthesis && '(' || ''; + const suffix = parenthesis && ')' || ''; + if (pageCount && pageCount > 1) { + return `${prefix}${pageIndex + 1}/${pageCount}${suffix}`; + } + return `${prefix}${pageIndex + 1}${suffix}`; + } +}; +PaginationToStringPipe = __decorate([ + Pipe({ + name: 'paginationToString' + }) +], PaginationToStringPipe); +export { PaginationToStringPipe }; +//# sourceMappingURL=pagination.pipe.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/pipes/pagination.pipe.js.map b/out-tsc/app/app/shared/pipes/pagination.pipe.js.map new file mode 100644 index 000000000..58445f5eb --- /dev/null +++ b/out-tsc/app/app/shared/pipes/pagination.pipe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pagination.pipe.js","sourceRoot":"","sources":["../../../../../src/app/shared/pipes/pagination.pipe.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAiB,MAAM,eAAe,CAAC;AAK7C,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAEjC,SAAS,CAAC,SAAiB,EAAE,SAAkB,EAAE,WAAqB;QACpE,IAAI,SAAS,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,WAAW,IAAI,GAAG,IAAI,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,WAAW,IAAI,GAAG,IAAI,EAAE,CAAC;QACxC,IAAI,SAAS,IAAI,SAAS,GAAG,CAAC,EAAE;YAC9B,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC;SAC1D;QACD,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC;IAC9C,CAAC;CAEF,CAAA;AAZY,sBAAsB;IAHlC,IAAI,CAAC;QACJ,IAAI,EAAE,oBAAoB;KAC3B,CAAC;GACW,sBAAsB,CAYlC;SAZY,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/popover/popover.utils.js b/out-tsc/app/app/shared/popover/popover.utils.js new file mode 100644 index 000000000..f3e1a3613 --- /dev/null +++ b/out-tsc/app/app/shared/popover/popover.utils.js @@ -0,0 +1,12 @@ +import { __awaiter } from "tslib"; +import { TextPopover } from '@sumaris-net/ngx-components'; +export class Popovers { + static showText(popoverController, event, opts, popoverOpts) { + return __awaiter(this, void 0, void 0, function* () { + const popover = yield popoverController.create(Object.assign({ component: TextPopover, componentProps: opts, backdropDismiss: false, keyboardClose: false, event, translucent: true, cssClass: 'popover-large' }, popoverOpts)); + yield popover.present(); + return popover.onDidDismiss(); + }); + } +} +//# sourceMappingURL=popover.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/popover/popover.utils.js.map b/out-tsc/app/app/shared/popover/popover.utils.js.map new file mode 100644 index 000000000..49f3cc42b --- /dev/null +++ b/out-tsc/app/app/shared/popover/popover.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"popover.utils.js","sourceRoot":"","sources":["../../../../../src/app/shared/popover/popover.utils.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAsB,MAAM,6BAA6B,CAAC;AAI9E,MAAM,OAAO,QAAQ;IAEnB,MAAM,CAAO,QAAQ,CAAC,iBAAoC,EACpC,KAAY,EACZ,IAAwB,EACxB,WAA4B;;YAChD,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,MAAM,iBAC5C,SAAS,EAAE,WAAW,EACtB,cAAc,EAAE,IAAI,EACpB,eAAe,EAAE,KAAK,EACtB,aAAa,EAAE,KAAK,EACpB,KAAK,EACL,WAAW,EAAE,IAAI,EACjB,QAAQ,EAAE,eAAe,IACtB,WAAW,EACd,CAAC;YAEH,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC;QAChC,CAAC;KAAA;CACF"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/progression/progress-bar.component.js b/out-tsc/app/app/shared/progression/progress-bar.component.js new file mode 100644 index 000000000..340afa912 --- /dev/null +++ b/out-tsc/app/app/shared/progression/progress-bar.component.js @@ -0,0 +1,40 @@ +import { __decorate, __metadata } from "tslib"; +import { ProgressionModel } from '@app/shared/progression/progression.model'; +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; +import { toBoolean } from '@sumaris-net/ngx-components'; +let AppProgressBarComponent = class AppProgressBarComponent { + constructor() { + this.cancel = new EventEmitter(); + } + ngOnInit() { + this.progression = this.progression || new ProgressionModel(); + this.cancellable = toBoolean(this.cancellable, this.cancel.observers.length > 0); + } + cancelClick(event) { + this.progression.cancel(); + this.cancel.emit(event); + } +}; +__decorate([ + Input(), + __metadata("design:type", ProgressionModel) +], AppProgressBarComponent.prototype, "progression", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], AppProgressBarComponent.prototype, "cancellable", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], AppProgressBarComponent.prototype, "cancel", void 0); +AppProgressBarComponent = __decorate([ + Component({ + selector: 'app-progress-bar', + templateUrl: './progress-bar.component.html', + styleUrls: ['./progress-bar.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", []) +], AppProgressBarComponent); +export { AppProgressBarComponent }; +//# sourceMappingURL=progress-bar.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/progression/progress-bar.component.js.map b/out-tsc/app/app/shared/progression/progress-bar.component.js.map new file mode 100644 index 000000000..05f5dc9d8 --- /dev/null +++ b/out-tsc/app/app/shared/progression/progress-bar.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"progress-bar.component.js","sourceRoot":"","sources":["../../../../../src/app/shared/progression/progress-bar.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAU,MAAM,EAAE,MAAM,eAAe,CAAC;AACxG,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAQjD,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAKlC;QAFU,WAAM,GAAG,IAAI,YAAY,EAAS,CAAC;IAE9B,CAAC;IAEhB,QAAQ;QACN,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,gBAAgB,EAAE,CAAC;QAC9D,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnF,CAAC;IAES,WAAW,CAAC,KAAY;QAChC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;CACF,CAAA;AAfC;IAAC,KAAK,EAAE;8BAAc,gBAAgB;4DAAC;AACvC;IAAC,KAAK,EAAE;;4DAAsB;AAC9B;IAAC,MAAM,EAAE;;uDAAoC;AAHlC,uBAAuB;IANnC,SAAS,CAAC;QACT,QAAQ,EAAE,kBAAkB;QAC5B,WAAW,EAAE,+BAA+B;QAC5C,SAAS,EAAE,CAAC,+BAA+B,CAAC;QAC5C,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;;GACW,uBAAuB,CAgBnC;SAhBY,uBAAuB"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/progression/progression.model.js b/out-tsc/app/app/shared/progression/progression.model.js new file mode 100644 index 000000000..794f04717 --- /dev/null +++ b/out-tsc/app/app/shared/progression/progression.model.js @@ -0,0 +1,56 @@ +import { RxState } from '@rx-angular/state'; +import { isNotNil } from '@sumaris-net/ngx-components'; +export class ProgressionModel extends RxState { + constructor(initState) { + super(); + this.initState = initState; + this.message$ = this.select('message'); + this.total$ = this.select('total'); + this.current$ = this.select('current'); + this.cancelled$ = this.select('cancelled'); + this.set(Object.assign({ message: '', total: 0, current: 0, cancelled: false }, initState)); + } + increment(value, message) { + this.set('current', s => { + const next = (s.current || 0) + Math.abs(value || 1); + return Math.min(s.total, next); + }); + if (isNotNil(message)) { + this.set('message', _ => message); + } + } + get total() { + return this.get('total'); + } + set total(value) { + this.set('total', _ => value); + } + get message() { + return this.get('message'); + } + set message(value) { + this.set('message', _ => value); + } + get current() { + return this.get('current'); + } + set current(value) { + this.set('current', _ => value); + } + get cancelled() { + return this.get('cancelled'); + } + set cancelled(value) { + this.set('cancelled', _ => value); + } + reset() { + this.set(Object.assign({ current: 0, message: '', total: 0, cancelled: false }, this.initState)); + } + cancel() { + this.set('cancelled', s_ => true); + } + next(current) { + this.current = current; + } +} +//# sourceMappingURL=progression.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/progression/progression.model.js.map b/out-tsc/app/app/shared/progression/progression.model.js.map new file mode 100644 index 000000000..cba3c4e5c --- /dev/null +++ b/out-tsc/app/app/shared/progression/progression.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"progression.model.js","sourceRoot":"","sources":["../../../../../src/app/shared/progression/progression.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AASvD,MAAM,OAAO,gBAAiB,SAAQ,OAA0B;IAO9D,YAAoB,SAAsC;QACxD,KAAK,EAAE,CAAC;QADU,cAAS,GAAT,SAAS,CAA6B;QALjD,aAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClC,WAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,aAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClC,eAAU,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAI7C,IAAI,CAAC,GAAG,iBACN,OAAO,EAAE,EAAE,EACX,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,EACV,SAAS,EAAE,KAAK,IACb,SAAS,EACZ,CAAC;IACL,CAAC;IAED,SAAS,CAAC,KAAc,EAAE,OAAgB;QACxC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE;YACtB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;YACrB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;SACnC;IACH,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,KAAK,CAAC,KAAa;QACrB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,OAAO,CAAC,KAAa;QACvB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,OAAO,CAAC,KAAa;QACvB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,SAAS,CAAC,KAAc;QAC1B,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,iBAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,IAAK,IAAI,CAAC,SAAS,EAAE,CAAC;IACrF,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/progression/progression.module.js b/out-tsc/app/app/shared/progression/progression.module.js new file mode 100644 index 000000000..8f407a44b --- /dev/null +++ b/out-tsc/app/app/shared/progression/progression.module.js @@ -0,0 +1,26 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { SharedModule } from '@sumaris-net/ngx-components'; +import { AppProgressBarComponent } from '@app/shared/progression/progress-bar.component'; +import { IfModule } from '@rx-angular/template/if'; +import { ForModule } from '@rx-angular/template/for'; +import { LetModule } from '@rx-angular/template/let'; +import { PushModule } from '@rx-angular/template/push'; +let AppSharedProgressionModule = class AppSharedProgressionModule { +}; +AppSharedProgressionModule = __decorate([ + NgModule({ + imports: [ + SharedModule, + IfModule, ForModule, LetModule, PushModule + ], + declarations: [ + AppProgressBarComponent + ], + exports: [ + AppProgressBarComponent + ] + }) +], AppSharedProgressionModule); +export { AppSharedProgressionModule }; +//# sourceMappingURL=progression.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/progression/progression.module.js.map b/out-tsc/app/app/shared/progression/progression.module.js.map new file mode 100644 index 000000000..98df545f9 --- /dev/null +++ b/out-tsc/app/app/shared/progression/progression.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"progression.module.js","sourceRoot":"","sources":["../../../../../src/app/shared/progression/progression.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAchD,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;CAEtC,CAAA;AAFY,0BAA0B;IAZtC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU;SAC3C;QACD,YAAY,EAAE;YACZ,uBAAuB;SACxB;QACD,OAAO,EAAE;YACP,uBAAuB;SACxB;KACF,CAAC;GACW,0BAA0B,CAEtC;SAFY,0BAA0B"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/report/report.module.js b/out-tsc/app/app/shared/report/report.module.js new file mode 100644 index 000000000..64044a9a4 --- /dev/null +++ b/out-tsc/app/app/shared/report/report.module.js @@ -0,0 +1,24 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { SharedModule } from '@sumaris-net/ngx-components'; +import { NgChartsModule } from 'ng2-charts'; +import { RevealModule } from '@app/shared/report/reveal/reveal.module'; +let AppSharedReportModule = class AppSharedReportModule { +}; +AppSharedReportModule = __decorate([ + NgModule({ + imports: [ + SharedModule, + NgChartsModule, + // Sub modules + RevealModule + ], + exports: [ + NgChartsModule, + // Sub modules + RevealModule, + ] + }) +], AppSharedReportModule); +export { AppSharedReportModule }; +//# sourceMappingURL=report.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/report/report.module.js.map b/out-tsc/app/app/shared/report/report.module.js.map new file mode 100644 index 000000000..dd2d62613 --- /dev/null +++ b/out-tsc/app/app/shared/report/report.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"report.module.js","sourceRoot":"","sources":["../../../../../src/app/shared/report/report.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAiBhE,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;CAEjC,CAAA;AAFY,qBAAqB;IAfjC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,cAAc;YAEd,cAAc;YACd,YAAY;SACb;QACD,OAAO,EAAE;YACP,cAAc;YAEd,cAAc;YACd,YAAY;SACb;KACF,CAAC;GACW,qBAAqB,CAEjC;SAFY,qBAAqB"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/report/reveal/reveal-section.directive.js b/out-tsc/app/app/shared/report/reveal/reveal-section.directive.js new file mode 100644 index 000000000..81daa3301 --- /dev/null +++ b/out-tsc/app/app/shared/report/reveal/reveal-section.directive.js @@ -0,0 +1,51 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { Directive, ElementRef, EventEmitter, Optional, Output } from '@angular/core'; +import { RevealComponent } from '@app/shared/report/reveal/reveal.component'; +import { filter, first, takeUntil } from 'rxjs/operators'; +import { Subject } from 'rxjs'; +let RevealSectionDirective = class RevealSectionDirective { + constructor(_elementRef, _reveal) { + this._elementRef = _elementRef; + this._reveal = _reveal; + this.logPrefix = 'reveal-section-directive'; + this._destroySubject = new Subject(); + this.entered = new EventEmitter(); + } + ngOnInit() { + // DEBUG + // console.debug(`[${this.logPrefix} ngOnInit]`, arguments); + if (this._reveal) { + this.startWorkflow(this._reveal); + } + } + ngOnDestroy() { + this._destroySubject.next(); + } + startWorkflow(reveal) { + return __awaiter(this, void 0, void 0, function* () { + yield reveal.waitIdle({ stop: this._destroySubject, stopError: false }); + // First, check classList, in case current section is the first visible + if (this._elementRef.nativeElement.classList.contains('present' /*reveal current section style*/)) { + this.entered.emit({ currentSlide: this._elementRef.nativeElement }); + } + else { + reveal.slideChanged + .pipe(filter((event) => event.currentSlide === this._elementRef.nativeElement), first(), takeUntil(this._destroySubject)) + .subscribe((event) => this.entered.emit(event)); + } + }); + } +}; +__decorate([ + Output(), + __metadata("design:type", Object) +], RevealSectionDirective.prototype, "entered", void 0); +RevealSectionDirective = __decorate([ + Directive({ + selector: 'section', + }), + __param(1, Optional()), + __metadata("design:paramtypes", [ElementRef, RevealComponent]) +], RevealSectionDirective); +export { RevealSectionDirective }; +//# sourceMappingURL=reveal-section.directive.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/report/reveal/reveal-section.directive.js.map b/out-tsc/app/app/shared/report/reveal/reveal-section.directive.js.map new file mode 100644 index 000000000..a921dd023 --- /dev/null +++ b/out-tsc/app/app/shared/report/reveal/reveal-section.directive.js.map @@ -0,0 +1 @@ +{"version":3,"file":"reveal-section.directive.js","sourceRoot":"","sources":["../../../../../../src/app/shared/report/reveal/reveal-section.directive.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAqB,QAAQ,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACzG,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAKxB,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAMjC,YAA6B,WAAuB,EAA+B,OAAwB;QAA9E,gBAAW,GAAX,WAAW,CAAY;QAA+B,YAAO,GAAP,OAAO,CAAiB;QALnG,cAAS,GAAG,0BAA0B,CAAC;QACvC,oBAAe,GAAG,IAAI,OAAO,EAAQ,CAAC;QAEpC,YAAO,GAAG,IAAI,YAAY,EAAiC,CAAC;IAEwC,CAAC;IAE/G,QAAQ;QACN,QAAQ;QACR,4DAA4D;QAE5D,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAClC;IACH,CAAC;IAED,WAAW;QACT,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAEa,aAAa,CAAC,MAAuB;;YACjD,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAExE,uEAAuE;YACvE,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,gCAAgC,CAAC,EAAE;gBACjG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC;aACrE;iBAAM;gBACL,MAAM,CAAC,YAAY;qBAChB,IAAI,CACH,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,EACxE,KAAK,EAAE,EACP,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAChC;qBACA,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aACnD;QACH,CAAC;KAAA;CACF,CAAA;AAjCC;IAAC,MAAM,EAAE;;uDAA6D;AAJ3D,sBAAsB;IAHlC,SAAS,CAAC;QACT,QAAQ,EAAE,SAAS;KACpB,CAAC;IAOuD,WAAA,QAAQ,EAAE,CAAA;qCAAvB,UAAU,EAAwC,eAAe;GANhG,sBAAsB,CAqClC;SArCY,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/report/reveal/reveal.component.js b/out-tsc/app/app/shared/report/reveal/reveal.component.js new file mode 100644 index 000000000..90f7525b6 --- /dev/null +++ b/out-tsc/app/app/shared/report/reveal/reveal.component.js @@ -0,0 +1,354 @@ +var RevealComponent_1; +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ApplicationRef, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, Directive, ElementRef, EventEmitter, HostListener, Inject, InjectionToken, Input, Optional, Output, QueryList, SkipSelf, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation, ViewRef, } from '@angular/core'; +import { sleep, Toasts, waitForFalse } from '@sumaris-net/ngx-components'; +import { Reveal, RevealMarkdown } from './reveal.utils'; +import { BehaviorSubject, lastValueFrom, Subscription } from 'rxjs'; +import { DOCUMENT } from '@angular/common'; +import { ToastController } from '@ionic/angular'; +import { TranslateService } from '@ngx-translate/core'; +export const REVEAL_COMPONENT = new InjectionToken('REVEAL_COMPONENT'); +let RevealSectionOutlet = class RevealSectionOutlet { + constructor(viewContainer, elementRef) { + this.viewContainer = viewContainer; + this.elementRef = elementRef; + } +}; +RevealSectionOutlet = __decorate([ + Directive({ selector: '[sectionOutlet]' }), + __metadata("design:paramtypes", [ViewContainerRef, ElementRef]) +], RevealSectionOutlet); +export { RevealSectionOutlet }; +let RevealSectionDef = class RevealSectionDef { + constructor(template) { + this.template = template; + } +}; +RevealSectionDef = __decorate([ + Directive({ + selector: '[sectionDef]' + }), + __metadata("design:paramtypes", [TemplateRef]) +], RevealSectionDef); +export { RevealSectionDef }; +let RevealComponent = RevealComponent_1 = class RevealComponent { + constructor(appRef, viewRef, _document, toastController, cd, translate, parent) { + this.appRef = appRef; + this.viewRef = viewRef; + this._document = _document; + this.toastController = toastController; + this.cd = cd; + this.translate = translate; + this._embedded = false; + this.loadingSubject = new BehaviorSubject(true); + this._subscription = new Subscription(); + this._printing = false; + this._registeredSections = []; + this.autoPrint = true; + this.ready = new EventEmitter(); + this.slideChanged = new EventEmitter(); + this._parent = parent !== this ? parent : undefined; + this._embedded = !!this._parent; + if (this.isPrintingPDF()) { + this.configurePrintPdfCss(); + } + } + get loading() { + return this.loadingSubject.value; + } + get loaded() { + return !this.loadingSubject.value; + } + get embedded() { + return this._embedded; + } + set embedded(value) { + this._embedded = value; + } + get printing() { + return this._printing; + } + onResize(event) { + var _a; + (_a = this._reveal) === null || _a === void 0 ? void 0 : _a.layout(); + } + onbeforeprint(event) { + console.debug('[reveal] Received before print event'); + if (!this.isPrintingPDF()) { + //event?.preventDefault(); + this.print(); + } + } + onafterprint(event) { + if (this.isPrintingPDF()) { + window.close(); + } + } + ngAfterViewInit() { + // Root component + if (!this._embedded) { + if (this.options && this.options.autoInitialize !== false) { + setTimeout(() => this.initialize(), 100); + } + if (this.isPrintingPDF() && this.options.autoPrint !== false) { + this.waitIdle() + .then(() => this.print()); + } + } + // Embedded component + else { + this._sectionDefs.forEach(section => { + this._parent.registerSection(section); + }); + } + console.log('[reveal] ngAfterViewInit finished'); + } + ngOnDestroy() { + this._subscription.unsubscribe(); + } + registerSection(section) { + if (!this._embedded) { + const exists = this._sectionDefs.some(s => s === section) + || this._registeredSections.includes(section); + if (exists) + return; // Skip if already registered (e.g. see testing embedded page) + console.debug(`[reveal] registerSection`, section); + this._registeredSections.push(section); + } + else { + this._parent.registerSection(section); + } + } + moveToBody() { + console.debug(`[reveal] Moving
into ...`); + this.viewRef.detach(); + this.appRef.attachView(this.viewRef); + const domElement = this.viewRef + .rootNodes[0]; + this._document.body.appendChild(domElement); + } + initialize() { + return __awaiter(this, void 0, void 0, function* () { + const now = Date.now(); + console.debug(`[reveal] Initialize Reveal.js ... {printing: ${this._printing}}`); + yield this.renderSections(); + // wait markdown rendered + yield Promise.all(this.markdownList + .map(md => lastValueFrom(md.ready))); + // Move content to body + if (this.isPrintingPDF()) { + this.moveToBody(); + } + // Full list of configuration options available here: + // https://github.com/hakimel/reveal.js#configuration + this._reveal = new Reveal(this._revealDiv.nativeElement, Object.assign(Object.assign({ controls: true, progress: true, history: true, center: true, mouseWheel: true, slideNumber: false, keyboard: true, fragments: true, controlsBackArrows: 'faded', hideInactiveCursor: true, touch: true }, this.options), { embedded: !this._printing, keyboardCondition: 'focused', plugins: [RevealMarkdown] })); + yield this._reveal.initialize(); + console.info(`[reveal] Reveal initialized in ${Date.now() - now}ms`); + this.ready.emit(); + this.markAsLoaded(); + this._reveal.on('slidechanged', (event) => { + this.slideChanged.emit(event); + }); + this._subscription.add(() => { + this._reveal.destroy(); + this._revealDiv.nativeElement.innerHTML = ''; + }); + }); + } + renderSections() { + return __awaiter(this, void 0, void 0, function* () { + if (this.embedded) + return; // Skip + const viewContainer = this._sectionOutlet.viewContainer; + let indexSection = 0; + this._sectionDefs.forEach((section, index) => viewContainer.createEmbeddedView(section.template, {}, indexSection++)); + this._registeredSections.forEach((section, index) => viewContainer.createEmbeddedView(section.template, {}, indexSection++)); + this.cd.detectChanges(); + }); + } + configure(options) { + var _a; + (_a = this._reveal) === null || _a === void 0 ? void 0 : _a.configure(options); + } + layout() { + this._reveal.layout(); + } + sync() { + this._reveal.sync(); + } + navigatePrev() { + this._reveal.navigatePrev(); + } + toggleHelp() { + this._reveal.toggleHelp(); + } + print(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.loading) + return; // skip + console.debug('[reveal] Print...'); + if (this.isPrintingPDF()) { + yield this.waitIdle(); + yield sleep(1000); // Wait end of render + window.print(); + } + else { + // Create a iframe with '?print-pdf' + const printUrl = this.getPrintPdfUrl(); + this.markAsLoading(); + try { + // Already exists: use it + if (this._printIframe) { + this._printIframe.contentWindow.window.print(); + } + else { + this.showToast({ message: 'COMMON.PLEASE_WAIT' }); + this._printIframe = this.createPrintHiddenIframe(printUrl); + // Remember to destroy the iframe, on destroy + const removeIframe = () => { + var _a; + (_a = this._printIframe) === null || _a === void 0 ? void 0 : _a.remove(); + this._printIframe = null; + }; + // destroy after 1min + setTimeout(removeIframe, 60000); + // destroy when destroy + this._subscription.add(removeIframe); + } + } + catch (err) { + console.error('[reveal] Failed to create hidden iframe. Will opening a new window'); + } + finally { + this.markAsLoaded(); + } + } + }); + } + waitIdle(opts) { + return waitForFalse(this.loadingSubject, opts); + } + markAsLoading() { + this.loadingSubject.next(true); + } + markAsLoaded() { + this.loadingSubject.next(false); + } + createPrintHiddenIframe(url) { + // Create a iframe with '?print-pdf' + const iframe = this._document.createElement('iframe'); + iframe.classList.add('cdk-visually-hidden'); + iframe.style.width = '100%'; + iframe.style.height = '100%'; + this._document.body.appendChild(iframe); + iframe.src = url; + return iframe; + } + getPrintPdfUrl() { + const printUrl = this.options.printUrl || new URL(window.location.href); + if (!printUrl.searchParams.has('print-pdf')) { + printUrl.searchParams.append('print-pdf', '1'); + } + return printUrl.href; + } + isPrintingPDF() { + if (this._printing) + return true; + const query = window.location.search || '?'; + return query.indexOf('print-pdf') !== -1; + } + configurePrintPdfCss() { + this._printing = true; + const html = this._document.getElementsByTagName('html')[0]; + html.classList.add('print-pdf'); + } + showToast(opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.toastController) + throw new Error('Missing toastController in component\'s constructor'); + return yield Toasts.show(this.toastController, this.translate, opts); + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], RevealComponent.prototype, "embedded", null); +__decorate([ + Input(), + __metadata("design:type", Object) +], RevealComponent.prototype, "options", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], RevealComponent.prototype, "autoPrint", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], RevealComponent.prototype, "ready", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], RevealComponent.prototype, "slideChanged", void 0); +__decorate([ + ViewChild('main'), + __metadata("design:type", ElementRef) +], RevealComponent.prototype, "_revealDiv", void 0); +__decorate([ + ViewChild(RevealSectionOutlet, { static: true }), + __metadata("design:type", RevealSectionOutlet) +], RevealComponent.prototype, "_sectionOutlet", void 0); +__decorate([ + ContentChildren(RevealSectionDef, { descendants: true }), + __metadata("design:type", QueryList) +], RevealComponent.prototype, "_sectionDefs", void 0); +__decorate([ + ContentChildren('[markdown]'), + __metadata("design:type", QueryList) +], RevealComponent.prototype, "markdownList", void 0); +__decorate([ + HostListener('window:resize', ['$event']), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", void 0) +], RevealComponent.prototype, "onResize", null); +__decorate([ + HostListener('window:beforeprint'), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Event]), + __metadata("design:returntype", void 0) +], RevealComponent.prototype, "onbeforeprint", null); +__decorate([ + HostListener('window:afterprint'), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Event]), + __metadata("design:returntype", void 0) +], RevealComponent.prototype, "onafterprint", null); +RevealComponent = RevealComponent_1 = __decorate([ + Component({ + selector: 'app-reveal', + templateUrl: './reveal.component.html', + styleUrls: ['./reveal.component.scss'], + providers: [ + //{provide: RevealComponent, useExisting: RevealComponent}, + { provide: REVEAL_COMPONENT, useExisting: RevealComponent_1 } + ], + encapsulation: ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.Default + }), + __param(1, Inject(ChangeDetectorRef)), + __param(2, Inject(DOCUMENT)), + __param(6, SkipSelf()), + __param(6, Optional()), + __param(6, Inject(REVEAL_COMPONENT)), + __metadata("design:paramtypes", [ApplicationRef, + ViewRef, + Document, + ToastController, + ChangeDetectorRef, + TranslateService, + RevealComponent]) +], RevealComponent); +export { RevealComponent }; +//# sourceMappingURL=reveal.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/report/reveal/reveal.component.js.map b/out-tsc/app/app/shared/report/reveal/reveal.component.js.map new file mode 100644 index 000000000..809d1621e --- /dev/null +++ b/out-tsc/app/app/shared/report/reveal/reveal.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"reveal.component.js","sourceRoot":"","sources":["../../../../../../src/app/shared/report/reveal/reveal.component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/report/reveal/reveal.module.js b/out-tsc/app/app/shared/report/reveal/reveal.module.js new file mode 100644 index 000000000..68cfcc03e --- /dev/null +++ b/out-tsc/app/app/shared/report/reveal/reveal.module.js @@ -0,0 +1,28 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { SharedModule } from '@sumaris-net/ngx-components'; +import { RevealComponent, RevealSectionDef, RevealSectionOutlet } from '@app/shared/report/reveal/reveal.component'; +import { RevealSectionDirective } from '@app/shared/report/reveal/reveal-section.directive'; +let RevealModule = class RevealModule { +}; +RevealModule = __decorate([ + NgModule({ + imports: [ + SharedModule + ], + declarations: [ + RevealComponent, + RevealSectionDirective, + RevealSectionDef, + RevealSectionOutlet, + ], + exports: [ + RevealComponent, + RevealSectionDirective, + RevealSectionDef, + RevealSectionOutlet + ] + }) +], RevealModule); +export { RevealModule }; +//# sourceMappingURL=reveal.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/report/reveal/reveal.module.js.map b/out-tsc/app/app/shared/report/reveal/reveal.module.js.map new file mode 100644 index 000000000..d8f05b71e --- /dev/null +++ b/out-tsc/app/app/shared/report/reveal/reveal.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"reveal.module.js","sourceRoot":"","sources":["../../../../../../src/app/shared/report/reveal/reveal.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAC,eAAe,EAAE,gBAAgB,EAAE,mBAAmB,EAAC,MAAM,4CAA4C,CAAC;AAClH,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAqBrF,IAAM,YAAY,GAAlB,MAAM,YAAY;CAExB,CAAA;AAFY,YAAY;IAnBxB,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;SACb;QACD,YAAY,EAAE;YACZ,eAAe;YACf,sBAAsB;YAEtB,gBAAgB;YAChB,mBAAmB;SACpB;QACD,OAAO,EAAE;YACP,eAAe;YACf,sBAAsB;YAEtB,gBAAgB;YAChB,mBAAmB;SACpB;KACF,CAAC;GACW,YAAY,CAExB;SAFY,YAAY"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/report/reveal/reveal.utils.js b/out-tsc/app/app/shared/report/reveal/reveal.utils.js new file mode 100644 index 000000000..f181ed8bb --- /dev/null +++ b/out-tsc/app/app/shared/report/reveal/reveal.utils.js @@ -0,0 +1,6 @@ +// Import Reveal.js +import Reveal from 'reveal.js/dist/reveal.esm.js'; +import RevealMarkdown from 'reveal.js/plugin/markdown/markdown.esm.js'; +// Export useful class +export { Reveal, RevealMarkdown }; +//# sourceMappingURL=reveal.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/report/reveal/reveal.utils.js.map b/out-tsc/app/app/shared/report/reveal/reveal.utils.js.map new file mode 100644 index 000000000..35fd652d8 --- /dev/null +++ b/out-tsc/app/app/shared/report/reveal/reveal.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"reveal.utils.js","sourceRoot":"","sources":["../../../../../../src/app/shared/report/reveal/reveal.utils.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,OAAO,MAAM,MAAM,8BAA8B,CAAC;AAClD,OAAO,cAAc,MAAM,2CAA2C,CAAC;AAEvE,sBAAsB;AACtB,OAAO,EAAC,MAAM,EAAC,cAAc,EAAC,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/report/testing/report-embedded.testing.js b/out-tsc/app/app/shared/report/testing/report-embedded.testing.js new file mode 100644 index 000000000..dda1e325b --- /dev/null +++ b/out-tsc/app/app/shared/report/testing/report-embedded.testing.js @@ -0,0 +1,63 @@ +import { __decorate, __metadata } from "tslib"; +import { Component, ViewChild } from '@angular/core'; +import { RevealComponent } from '@app/shared/report/reveal/reveal.component'; +let ReportEmbeddedChildTestPage = class ReportEmbeddedChildTestPage { + constructor() { + this.revealOptions = {}; + } + ngAfterViewInit() { + } +}; +__decorate([ + ViewChild(RevealComponent), + __metadata("design:type", RevealComponent) +], ReportEmbeddedChildTestPage.prototype, "reveal", void 0); +ReportEmbeddedChildTestPage = __decorate([ + Component({ + selector: 'app-report-embedded-child-test-page', + template: ` + + +
+
+

Diapo 3 a

+
+
+

Dipo 3 b

+
+
+
+ +
+ `, + }), + __metadata("design:paramtypes", []) +], ReportEmbeddedChildTestPage); +export { ReportEmbeddedChildTestPage }; +let ReportEmbeddedTestPage = class ReportEmbeddedTestPage { + constructor() { + this.revealOptions = {}; + } + ngAfterViewInit() { + } + print() { + return this.reveal.print(); + } +}; +__decorate([ + ViewChild(RevealComponent), + __metadata("design:type", RevealComponent) +], ReportEmbeddedTestPage.prototype, "reveal", void 0); +__decorate([ + ViewChild(ReportEmbeddedChildTestPage), + __metadata("design:type", ReportEmbeddedChildTestPage) +], ReportEmbeddedTestPage.prototype, "embeddedReport", void 0); +ReportEmbeddedTestPage = __decorate([ + Component({ + selector: 'app-report-embedded-test-page', + templateUrl: './report-embedded.testing.html' + }), + __metadata("design:paramtypes", []) +], ReportEmbeddedTestPage); +export { ReportEmbeddedTestPage }; +//# sourceMappingURL=report-embedded.testing.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/report/testing/report-embedded.testing.js.map b/out-tsc/app/app/shared/report/testing/report-embedded.testing.js.map new file mode 100644 index 000000000..377ea1b25 --- /dev/null +++ b/out-tsc/app/app/shared/report/testing/report-embedded.testing.js.map @@ -0,0 +1 @@ +{"version":3,"file":"report-embedded.testing.js","sourceRoot":"","sources":["../../../../../../src/app/shared/report/testing/report-embedded.testing.ts"],"names":[],"mappings":";AAAA,OAAO,EAAgB,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,eAAe,EAAC,MAAM,4CAA4C,CAAC;AAqBrE,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAMtC;QAJA,kBAAa,GAA4B,EAAE,CAAC;IAK5C,CAAC;IAED,eAAe;IACf,CAAC;CAEF,CAAA;AARC;IAAC,SAAS,CAAC,eAAe,CAAC;8BAAS,eAAe;2DAAC;AAJzC,2BAA2B;IAlBvC,SAAS,CAAC;QACT,QAAQ,EAAE,qCAAqC;QAC/C,QAAQ,EAAE;;;;;;;;;;;;;;GAcT;KACF,CAAC;;GACW,2BAA2B,CAYvC;SAZY,2BAA2B;AAkBjC,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAOjC;QALA,kBAAa,GAA4B,EAAE,CAAC;IAM5C,CAAC;IAED,eAAe;IACf,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF,CAAA;AAZC;IAAC,SAAS,CAAC,eAAe,CAAC;8BAAS,eAAe;sDAAC;AACpD;IAAC,SAAS,CAAC,2BAA2B,CAAC;8BAAiB,2BAA2B;8DAAC;AALzE,sBAAsB;IAJlC,SAAS,CAAC;QACT,QAAQ,EAAE,+BAA+B;QACzC,WAAW,EAAE,gCAAgC;KAC9C,CAAC;;GACW,sBAAsB,CAgBlC;SAhBY,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/report/testing/report.testing.js b/out-tsc/app/app/shared/report/testing/report.testing.js new file mode 100644 index 000000000..4dd406b5f --- /dev/null +++ b/out-tsc/app/app/shared/report/testing/report.testing.js @@ -0,0 +1,53 @@ +import { __decorate, __metadata } from "tslib"; +import { Component, ViewChild } from '@angular/core'; +import { RevealComponent } from '@app/shared/report/reveal/reveal.component'; +let ReportTestPage = class ReportTestPage { + constructor() { + this.revealOptions = {}; + this.chart = { + type: 'bar', + options: { + backgroundColor: 'rgba(100,100,100,1)', + responsive: true, + animation: false, + plugins: { + title: { + display: true, + text: 'Chart Title' + } + } + }, + data: { + labels: ['January', ' February', ' March', ' April', ' May', ' June', ' July'], + datasets: [ + { + data: [65, 59, 80, 81, 56, 55, 40], + label: 'My first dataset', + backgroundColor: 'rgba(20,220,220,.8)' + }, + { + data: [28, 48, 40, 19, 86, 27, 90], + label: 'My second dataset', + backgroundColor: 'rgba(220,120,120,.8)' + } + ] + } + }; + } + print() { + return this.reveal.print(); + } +}; +__decorate([ + ViewChild(RevealComponent), + __metadata("design:type", RevealComponent) +], ReportTestPage.prototype, "reveal", void 0); +ReportTestPage = __decorate([ + Component({ + selector: 'app-report-test-page', + templateUrl: './report.testing.html' + }), + __metadata("design:paramtypes", []) +], ReportTestPage); +export { ReportTestPage }; +//# sourceMappingURL=report.testing.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/report/testing/report.testing.js.map b/out-tsc/app/app/shared/report/testing/report.testing.js.map new file mode 100644 index 000000000..825a8ac3b --- /dev/null +++ b/out-tsc/app/app/shared/report/testing/report.testing.js.map @@ -0,0 +1 @@ +{"version":3,"file":"report.testing.js","sourceRoot":"","sources":["../../../../../../src/app/shared/report/testing/report.testing.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,eAAe,EAAC,MAAM,4CAA4C,CAAC;AAQrE,IAAM,cAAc,GAApB,MAAM,cAAc;IAoCzB;QAlCA,kBAAa,GAA4B,EAAE,CAAC;QAE5C,UAAK,GAA8B;YACjC,IAAI,EAAE,KAAK;YACX,OAAO,EAAE;gBACP,eAAe,EAAE,qBAAqB;gBACtC,UAAU,EAAE,IAAI;gBAChB,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE;oBACP,KAAK,EAAE;wBACL,OAAO,EAAE,IAAI;wBACb,IAAI,EAAE,aAAa;qBACpB;iBACF;aACF;YACD,IAAI,EAAE;gBACJ,MAAM,EAAE,CAAC,SAAS,EAAC,WAAW,EAAC,QAAQ,EAAC,QAAQ,EAAC,MAAM,EAAC,OAAO,EAAC,OAAO,CAAC;gBACxE,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,CAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,CAAC;wBAC5B,KAAK,EAAE,kBAAkB;wBACzB,eAAe,EAAE,qBAAqB;qBACvC;oBACD;wBACE,IAAI,EAAE,CAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,CAAC;wBAC5B,KAAK,EAAE,mBAAmB;wBAC1B,eAAe,EAAE,sBAAsB;qBACxC;iBACF;aACF;SACF,CAAC;IAKF,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF,CAAA;AARC;IAAC,SAAS,CAAC,eAAe,CAAC;8BAAS,eAAe;8CAAC;AAlCzC,cAAc;IAJ1B,SAAS,CAAC;QACT,QAAQ,EAAE,sBAAsB;QAChC,WAAW,EAAE,uBAAuB;KACrC,CAAC;;GACW,cAAc,CA0C1B;SA1CY,cAAc"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/report/testing/report.testing.module.js b/out-tsc/app/app/shared/report/testing/report.testing.module.js new file mode 100644 index 000000000..d7c32f6cb --- /dev/null +++ b/out-tsc/app/app/shared/report/testing/report.testing.module.js @@ -0,0 +1,53 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { CommonModule } from '@angular/common'; +import { CoreModule, SharedModule } from '@sumaris-net/ngx-components'; +import { TranslateModule } from '@ngx-translate/core'; +import { AppSharedReportModule } from '@app/shared/report/report.module'; +import { ReportTestPage } from '@app/shared/report/testing/report.testing'; +import { NgChartsModule } from 'ng2-charts'; +import { ReportEmbeddedTestPage, ReportEmbeddedChildTestPage } from '@app/shared/report/testing/report-embedded.testing'; +export const REPORT_TESTING_PAGES = [ + { label: 'Report', page: '/testing/shared/report' }, + { label: 'Report embedded', page: '/testing/shared/report/embedded' } +]; +const routes = [ + { + path: '', + pathMatch: 'full', + component: ReportTestPage + }, + { + path: 'embedded', + pathMatch: 'full', + component: ReportEmbeddedTestPage, + }, +]; +let AppSharedReportTestingModule = class AppSharedReportTestingModule { +}; +AppSharedReportTestingModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + SharedModule, + CoreModule, + TranslateModule.forChild(), + RouterModule.forChild(routes), + NgChartsModule, + // App modules + AppSharedReportModule, + ], + declarations: [ + ReportTestPage, + ReportEmbeddedTestPage, + ReportEmbeddedChildTestPage + ], + exports: [ + ReportTestPage, + ReportEmbeddedTestPage, + ] + }) +], AppSharedReportTestingModule); +export { AppSharedReportTestingModule }; +//# sourceMappingURL=report.testing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/report/testing/report.testing.module.js.map b/out-tsc/app/app/shared/report/testing/report.testing.module.js.map new file mode 100644 index 000000000..9d727b2f1 --- /dev/null +++ b/out-tsc/app/app/shared/report/testing/report.testing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"report.testing.module.js","sourceRoot":"","sources":["../../../../../../src/app/shared/report/testing/report.testing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AACvC,OAAO,EAAC,YAAY,EAAS,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAC,UAAU,EAAE,YAAY,EAAc,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAC,qBAAqB,EAAC,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAC,cAAc,EAAC,MAAM,2CAA2C,CAAC;AACzE,OAAO,EAAC,cAAc,EAAC,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAC,sBAAsB,EAAE,2BAA2B,EAAC,MAAM,oDAAoD,CAAC;AAEvH,MAAM,CAAC,MAAM,oBAAoB,GAAkB;IACjD,EAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,EAAC;IACjD,EAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,iCAAiC,EAAC;CACpE,CAAC;AAEF,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,cAAc;KAC1B;IACD;QACE,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,sBAAsB;KAClC;CACF,CAAC;AAwBK,IAAM,4BAA4B,GAAlC,MAAM,4BAA4B;CAExC,CAAA;AAFY,4BAA4B;IAtBxC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,YAAY;YACZ,UAAU;YACV,eAAe,CAAC,QAAQ,EAAE;YAC1B,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,cAAc;YAEd,cAAc;YACd,qBAAqB;SACtB;QACD,YAAY,EAAE;YACZ,cAAc;YACd,sBAAsB;YACtB,2BAA2B;SAC5B;QACD,OAAO,EAAE;YACP,cAAc;YACd,sBAAsB;SACvB;KACF,CAAC;GACW,4BAA4B,CAExC;SAFY,4BAA4B"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/rx-state.module.js b/out-tsc/app/app/shared/rx-state.module.js new file mode 100644 index 000000000..b118f6251 --- /dev/null +++ b/out-tsc/app/app/shared/rx-state.module.js @@ -0,0 +1,20 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { PushModule } from '@rx-angular/template/push'; +import { ForModule } from '@rx-angular/template/for'; +import { IfModule } from '@rx-angular/template/if'; +import { LetModule } from '@rx-angular/template/let'; +let RxStateModule = class RxStateModule { +}; +RxStateModule = __decorate([ + NgModule({ + imports: [ + PushModule, ForModule, IfModule, LetModule + ], + exports: [ + PushModule, ForModule, IfModule, LetModule + ] + }) +], RxStateModule); +export { RxStateModule }; +//# sourceMappingURL=rx-state.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/rx-state.module.js.map b/out-tsc/app/app/shared/rx-state.module.js.map new file mode 100644 index 000000000..6b3232a7c --- /dev/null +++ b/out-tsc/app/app/shared/rx-state.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"rx-state.module.js","sourceRoot":"","sources":["../../../../src/app/shared/rx-state.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAU9C,IAAM,aAAa,GAAnB,MAAM,aAAa;CAEzB,CAAA;AAFY,aAAa;IARzB,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS;SAC3C;QACD,OAAO,EAAE;YACP,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS;SAC3C;KACF,CAAC;GACW,aAAa,CAEzB;SAFY,aAAa"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/service/base.validator.service.js b/out-tsc/app/app/shared/service/base.validator.service.js new file mode 100644 index 000000000..3dd35c743 --- /dev/null +++ b/out-tsc/app/app/shared/service/base.validator.service.js @@ -0,0 +1,34 @@ +import { AppValidatorService } from '@sumaris-net/ngx-components'; +import { FormBuilder } from '@angular/forms'; +import { TranslateService } from '@ngx-translate/core'; +export class BaseValidatorService extends AppValidatorService { + static create(injector, factory) { + const target = new BaseValidatorService(injector.get(FormBuilder), injector.get(TranslateService)); + target.getFormGroup = factory; + return target; + } + constructor(formBuilder, translate) { + super(formBuilder, translate); + } + getRowValidator(data, opts) { + return this.getFormGroup(data, opts); + } + getFormGroup(data, opts) { + return this.formBuilder.group(this.getFormGroupConfig(data, opts), this.getFormGroupOptions(data, opts)); + } + getFormGroupConfig(data, opts) { + return {}; + } + getFormGroupOptions(data, opts) { + return {}; + } + updateFormGroup(form, opts) { + } +} +export class ValidatorService extends BaseValidatorService { + constructor(formBuilder, translate, createValidatorFn) { + super(formBuilder, translate); + this.getFormGroup = createValidatorFn; + } +} +//# sourceMappingURL=base.validator.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/service/base.validator.service.js.map b/out-tsc/app/app/shared/service/base.validator.service.js.map new file mode 100644 index 000000000..ecc591bde --- /dev/null +++ b/out-tsc/app/app/shared/service/base.validator.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"base.validator.service.js","sourceRoot":"","sources":["../../../../../src/app/shared/service/base.validator.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAmC,MAAM,6BAA6B,CAAC;AACnG,OAAO,EAA0B,WAAW,EAAmD,MAAM,gBAAgB,CAAC;AACtH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,MAAM,OAAO,oBACX,SAAQ,mBAAsB;IAE9B,MAAM,CAAC,MAAM,CACX,QAAkB,EAClB,OAAiD;QACjD,MAAM,MAAM,GAAG,IAAI,oBAAoB,CAAW,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC7G,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,YAAsB,WAA+B,EAC/B,SAA2B;QAC/C,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAChC,CAAC;IAED,eAAe,CAAC,IAAQ,EAAE,IAAQ;QAChC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,YAAY,CAAC,IAAQ,EAAE,IAAQ;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAC3B,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,EACnC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,kBAAkB,CAAC,IAAQ,EAAE,IAAQ;QACnC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,mBAAmB,CAAC,IAAQ,EAAE,IAAQ;QACpC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,eAAe,CAAC,IAAe,EAAE,IAAQ;IAEzC,CAAC;CACF;AAED,MAAM,OAAO,gBACX,SAAQ,oBAA8B;IAEtC,YAAY,WAA+B,EAC/B,SAA2B,EAC3B,iBAA2D;QACrE,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,iBAAiB,CAAC;IACxC,CAAC;CACF"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/service/file-transfer.service.js b/out-tsc/app/app/shared/service/file-transfer.service.js new file mode 100644 index 000000000..57c667708 --- /dev/null +++ b/out-tsc/app/app/shared/service/file-transfer.service.js @@ -0,0 +1,117 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { AccountService, GraphqlService, isNilOrBlank, isNotNil, isNotNilOrBlank, NetworkService, ServerErrorCodes, StartableService, toBoolean } from '@sumaris-net/ngx-components'; +import { of } from 'rxjs'; +import { HttpClient, HttpErrorResponse, HttpHeaders, HttpRequest } from '@angular/common/http'; +import { switchMap } from 'rxjs/operators'; +import { gql } from '@apollo/client/core'; +const ShareFileMutation = { + shareAsPublic: gql `mutation shareFile($fileName:String) { + data: shareFile(fileName: $fileName) + }`, +}; +let FileTransferService = class FileTransferService extends StartableService { + constructor(network, accountService, http, graphql) { + super(network); + this.network = network; + this.accountService = accountService; + this.http = http; + this.graphql = graphql; + this.connectionParams = { + authToken: undefined, + authBasic: undefined + }; + this.start(); + } + get headers() { + const authorization = []; + if (this.connectionParams.authToken) { + authorization.push(`token ${this.connectionParams.authToken}`); + } + if (this.connectionParams.authBasic) { + authorization.push(`Basic ${this.connectionParams.authBasic}`); + } + return new HttpHeaders() + .append('Authorization', authorization); + } + ngOnStart(opts) { + return __awaiter(this, void 0, void 0, function* () { + this.registerSubscription(this.accountService.onAuthTokenChange.subscribe(token => this.connectionParams.authToken = token)); + this.registerSubscription(this.accountService.onAuthBasicChange.subscribe(basic => this.connectionParams.authBasic = basic)); + }); + } + downloadFile(file) { + return `${this.network.peer.url}/download/${file}`; + } + downloadResource(type, file) { + return `${this.network.peer.url}/download/resource/${type}/${file}`; + } + uploadResource(file, opts) { + if (!this.started) { + return of(this.ready()) + .pipe(switchMap(_ => this.uploadResource(file, opts))); + } + const formData = new FormData(); + formData.append('file', file); + if (opts) { + if (isNotNilOrBlank(opts.resourceType)) + formData.append('resourceType', opts.resourceType); + if (isNotNilOrBlank(opts.resourceId)) + formData.append('resourceId', opts.resourceId); + if (isNotNil(opts.replace)) + formData.append('replace', opts.replace ? 'true' : 'false'); + } + const reportProgress = toBoolean(opts === null || opts === void 0 ? void 0 : opts.reportProgress, true); + const req = new HttpRequest('POST', `${this.network.peer.url}/upload`, formData, { + headers: this.headers, + reportProgress, + responseType: 'json', + }); + return this.http.request(req); + } + shareAsPublic(fileName) { + return __awaiter(this, void 0, void 0, function* () { + console.info(`[file-transfer-service] share file ${fileName} as public`); + return yield this.graphql.mutate({ + mutation: ShareFileMutation.shareAsPublic, + variables: { fileName }, + error: { code: ServerErrorCodes.INTERNAL_SERVER_ERROR, message: 'ERROR.SHARE_AS_PUBLIC_FAIL' }, + }); + }); + } + deleteResource(resourceType, filename) { + return __awaiter(this, void 0, void 0, function* () { + if (isNilOrBlank(resourceType) || isNilOrBlank(filename)) { + console.error(`[file-transfer-service] resourceType and filename must not be blank`); + return; + } + const formData = new FormData(); + formData.append('resourceType', resourceType); + formData.append('filename', filename); + const req = new HttpRequest('POST', `${this.network.peer.url}/delete`, formData, { + responseType: 'json', + }); + try { + const res = yield this.http.request(req).toPromise(); + if (res instanceof HttpErrorResponse) { + console.error(`[file-transfer-service] Error while deleting resource`, res.message); + return false; + } + return true; + } + catch (err) { + console.error(`[file-transfer-service] Error while deleting resource`, err); + return false; + } + }); + } +}; +FileTransferService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [NetworkService, + AccountService, + HttpClient, + GraphqlService]) +], FileTransferService); +export { FileTransferService }; +//# sourceMappingURL=file-transfer.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/service/file-transfer.service.js.map b/out-tsc/app/app/shared/service/file-transfer.service.js.map new file mode 100644 index 000000000..b99b017f4 --- /dev/null +++ b/out-tsc/app/app/shared/service/file-transfer.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"file-transfer.service.js","sourceRoot":"","sources":["../../../../../src/app/shared/service/file-transfer.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/service/page.model.js b/out-tsc/app/app/shared/service/page.model.js new file mode 100644 index 000000000..dff018fb4 --- /dev/null +++ b/out-tsc/app/app/shared/service/page.model.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=page.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/service/page.model.js.map b/out-tsc/app/app/shared/service/page.model.js.map new file mode 100644 index 000000000..1e2f6be56 --- /dev/null +++ b/out-tsc/app/app/shared/service/page.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"page.model.js","sourceRoot":"","sources":["../../../../../src/app/shared/service/page.model.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/out-tsc/app/app/shared/shared.config.js b/out-tsc/app/app/shared/shared.config.js new file mode 100644 index 000000000..c9af59aa8 --- /dev/null +++ b/out-tsc/app/app/shared/shared.config.js @@ -0,0 +1,5 @@ +export const SHARED_LOCAL_SETTINGS_OPTIONS = Object.freeze({ +// Ignore, because added by app.component.ts +//...ICHTHYOMETER_LOCAL_SETTINGS_OPTIONS +}); +//# sourceMappingURL=shared.config.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/shared.config.js.map b/out-tsc/app/app/shared/shared.config.js.map new file mode 100644 index 000000000..e4ef05a8a --- /dev/null +++ b/out-tsc/app/app/shared/shared.config.js.map @@ -0,0 +1 @@ +{"version":3,"file":"shared.config.js","sourceRoot":"","sources":["../../../../src/app/shared/shared.config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC,MAAM,CAAC;AACzD,4CAA4C;AAC5C,wCAAwC;CAEzC,CAAC,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/shared.module.js b/out-tsc/app/app/shared/shared.module.js new file mode 100644 index 000000000..4b8de5ad1 --- /dev/null +++ b/out-tsc/app/app/shared/shared.module.js @@ -0,0 +1,80 @@ +var AppSharedModule_1; +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { TranslateModule } from '@ngx-translate/core'; +import { SharedDebugModule, SharedModule } from '@sumaris-net/ngx-components'; +import { ContextService } from './context.service'; +import { DisplayWithPipe } from '@app/shared/pipes/display-with.pipe'; +import { DelayPipe } from '@app/shared/pipes/delay.pipe'; +import { SplitArrayInChunksPipe } from '@app/shared/pipes/arrays.pipe'; +import { PaginationToStringPipe } from '@app/shared/pipes/pagination.pipe'; +import { MatFormFieldsSkeletonModule } from '@app/shared/material/skeleton/form-fields-skeleton.module'; +import { UnpatchModule } from '@rx-angular/template/unpatch'; +import { IfModule } from '@rx-angular/template/if'; +import { ForModule } from '@rx-angular/template/for'; +import { LetModule } from '@rx-angular/template/let'; +import { PushModule } from '@rx-angular/template/push'; +import { NoHtmlPipe } from '@app/shared/pipes/html.pipes'; +let AppSharedModule = AppSharedModule_1 = class AppSharedModule { + static forRoot(config) { + console.debug('[app-shared] Creating module (root)'); + return { + ngModule: AppSharedModule_1, + providers: [ + ...SharedModule.forRoot(config).providers, + // A context service + { + provide: ContextService, + useValue: new ContextService({}), + }, + ], + }; + } +}; +AppSharedModule = AppSharedModule_1 = __decorate([ + NgModule({ + imports: [ + SharedModule, + SharedDebugModule, + // Rx angular + IfModule, + ForModule, + LetModule, + PushModule, + UnpatchModule, + // Sub modules + MatFormFieldsSkeletonModule, + ], + declarations: [ + // Pipes + DisplayWithPipe, + DelayPipe, + SplitArrayInChunksPipe, + PaginationToStringPipe, + NoHtmlPipe, + ], + exports: [ + SharedModule, + SharedDebugModule, + RouterModule, + TranslateModule, + // Rx angular + IfModule, + ForModule, + LetModule, + PushModule, + UnpatchModule, + // Pipes + DisplayWithPipe, + DelayPipe, + SplitArrayInChunksPipe, + PaginationToStringPipe, + NoHtmlPipe, + //Sub modules + MatFormFieldsSkeletonModule, + ], + }) +], AppSharedModule); +export { AppSharedModule }; +//# sourceMappingURL=shared.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/shared.module.js.map b/out-tsc/app/app/shared/shared.module.js.map new file mode 100644 index 000000000..66f775143 --- /dev/null +++ b/out-tsc/app/app/shared/shared.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"shared.module.js","sourceRoot":"","sources":["../../../../src/app/shared/shared.module.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAuB,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAsB,MAAM,6BAA6B,CAAC;AAClG,OAAO,EAAW,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,2DAA2D,CAAC;AACxG,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAiDnD,IAAM,eAAe,uBAArB,MAAM,eAAe;IAC1B,MAAM,CAAC,OAAO,CAAC,MAA2B;QACxC,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAErD,OAAO;YACL,QAAQ,EAAE,iBAAe;YACzB,SAAS,EAAE;gBACT,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS;gBAEzC,oBAAoB;gBACpB;oBACE,OAAO,EAAE,cAAc;oBACvB,QAAQ,EAAE,IAAI,cAAc,CAAU,EAAE,CAAC;iBAC1C;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAjBY,eAAe;IA/C3B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,iBAAiB;YAEjB,aAAa;YACb,QAAQ;YACR,SAAS;YACT,SAAS;YACT,UAAU;YACV,aAAa;YAEb,cAAc;YACd,2BAA2B;SAC5B;QACD,YAAY,EAAE;YACZ,QAAQ;YACR,eAAe;YACf,SAAS;YACT,sBAAsB;YACtB,sBAAsB;YACtB,UAAU;SACX;QACD,OAAO,EAAE;YACP,YAAY;YACZ,iBAAiB;YACjB,YAAY;YACZ,eAAe;YAEf,aAAa;YACb,QAAQ;YACR,SAAS;YACT,SAAS;YACT,UAAU;YACV,aAAa;YAEb,QAAQ;YACR,eAAe;YACf,SAAS;YACT,sBAAsB;YACtB,sBAAsB;YACtB,UAAU;YAEV,aAAa;YACb,2BAA2B;SAC5B;KACF,CAAC;GACW,eAAe,CAiB3B;SAjBY,eAAe"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/shared.testing.module.js b/out-tsc/app/app/shared/shared.testing.module.js new file mode 100644 index 000000000..7b6f1607e --- /dev/null +++ b/out-tsc/app/app/shared/shared.testing.module.js @@ -0,0 +1,49 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { CommonModule } from '@angular/common'; +import { CoreModule, SHARED_TESTING_PAGES, SharedModule, SharedTestingModule } from '@sumaris-net/ngx-components'; +import { TranslateModule } from '@ngx-translate/core'; +import { REPORT_TESTING_PAGES } from '@app/shared/report/testing/report.testing.module'; +import { MATERIAL_TESTING_PAGES } from '@app/shared/material/material.testing.module'; +import { ICHTHYOMETER_TESTING_PAGES } from '@app/shared/ichthyometer/testing/ichthyometer.testing.module'; +import { BLUETOOTH_TESTING_PAGES } from '@app/shared/bluetooth/testing/bluetooth.testing.module'; +export const APP_SHARED_TESTING_PAGES = [ + ...SHARED_TESTING_PAGES, + ...MATERIAL_TESTING_PAGES, + ...REPORT_TESTING_PAGES, + ...BLUETOOTH_TESTING_PAGES, + ...ICHTHYOMETER_TESTING_PAGES +]; +const routes = [ + { + path: 'material', loadChildren: () => import('./material/material.testing.module').then(m => m.AppSharedMaterialTestingModule) + }, + { + path: 'report', loadChildren: () => import('./report/testing/report.testing.module').then(m => m.AppSharedReportTestingModule) + }, + { + path: 'bluetooth', loadChildren: () => import('./bluetooth/testing/bluetooth.testing.module').then(m => m.AppBluetoothTestingModule) + }, + { + path: 'ichthyometer', loadChildren: () => import('./ichthyometer/testing/ichthyometer.testing.module').then(m => m.AppIchthyometerTestingModule) + } +]; +let AppSharedTestingModule = class AppSharedTestingModule { +}; +AppSharedTestingModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + SharedModule, + CoreModule, + TranslateModule.forChild(), + RouterModule.forChild(routes), + SharedTestingModule + ], + declarations: [], + exports: [] + }) +], AppSharedTestingModule); +export { AppSharedTestingModule }; +//# sourceMappingURL=shared.testing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/shared.testing.module.js.map b/out-tsc/app/app/shared/shared.testing.module.js.map new file mode 100644 index 000000000..6213bb847 --- /dev/null +++ b/out-tsc/app/app/shared/shared.testing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"shared.testing.module.js","sourceRoot":"","sources":["../../../../src/app/shared/shared.testing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,YAAY,EAAE,mBAAmB,EAAe,MAAM,6BAA6B,CAAC;AAC/H,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AACxF,OAAO,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AACtF,OAAO,EAAE,0BAA0B,EAAE,MAAM,8DAA8D,CAAC;AAC1G,OAAO,EAAE,uBAAuB,EAAE,MAAM,wDAAwD,CAAC;AAEjG,MAAM,CAAC,MAAM,wBAAwB,GAAkB;IACrD,GAAG,oBAAoB;IACvB,GAAG,sBAAsB;IACzB,GAAG,oBAAoB;IACvB,GAAG,uBAAuB;IAC1B,GAAG,0BAA0B;CAC9B,CAAC;AAEF,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,8BAA8B,CAAC;KAC/H;IACD;QACE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,4BAA4B,CAAC;KAC/H;IACD;QACE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC;KACrI;IACD;QACE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,oDAAoD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,4BAA4B,CAAC;KACjJ;CACF,CAAC;AAiBK,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;CAElC,CAAA;AAFY,sBAAsB;IAflC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,YAAY;YACZ,UAAU;YACV,eAAe,CAAC,QAAQ,EAAE;YAC1B,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,mBAAmB;SACpB;QACD,YAAY,EAAE,EAEb;QACD,OAAO,EAAE,EACR;KACF,CAAC;GACW,sBAAsB,CAElC;SAFY,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/state/state.decorator.js b/out-tsc/app/app/shared/state/state.decorator.js new file mode 100644 index 000000000..4d68ad885 --- /dev/null +++ b/out-tsc/app/app/shared/state/state.decorator.js @@ -0,0 +1,92 @@ +import { environment } from '@environments/environment'; +import { RxState } from '@rx-angular/state'; +const STATE_VAR_NAME_KEY = '__stateName'; +const DEFAULT_STATE_VAR_NAME = '_state'; +// eslint-disable-next-line prefer-arrow/prefer-arrow-functions +export function RxStateRegister() { + // eslint-disable-next-line prefer-arrow/prefer-arrow-functions + return function (target, key) { + // DEBUG + //console.debug(`${target.constructor?.name} @State() ${key}`); + var _a; + if (!!target[STATE_VAR_NAME_KEY]) + throw new Error('Cannot define more than one @State() in class hierarchy'); + Object.defineProperty(target, STATE_VAR_NAME_KEY, { + value: key, + writable: false, + enumerable: false, + configurable: false + }); + // Create if not exists + if (!target[key]) { + console.debug(`${(_a = target.constructor) === null || _a === void 0 ? void 0 : _a.name} @State() ${key} => getter()`); + // Add a createState() function + // This is a workaround to be able to create the state dynamically, without import in the getter function bellow + if (!target['createState']) { + Object.defineProperty(target, 'createState', { + value: () => new RxState(), + writable: false, + enumerable: false, + configurable: false + }); + } + const _key = '_' + key; + // DEBUG + const getMethodName = 'get' + key.charAt(0).toUpperCase() + key.slice(1); + const getter = new Function(`return function ${getMethodName}(){\n if (!this.${_key}) this.${_key} = this.createState();\n return this.${_key};\n}`)(); + target[getMethodName] = getter; + Object.defineProperty(target, key, { + get: getter, + enumerable: true, + configurable: true + }); + } + }; +} +// eslint-disable-next-line prefer-arrow/prefer-arrow-functions +export function RxStateProperty(statePropertyName, opts) { + // eslint-disable-next-line prefer-arrow/prefer-arrow-functions + return function (target, key) { + // DEBUG + //console.debug(`${target.constructor?.name} @StateProperty() ${key}`); + statePropertyName = statePropertyName || key; + const state = target[STATE_VAR_NAME_KEY] || (opts === null || opts === void 0 ? void 0 : opts.stateName) || DEFAULT_STATE_VAR_NAME; + // property getter + const getMethodName = 'get' + key.charAt(0).toUpperCase() + key.slice(1); + const setMethodName = 'set' + key.charAt(0).toUpperCase() + key.slice(1); + const checkStateExists = !environment.production ? ` if (!this.${state}) throw new Error('Missing state! Please add a RxState in class: ' + this.constructor.name);\n` : ""; + const getter = new Function(`return function ${getMethodName}(){\n return this.${state}.get('${statePropertyName}');\n}`)(); + const setter = new Function(`return function ${setMethodName}(value){\n${checkStateExists} this.${state}.set('${statePropertyName}', _ => value);\n}`)(); + target[getMethodName] = getter; + target[setMethodName] = setter; + Object.defineProperty(target, key, { + get: getter, + set: setter, + enumerable: true, + configurable: true + }); + }; +} +// eslint-disable-next-line prefer-arrow/prefer-arrow-functions +export function RxStateSelect(statePropertyName, opts) { + // eslint-disable-next-line prefer-arrow/prefer-arrow-functions + return function (target, key) { + // DEBUG + //console.debug(`${target.constructor?.name} @RxStateSelect() ${key}`); + const state = target[STATE_VAR_NAME_KEY] || (opts === null || opts === void 0 ? void 0 : opts.stateName) || DEFAULT_STATE_VAR_NAME; + statePropertyName = statePropertyName || key.replace(/\$?$/, ''); + const _key = '_' + key; + // property getter + const getMethodName = 'get' + statePropertyName.charAt(0).toUpperCase() + statePropertyName.slice(1); + // DEBUG + //const getter = new Function(`return function ${getMethodName}(){\n console.log('TODO creating ${key} observable...');\n if (!this.${_key}) this.${_key} = this.${state}.select('${bindingStateProperty}');\n return this.${_key};\n}`)(); + const getter = new Function(`return function ${getMethodName}(){\n if (!this.${_key}) this.${_key} = this.${state}.select('${statePropertyName}');\n return this.${_key};\n}`)(); + target[getMethodName] = getter; + Object.defineProperty(target, key, { + get: getter, + enumerable: true, + configurable: false + }); + }; +} +//# sourceMappingURL=state.decorator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/state/state.decorator.js.map b/out-tsc/app/app/shared/state/state.decorator.js.map new file mode 100644 index 000000000..06417966d --- /dev/null +++ b/out-tsc/app/app/shared/state/state.decorator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"state.decorator.js","sourceRoot":"","sources":["../../../../../src/app/shared/state/state.decorator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/table/base.table.js b/out-tsc/app/app/shared/table/base.table.js new file mode 100644 index 000000000..066695680 --- /dev/null +++ b/out-tsc/app/app/shared/table/base.table.js @@ -0,0 +1,606 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectorRef, Directive, ElementRef, Injector, Input, ViewChild } from '@angular/core'; +import { AppTable, changeCaseToUnderscore, EntitiesTableDataSource, EntityUtils, Hotkeys, InMemoryEntitiesService, isNil, isNilOrBlank, isNotEmptyArray, isNotNil, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, TranslateContextService, } from '@sumaris-net/ngx-components'; +import { MatExpansionPanel } from '@angular/material/expansion'; +import { environment } from '@environments/environment'; +import { filter, first, map, switchMap, takeUntil, tap } from 'rxjs/operators'; +import { PopoverController } from '@ionic/angular'; +import { Popovers } from '@app/shared/popover/popover.utils'; +import { timer } from 'rxjs'; +import { RxStateRegister } from '@app/shared/state/state.decorator'; +import { RxState } from '@rx-angular/state'; +export const BASE_TABLE_SETTINGS_ENUM = { + filterKey: 'filter', + compactRowsKey: 'compactRows', +}; +let AppBaseTable = class AppBaseTable extends AppTable { + constructor(injector, dataType, filterType, columnNames, _dataService, validatorService, options) { + super(injector, RESERVED_START_COLUMNS.concat(columnNames).concat(RESERVED_END_COLUMNS), new EntitiesTableDataSource(dataType, _dataService, validatorService, Object.assign({ prependNewElements: false, restoreOriginalDataOnCancel: false, suppressErrors: environment.production, onRowCreated: (row) => this.onDefaultRowCreated(row) }, options)), null); + this.injector = injector; + this.dataType = dataType; + this.filterType = filterType; + this._dataService = _dataService; + this.validatorService = validatorService; + this.options = options; + this.logPrefix = null; + this.canGoBack = false; + this.showTitle = true; + this.showToolbar = true; + this.showPaginator = true; + this.showFooter = true; + this.showError = true; + this.toolbarColor = 'primary'; + this.sticky = false; + this.stickyEnd = false; + this.compact = false; + this.mobile = false; + this.pressHighlightDuration = 10000; // 10s + this.filterForm = null; + this.filterCriteriaCount = 0; + this.filterPanelFloating = true; + this.mobile = this.settings.mobile; + this.hotkeys = injector.get(Hotkeys); + this.popoverController = injector.get(PopoverController); + this.i18nColumnPrefix = (options === null || options === void 0 ? void 0 : options.i18nColumnPrefix) || ''; + this.translateContext = injector.get(TranslateContextService); + this.cd = injector.get(ChangeDetectorRef); + this.defaultSortBy = 'label'; + this.inlineEdition = !!this.validatorService; + this.memoryDataService = this._dataService instanceof InMemoryEntitiesService ? this._dataService : null; + // DEBUG + this.logPrefix = '[base-table] '; + this.debug = (options === null || options === void 0 ? void 0 : options.debug) && !environment.production; + } + set canEdit(value) { + this._canEdit = value; + } + get canEdit() { + return this._canEdit && !this.readOnly; + } + get filterIsEmpty() { + return this.filterCriteriaCount === 0; + } + markAsPristine(opts) { + var _a; + if ((_a = this.memoryDataService) === null || _a === void 0 ? void 0 : _a.dirty) + return; // Skip if service still dirty + super.markAsPristine(opts); + } + ngOnInit() { + super.ngOnInit(); + // Propagate dirty state of the in-memory service + if (this.memoryDataService) { + this.registerSubscription(this.memoryDataService.dirtySubject.pipe(filter((dirty) => dirty === true && !this.dirty)).subscribe((_) => this.markAsDirty())); + } + // Propagate dirty state from the first valueChanges of a row + if (this.inlineEdition) { + this.registerSubscription(this.onStartEditingRow + .pipe(filter((row) => row.id !== -1 && !!row.validator && !this.dirty), switchMap((row) => row.validator.valueChanges.pipe(filter(() => row.dirty), first(), takeUntil(this.onStartEditingRow)))) + .subscribe(() => { + console.debug(this.logPrefix + 'Mark table as dirty, because row is dirty'); + this.markAsDirty(); + })); + } + // Enable permanent selection (to keep selected rows after reloading) + // (only on desktop, if not already done) + if (!this.mobile && !this.permanentSelection) { + this.initPermanentSelection(); + } + this.restoreCompactMode(); + } + ngAfterViewInit() { + var _a; + super.ngAfterViewInit(); + this.initTableContainer((_a = this.tableContainerRef) === null || _a === void 0 ? void 0 : _a.nativeElement); + } + ngOnDestroy() { + super.ngOnDestroy(); + this._state.ngOnDestroy(); + } + initTableContainer(element) { + if (!element) + return; // Skip if already done + if (!this.mobile) { + // Add shortcuts + console.debug(this.logPrefix + 'Add table shortcuts'); + this.registerSubscription(this.hotkeys + .addShortcut({ keys: 'control.a', element, preventDefault: false /*will prevent default only if no row editing */ }) + .pipe(filter(() => this.canEdit && !this.focusColumn), tap((event) => event === null || event === void 0 ? void 0 : event.preventDefault()), map(() => { var _a; return (_a = this.dataSource) === null || _a === void 0 ? void 0 : _a.getRows(); }), filter(isNotEmptyArray)) + .subscribe((rows) => { + if (this.isAllSelected()) { + this.selection.clear(); + } + else { + this.selection.select(...rows); + } + this.markForCheck(); + })); + this.registerSubscription(this.hotkeys + .addShortcut({ keys: 'control.shift.+', description: 'COMMON.BTN_ADD', element }) + .pipe(filter((e) => !this.disabled && this.canEdit)) + .subscribe((event) => this.addRow(event))); + } + } + scrollToBottom() { + if (this.tableContainerRef) { + // scroll to bottom + this.tableContainerRef.nativeElement.scroll({ + top: this.tableContainerRef.nativeElement.scrollHeight, + }); + } + } + setFilter(filter, opts) { + filter = this.asFilter(filter); + // Update criteria count + const criteriaCount = this.countNotEmptyCriteria(filter); + if (criteriaCount !== this.filterCriteriaCount) { + this.filterCriteriaCount = criteriaCount; + this.markForCheck(); + } + // Update the form content + if (this.filterForm && (!opts || opts.emitEvent !== false)) { + this.filterForm.patchValue(filter.asObject(), { emitEvent: false }); + } + super.setFilter(filter, opts); + } + toggleFilterPanelFloating() { + this.filterPanelFloating = !this.filterPanelFloating; + this.markForCheck(); + } + applyFilterAndClosePanel(event) { + const filter = this.filterForm.value; + this.setFilter(filter, { emitEvent: false }); + this.onRefresh.emit(event); + if (this.filterExpansionPanel && this.filterPanelFloating) + this.filterExpansionPanel.close(); + } + closeFilterPanel() { + if (this.filterExpansionPanel) + this.filterExpansionPanel.close(); + } + resetFilter(value, opts) { + this.filterForm.reset(value, opts); + this.setFilter(value || null, opts); + this.filterCriteriaCount = 0; + if (this.filterExpansionPanel && this.filterPanelFloating) + this.filterExpansionPanel.close(); + } + clickRow(event, row) { + if (!this.inlineEdition) + this.highlightedRowId = row === null || row === void 0 ? void 0 : row.id; + //console.debug('[base-table] click row'); + return super.clickRow(event, row); + } + pressRow(event, row) { + if (!this.mobile) + return; // Skip if inline edition, or not mobile + event === null || event === void 0 ? void 0 : event.preventDefault(); + // Toggle row selection + this.selection.toggle(row); + // Unselect after 4s + if (this.pressHighlightDuration > 0) { + if (this.selection.isSelected(row)) { + // Highlight the row (only for the first row selected) + if (this.singleSelectedRow === row) { + this.highlightedRowId = row.id; + } + timer(this.pressHighlightDuration) + .pipe( + //takeUntil(this.selection.changed), + takeUntil(this.destroySubject), first()) + .subscribe(() => { + // Row is still highlighted: remove highlight + if (this.highlightedRowId === row.id) { + this.highlightedRowId = null; + } + // Unselect, if only this row is selected + if (this.selection.isSelected(row) && this.selection.selected.length === 1) { + this.selection.deselect(row); + } + this.markForCheck(); + }); + } + else { + // Remove highlight + if (this.highlightedRowId === row.id) { + this.highlightedRowId = null; + } + } + } + this.markForCheck(); + } + addOrUpdateEntityToTable(data, opts) { + return __awaiter(this, void 0, void 0, function* () { + // Always try to get the row, even if no ID, because the row can exists (e.g. in memory table) + // THis find should use a equals() function + const row = yield this.findRowByEntity(data); + if (!row) { + yield this.addEntityToTable(data, opts && { confirmCreate: opts.confirmEditCreate }); + } + else { + yield this.updateEntityToTable(data, row, opts && { confirmEdit: opts.confirmEditCreate }); + } + }); + } + /** + * Say if the row can be added. Useful to check unique constraints, and warn user + * is.s physical gear table can check is the rankOrder + * + * @param data + * @protected + */ + canAddEntity(data) { + return Promise.resolve(true); + } + canAddEntities(data) { + return Promise.resolve(true); + } + canUpdateEntity(data, row) { + return Promise.resolve(true); + } + /** + * Insert an entity into the table. This can be useful when entity is created by a modal (e.g. BatchGroupTable). + * + * If hasRankOrder=true, then rankOrder is computed only once. + * Will call method normalizeEntityToRow(). + * The new row will be the edited row. + * + * @param data the entity to insert. + * @param opts + */ + addEntityToTable(data, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!data) + throw new Error('Missing data to add'); + if (this.debug) + console.debug('[measurement-table] Adding new entity', data); + // Check entity can be added + const canAdd = yield this.canAddEntity(data); + if (!canAdd) + return undefined; + // Create a row + const row = yield this.addRowToTable(null, { editing: opts === null || opts === void 0 ? void 0 : opts.editing }); + if (!row) + throw new Error('Could not add row to table'); + // Adapt measurement values to row + this.normalizeEntityToRow(data, row); + // Affect new row + if (row.validator) { + row.validator.patchValue(data); + row.validator.markAsDirty(); + } + else { + row.currentData = data; + } + // Confirm the created row + if (row.editing && (!opts || opts.confirmCreate !== false)) { + const confirmed = this.confirmEditCreate(null, row); + if (confirmed) + this.editedRow = null; // Forget the edited row + } + else { + this.editedRow = row; + } + this.markAsDirty(); + return row; + }); + } + onNewEntity(data) { + return __awaiter(this, void 0, void 0, function* () { + // Can be overrided by subclasses + }); + } + addEntitiesToTable(data, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!data) + throw new Error('Missing data to add'); + if (this.debug) + console.debug('[measurement-table] Adding new entities', data); + // Check entity can be added + const canAdd = yield this.canAddEntities(data); + if (!canAdd) + return undefined; + // Prepare entities + yield Promise.all(data.map((entity) => this.onNewEntity(entity))); + // Bulk add + const rows = yield this.dataSource.addMany(data, null, opts); + if (!rows) + throw new Error('Failed to add entities to table'); + this.totalRowCount += rows.length; + this.visibleRowCount += rows.length; + if (rows.length !== data.length) + throw new Error('Not all entities has been added to table'); + rows.map((row, index) => { + const entity = data[index]; + // Adapt measurement values to row + this.normalizeEntityToRow(entity, row); + // Affect new row + if (row.validator) { + row.validator.patchValue(entity); + row.validator.markAsDirty(); + } + else { + row.currentData = entity; + } + }); + this.markAsDirty(); + return rows; + }); + } + /** + * Update an row, using the given entity. Useful when entity is updated using a modal (e.g. BatchGroupModal) + * + * The updated row will be the edited row. + * Will call method normalizeEntityToRow() + * + * @param data the input entity + * @param row the row to update + * @param opts + */ + updateEntityToTable(data, row, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!data || !row) + throw new Error('Missing data, or table row to update'); + if (this.debug) + console.debug('[measurement-table] Updating entity to an existing row', data); + const canUpdate = yield this.canUpdateEntity(data, row); + if (!canUpdate) + return undefined; + // Adapt measurement values to row + this.normalizeEntityToRow(data, row); + // Affect new row + if (row.validator) { + row.validator.patchValue(data); + row.validator.markAsDirty(); + } + else { + row.currentData = data; + } + // Confirm the created row + if (!opts || opts.confirmEdit !== false) { + this.confirmEditCreate(null, row); + this.editedRow = null; + } + else if (this.inlineEdition) { + this.editedRow = row; + } + this.markAsDirty(); + return row; + }); + } + deleteEntity(event, data) { + return __awaiter(this, void 0, void 0, function* () { + const row = yield this.findRowByEntity(data); + // Row not exists: OK + if (!row) + return true; + const confirmed = yield this.canDeleteRows([row]); + if (!confirmed) + return false; + const deleted = yield this.deleteRow(null, row, { interactive: false /*already confirmed*/ }); + if (!deleted) + event === null || event === void 0 ? void 0 : event.preventDefault(); // Mark as cancelled + return deleted; + }); + } + /* -- protected function -- */ + restoreFilterOrLoad(opts) { + this.markAsLoading(); + const sources = (opts === null || opts === void 0 ? void 0 : opts.sources) || ['settings', 'queryParams']; + const json = sources + .map((source) => { + switch (source) { + case 'settings': + if (isNilOrBlank(this.settingsId)) + return; + console.debug(this.logPrefix + 'Restoring filter from settings...'); + return this.settings.getPageSettings(this.settingsId, BASE_TABLE_SETTINGS_ENUM.filterKey); + case 'queryParams': + const { q } = this.route.snapshot.queryParams; + if (q) { + console.debug(this.logPrefix + 'Restoring filter from route query param: ', q); + try { + return JSON.parse(q); + } + catch (err) { + console.error(this.logPrefix + 'Failed to parse route query param: ' + q, err); + } + } + break; + } + return null; + }) + .find(isNotNil); + if (json) { + this.setFilter(json, opts); + } + else if (!opts || opts.emitEvent !== false) { + this.onRefresh.emit(); + } + } + restoreCompactMode() { + if (!this.compact && this.settingsId) { + const compact = this.settings.getPageSettings(this.settingsId, BASE_TABLE_SETTINGS_ENUM.compactRowsKey) || false; + if (this.compact !== compact) { + this.compact = compact; + this.markForCheck(); + } + } + } + toggleCompactMode() { + this.compact = !this.compact; + this.markForCheck(); + this.settings.savePageSetting(this.settingsId, this.compact, BASE_TABLE_SETTINGS_ENUM.compactRowsKey); + } + openCommentPopover(event, row) { + return __awaiter(this, void 0, void 0, function* () { + const placeholder = this.translate.instant('REFERENTIAL.COMMENTS'); + const { data } = yield Popovers.showText(this.popoverController, event, { + editing: this.inlineEdition && this.enabled, + autofocus: this.enabled, + multiline: true, + text: row.currentData.comments, + placeholder, + }); + // User cancel + if (isNil(data) || this.disabled) + return; + if (this.inlineEdition) { + if (row.validator) { + row.validator.patchValue({ comments: data }); + row.validator.markAsDirty(); + } + else { + row.currentData.comments = data; + } + } + }); + } + /* -- protected functions -- */ + onDefaultRowCreated(row) { + return __awaiter(this, void 0, void 0, function* () { + if (row.validator) { + row.validator.patchValue(this.defaultNewRowValue()); + } + else { + Object.assign(row.currentData, this.defaultNewRowValue()); + } + // Start row edition + if (this.inlineEdition) + this.clickRow(undefined, row); + this.scrollToBottom(); + }); + } + defaultNewRowValue() { + return {}; + } + asFilter(source) { + const target = new this.filterType(); + if (source) + target.fromObject(source); + return target; + } + countNotEmptyCriteria(filter) { + return (filter === null || filter === void 0 ? void 0 : filter.countNotEmptyCriteria()) || 0; + } + asEntity(source) { + if (EntityUtils.isEntity(source)) + return source; + const target = new this.dataType(); + if (source) + target.fromObject(source); + return target; + } + findRowByEntity(data) { + return __awaiter(this, void 0, void 0, function* () { + if (!data) + throw new Error('Missing argument data'); + // Make sure using an entity class, to be able to use equals() + data = this.asEntity(data); + return this.dataSource.getRows().find((r) => data.equals(r.currentData)); + }); + } + normalizeEntityToRow(data, row, opts) { + // Can be override by subclasses + } + /** + * Delegate equals to the entity class, instead of simple ID comparison + * + * @param d1 + * @param d2 + * @protected + */ + equals(d1, d2) { + if (d1) + return this.asEntity(d1).equals(d2); + if (d2) + return this.asEntity(d2).equals(d1); + return false; + } + markForCheck() { + this.cd.markForCheck(); + } + getI18nColumnName(columnName) { + if (this.i18nColumnSuffix) { + return this.translateContext.instant((this.i18nColumnPrefix || '') + changeCaseToUnderscore(columnName).toUpperCase(), this.i18nColumnSuffix); + } + else { + return super.getI18nColumnName(columnName); + } + } +}; +__decorate([ + RxStateRegister(), + __metadata("design:type", RxState) +], AppBaseTable.prototype, "_state", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppBaseTable.prototype, "canGoBack", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppBaseTable.prototype, "showTitle", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppBaseTable.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppBaseTable.prototype, "showPaginator", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppBaseTable.prototype, "showFooter", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppBaseTable.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], AppBaseTable.prototype, "toolbarColor", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppBaseTable.prototype, "sticky", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppBaseTable.prototype, "stickyEnd", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppBaseTable.prototype, "compact", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppBaseTable.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], AppBaseTable.prototype, "pressHighlightDuration", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], AppBaseTable.prototype, "highlightedRowId", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], AppBaseTable.prototype, "canEdit", null); +__decorate([ + ViewChild('tableContainer', { read: ElementRef }), + __metadata("design:type", ElementRef) +], AppBaseTable.prototype, "tableContainerRef", void 0); +__decorate([ + ViewChild(MatExpansionPanel, { static: true }), + __metadata("design:type", MatExpansionPanel) +], AppBaseTable.prototype, "filterExpansionPanel", void 0); +AppBaseTable = __decorate([ + Directive(), + __metadata("design:paramtypes", [Injector, Function, Function, Array, Object, Object, Object]) +], AppBaseTable); +export { AppBaseTable }; +//# sourceMappingURL=base.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/table/base.table.js.map b/out-tsc/app/app/shared/table/base.table.js.map new file mode 100644 index 000000000..60a1e711f --- /dev/null +++ b/out-tsc/app/app/shared/table/base.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"base.table.js","sourceRoot":"","sources":["../../../../../src/app/shared/table/base.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/shared/types.utils.js b/out-tsc/app/app/shared/types.utils.js new file mode 100644 index 000000000..6179aa829 --- /dev/null +++ b/out-tsc/app/app/shared/types.utils.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=types.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/shared/types.utils.js.map b/out-tsc/app/app/shared/types.utils.js.map new file mode 100644 index 000000000..f1dd72469 --- /dev/null +++ b/out-tsc/app/app/shared/types.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"types.utils.js","sourceRoot":"","sources":["../../../../src/app/shared/types.utils.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/out-tsc/app/app/social/config/social.config.js b/out-tsc/app/app/social/config/social.config.js new file mode 100644 index 000000000..4b78815d8 --- /dev/null +++ b/out-tsc/app/app/social/config/social.config.js @@ -0,0 +1,9 @@ +export const APP_SOCIAL_CONFIG_OPTIONS = Object.freeze({ + ENABLE_NOTIFICATION_ICONS: { + key: 'sumaris.social.notification.icons.enable', + label: 'CONFIGURATION.OPTIONS.SOCIAL.ENABLE_NOTIFICATION_ICONS', + type: 'boolean', + defaultValue: false + } +}); +//# sourceMappingURL=social.config.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/config/social.config.js.map b/out-tsc/app/app/social/config/social.config.js.map new file mode 100644 index 000000000..1cbc98fd5 --- /dev/null +++ b/out-tsc/app/app/social/config/social.config.js.map @@ -0,0 +1 @@ +{"version":3,"file":"social.config.js","sourceRoot":"","sources":["../../../../../src/app/social/config/social.config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,MAAM,CAAC;IACrD,yBAAyB,EAAwB;QAC7C,GAAG,EAAE,0CAA0C;QAC/C,KAAK,EAAE,wDAAwD;QAC/D,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,KAAK;KACpB;CACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/social/job/job-progression.service.js b/out-tsc/app/app/social/job/job-progression.service.js new file mode 100644 index 000000000..48e0d1e89 --- /dev/null +++ b/out-tsc/app/app/social/job/job-progression.service.js @@ -0,0 +1,98 @@ +import { __decorate, __metadata } from "tslib"; +import { AccountService, BaseGraphqlService, GraphqlService, isNil, JobProgression, removeDuplicatesFromArray, SocialErrorCodes, toNumber } from '@sumaris-net/ngx-components'; +import { Injectable } from '@angular/core'; +import gql from 'graphql-tag'; +import { BehaviorSubject, combineLatest } from 'rxjs'; +import { map, mergeMap, takeUntil } from 'rxjs/operators'; +import { environment } from '@environments/environment'; +import { JobService } from '@app/social/job/job.service'; +export const JobProgressionFragments = { + light: gql `fragment LightJobProgressionFragment on JobProgressionVO { + id + name + }`, + full: gql `fragment JobProgressionFragment on JobProgressionVO { + id + name + message + current + total + }`, +}; +const JobProgressionQueries = { + loadAll: gql `query LoadAllJobProgressions($filter: JobFilterVOInput!){ + data: jobs(filter: $filter) { + ...LightJobProgressionFragment + } + } + ${JobProgressionFragments.light}` +}; +const JobProgressionSubscriptions = { + listenChanges: gql `subscription UpdateJobProgression($id: Int!, $interval: Int){ + data: updateJobProgression(id: $id, interval: $interval) { + ...JobProgressionFragment + } + } + ${JobProgressionFragments.full}` +}; +let JobProgressionService = class JobProgressionService extends BaseGraphqlService { + constructor(graphql, jobService, accountService) { + super(graphql, environment); + this.graphql = graphql; + this.jobService = jobService; + this.accountService = accountService; + this.dataSubject = new BehaviorSubject([]); + this._logPrefix = '[job-progression-service]'; + // Clean data on logout + this.accountService.onLogout.subscribe(() => this.dataSubject.next([])); + this.jobService.onCancel.subscribe(job => this.removeJob(job === null || job === void 0 ? void 0 : job.id)); + } + addJob(id, job) { + const exists = this.dataSubject.value.some(j => j.id === id); + if (!exists) { + job = job || new JobProgression(); + job.id = id; + this.dataSubject.next([...this.dataSubject.value, job]); + } + } + removeJob(id) { + const jobs = this.dataSubject.value; + const index = jobs.findIndex(j => j.id === id); + if (index !== -1) { + jobs.splice(index, 1); + this.dataSubject.next(jobs); + } + } + watchAll() { + return combineLatest(this.dataSubject.asObservable(), this.accountService.onLogin + .pipe(mergeMap((account) => this.jobService.watchAll({ + issuer: account.pubkey, + status: ['PENDING', 'RUNNING'] + }, null, { toEntity: false })), takeUntil(this.accountService.onLogout))).pipe(map(([d1, d2]) => removeDuplicatesFromArray([...d1, ...d2], 'id')), map(data => data.map(JobProgression.fromObject))); + } + listenChanges(id, options) { + if (isNil(id)) + throw new Error(`${this._logPrefix}Missing argument 'id'`); + if (this._debug) + console.debug(`${this._logPrefix}[WS] Listening changes for job progression {${id}}...`); + return this.graphql.subscribe({ + query: JobProgressionSubscriptions.listenChanges, + fetchPolicy: options === null || options === void 0 ? void 0 : options.fetchPolicy, + variables: { id, interval: toNumber(options === null || options === void 0 ? void 0 : options.interval, 10) }, + error: { code: SocialErrorCodes.SUBSCRIBE_JOB_PROGRESSION_ERROR, message: 'SOCIAL.ERROR.SUBSCRIBE_JOB_PROGRESSION_ERROR' } + }).pipe(map(({ data }) => { + const progression = data && JobProgression.fromObject(data); + if (progression && this._debug) + console.debug(`${this._logPrefix}Job progression ${id} updated on server`, progression); + return progression; + })); + } +}; +JobProgressionService = __decorate([ + Injectable(), + __metadata("design:paramtypes", [GraphqlService, + JobService, + AccountService]) +], JobProgressionService); +export { JobProgressionService }; +//# sourceMappingURL=job-progression.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/job/job-progression.service.js.map b/out-tsc/app/app/social/job/job-progression.service.js.map new file mode 100644 index 000000000..b479f7901 --- /dev/null +++ b/out-tsc/app/app/social/job/job-progression.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"job-progression.service.js","sourceRoot":"","sources":["../../../../../src/app/social/job/job-progression.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/social/job/job.errors.js b/out-tsc/app/app/social/job/job.errors.js new file mode 100644 index 000000000..27e8a3398 --- /dev/null +++ b/out-tsc/app/app/social/job/job.errors.js @@ -0,0 +1,5 @@ +export const AppJobErrorCodes = { + LOAD_TYPES_ERROR: 1000, + RUN_JOB_ERROR: 1001 +}; +//# sourceMappingURL=job.errors.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/job/job.errors.js.map b/out-tsc/app/app/social/job/job.errors.js.map new file mode 100644 index 000000000..7ebe3020d --- /dev/null +++ b/out-tsc/app/app/social/job/job.errors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"job.errors.js","sourceRoot":"","sources":["../../../../../src/app/social/job/job.errors.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,gBAAgB,EAAE,IAAI;IACtB,aAAa,EAAE,IAAI;CACpB,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/social/job/job.model.js b/out-tsc/app/app/social/job/job.model.js new file mode 100644 index 000000000..897fe25e7 --- /dev/null +++ b/out-tsc/app/app/social/job/job.model.js @@ -0,0 +1,142 @@ +var Job_1; +import { __decorate, __metadata } from "tslib"; +import { Entity, EntityClass, EntityFilter, fromDateISOString, isNotEmptyArray, toDateISOString } from '@sumaris-net/ngx-components'; +export const JobStatusLabels = { + PENDING: 'PENDING', + RUNNING: 'RUNNING', + SUCCESS: 'SUCCESS', + WARNING: 'WARNING', + ERROR: 'ERROR', + FATAL: 'FATAL', + CANCELLED: 'CANCELLED' +}; +export const JobStatusList = Object.freeze([ + { + label: JobStatusLabels.PENDING, + matIcon: 'schedule', + name: 'SOCIAL.JOB.STATUS_ENUM.PENDING' + }, + { + label: JobStatusLabels.RUNNING, + matIcon: 'pending', + name: 'SOCIAL.JOB.STATUS_ENUM.RUNNING' + }, + { + label: JobStatusLabels.SUCCESS, + matIcon: 'check_circle', + name: 'SOCIAL.JOB.STATUS_ENUM.SUCCESS' + }, + { + label: JobStatusLabels.WARNING, + icon: 'warning', + name: 'SOCIAL.JOB.STATUS_ENUM.WARNING' + }, + { + label: JobStatusLabels.CANCELLED, + icon: 'cancel', + name: 'SOCIAL.JOB.STATUS_ENUM.CANCELLED' + }, + { + label: JobStatusLabels.ERROR, + icon: 'error', + name: 'SOCIAL.JOB.STATUS_ENUM.ERROR' + }, + { + label: JobStatusLabels.FATAL, + icon: 'error', + name: 'SOCIAL.JOB.STATUS_ENUM.FATAL' + } +]); +let Job = Job_1 = class Job extends Entity { + constructor() { + super(Job_1.TYPENAME); + } + asObject(opts) { + const target = super.asObject(opts); + target.startDate = toDateISOString(this.startDate); + target.endDate = toDateISOString(this.endDate); + // Serialize configuration and report + if (typeof this.configuration === 'object') { + target.configuration = JSON.stringify(this.configuration); + } + if (typeof this.report === 'object') { + target.report = JSON.stringify(this.report); + } + return target; + } + fromObject(source) { + Object.assign(this, source); // Copy all properties + super.fromObject(source); + this.startDate = fromDateISOString(source.startDate); + this.endDate = fromDateISOString(source.endDate); + try { + // Deserialize configuration and report + if (typeof source.configuration === 'string' && source.configuration.startsWith('{')) { + this.configuration = JSON.parse(source.configuration); + } + if (typeof source.report === 'string' && source.report.startsWith('{')) { + this.report = JSON.parse(source.report); + } + } + catch (err) { + console.error('Error during UserEvent deserialization', err); + } + } + isActive() { + return ['PENDING', 'RUNNING'].includes(this.status); + } +}; +Job = Job_1 = __decorate([ + EntityClass({ typename: 'JobVO' }), + __metadata("design:paramtypes", []) +], Job); +export { Job }; +let JobFilter = class JobFilter extends EntityFilter { + fromObject(source) { + super.fromObject(source); + this.issuer = source.issuer; + this.types = source.types || []; + this.status = source.status || []; + this.lastUpdateDate = source.lastUpdateDate; + this.excludedIds = source.excludedIds; + this.includedIds = source.includedIds; + } + buildFilter() { + const filterFns = super.buildFilter(); + if (this.issuer) { + filterFns.push((data) => data.issuer === this.issuer); + } + if (isNotEmptyArray(this.types)) { + filterFns.push((data) => this.types.includes(data.type)); + } + if (isNotEmptyArray(this.status)) { + filterFns.push((data) => this.status.includes(data.status)); + } + if (isNotEmptyArray(this.includedIds)) { + filterFns.push((data) => this.includedIds.includes(+data.id)); + } + if (isNotEmptyArray(this.excludedIds)) { + filterFns.push((data) => !this.excludedIds.includes(+data.id)); + } + if (this.lastUpdateDate) { + filterFns.push((data) => data.updateDate >= this.lastUpdateDate); + } + return filterFns; + } +}; +JobFilter = __decorate([ + EntityClass({ typename: 'JobFilterVO' }) +], JobFilter); +export { JobFilter }; +export class JobStatusUtils { + static isFinished(status) { + switch (status) { + case 'PENDING': + case 'RUNNING': + return false; + default: + return true; + } + } +} +//# sourceMappingURL=job.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/job/job.model.js.map b/out-tsc/app/app/social/job/job.model.js.map new file mode 100644 index 000000000..897f3e694 --- /dev/null +++ b/out-tsc/app/app/social/job/job.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"job.model.js","sourceRoot":"","sources":["../../../../../src/app/social/job/job.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/social/job/job.service.js b/out-tsc/app/app/social/job/job.service.js new file mode 100644 index 000000000..2f77933bc --- /dev/null +++ b/out-tsc/app/app/social/job/job.service.js @@ -0,0 +1,268 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { AccountService, BaseGraphqlService, EntityUtils, GraphqlService, isNil, SocialErrorCodes, toNumber } from '@sumaris-net/ngx-components'; +import { Injectable } from '@angular/core'; +import gql from 'graphql-tag'; +import { ErrorCodes } from '@app/referential/services/errors'; +import { Subject } from 'rxjs'; +import { distinctUntilChanged, map } from 'rxjs/operators'; +import { Job, JobFilter } from '@app/social/job/job.model'; +import { ModalController } from '@ionic/angular'; +import { JobReportModal } from '@app/social/job/report/job.report.modal'; +import { AppJobErrorCodes } from '@app/social/job/job.errors'; +export const JobFragments = { + light: gql `fragment LightJobFragment on JobVO { + id + name + startDate + status + }`, + full: gql ` + fragment JobFragment on JobVO { + id + name + type + status + startDate + endDate + updateDate + configuration + report + log + } + ` +}; +const JobQueries = { + loadAll: gql ` + query Jobs($filter: JobFilterVOInput, $page: PageInput) { + data: jobs(filter: $filter, page: $page) { + ...LightJobFragment + } + } + ${JobFragments.light}`, + load: gql `query Job($id: Int!) { + data: job(id: $id) { + ...JobFragment + } + } + ${JobFragments.full}`, + loadTypes: gql ` + query JobTypes { + data: jobTypes + }`, +}; +const JobMutations = { + cancel: gql ` + mutation CancelJob($id: Int!) { + data: cancelJob(id: $id) { + ...JobFragment + } + } + ${JobFragments.full}`, + run: gql ` + mutation RunJob($type: String!, $issuer: String, $params: Map_String_ObjectScalar) { + data: runJob(type: $type, issuer: $issuer, params: $params) { + ...JobFragment + } + } + ${JobFragments.full}`, +}; +const JobSubscriptions = { + listenChanges: gql `subscription UpdateJobs($filter: JobFilterVOInput, $interval: Int) { + data: updateJobs(filter: $filter, interval: $interval) { + ...JobFragment + } + } + ${JobFragments.full}` +}; +let JobService = class JobService extends BaseGraphqlService { + constructor(graphql, accountService, modalCtrl) { + super(graphql); + this.graphql = graphql; + this.accountService = accountService; + this.modalCtrl = modalCtrl; + this.onCancel = new Subject(); + this._logPrefix = '[job-service]'; + } + addJob(id, job) { + var _a; + job = Job.fromObject(job) || new Job(); + job.id = id; + job.status = job.status || 'PENDING'; + job.issuer = job.issuer || ((_a = this.accountService.account) === null || _a === void 0 ? void 0 : _a.pubkey); + const data = job.asObject(); + this.insertIntoMutableCachedQueries(this.graphql.cache, { queryName: 'loadAll', data }); + } + load(id) { + return __awaiter(this, void 0, void 0, function* () { + if (isNil(id)) + return undefined; + const now = Date.now(); + if (this._debug) + console.debug(`${this._logPrefix} Loading job #${id} ...`); + const { data } = yield this.graphql.query({ + query: JobQueries.load, + variables: { id }, + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }, + fetchPolicy: 'no-cache', + }); + if (this._debug) + console.debug(`${this._logPrefix} job loaded in ${Date.now() - now}ms`, data); + return Job.fromObject(data); + }); + } + loadAll(filter, page, opts) { + return __awaiter(this, void 0, void 0, function* () { + filter = JobFilter.fromObject(filter); + const now = Date.now(); + if (this._debug) + console.debug(`${this._logPrefix} Loading jobs ...`, filter); + page = Object.assign({ offset: 0, size: 100, sortBy: 'id', sortDirection: 'ASC' }, page); + const { data } = yield this.graphql.query({ + query: JobQueries.loadAll, + variables: { + filter: filter && filter.asPodObject(), + page + }, + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }, + fetchPolicy: (opts === null || opts === void 0 ? void 0 : opts.fetchPolicy) || 'no-cache', + }); + const entities = (opts === null || opts === void 0 ? void 0 : opts.toEntity) !== false + ? (data || []).map(Job.fromObject) + : (data || []); + if (this._debug) + console.debug(`${this._logPrefix} jobs loaded in ${Date.now() - now}ms`, entities); + return entities; + }); + } + watchAll(filter, page, opts) { + filter = JobFilter.fromObject(filter); + let now = Date.now(); + if (this._debug) + console.debug(this._logPrefix + 'Watching jobs...', filter); + page = Object.assign({ offset: 0, size: 100, sortBy: 'id', sortDirection: 'ASC' }, page); + return this.mutableWatchQuery({ + queryName: 'loadAll', + arrayFieldName: 'data', + query: JobQueries.loadAll, + variables: { + filter: filter && filter.asPodObject(), + page + }, + insertFilterFn: filter && filter.asFilterFn(), + error: { code: SocialErrorCodes.LOAD_JOB_PROGRESSIONS_ERROR, message: 'REFERENTIAL.ERROR.LOAD_JOB_PROGRESSIONS_ERROR' }, + fetchPolicy: (opts === null || opts === void 0 ? void 0 : opts.fetchPolicy) || 'cache-and-network' + }) + .pipe(map(({ data }) => { + const entities = (opts === null || opts === void 0 ? void 0 : opts.toEntity) !== false + ? (data || []).map(Job.fromObject) + : (data || []); + if (now && this._debug) { + console.debug(`${this._logPrefix} ${entities.length} jobs loaded in ${Date.now() - now}ms`, entities); + now = null; + } + return entities; + })); + } + listenChanges(filter, options) { + filter = JobFilter.fromObject(filter); + if (this._debug) + console.debug(`${this._logPrefix} [WS] Listening changes for user jobs with filter:`, filter); + return this.graphql + .subscribe({ + query: JobSubscriptions.listenChanges, + fetchPolicy: (options === null || options === void 0 ? void 0 : options.fetchPolicy) || 'no-cache', + variables: { + filter: filter.asPodObject(), + interval: toNumber(options === null || options === void 0 ? void 0 : options.interval, 10) + }, + error: { + code: SocialErrorCodes.SUBSCRIBE_USER_EVENTS_ERROR, + message: 'SOCIAL.ERROR.SUBSCRIBE_USER_EVENTS_ERROR', + }, + }) + .pipe(map(({ data }) => { + if (data && this._debug) + console.debug(`${this._logPrefix} Received new jobs:`, data); + return data === null || data === void 0 ? void 0 : data.map(Job.fromObject); + })); + } + openJobReport(job) { + return __awaiter(this, void 0, void 0, function* () { + console.debug(`${this._logPrefix} Open report modal for job:`, job); + const modal = yield this.modalCtrl.create({ + component: JobReportModal, + componentProps: { + job + }, + keyboardClose: true, + cssClass: 'modal-large' + }); + // Open the modal + yield modal.present(); + // On dismiss + const res = yield modal.onDidDismiss(); + }); + } + cancelJob(job) { + return __awaiter(this, void 0, void 0, function* () { + yield this.graphql.mutate({ + mutation: JobMutations.cancel, + variables: { + id: job.id + }, + update: (proxy, { data }) => { + const savedEntity = Job.fromObject(data.data); + EntityUtils.copyIdAndUpdateDate(savedEntity, job); + } + }); + this.onCancel.next(job); + return job; + }); + } + loadTypes(opts) { + return __awaiter(this, void 0, void 0, function* () { + const { data } = yield this.graphql.query({ + query: JobQueries.loadTypes, + error: { code: ErrorCodes.LOAD_REFERENTIAL_ERROR, message: 'REFERENTIAL.ERROR.LOAD_REFERENTIAL_ERROR' }, + fetchPolicy: (opts === null || opts === void 0 ? void 0 : opts.fetchPolicy) || 'cache-first' + }); + return data; + }); + } + watchTypes(opts) { + return this.graphql.watchQuery({ + query: JobQueries.loadTypes, + error: { code: AppJobErrorCodes.LOAD_TYPES_ERROR, message: 'SOCIAL.JOB.ERROR.LOAD_TYPES_ERROR' }, + fetchPolicy: (opts === null || opts === void 0 ? void 0 : opts.fetchPolicy) || 'cache-and-network' + }).pipe(map(({ data }) => data), distinctUntilChanged()); + } + runJob(type, params, issuer) { + return __awaiter(this, void 0, void 0, function* () { + let job; + yield this.graphql.mutate({ + mutation: JobMutations.run, + error: { code: AppJobErrorCodes.RUN_JOB_ERROR, message: "SOCIAL.JOB.ERROR.RUN_JOB_ERROR" }, + variables: { + type, + params, + issuer + }, + update: (proxy, { data }) => { + if (data.data) { + job = Job.fromObject(data.data); + this.addJob(job.id, job); + } + } + }); + return job; + }); + } +}; +JobService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [GraphqlService, + AccountService, + ModalController]) +], JobService); +export { JobService }; +//# sourceMappingURL=job.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/job/job.service.js.map b/out-tsc/app/app/social/job/job.service.js.map new file mode 100644 index 000000000..6c24a7a6f --- /dev/null +++ b/out-tsc/app/app/social/job/job.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"job.service.js","sourceRoot":"","sources":["../../../../../src/app/social/job/job.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/social/job/report/job-report.module.js b/out-tsc/app/app/social/job/report/job-report.module.js new file mode 100644 index 000000000..a34b9fc12 --- /dev/null +++ b/out-tsc/app/app/social/job/report/job-report.module.js @@ -0,0 +1,20 @@ +import { __decorate } from "tslib"; +import { AppCoreModule } from '@app/core/core.module'; +import { NgModule } from '@angular/core'; +import { JobReportModal } from '@app/social/job/report/job.report.modal'; +let AppJobReportModule = class AppJobReportModule { +}; +AppJobReportModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule + ], + declarations: [JobReportModal], + exports: [ + // Components + JobReportModal + ] + }) +], AppJobReportModule); +export { AppJobReportModule }; +//# sourceMappingURL=job-report.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/job/report/job-report.module.js.map b/out-tsc/app/app/social/job/report/job-report.module.js.map new file mode 100644 index 000000000..dbd0ca264 --- /dev/null +++ b/out-tsc/app/app/social/job/report/job-report.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"job-report.module.js","sourceRoot":"","sources":["../../../../../../src/app/social/job/report/job-report.module.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAYlE,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;CAC9B,CAAA;AADY,kBAAkB;IAV9B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;SACd;QACD,YAAY,EAAE,CAAC,cAAc,CAAC;QAC9B,OAAO,EAAE;YACP,aAAa;YACb,cAAc;SACf;KACF,CAAC;GACW,kBAAkB,CAC9B;SADY,kBAAkB"} \ No newline at end of file diff --git a/out-tsc/app/app/social/job/report/job.report.modal.js b/out-tsc/app/app/social/job/report/job.report.modal.js new file mode 100644 index 000000000..e51b77e22 --- /dev/null +++ b/out-tsc/app/app/social/job/report/job.report.modal.js @@ -0,0 +1,56 @@ +import { __decorate, __metadata } from "tslib"; +import { Component, Input } from '@angular/core'; +import { ModalController } from '@ionic/angular'; +import { Job } from '@app/social/job/job.model'; +import { capitalizeFirstLetter, changeCaseToUnderscore, isNotNilOrBlank, LocalSettingsService, toBoolean } from '@sumaris-net/ngx-components'; +import { TranslateService } from '@ngx-translate/core'; +let JobReportModal = class JobReportModal { + constructor(translate, modalCtrl, settings) { + this.translate = translate; + this.modalCtrl = modalCtrl; + this.settings = settings; + this.showLog = false; + } + ngOnInit() { + var _a, _b; + this.mobile = toBoolean(this.mobile, this.settings.mobile); + this.items = Object.entries(((_a = this.job) === null || _a === void 0 ? void 0 : _a.report) || {}) + .filter(([key, value]) => isNotNilOrBlank(value) && key !== 'message') + .map(([key, value]) => { + const i18nKey = 'SOCIAL.JOB.REPORT.STATS.' + changeCaseToUnderscore(key).toUpperCase(); + let message = this.translate.instant(i18nKey, this.job.report); + // Missing i18n key + if (message === i18nKey) { + message = `${capitalizeFirstLetter(key)}: ${value}`; + } + return message; + }); + this.message = (_b = this.job.report) === null || _b === void 0 ? void 0 : _b.message; + } + close(event) { + this.modalCtrl.dismiss(); + } +}; +__decorate([ + Input(), + __metadata("design:type", String) +], JobReportModal.prototype, "title", void 0); +__decorate([ + Input(), + __metadata("design:type", Job) +], JobReportModal.prototype, "job", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], JobReportModal.prototype, "mobile", void 0); +JobReportModal = __decorate([ + Component({ + selector: 'app-job-report-modal', + templateUrl: './job.report.modal.html' + }), + __metadata("design:paramtypes", [TranslateService, + ModalController, + LocalSettingsService]) +], JobReportModal); +export { JobReportModal }; +//# sourceMappingURL=job.report.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/job/report/job.report.modal.js.map b/out-tsc/app/app/social/job/report/job.report.modal.js.map new file mode 100644 index 000000000..cf0e33422 --- /dev/null +++ b/out-tsc/app/app/social/job/report/job.report.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"job.report.modal.js","sourceRoot":"","sources":["../../../../../../src/app/social/job/report/job.report.modal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAU,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,eAAe,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC9I,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAWhD,IAAM,cAAc,GAApB,MAAM,cAAc;IAUzB,YACY,SAA2B,EAC3B,SAA0B,EAC1B,QAA8B;QAF9B,cAAS,GAAT,SAAS,CAAkB;QAC3B,cAAS,GAAT,SAAS,CAAiB;QAC1B,aAAQ,GAAR,QAAQ,CAAsB;QAL1C,YAAO,GAAG,KAAK,CAAC;IAOhB,CAAC;IAED,QAAQ;;QACN,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE3D,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA,MAAA,IAAI,CAAC,GAAG,0CAAE,MAAM,KAAI,EAAE,CAAC;aAChD,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,SAAS,CAAC;aACrE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACpB,MAAM,OAAO,GAAG,0BAA0B,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;YACvF,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/D,mBAAmB;YACnB,IAAI,OAAO,KAAK,OAAO,EAAE;gBACvB,OAAO,GAAG,GAAG,qBAAqB,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;aACrD;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QACL,IAAI,CAAC,OAAO,GAAG,MAAA,IAAI,CAAC,GAAG,CAAC,MAAM,0CAAE,OAAO,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,KAAa;QACjB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF,CAAA;AAnCC;IAAC,KAAK,EAAE;;6CAAe;AACvB;IAAC,KAAK,EAAE;8BAAM,GAAG;2CAAC;AAClB;IAAC,KAAK,EAAE;;8CAAiB;AAJd,cAAc;IAJ1B,SAAS,CAAC;QACT,QAAQ,EAAE,sBAAsB;QAChC,WAAW,EAAE,yBAAyB;KACvC,CAAC;qCAYuB,gBAAgB;QAChB,eAAe;QAChB,oBAAoB;GAb/B,cAAc,CAqC1B;SArCY,cAAc"} \ No newline at end of file diff --git a/out-tsc/app/app/social/message/inbox-message-routing.module.js b/out-tsc/app/app/social/message/inbox-message-routing.module.js new file mode 100644 index 000000000..7ef51a445 --- /dev/null +++ b/out-tsc/app/app/social/message/inbox-message-routing.module.js @@ -0,0 +1,44 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { InboxMessagePage } from '@app/social/message/inbox-message.page'; +import { AppInboxMessageModule } from '@app/social/message/inbox-message.module'; +import { AppCoreModule } from '@app/core/core.module'; +import { InboxMessagesPage } from '@app/social/message/inbox-messages.page'; +const routes = [ + { + path: '', + pathMatch: 'full', + runGuardsAndResolvers: 'pathParamsChange', + data: { + profile: 'USER', + }, + component: InboxMessagesPage, + }, + { + path: ':messageId', + pathMatch: 'full', + runGuardsAndResolvers: 'pathParamsOrQueryParamsChange', + data: { + pathIdParam: 'messageId', + profile: 'USER', + }, + component: InboxMessagePage, + }, +]; +let AppInboxMessageRoutingModule = class AppInboxMessageRoutingModule { +}; +AppInboxMessageRoutingModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + AppInboxMessageModule, + RouterModule.forChild(routes) + ], + exports: [ + RouterModule + ] + }) +], AppInboxMessageRoutingModule); +export { AppInboxMessageRoutingModule }; +//# sourceMappingURL=inbox-message-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/message/inbox-message-routing.module.js.map b/out-tsc/app/app/social/message/inbox-message-routing.module.js.map new file mode 100644 index 000000000..2bb1e8aae --- /dev/null +++ b/out-tsc/app/app/social/message/inbox-message-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"inbox-message-routing.module.js","sourceRoot":"","sources":["../../../../../src/app/social/message/inbox-message-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAE5E,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,qBAAqB,EAAE,kBAAkB;QACzC,IAAI,EAAE;YACJ,OAAO,EAAE,MAAM;SAChB;QACD,SAAS,EAAE,iBAAiB;KAC7B;IACD;QACE,IAAI,EAAE,YAAY;QAClB,SAAS,EAAE,MAAM;QACjB,qBAAqB,EAAE,+BAA+B;QACtD,IAAI,EAAE;YACJ,WAAW,EAAE,WAAW;YACxB,OAAO,EAAE,MAAM;SAChB;QACD,SAAS,EAAE,gBAAgB;KAC5B;CACF,CAAC;AAYK,IAAM,4BAA4B,GAAlC,MAAM,4BAA4B;CACxC,CAAA;AADY,4BAA4B;IAVxC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,qBAAqB;YACrB,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC9B;QACD,OAAO,EAAE;YACP,YAAY;SACb;KACF,CAAC;GACW,4BAA4B,CACxC;SADY,4BAA4B"} \ No newline at end of file diff --git a/out-tsc/app/app/social/message/inbox-message.module.js b/out-tsc/app/app/social/message/inbox-message.module.js new file mode 100644 index 000000000..86de03002 --- /dev/null +++ b/out-tsc/app/app/social/message/inbox-message.module.js @@ -0,0 +1,24 @@ +import { __decorate } from "tslib"; +import { AppCoreModule } from '@app/core/core.module'; +import { NgModule } from '@angular/core'; +import { InboxMessagePage } from '@app/social/message/inbox-message.page'; +import { NgxJdenticonModule } from 'ngx-jdenticon'; +import { AppMarkdownModule } from '@app/shared/markdown/markdown.module'; +import { InboxMessagesPage } from '@app/social/message/inbox-messages.page'; +import { SocialModule } from '@sumaris-net/ngx-components'; +import { AppUserEventModule } from '@app/social/user-event/user-event.module'; +let AppInboxMessageModule = class AppInboxMessageModule { +}; +AppInboxMessageModule = __decorate([ + NgModule({ + imports: [AppCoreModule, SocialModule, AppUserEventModule, NgxJdenticonModule, AppMarkdownModule], + declarations: [InboxMessagePage, InboxMessagesPage], + exports: [ + // Components + InboxMessagePage, + InboxMessagesPage, + ], + }) +], AppInboxMessageModule); +export { AppInboxMessageModule }; +//# sourceMappingURL=inbox-message.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/message/inbox-message.module.js.map b/out-tsc/app/app/social/message/inbox-message.module.js.map new file mode 100644 index 000000000..71ad4c95b --- /dev/null +++ b/out-tsc/app/app/social/message/inbox-message.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"inbox-message.module.js","sourceRoot":"","sources":["../../../../../src/app/social/message/inbox-message.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAWvE,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;CAAG,CAAA;AAAxB,qBAAqB;IATjC,QAAQ,CAAC;QACR,OAAO,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,CAAC;QACjG,YAAY,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;QACnD,OAAO,EAAE;YACP,aAAa;YACb,gBAAgB;YAChB,iBAAiB;SAClB;KACF,CAAC;GACW,qBAAqB,CAAG;SAAxB,qBAAqB"} \ No newline at end of file diff --git a/out-tsc/app/app/social/message/inbox-message.page.js b/out-tsc/app/app/social/message/inbox-message.page.js new file mode 100644 index 000000000..40eeb09d7 --- /dev/null +++ b/out-tsc/app/app/social/message/inbox-message.page.js @@ -0,0 +1,95 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, Input } from '@angular/core'; +import { AppEntityEditor, LocalSettingsService, slideUpDownAnimation } from '@sumaris-net/ngx-components'; +import { UserEvent } from '@app/social/user-event/user-event.model'; +import { UserEventService } from '@app/social/user-event/user-event.service'; +import { UntypedFormBuilder } from '@angular/forms'; +import { ModalController } from '@ionic/angular'; +import { InboxMessageService } from '@app/social/message/inbox-message.service'; +import { firstValueFrom } from 'rxjs'; +let InboxMessagePage = class InboxMessagePage extends AppEntityEditor { + constructor(injector, inboxMessageService, settings, modalCtrl, formBuilder) { + super(injector, UserEvent, injector.get(UserEventService), { + pathIdAttribute: 'messageId', + tabCount: 1, + }); + this.inboxMessageService = inboxMessageService; + this.settings = settings; + this.modalCtrl = modalCtrl; + this.formBuilder = formBuilder; + this.bodyAutoHeight = true; + this.form = formBuilder.group({ + id: [], + subject: [], + body: [], + type: [], + issuer: [], + recipients: formBuilder.array([]), + creationDate: [], + }); + this.mobile = this.settings.mobile; + this.defaultBackHref = '/inbox'; + } + ngOnInit() { + super.ngOnInit(); + this.markAsReady(); + } + reply(event) { + return __awaiter(this, void 0, void 0, function* () { + const source = this.form.value; + return this.inboxMessageService.reply(source); + }); + } + forward(event) { + return __awaiter(this, void 0, void 0, function* () { + const source = this.form.value; + return this.inboxMessageService.forward(source); + }); + } + get isNewData() { + return false; + } + registerForms() { + // No sub forms + } + computeTitle(data) { + return firstValueFrom(this.translate.get('SOCIAL.MESSAGE.INBOX.TITLE')); + } + computePageHistory(title) { + return null; // Skip page history + } + setValue(data) { + return __awaiter(this, void 0, void 0, function* () { + // Set form + const json = Object.assign(Object.assign({}, data.asObject()), data.content); + // Load issuers + if (json.issuer) { + json.issuer = yield this.dataService.getPersonByPubkey(json.issuer); + } + this.form.patchValue(json); + }); + } + getFirstInvalidTabIndex() { + return 0; + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], InboxMessagePage.prototype, "bodyAutoHeight", void 0); +InboxMessagePage = __decorate([ + Component({ + selector: 'app-message-page', + templateUrl: 'inbox-message.page.html', + styleUrls: ['inbox-message.page.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + animations: [slideUpDownAnimation], + }), + __metadata("design:paramtypes", [Injector, + InboxMessageService, + LocalSettingsService, + ModalController, + UntypedFormBuilder]) +], InboxMessagePage); +export { InboxMessagePage }; +//# sourceMappingURL=inbox-message.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/message/inbox-message.page.js.map b/out-tsc/app/app/social/message/inbox-message.page.js.map new file mode 100644 index 000000000..a174bc1c8 --- /dev/null +++ b/out-tsc/app/app/social/message/inbox-message.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"inbox-message.page.js","sourceRoot":"","sources":["../../../../../src/app/social/message/inbox-message.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/social/message/inbox-message.service.js b/out-tsc/app/app/social/message/inbox-message.service.js new file mode 100644 index 000000000..340769a2e --- /dev/null +++ b/out-tsc/app/app/social/message/inbox-message.service.js @@ -0,0 +1,86 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { TranslateService } from '@ngx-translate/core'; +import { fromDateISOString, isNotNilOrBlank, Message, MessageService, Person, PersonService, PersonUtils, } from '@sumaris-net/ngx-components'; +import { DateAdapter } from '@angular/material/core'; +let InboxMessageService = class InboxMessageService { + constructor(translate, dateAdapter, personService, messageService) { + this.translate = translate; + this.dateAdapter = dateAdapter; + this.personService = personService; + this.messageService = messageService; + } + /** + * Send a message to recipient(s) + * + * @param message + * @param opts + */ + send(message, opts) { + return __awaiter(this, void 0, void 0, function* () { + return this.messageService.send(message, opts); + }); + } + openComposeModal(options) { + return __awaiter(this, void 0, void 0, function* () { + return this.messageService.openComposeModal(Object.assign({ suggestFn: (value, filter, sortBy, sortDirection) => this.personService.suggest(value, filter, sortBy, sortDirection) }, options)); + }); + } + reply(source) { + return __awaiter(this, void 0, void 0, function* () { + const message = Message.fromObject(source); + // Prepare recipient + const recipient = message.issuer && Person.fromObject(message.issuer).asObject({ minify: true }); + if (recipient === null || recipient === void 0 ? void 0 : recipient.department) + recipient.department = recipient.department.asObject(); + // Prepare subject + const subjectPrefix = this.translate.instant('SOCIAL.MESSAGE.INBOX.REPLY_SUBJECT_PREFIX'); + let subject = message.subject || ''; + if (!subject.trim().startsWith(subjectPrefix)) { + subject = subjectPrefix + subject; + } + const body = '\n\n' + + source.body + .split('\n') + .filter(isNotNilOrBlank) + .map((line) => '> ' + line) + .join('\n'); + return this.openComposeModal({ + data: { + recipients: [recipient], + subject, + body, + }, + }); + }); + } + forward(source, options) { + return __awaiter(this, void 0, void 0, function* () { + const message = Message.fromObject(source); + const creationDate = fromDateISOString(source['creationDate']); + // Prepare subject + const subjectPrefix = this.translate.instant('SOCIAL.MESSAGE.INBOX.FORWARD_SUBJECT_PREFIX'); + let subject = message.subject || ''; + if (!subject.trim().startsWith(subjectPrefix)) { + subject = subjectPrefix + subject; + } + const body = this.translate.instant('SOCIAL.MESSAGE.INBOX.FORWARD_BODY_PREFIX', { + issuer: PersonUtils.personToString(message.issuer), + date: this.dateAdapter.format(creationDate, this.translate.instant('COMMON.DATE_TIME_PATTERN')), + }) + message.body; + return this.openComposeModal(Object.assign(Object.assign({}, options), { data: { + subject, + body, + } })); + }); + } +}; +InboxMessageService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [TranslateService, + DateAdapter, + PersonService, + MessageService]) +], InboxMessageService); +export { InboxMessageService }; +//# sourceMappingURL=inbox-message.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/message/inbox-message.service.js.map b/out-tsc/app/app/social/message/inbox-message.service.js.map new file mode 100644 index 000000000..4d93905b1 --- /dev/null +++ b/out-tsc/app/app/social/message/inbox-message.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"inbox-message.service.js","sourceRoot":"","sources":["../../../../../src/app/social/message/inbox-message.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/social/message/inbox-messages.page.js b/out-tsc/app/app/social/message/inbox-messages.page.js new file mode 100644 index 000000000..1bf10ef3d --- /dev/null +++ b/out-tsc/app/app/social/message/inbox-messages.page.js @@ -0,0 +1,78 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { AccountService, LocalSettingsService, MessageTypes, NetworkService, slideUpDownAnimation } from '@sumaris-net/ngx-components'; +import { UntypedFormBuilder } from '@angular/forms'; +import { InboxMessageService } from '@app/social/message/inbox-message.service'; +import { UserEventFilter } from '@app/social/user-event/user-event.model'; +import { NavController } from '@ionic/angular'; +import { environment } from '@environments/environment'; +let InboxMessagesPage = class InboxMessagesPage { + constructor(navController, networkService, inboxMessagesService, accountService, settings, formBuilder) { + this.navController = navController; + this.networkService = networkService; + this.inboxMessagesService = inboxMessagesService; + this.accountService = accountService; + this.settings = settings; + this.formBuilder = formBuilder; + this.form = formBuilder.group({ + subject: [null], + body: [null], + type: [MessageTypes.INBOX_MESSAGE], + issuer: [null], + recipients: formBuilder.array([]), + creationDate: [null], + }); + this.mobile = this.settings.mobile; + this.filter = UserEventFilter.fromObject({ + types: [MessageTypes.INBOX_MESSAGE], + recipients: [], + }); + // DEV only + this.canSearch = !environment.production; + } + ngOnInit() { + const account = this.accountService.account; + this.recipient = account === null || account === void 0 ? void 0 : account.pubkey; + } + reply(event, source) { + return __awaiter(this, void 0, void 0, function* () { + return this.inboxMessagesService.reply(source); + }); + } + forward(event, source) { + return __awaiter(this, void 0, void 0, function* () { + return this.inboxMessagesService.forward(source); + }); + } + openComposeMessageModal(event) { + return __awaiter(this, void 0, void 0, function* () { + return this.inboxMessagesService.openComposeModal(); + }); + } + openMessage(message) { + return this.navController.navigateForward(`/inbox/${message.id}`); + } + clickRow(row) { + return this.openMessage(row.currentData); + } + search(event) { + console.info('[inbox-messages] Searching in message: ', event); + } +}; +InboxMessagesPage = __decorate([ + Component({ + selector: 'app-messages-page', + templateUrl: 'inbox-messages.page.html', + //styleUrls: ['inbox-message.page.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + animations: [slideUpDownAnimation], + }), + __metadata("design:paramtypes", [NavController, + NetworkService, + InboxMessageService, + AccountService, + LocalSettingsService, + UntypedFormBuilder]) +], InboxMessagesPage); +export { InboxMessagesPage }; +//# sourceMappingURL=inbox-messages.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/message/inbox-messages.page.js.map b/out-tsc/app/app/social/message/inbox-messages.page.js.map new file mode 100644 index 000000000..b79428033 --- /dev/null +++ b/out-tsc/app/app/social/message/inbox-messages.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"inbox-messages.page.js","sourceRoot":"","sources":["../../../../../src/app/social/message/inbox-messages.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/social/share/shared-page.component.js b/out-tsc/app/app/social/share/shared-page.component.js new file mode 100644 index 000000000..42e152d4e --- /dev/null +++ b/out-tsc/app/app/social/share/shared-page.component.js @@ -0,0 +1,70 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Component } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { NavController, ToastController } from '@ionic/angular'; +import { HttpClient } from '@angular/common/http'; +import { isNotNil, LocalSettingsService, Toasts } from '@sumaris-net/ngx-components'; +import { ContextService } from '@app/shared/context.service'; +import { SharedResourceUtils } from '@app/social/share/shared-resource.utils'; +import { TranslateService } from '@ngx-translate/core'; +let SharedPage = class SharedPage { + constructor(route, navCtrl, http, settings, context, toast, translate) { + this.route = route; + this.navCtrl = navCtrl; + this.http = http; + this.settings = settings; + this.context = context; + this.toast = toast; + this.translate = translate; + this.loading = true; + this.error = false; + } + ngOnInit() { + this.downloadData(); + } + downloadData() { + return __awaiter(this, void 0, void 0, function* () { + yield this.settings.ready(); + const peerUrl = this.settings.settings.peerUrl; + const uuid = this.route.snapshot.paramMap.get('uuid'); + let res = null; + try { + res = yield SharedResourceUtils.downloadByUuid(this.http, peerUrl, uuid); + } + catch (e) { + this.loading = false; + this.error = true; + console.error(e); + Toasts.show(this.toast, this.translate, { + message: e.message, + color: 'accent', + position: 'top', + duration: 0, + showCloseButton: true, + }); + } + if (isNotNil(res)) { + this.context.clipboard = res.content; + this.navCtrl.navigateRoot(res.path, { + queryParams: Object.assign(Object.assign({}, res.queryParams), { uuid }), + }); + } + }); + } +}; +SharedPage = __decorate([ + Component({ + selector: 'app-shared-page', + templateUrl: './shared-page.component.html', + styleUrls: ['./shared-page.component.scss'], + }), + __metadata("design:paramtypes", [ActivatedRoute, + NavController, + HttpClient, + LocalSettingsService, + ContextService, + ToastController, + TranslateService]) +], SharedPage); +export { SharedPage }; +//# sourceMappingURL=shared-page.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/share/shared-page.component.js.map b/out-tsc/app/app/social/share/shared-page.component.js.map new file mode 100644 index 000000000..a57212b0f --- /dev/null +++ b/out-tsc/app/app/social/share/shared-page.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"shared-page.component.js","sourceRoot":"","sources":["../../../../../src/app/social/share/shared-page.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAOhD,IAAM,UAAU,GAAhB,MAAM,UAAU;IAIrB,YACU,KAAqB,EACrB,OAAsB,EACtB,IAAgB,EAChB,QAA8B,EAC9B,OAAuB,EACvB,KAAsB,EACtB,SAA2B;QAN3B,UAAK,GAAL,KAAK,CAAgB;QACrB,YAAO,GAAP,OAAO,CAAe;QACtB,SAAI,GAAJ,IAAI,CAAY;QAChB,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,YAAO,GAAP,OAAO,CAAgB;QACvB,UAAK,GAAL,KAAK,CAAiB;QACtB,cAAS,GAAT,SAAS,CAAkB;QAVrC,YAAO,GAAG,IAAI,CAAC;QACf,UAAK,GAAG,KAAK,CAAC;IAUX,CAAC;IAEJ,QAAQ;QACN,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEK,YAAY;;YAChB,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAEtD,IAAI,GAAG,GAAG,IAAI,CAAC;YACf,IAAI;gBACF,GAAG,GAAG,MAAM,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;aAC1E;YAAC,OAAO,CAAC,EAAE;gBACV,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE;oBACtC,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,KAAK,EAAE,QAAQ;oBACf,QAAQ,EAAE,KAAK;oBACf,QAAQ,EAAE,CAAC;oBACX,eAAe,EAAE,IAAI;iBACtB,CAAC,CAAC;aACJ;YAED,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE;gBACjB,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC;gBACrC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE;oBAClC,WAAW,kCAAO,GAAG,CAAC,WAAW,KAAE,IAAI,GAAE;iBAC1C,CAAC,CAAC;aACJ;QACH,CAAC;KAAA;CACF,CAAA;AA9CY,UAAU;IALtB,SAAS,CAAC;QACT,QAAQ,EAAE,iBAAiB;QAC3B,WAAW,EAAE,8BAA8B;QAC3C,SAAS,EAAE,CAAC,8BAA8B,CAAC;KAC5C,CAAC;qCAMiB,cAAc;QACZ,aAAa;QAChB,UAAU;QACN,oBAAoB;QACrB,cAAc;QAChB,eAAe;QACX,gBAAgB;GAX1B,UAAU,CA8CtB;SA9CY,UAAU"} \ No newline at end of file diff --git a/out-tsc/app/app/social/share/shared-page.model.js b/out-tsc/app/app/social/share/shared-page.model.js new file mode 100644 index 000000000..d58f35be6 --- /dev/null +++ b/out-tsc/app/app/social/share/shared-page.model.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=shared-page.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/share/shared-page.model.js.map b/out-tsc/app/app/social/share/shared-page.model.js.map new file mode 100644 index 000000000..f20d3647f --- /dev/null +++ b/out-tsc/app/app/social/share/shared-page.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"shared-page.model.js","sourceRoot":"","sources":["../../../../../src/app/social/share/shared-page.model.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/out-tsc/app/app/social/share/shared-page.module.js b/out-tsc/app/app/social/share/shared-page.module.js new file mode 100644 index 000000000..4a33e4e74 --- /dev/null +++ b/out-tsc/app/app/social/share/shared-page.module.js @@ -0,0 +1,30 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { RouterModule } from '@angular/router'; +import { IonicModule } from '@ionic/angular'; +import { HttpClientModule } from '@angular/common/http'; +import { SharedPage } from './shared-page.component'; +import { TranslateModule } from '@ngx-translate/core'; +let SharedPageModule = class SharedPageModule { +}; +SharedPageModule = __decorate([ + NgModule({ + declarations: [SharedPage], + imports: [ + CommonModule, + IonicModule, + TranslateModule.forChild(), + HttpClientModule, + RouterModule.forChild([ + { + path: ':uuid', + pathMatch: 'full', + component: SharedPage + } + ]) + ], + }) +], SharedPageModule); +export { SharedPageModule }; +//# sourceMappingURL=shared-page.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/share/shared-page.module.js.map b/out-tsc/app/app/social/share/shared-page.module.js.map new file mode 100644 index 000000000..74ff0cd7c --- /dev/null +++ b/out-tsc/app/app/social/share/shared-page.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"shared-page.module.js","sourceRoot":"","sources":["../../../../../src/app/social/share/shared-page.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AAkB7C,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAAI,CAAA;AAApB,gBAAgB;IAhB5B,QAAQ,CAAC;QACR,YAAY,EAAE,CAAC,UAAU,CAAC;QAC1B,OAAO,EAAE;YACP,YAAY;YACZ,WAAW;YACX,eAAe,CAAC,QAAQ,EAAE;YAC1B,gBAAgB;YAChB,YAAY,CAAC,QAAQ,CAAC;gBACpB;oBACE,IAAI,EAAE,OAAO;oBACb,SAAS,EAAE,MAAM;oBACjB,SAAS,EAAE,UAAU;iBACtB;aACF,CAAC;SACH;KACF,CAAC;GACW,gBAAgB,CAAI;SAApB,gBAAgB"} \ No newline at end of file diff --git a/out-tsc/app/app/social/share/shared-resource.utils.js b/out-tsc/app/app/social/share/shared-resource.utils.js new file mode 100644 index 000000000..72a9c4eb7 --- /dev/null +++ b/out-tsc/app/app/social/share/shared-resource.utils.js @@ -0,0 +1,22 @@ +import { __awaiter } from "tslib"; +import { lastValueFrom } from 'rxjs'; +export class SharedResourceUtils { + static downloadByUuid(http, peerUrl, uuid, opts) { + return __awaiter(this, void 0, void 0, function* () { + console.debug(`Downloading shared resource from ${peerUrl} {${uuid}}...`); + const url = `${peerUrl.replace(/\/$/, '')}/download/public/${uuid}.json`; + const res = yield lastValueFrom(http.get(url, { + params: (opts === null || opts === void 0 ? void 0 : opts.param) ? opts.param : {}, + })); + return { + uuid: res.uuid, + shareLink: res.shareLink, + path: res.path, + queryParams: res.queryParams, + creationDate: res.creationDate, + content: res.content, + }; + }); + } +} +//# sourceMappingURL=shared-resource.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/share/shared-resource.utils.js.map b/out-tsc/app/app/social/share/shared-resource.utils.js.map new file mode 100644 index 000000000..cb1c18b3a --- /dev/null +++ b/out-tsc/app/app/social/share/shared-resource.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"shared-resource.utils.js","sourceRoot":"","sources":["../../../../../src/app/social/share/shared-resource.utils.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,OAAgB,mBAAmB;IACvC,MAAM,CAAO,cAAc,CAAC,IAAgB,EAAE,OAAe,EAAE,IAAY,EAAE,IAAqB;;YAChG,OAAO,CAAC,KAAK,CAAC,oCAAoC,OAAO,KAAK,IAAI,MAAM,CAAC,CAAC;YAE1E,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,IAAI,OAAO,CAAC;YACzE,MAAM,GAAG,GAAG,MAAM,aAAa,CAC7B,IAAI,CAAC,GAAG,CAAgB,GAAG,EAAE;gBAC3B,MAAM,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;aACtC,CAAC,CACH,CAAC;YAEF,OAAO;gBACL,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB,CAAC;QACJ,CAAC;KAAA;CACF"} \ No newline at end of file diff --git a/out-tsc/app/app/social/social-routing.module.js b/out-tsc/app/app/social/social-routing.module.js new file mode 100644 index 000000000..f020fce2c --- /dev/null +++ b/out-tsc/app/app/social/social-routing.module.js @@ -0,0 +1,41 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { AppCoreModule } from '@app/core/core.module'; +const routes = [ + { + path: '', + loadChildren: () => import('./share/shared-page.module').then(m => m.SharedPageModule), + data: { + preload: false, + } + }, + { + path: 'share/report', + children: [ + { + path: 'observation/:uuid', + loadChildren: () => import('@app/trip/observedlocation/report/observed-location-report-routing.module').then(m => m.AppObservedLocationReportRoutingModule), + data: {} + }, + ], + }, + { + path: 'report-observation', + loadChildren: () => import('@app/trip/observedlocation/report/observed-location-report-routing.module').then(m => m.AppObservedLocationReportRoutingModule), + outlet: 'shareContent', + }, +]; +let SocialRoutingModule = class SocialRoutingModule { +}; +SocialRoutingModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + RouterModule.forChild(routes), + ], + declarations: [], + }) +], SocialRoutingModule); +export { SocialRoutingModule }; +//# sourceMappingURL=social-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/social-routing.module.js.map b/out-tsc/app/app/social/social-routing.module.js.map new file mode 100644 index 000000000..a0c544bdb --- /dev/null +++ b/out-tsc/app/app/social/social-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"social-routing.module.js","sourceRoot":"","sources":["../../../../src/app/social/social-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,YAAY,EAAS,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AAEpD,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,EAAE;QACR,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACtF,IAAI,EAAE;YACJ,OAAO,EAAE,KAAK;SACf;KACF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,mBAAmB;gBACzB,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,2EAA2E,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sCAAsC,CAAC;gBAC3J,IAAI,EAAE,EACL;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,2EAA2E,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sCAAsC,CAAC;QAC3J,MAAM,EAAE,cAAc;KACvB;CACF,CAAC;AASK,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;CAAI,CAAA;AAAvB,mBAAmB;IAP/B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC9B;QACD,YAAY,EAAE,EAAE;KACjB,CAAC;GACW,mBAAmB,CAAI;SAAvB,mBAAmB"} \ No newline at end of file diff --git a/out-tsc/app/app/social/social.module.js b/out-tsc/app/app/social/social.module.js new file mode 100644 index 000000000..f1f628862 --- /dev/null +++ b/out-tsc/app/app/social/social.module.js @@ -0,0 +1,26 @@ +import { __decorate } from "tslib"; +import { SocialModule } from '@sumaris-net/ngx-components'; +import { AppCoreModule } from '@app/core/core.module'; +import { NgModule } from '@angular/core'; +import { AppJobReportModule } from '@app/social/job/report/job-report.module'; +import { AppUserEventModule } from '@app/social/user-event/user-event.module'; +let AppSocialModule = class AppSocialModule { +}; +AppSocialModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + SocialModule, + // Sub modules + AppJobReportModule, + AppUserEventModule, + ], + exports: [ + // Sub modules + AppJobReportModule, + AppUserEventModule, + ], + }) +], AppSocialModule); +export { AppSocialModule }; +//# sourceMappingURL=social.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/social.module.js.map b/out-tsc/app/app/social/social.module.js.map new file mode 100644 index 000000000..4e6f7405c --- /dev/null +++ b/out-tsc/app/app/social/social.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"social.module.js","sourceRoot":"","sources":["../../../../src/app/social/social.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAiBvE,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,eAAe;IAf3B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,YAAY;YAEZ,cAAc;YACd,kBAAkB;YAClB,kBAAkB;SACnB;QACD,OAAO,EAAE;YACP,cAAc;YACd,kBAAkB;YAClB,kBAAkB;SACnB;KACF,CAAC;GACW,eAAe,CAAG;SAAlB,eAAe"} \ No newline at end of file diff --git a/out-tsc/app/app/social/user-event/user-event.fragments.js b/out-tsc/app/app/social/user-event/user-event.fragments.js new file mode 100644 index 000000000..188c08cbd --- /dev/null +++ b/out-tsc/app/app/social/user-event/user-event.fragments.js @@ -0,0 +1,33 @@ +import { gql } from '@apollo/client/core'; +export const UserEventFragments = { + userEvent: gql `fragment UserEventFragment on UserEventVO { + id + issuer + updateDate + creationDate + level + type + recipient + hash + signature + readDate + readSignature + hasContent + content + __typename + }`, + lightUserEvent: gql `fragment LightUserEventFragment on UserEventVO { + id + issuer + recipient + updateDate + creationDate + level + type + readDate + readSignature + hasContent + __typename + }` +}; +//# sourceMappingURL=user-event.fragments.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/user-event/user-event.fragments.js.map b/out-tsc/app/app/social/user-event/user-event.fragments.js.map new file mode 100644 index 000000000..efe1a8256 --- /dev/null +++ b/out-tsc/app/app/social/user-event/user-event.fragments.js.map @@ -0,0 +1 @@ +{"version":3,"file":"user-event.fragments.js","sourceRoot":"","sources":["../../../../../src/app/social/user-event/user-event.fragments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,qBAAqB,CAAC;AAExC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,SAAS,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;IAeZ;IACF,cAAc,EAAE,GAAG,CAAA;;;;;;;;;;;;IAYjB;CACH,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/social/user-event/user-event.model.js b/out-tsc/app/app/social/user-event/user-event.model.js new file mode 100644 index 000000000..80c3f9f18 --- /dev/null +++ b/out-tsc/app/app/social/user-event/user-event.model.js @@ -0,0 +1,150 @@ +var UserEvent_1, UserEventFilter_1; +import { __decorate, __metadata } from "tslib"; +import { Entity, EntityClass, EntityFilter, fromDateISOString, isNil, isNotEmptyArray, isNotNil, toDateISOString, isNotNilOrBlank } from '@sumaris-net/ngx-components'; +export const UserEventTypeEnum = Object.freeze({ + FEED: 'FEED', + DEBUG_DATA: 'DEBUG_DATA', + INBOX_MESSAGE: 'INBOX_MESSAGE', + JOB: 'JOB' + // TODO: add all types of event +}); +let UserEvent = UserEvent_1 = class UserEvent extends Entity { + constructor() { + super(UserEvent_1.TYPENAME); + } + asObject(opts) { + const target = super.asObject(opts); + target.creationDate = toDateISOString(this.creationDate); + target.readDate = toDateISOString(this.readDate); + // Serialize content + if (typeof this.content === 'object') { + target.content = JSON.stringify(this.content); + } + else if (typeof this.content === 'string') { + target.content = this.content; + } + else { + target.content = null; + } + target.hasContent = this.hasContent || isNotNilOrBlank(target.content); + if (opts === null || opts === void 0 ? void 0 : opts.minify) { + delete target.avatar; + delete target.avatarIcon; + delete target.icon; + delete target.actions; + delete target.hasContent; + } + // Pod + if ((opts === null || opts === void 0 ? void 0 : opts.keepLocalId) === false) { + delete target.jobId; + } + return target; + } + fromObject(source) { + Object.assign(this, source); // Copy all properties + super.fromObject(source); + this.creationDate = fromDateISOString(source.creationDate); + this.readDate = fromDateISOString(source.readDate); + try { + // Deserialize content + if (typeof source.content === 'string' && source.content.startsWith('{')) { + this.content = JSON.parse(source.content); + } + } + catch (err) { + console.error('Error during UserEvent deserialization', err); + this.content = null; + } + this.hasContent = this.hasContent || !!this.content || false; + } + addAction(action) { + if (!action) + throw new Error(`Argument 'action' is required`); + if (!action.name) + throw new Error(`Argument 'action.name' is required`); + if (!action.executeAction || typeof action.executeAction !== 'function') + throw new Error(`Argument 'action.executeAction' is required, and should be a function`); + this.actions = this.actions || []; + this.actions.push(action); + } + addDefaultAction(action) { + this.addAction(Object.assign(Object.assign({ executeAction: null }, action), { default: true, name: action.name || 'default', title: action.title || action.name })); + } +}; +UserEvent = UserEvent_1 = __decorate([ + EntityClass({ typename: 'UserEventVO' }), + __metadata("design:paramtypes", []) +], UserEvent); +export { UserEvent }; +let UserEventFilter = UserEventFilter_1 = class UserEventFilter extends EntityFilter { + constructor() { + super(UserEventFilter_1.TYPENAME); + this.types = []; + this.levels = []; + this.issuers = []; + this.recipients = []; + this.startDate = null; + this.includedIds = []; + this.excludeRead = false; + this.jobId = null; + this.source = null; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.types = source.types || []; + this.levels = source.levels || []; + this.issuers = source.issuers || []; + this.recipients = source.recipients || []; + this.startDate = fromDateISOString(source.startDate); + this.includedIds = source.includedIds || []; + this.excludeRead = source.excludeRead || false; + this.jobId = source.jobId; + this.source = source.source; + } + asObject(opts) { + const target = super.asObject(opts); + target.source = target.source || (target.jobId && 'job:' + target.jobId) || undefined; + // Pod + if ((opts === null || opts === void 0 ? void 0 : opts.keepLocalId) === false) { + delete target.jobId; + } + return target; + } + buildFilter() { + const filterFns = super.buildFilter(); + if (isNotEmptyArray(this.types)) { + filterFns.push((t) => this.types.includes(t.type)); + } + if (isNotEmptyArray(this.levels)) { + filterFns.push((t) => this.levels.includes(t.level)); + } + if (isNotEmptyArray(this.issuers)) { + filterFns.push((t) => this.issuers.includes(t.issuer)); + } + if (isNotEmptyArray(this.recipients)) { + filterFns.push((t) => this.recipients.includes(t.recipient)); + } + if (isNotNil(this.startDate)) { + filterFns.push((t) => this.startDate.isSameOrBefore(t.creationDate)); + } + if (isNotEmptyArray(this.includedIds)) { + filterFns.push((t) => this.includedIds.includes(t.id)); + } + if (this.excludeRead === true) { + filterFns.push((t) => isNil(t.readDate)); + } + if (isNotNil(this.jobId)) { + filterFns.push(t => t.jobId === this.jobId); + } + if (isNotNil(this.source)) { + filterFns.push(t => t.source === this.source); + } + return filterFns; + } +}; +UserEventFilter = UserEventFilter_1 = __decorate([ + EntityClass({ typename: 'UserEventFilterVO' }), + __metadata("design:paramtypes", []) +], UserEventFilter); +export { UserEventFilter }; +//# sourceMappingURL=user-event.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/user-event/user-event.model.js.map b/out-tsc/app/app/social/user-event/user-event.model.js.map new file mode 100644 index 000000000..35379a661 --- /dev/null +++ b/out-tsc/app/app/social/user-event/user-event.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"user-event.model.js","sourceRoot":"","sources":["../../../../../src/app/social/user-event/user-event.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/social/user-event/user-event.module.js b/out-tsc/app/app/social/user-event/user-event.module.js new file mode 100644 index 000000000..cc27160ea --- /dev/null +++ b/out-tsc/app/app/social/user-event/user-event.module.js @@ -0,0 +1,25 @@ +import { __decorate } from "tslib"; +import { SocialModule, UserEventModule } from '@sumaris-net/ngx-components'; +import { AppCoreModule } from '@app/core/core.module'; +import { NgModule } from '@angular/core'; +import { UserEventsTable } from '@app/social/user-event/user-events.table'; +let AppUserEventModule = class AppUserEventModule { +}; +AppUserEventModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + SocialModule, + UserEventModule + ], + declarations: [ + UserEventsTable + ], + exports: [ + // Components + UserEventsTable + ] + }) +], AppUserEventModule); +export { AppUserEventModule }; +//# sourceMappingURL=user-event.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/user-event/user-event.module.js.map b/out-tsc/app/app/social/user-event/user-event.module.js.map new file mode 100644 index 000000000..02cdbc30a --- /dev/null +++ b/out-tsc/app/app/social/user-event/user-event.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"user-event.module.js","sourceRoot":"","sources":["../../../../../src/app/social/user-event/user-event.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAiBpE,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;CAC9B,CAAA;AADY,kBAAkB;IAd9B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,YAAY;YACZ,eAAe;SAChB;QACD,YAAY,EAAE;YACZ,eAAe;SAChB;QACD,OAAO,EAAE;YACP,aAAa;YACb,eAAe;SAChB;KACF,CAAC;GACW,kBAAkB,CAC9B;SADY,kBAAkB"} \ No newline at end of file diff --git a/out-tsc/app/app/social/user-event/user-event.service.js b/out-tsc/app/app/social/user-event/user-event.service.js new file mode 100644 index 000000000..962c97d0d --- /dev/null +++ b/out-tsc/app/app/social/user-event/user-event.service.js @@ -0,0 +1,430 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { AbstractUserEventService, AccountService, Entity, fromDateISOString, GraphqlService, isEmptyArray, isNotNil, MenuService, NetworkService, Person, PersonService, Toasts, } from '@sumaris-net/ngx-components'; +import { TranslateService } from '@ngx-translate/core'; +import gql from 'graphql-tag'; +import { UserEvent, UserEventFilter, UserEventTypeEnum } from '@app/social/user-event/user-event.model'; +import { environment } from '@environments/environment'; +import { NavController, ToastController } from '@ionic/angular'; +import { UserEventFragments } from './user-event.fragments'; +import { filter, map } from 'rxjs/operators'; +import { CacheService } from 'ionic-cache'; +import { Job } from '@app/social/job/job.model'; +import { JobService } from '@app/social/job/job.service'; +import { isNonEmptyArray } from '@apollo/client/utilities'; +const queries = { + loadContent: gql ` + query UserEventContent($id: Int!) { + data: userEvents(filter: { includedIds: [$id], excludeRead: false }, page: { offset: 0, size: 1 }) { + id + content + } + } + `, + loadAll: gql ` + query UserEvents($filter: UserEventFilterVOInput, $page: PageInput) { + data: userEvents(filter: $filter, page: $page) { + ...LightUserEventFragment + } + total: userEventsCount(filter: $filter) + } + ${UserEventFragments.lightUserEvent} + `, + loadAllWithContent: gql ` + query UserEventsWithContent($filter: UserEventFilterVOInput, $page: PageInput) { + data: userEvents(filter: $filter, page: $page) { + ...UserEventFragment + } + total: userEventsCount(filter: $filter) + } + ${UserEventFragments.userEvent} + `, + count: gql ` + query UserEventsCount($filter: UserEventFilterVOInput) { + total: userEventsCount(filter: $filter) + } + `, +}; +const mutations = { + save: gql `mutation SaveUserEvent($data: UserEventVOInput) { + data: saveUserEvent(userEvent: $data) { + ...UserEventFragment + } + } + ${UserEventFragments.userEvent}`, + markAsRead: gql `mutation MarkAsReadUserEvents($ids: [Int]) { + markAsReadUserEvents(ids: $ids) + }`, + deleteByIds: gql `mutation DeleteUserEvents($ids: [Int]) { + deleteUserEvents(ids: $ids) + }`, +}; +const subscriptions = { + listenAllChanges: gql `subscription UpdateUserEvents($filter: UserEventFilterVOInput, $interval: Int) { + data: updateUserEvents(filter: $filter, interval: $interval) { + ...UserEventFragment + } + } + ${UserEventFragments.userEvent}`, + listenCountChanges: gql `subscription UpdateUserEventsCount($filter: UserEventFilterVOInput, $interval: Int) { + total: updateUserEventsCount(filter: $filter, interval: $interval) + }` +}; +const CacheKeys = { + CACHE_GROUP: UserEvent.TYPENAME, + PERSON_BY_PUBKEY: 'personByPubkey' +}; +let UserEventService = class UserEventService extends AbstractUserEventService { + constructor(graphql, accountService, network, translate, toastController, personService, cache, jobService, menuService, navController) { + super(graphql, accountService, network, translate, { + queries, + mutations, + subscriptions, + production: environment.production + }); + this.graphql = graphql; + this.accountService = accountService; + this.network = network; + this.translate = translate; + this.toastController = toastController; + this.personService = personService; + this.cache = cache; + this.jobService = jobService; + this.menuService = menuService; + this.navController = navController; + // Customize icons + this.registerListener({ + accept: () => true, + onReceived: (e) => this.onReceived(e) + }); + } + loadContent(id, opts) { + return __awaiter(this, void 0, void 0, function* () { + try { + const { data } = yield this.graphql.query(Object.assign(Object.assign({ query: queries.loadContent }, opts), { variables: { id } })); + const entity = data === null || data === void 0 ? void 0 : data[0]; + return entity && JSON.parse(entity.content) || undefined; + } + catch (err) { + console.error('Cannot load event content:', err); + return null; + } + }); + } + watchAll(offset, size, sortBy, sortDirection, filter, options) { + return super.watchAll(offset, size, sortBy, sortDirection, filter, options); + } + watchPage(page, filter, opts) { + filter = filter || this.defaultFilter(); + if (!filter.startDate) { + filter.startDate = fromDateISOString('1970-01-01T00:00:00.000Z'); + } + return super.watchPage(Object.assign(Object.assign({}, page), { sortBy: 'creationDate', sortDirection: 'desc' }), filter, Object.assign({ fetchPolicy: 'no-cache', withContent: false }, opts)); + } + listenAllChanges(filter, options) { + return super.listenAllChanges(filter, Object.assign(Object.assign({}, options), { withContent: true })); + } + listenCountChanges(filter, options) { + filter = filter || this.defaultFilter(); + filter.excludeRead = true; + return super.listenCountChanges(filter, Object.assign(Object.assign({}, options), { fetchPolicy: 'no-cache' })); + } + load(id, opts) { + return __awaiter(this, void 0, void 0, function* () { + const filter = { includedIds: [id] }; + // Allow admin to load SYSTEM notifications + if (this.accountService.isAdmin()) { + filter.recipients = [this.defaultRecipient(), 'SYSTEM']; + } + const { data } = yield this.loadPage({ offset: 0, size: 1 }, filter, Object.assign(Object.assign({ withContent: true }, opts), { withTotal: false })); + const entity = data && data[0]; + return entity; + }); + } + canUserWrite(data, opts) { + return false; // Cannot write an existing UserEvent + } + listenChanges(id, opts) { + const f = this.defaultFilter(); + f.includedIds = [id]; + return super.listenAllChanges(f, Object.assign(Object.assign({}, opts), { withContent: true })) + .pipe(map(res => res && res[0]), filter(isNotNil)); + } + asFilter(filter) { + return UserEventFilter.fromObject(filter); + } + fromObject(source) { + return UserEvent.fromObject(source); + } + add(entity) { + return __awaiter(this, void 0, void 0, function* () { + throw new Error(`Don't use add for the moment`); + }); + } + showToastErrorWithContext(opts) { + return __awaiter(this, void 0, void 0, function* () { + let message = opts.message || (opts.error && opts.error.message || opts.error); + // Make sure message a string + if (!message || typeof message !== 'string') { + message = 'ERROR.UNKNOWN_TECHNICAL_ERROR'; + } + // If offline, display a simple alert + if (this.network.offline) { + this.showToast({ message, type: 'error' }); + return; + } + // Translate the message (to be able to extract details content) + message = this.translate.instant(message); + // Clean details parts + if (message && message.indexOf('') !== -1) { + message = message.substring(0, message.indexOf('') - 1); + } + const res = yield this.showToast({ + type: 'error', + duration: 15000, + message: message + '

' + this.translate.instant('CONFIRM.SEND_DEBUG_DATA') + '', + buttons: [{ + icon: 'bug', + text: this.translate.instant('COMMON.BTN_SEND'), + role: 'send' + }] + }); + if (!res || res.role !== 'send') + return; + // Send debug data + try { + if (this._debug) + console.debug('Sending debug data...'); + // Call content factory + let context = opts && opts.context; + if (typeof context === 'function') { + context = context(); + } + if (context instanceof Promise) { + context = yield context; + } + // Send the message + const userEvent = yield this.sendDataAsEvent({ + message, + error: opts.error || undefined, + context: this.convertObjectToString(context) + }); + console.info('Debug data successfully sent to admin', userEvent); + this.showToast({ + type: 'info', + message: 'INFO.DEBUG_DATA_SEND', + showCloseButton: true + }); + } + catch (err) { + console.error('Error while sending debug data:', err); + } + }); + } + sendDebugData(data) { + return __awaiter(this, void 0, void 0, function* () { + yield this.sendDataAsEvent(data); + }); + } + getPersonByPubkey(pubkey, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!pubkey || pubkey === 'SYSTEM') + return null; + if (!opts || opts.cache !== false) { + const cacheKey = [CacheKeys.PERSON_BY_PUBKEY, pubkey].join('|'); + return this.cache.getOrSetItem(cacheKey, () => this.getPersonByPubkey(pubkey, { cache: false, toEntity: false }), CacheKeys.CACHE_GROUP) + .then(json => (!opts || opts.toEntity !== false) ? Person.fromObject(json || {}) : (json || { pubkey })); + } + // TODO use this.personService.loadByPubkey() instead + const { data } = yield this.personService.loadAll(0, 1, null, null, { pubkey }, Object.assign({ withTotal: false }, opts)); + const entity = isNonEmptyArray(data) + ? data[0] + : (opts === null || opts === void 0 ? void 0 : opts.toEntity) !== false ? Person.fromObject({ pubkey }) : { pubkey }; + return entity; + }); + } + /* -- protected methods -- */ + defaultFilter() { + const target = super.defaultFilter(); + // If user is admin: add the SYSTEM recipient + if (this.accountService.isAdmin() && (isEmptyArray(target.recipients) || !target.recipients.includes('SYSTEM'))) { + // TODO: fixme: very slow if some DEBUG data are fetched (e.g in ADAP Pod) + //target.recipients = [...target.recipients, 'SYSTEM']; + } + return target; + } + defaultRecipient() { + return this.accountService.isLogin() ? this.accountService.person.pubkey : undefined; + } + onReceived(source) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + // DEBUG + console.debug('[user-event-service] Converting user event', source); + // Choose default avatarIcon + switch (source.level) { + case 'ERROR': + source.avatarIcon = { icon: 'close-circle-outline', color: 'danger' }; + break; + case 'WARNING': + source.avatarIcon = { icon: 'warning-outline', color: 'warning' }; + break; + case 'INFO': + source.avatarIcon = { icon: 'information-circle-outline' }; + break; + case 'DEBUG': + source.avatarIcon = { icon: 'cog', color: 'medium' }; + break; + } + // Add message + source.message = source.message || this.translate.instant(`SOCIAL.USER_EVENT.TYPE_ENUM.${source.type}`); + let issuer; + // Analyse type + switch (source.type) { + // Debug data + case UserEventTypeEnum.FEED: + source.avatarIcon = { matIcon: 'rss_feed' }; + source.icon = { matIcon: 'information-circle-outline', color: 'success' }; + break; + // Debug data + case UserEventTypeEnum.DEBUG_DATA: + issuer = yield this.getPersonByPubkey(source.issuer); + source.icon = { matIcon: 'bug_report', color: 'danger' }; + source.message = this.translate.instant('SOCIAL.USER_EVENT.TYPE_ENUM.DEBUG_DATA', Object.assign(Object.assign({}, source), { message: ((_a = source.content) === null || _a === void 0 ? void 0 : _a.message) || '', issuer: this.personToString(issuer, { withDepartment: true }) })); + source.addDefaultAction({ + executeAction: () => this.navigate(['admin', 'config'], { queryParams: { tab: '2' } }) + }); + break; + // Inbox messages: + case UserEventTypeEnum.INBOX_MESSAGE: + issuer = yield this.getPersonByPubkey(source.issuer); + if (isNotNil(issuer === null || issuer === void 0 ? void 0 : issuer.avatar)) { + source.avatar = issuer === null || issuer === void 0 ? void 0 : issuer.avatar; + } + else if (source.issuer === 'SYSTEM') { + source.avatarIcon = { matIcon: 'person' }; + } + else if (isNotNil(issuer === null || issuer === void 0 ? void 0 : issuer.id)) { + source.avatarJdenticon = issuer === null || issuer === void 0 ? void 0 : issuer.id; + source.avatarIcon = null; + } + else { + source.avatarIcon = { matIcon: 'mail' }; + } + source.icon = { matIcon: 'inbox', color: 'success' }; + source.message = this.translate.instant('SOCIAL.USER_EVENT.TYPE_ENUM.INBOX_MESSAGE', { issuer: this.personToString(issuer) }); + source.addDefaultAction({ + executeAction: (e) => this.navigate(['inbox', e.id]) + }); + break; + // Job event: + case UserEventTypeEnum.JOB: + if (source.hasContent && !source.content) { + source.content = yield this.loadContent(source.id, { fetchPolicy: 'no-cache' }); + } + const job = Job.fromObject(source.content || {}); + const status = job.status + || (source.level === 'INFO' && 'SUCCESS') + || (source.level === 'ERROR' && 'ERROR') + || 'PENDING'; + const color = (status === 'PENDING' && 'secondary') + || (status === 'RUNNING' && 'tertiary') + || (status === 'SUCCESS' && 'success') + || 'danger'; + const matIcon = (status === 'PENDING' && 'schedule') + || (status === 'RUNNING' && 'pending') + || (status === 'SUCCESS' && 'check_circle') + || (status === 'WARNING' && 'warning') + || (status === 'CANCELLED' && 'cancel') + || 'error'; + source.icon = { matIcon, color }; + //source.avatarIcon = { matIcon: 'inbox', color: 'success'}; + job.name = job.name || this.translate.instant('SOCIAL.JOB.UNKNOWN_JOB'); + job.status = this.translate.instant('SOCIAL.JOB.STATUS_ENUM.' + status); + source.message = this.translate.instant('SOCIAL.USER_EVENT.TYPE_ENUM.JOB', job); + this.decorateJobUserEvent(source, job); + break; + default: + if (this._debug) + console.debug(this._logPrefix + `[user-event-service] Unknown event type '${source.type}': `, source); + break; + } + return source; + }); + } + convertObjectToString(data) { + if (typeof data === 'string') { + return data; + } + // Serialize content into string + else if (typeof data === 'object') { + if (data instanceof Entity) { + return JSON.stringify(data.asObject({ keepTypename: true, keepLocalId: true, minify: false })); + } + else { + return JSON.stringify(data); + } + } + } + sendDataAsEvent(data) { + const userEvent = new UserEvent(); + userEvent.type = UserEventTypeEnum.DEBUG_DATA; + userEvent.content = data; + return this.save(userEvent); + } + showToast(opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.toastController) + throw new Error('Missing toastController in component\'s constructor'); + return yield Toasts.show(this.toastController, this.translate, opts); + }); + } + personToString(obj, opts) { + var _a, _b, _c; + if (!obj || !obj.id) { + return ((_a = obj === null || obj === void 0 ? void 0 : obj.pubkey) === null || _a === void 0 ? void 0 : _a.substring(0, 8)) || '?'; + } + if ((opts === null || opts === void 0 ? void 0 : opts.withDepartment) && ((_b = obj.department) === null || _b === void 0 ? void 0 : _b.label)) { + return obj.firstName + ' ' + obj.lastName + ' (' + ((_c = obj.department) === null || _c === void 0 ? void 0 : _c.label) + ')'; + } + return obj && obj.id && (obj.firstName + ' ' + obj.lastName) || undefined; + } + decorateJobUserEvent(source, job) { + console.debug('[user-event-service] Decorate user event on Job:', job); + source.addDefaultAction({ + executeAction: (e) => this.navigate(['vessels']) + }); + if (job.report) { + source.addAction({ + name: 'SOCIAL.JOB.BTN_REPORT', + title: 'SOCIAL.JOB.BTN_REPORT_HELP', + iconRef: { icon: 'document-outline' }, + executeAction: (e) => { + this.menuService.close(); + this.jobService.openJobReport(job); + } + }); + } + } + navigate(commands, options) { + return __awaiter(this, void 0, void 0, function* () { + yield this.navController.navigateRoot(commands, options); + yield this.menuService.close(); + }); + } +}; +UserEventService = __decorate([ + Injectable(), + __metadata("design:paramtypes", [GraphqlService, + AccountService, + NetworkService, + TranslateService, + ToastController, + PersonService, + CacheService, + JobService, + MenuService, + NavController]) +], UserEventService); +export { UserEventService }; +//# sourceMappingURL=user-event.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/user-event/user-event.service.js.map b/out-tsc/app/app/social/user-event/user-event.service.js.map new file mode 100644 index 000000000..e35ecc498 --- /dev/null +++ b/out-tsc/app/app/social/user-event/user-event.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"user-event.service.js","sourceRoot":"","sources":["../../../../../src/app/social/user-event/user-event.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/social/user-event/user-events.table.js b/out-tsc/app/app/social/user-event/user-events.table.js new file mode 100644 index 000000000..f46910b2a --- /dev/null +++ b/out-tsc/app/app/social/user-event/user-events.table.js @@ -0,0 +1,146 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Injector, Input } from '@angular/core'; +import { UserEventService } from './user-event.service'; +import { AccountService, APP_USER_EVENT_SERVICE, AppTable, EntitiesStorage, EntitiesTableDataSource, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, toBoolean, } from '@sumaris-net/ngx-components'; +import { UserEvent, UserEventFilter } from '@app/social/user-event/user-event.model'; +import { debounceTime, filter, map, mergeMap, switchMap } from 'rxjs/operators'; +const DEFAULT_ICONS_BY_TYPE = { + DEBUG_DATA: { matIcon: 'bug_report' }, + INBOX_MESSAGE: { matIcon: 'mail' } +}; +let UserEventsTable = class UserEventsTable extends AppTable { + constructor(injector, accountService, userEvenService, entities, cd) { + super(injector, + // columns + RESERVED_START_COLUMNS + .concat([ + 'creationDate', + 'icon', + 'message' + ]) + .concat(RESERVED_END_COLUMNS), null, null); + this.accountService = accountService; + this.userEvenService = userEvenService; + this.entities = entities; + this.cd = cd; + this.showPaginator = true; + this.i18nColumnPrefix = 'SOCIAL.USER_EVENT.'; + this.autoLoad = false; // this.start() + this.inlineEdition = false; + this.defaultSortBy = 'creationDate'; + this.defaultSortDirection = 'desc'; + this.mobile = this.settings.mobile; + } + ngOnInit() { + super.ngOnInit(); + // Load date/time pattern + this.dateTimePattern = this.translate.instant('COMMON.DATE_TIME_PATTERN'); + this.withContent = toBoolean(this.withContent, false); + this.showToolbar = toBoolean(this.showToolbar, !this.mobile); + const account = this.accountService.account; + const pubkey = account && account.pubkey; + this.isAdmin = this.accountService.isAdmin(); + this.canEdit = this.isAdmin || pubkey === this.recipient; + this.canDelete = this.canEdit; + this.allowRowDetail = this.onOpenRow.observed; + this.setDatasource(new EntitiesTableDataSource(UserEvent, this.userEvenService, null, { + prependNewElements: false, + suppressErrors: true, + watchAllOptions: { + withContent: this.withContent + } + })); + this.registerSubscription(this.onRefresh.pipe(debounceTime(200), mergeMap(_ => this.waitIdle({ stop: this.destroySubject })), map(_ => this.filter), switchMap(filter => this.userEvenService.listenCountChanges(Object.assign(Object.assign({}, filter), { excludeRead: false }))), filter(count => !this.loading && count !== this.totalRowCount)) + .subscribe(count => { + this.onRefresh.emit(); + })); + // Apply filter + { + const filter = this.filter || new UserEventFilter(); + if (this.recipient) { + filter.recipients = [this.recipient]; + } + this.setFilter(filter, { emitEvent: true }); + } + } + start() { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[user-event] Starting...'); + // Waiting account to be ready + yield this.accountService.ready(); + // Load data + this.onRefresh.emit(); + }); + } + getIcon(source) { + return source.icon || DEFAULT_ICONS_BY_TYPE[source.type]; + } + doAction(event, action, row) { + return __awaiter(this, void 0, void 0, function* () { + if (action && typeof action.executeAction === 'function') { + if (event) { + event.preventDefault(); // Avoid click row + event.stopPropagation(); + } + const userEvent = row.currentData; + this.markAsLoading(); + try { + let res = action.executeAction(userEvent); + res = (res instanceof Promise) ? yield res : res; + return res; + } + catch (err) { + this.setError(err && err.message || err); + console.error(`[user-event] Failed to execute action ${action.name}: ${err && err.message || err}`, err); + } + finally { + this.markAsLoaded(); + } + } + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", Boolean) +], UserEventsTable.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], UserEventsTable.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], UserEventsTable.prototype, "showPaginator", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], UserEventsTable.prototype, "recipient", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], UserEventsTable.prototype, "withContent", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], UserEventsTable.prototype, "defaultSortBy", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], UserEventsTable.prototype, "defaultSortDirection", void 0); +UserEventsTable = __decorate([ + Component({ + selector: 'app-user-events-table', + styleUrls: ['user-events.table.scss'], + templateUrl: './user-events.table.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __param(2, Inject(APP_USER_EVENT_SERVICE)), + __metadata("design:paramtypes", [Injector, + AccountService, + UserEventService, + EntitiesStorage, + ChangeDetectorRef]) +], UserEventsTable); +export { UserEventsTable }; +//# sourceMappingURL=user-events.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/social/user-event/user-events.table.js.map b/out-tsc/app/app/social/user-event/user-events.table.js.map new file mode 100644 index 000000000..b27a3c895 --- /dev/null +++ b/out-tsc/app/app/social/user-event/user-events.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"user-events.table.js","sourceRoot":"","sources":["../../../../../src/app/social/user-event/user-events.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.filter.js b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.filter.js new file mode 100644 index 000000000..534f7b8ba --- /dev/null +++ b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.filter.js @@ -0,0 +1,66 @@ +import { __decorate } from "tslib"; +import { EntityClass, EntityFilter, fromDateISOString, isNotNil, toDateISOString } from '@sumaris-net/ngx-components'; +let AggregatedLandingFilter = class AggregatedLandingFilter extends EntityFilter { + equals(f2) { + return isNotNil(f2) + && this.programLabel === f2.programLabel + && this.observedLocationId === f2.observedLocationId + && this.locationId === f2.locationId + && this.synchronizationStatus === f2.synchronizationStatus + && ((!this.startDate && !f2.startDate) || (this.startDate.isSame(f2.startDate))) + && ((!this.endDate && !f2.endDate) || (this.endDate.isSame(f2.endDate))); + } + fromObject(source) { + super.fromObject(source); + this.programLabel = source.programLabel; + this.startDate = fromDateISOString(source.startDate); + this.endDate = fromDateISOString(source.endDate); + this.locationId = source.locationId; + this.observedLocationId = source.observedLocationId; + this.synchronizationStatus = source.synchronizationStatus; + } + asObject(opts) { + const target = super.asObject(opts); + target.startDate = this.startDate && toDateISOString(this.startDate); + target.endDate = this.endDate && toDateISOString(this.endDate); + if (opts && opts.minify) { + delete target.id; + delete target.synchronizationStatus; + } + return target; + } + buildFilter() { + const filterFns = super.buildFilter(); + // FIXME: this properties cannot b filtered locally, because not exists ! + /*// Program + if (isNotNilOrBlank(this.programLabel)) { + const programLabel = this.programLabel; + filterFns.push(t => (t.program && t.program.label === this.programLabel)); + } + + // Location + if (isNotNil(this.locationId)) { + filterFns.push((entity) => entity.location && entity.location.id === this.locationId); + } + + // Start/end period + if (this.startDate) { + const startDate = this.startDate.clone(); + filterFns.push(t => t.dateTime && startDate.isSameOrBefore(t.dateTime)); + } + if (this.endDate) { + const endDate = this.endDate.clone().add(1, 'day').startOf('day'); + filterFns.push(t => t.dateTime && endDate.isAfter(t.dateTime)); + }*/ + // observedLocationId + if (isNotNil(this.observedLocationId)) { + filterFns.push((entity) => entity.observedLocationId === this.observedLocationId); + } + return filterFns; + } +}; +AggregatedLandingFilter = __decorate([ + EntityClass({ typename: 'AggregatedLandingFilterVO' }) +], AggregatedLandingFilter); +export { AggregatedLandingFilter }; +//# sourceMappingURL=aggregated-landing.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.filter.js.map b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.filter.js.map new file mode 100644 index 000000000..27d2e0e1a --- /dev/null +++ b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"aggregated-landing.filter.js","sourceRoot":"","sources":["../../../../../src/app/trip/aggregated-landing/aggregated-landing.filter.ts"],"names":[],"mappings":";AAAA,OAAO,EAEH,WAAW,EACX,YAAY,EAEZ,iBAAiB,EACjB,QAAQ,EACR,eAAe,EAClB,MAAM,6BAA6B,CAAC;AAM9B,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,YAAwD;IAWjG,MAAM,CAAC,EAA2B;QAC9B,OAAO,QAAQ,CAAC,EAAE,CAAC;eACZ,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC,YAAY;eACrC,IAAI,CAAC,kBAAkB,KAAK,EAAE,CAAC,kBAAkB;eACjD,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC,UAAU;eACjC,IAAI,CAAC,qBAAqB,KAAK,EAAE,CAAC,qBAAqB;eACvD,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;eAC7E,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,UAAU,CAAC,MAAW;QAClB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;QACpD,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;IAC9D,CAAC;IAED,QAAQ,CAAC,IAA4B;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/D,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YACvB,OAAO,MAAM,CAAC,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,qBAAqB,CAAC;SACrC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAES,WAAW;QACjB,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtC,yEAAyE;QACzE;;;;;;;;;;;;;;;;;;;WAmBG;QAEH,qBAAqB;QACrB,IAAI,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;YACnC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,kBAAkB,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC;SACrF;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;CAEJ,CAAA;AA3EY,uBAAuB;IADnC,WAAW,CAAC,EAAC,QAAQ,EAAE,2BAA2B,EAAC,CAAC;GACxC,uBAAuB,CA2EnC;SA3EY,uBAAuB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.form.js b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.form.js new file mode 100644 index 000000000..19ed30939 --- /dev/null +++ b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.form.js @@ -0,0 +1,224 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Injector, Input, Output } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { ModalController } from '@ionic/angular'; +import { AppForm, DateFormatService, fadeInOutAnimation, filterNotNil, firstNotNilPromise, FormArrayHelper, isNil, LocalSettingsService, NetworkService, SharedValidators, } from '@sumaris-net/ngx-components'; +import { BehaviorSubject, combineLatest } from 'rxjs'; +import { distinctUntilChanged, filter } from 'rxjs/operators'; +import { AggregatedLandingService } from './aggregated-landing.service'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { VesselActivity } from './aggregated-landing.model'; +import { VesselActivityValidatorService } from './vessel-activity.validator'; +import { getMaxRankOrder } from '@app/data/services/model/model.utils'; +import { environment } from '@environments/environment'; +export class AggregatedLandingFormOption { +} +let AggregatedLandingForm = class AggregatedLandingForm extends AppForm { + constructor(injector, dateFormat, formBuilder, dataService, vesselActivityValidatorService, referentialRefService, modalCtrl, settings, network, cd) { + super(injector, null); + this.dateFormat = dateFormat; + this.formBuilder = formBuilder; + this.dataService = dataService; + this.vesselActivityValidatorService = vesselActivityValidatorService; + this.referentialRefService = referentialRefService; + this.modalCtrl = modalCtrl; + this.settings = settings; + this.network = network; + this.cd = cd; + this._activityDirty = false; + this.showError = true; + this.openTrip = new EventEmitter(); + this.$data = new BehaviorSubject(undefined); + this.activityFocusIndex = -1; + this.$loadingControls = new BehaviorSubject(false); + this.controlsLoaded = false; + this.onRefresh = new EventEmitter(); + this.console = console; + this.mobile = this.settings.mobile; + this.acquisitionLevel = AcquisitionLevelCodes.LANDING; // default + this.debug = !environment.production; + } + get dirty() { + return super.dirty && this._activityDirty; + } + get loading() { + return this._loading; + } + get data() { + // Save active form before return data + this.saveActivitiesAt(this._activeDate); + return this.$data.getValue(); + } + set data(data) { + this.$data.next(data); + } + get value() { + throw new Error('The aggregated landing form has no form value accessible from outside'); + } + set value(value) { + throw new Error('The aggregated landing form has no form value accessible from outside'); + } + get activitiesForm() { + return this.form.controls.activities; + } + set options(option) { + this._options = option; + } + get options() { + return this._options; + } + ngOnInit() { + var _a, _b, _c, _d; + if (isNil(this._options)) { + console.warn('[aggregated-landing-form] No option found, the form will be unusable'); + } + this.dates = (_a = this._options) === null || _a === void 0 ? void 0 : _a.dates; + this.programLabel = (_b = this._options) === null || _b === void 0 ? void 0 : _b.programLabel; + this.acquisitionLevel = (_c = this._options) === null || _c === void 0 ? void 0 : _c.acquisitionLevel; + const form = this.formBuilder.group({ + date: [(_d = this._options) === null || _d === void 0 ? void 0 : _d.initialDate, Validators.compose([Validators.required, SharedValidators.validDate])], + activities: this.formBuilder.array([]) + }); + this.setForm(form); + this.form.controls.activities.valueChanges + .pipe(filter(() => !this._loading)) + .subscribe(value => { + if (this.debug) + console.debug('[aggregated-landing] activities changes', value); + this._activityDirty = true; + this.markForCheck(); + }); + this.initActivitiesHelper(); + const dateControl = this.form.get('date'); + this.registerSubscription(combineLatest([ + dateControl.valueChanges + .pipe(distinctUntilChanged()), + filterNotNil(this.$data) + ]) + .subscribe(_ => this.showAtDate(dateControl.value))); + super.ngOnInit(); + } + addActivity() { + if (this.debug) + console.debug('[aggregated-landing-form] addActivity'); + this.activitiesHelper.add(this.newActivity()); + if (!this.mobile) { + this.activityFocusIndex = this.activitiesHelper.size() - 1; + } + } + removeActivity(index) { + // TODO check data before remove + this.activitiesHelper.removeAt(index); + } + ready() { + return __awaiter(this, void 0, void 0, function* () { + // Wait pmfms load, and controls load + if (this.$loadingControls.getValue() === true && this.controlsLoaded === false) { + if (this.debug) + console.debug(`[aggregated-landings-form] waiting form to be ready...`); + yield firstNotNilPromise(this.$loadingControls + .pipe(filter((loadingControls) => loadingControls === false && this.controlsLoaded === true)), { stop: this.destroySubject }); + } + }); + } + get displayDateFn() { + return (obj) => this.dateFormat.transform(obj, { pattern: 'dddd L' }).toString(); + } + compareDateFn(d1, d2) { + return d1 && d2 && d1.isSame(d2) || false; + } + openTripClick(activity) { + if (!activity || !activity.tripId) { + console.warn(`Something is missing to open trip: observedLocationId=${activity && activity.observedLocationId}, tripId=${activity && activity.tripId}`); + return; + } + this.openTrip.emit({ activity }); + } + /* -- internal functions -- */ + initActivitiesHelper() { + this.activitiesHelper = new FormArrayHelper(FormArrayHelper.getOrCreateArray(this.formBuilder, this.form, 'activities'), (activity) => this.vesselActivityValidatorService.getFormGroup(activity), (v1, v2) => v1.rankOrder === v2.rankOrder, value => VesselActivity.isEmpty(value), { + allowEmptyArray: true + }); + } + showAtDate(date) { + if (!date) + throw new Error('[aggregated-landing-form] No date provided'); + console.debug(`[aggregated-landing-form] Show vessel activity at ${date}`); + this.markAsLoading(); + this.disable(); + if (this._activeDate && !date.isSame(this._activeDate)) { + // Save activities into data + this.saveActivitiesAt(this._activeDate); + } + // Load activities for this date + this._activeDate = date; + this.activities = this.$data.getValue().vesselActivities.filter(value => value.date.isSame(date)).slice() || [null]; + // remove all previous forms + this.activitiesForm.clear(); + // Add each activity with helper.add() + for (const activity of this.activities) { + this.activitiesHelper.add(activity); + } + this.enable(); + this.markAsLoaded(); + //setTimeout(() => this.markAsLoaded(), 500); + } + newActivity() { + const maxRankOrder = getMaxRankOrder(this.activities); + const activity = new VesselActivity(); + activity.rankOrder = maxRankOrder + 1; + activity.date = this.form.value.date; + this.activities.push(activity); + return activity; + } + saveActivitiesAt(date) { + if (isNil(date)) { + console.warn('Try to save activities at undefined date'); + return; + } + if (this.debug) + console.debug(`[aggregated-landing-form] save activities at ${date}`); + const newActivities = this.$data.value.vesselActivities.filter(value => !value.date.isSame(date)).slice() || []; + const activities = this.activitiesForm.value.map(v => VesselActivity.fromObject(v)); + newActivities.push(...activities); + this.$data.getValue().vesselActivities = newActivities; + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], AggregatedLandingForm.prototype, "showError", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], AggregatedLandingForm.prototype, "openTrip", void 0); +__decorate([ + Input(), + __metadata("design:type", AggregatedLandingFormOption), + __metadata("design:paramtypes", [AggregatedLandingFormOption]) +], AggregatedLandingForm.prototype, "options", null); +AggregatedLandingForm = __decorate([ + Component({ + selector: 'app-aggregated-landings-form', + templateUrl: './aggregated-landing.form.html', + styleUrls: ['./aggregated-landing.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + animations: [fadeInOutAnimation] + }), + __metadata("design:paramtypes", [Injector, + DateFormatService, + UntypedFormBuilder, + AggregatedLandingService, + VesselActivityValidatorService, + ReferentialRefService, + ModalController, + LocalSettingsService, + NetworkService, + ChangeDetectorRef]) +], AggregatedLandingForm); +export { AggregatedLandingForm }; +//# sourceMappingURL=aggregated-landing.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.form.js.map b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.form.js.map new file mode 100644 index 000000000..38b35e759 --- /dev/null +++ b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"aggregated-landing.form.js","sourceRoot":"","sources":["../../../../../src/app/trip/aggregated-landing/aggregated-landing.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.modal.js b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.modal.js new file mode 100644 index 000000000..6110ea1d1 --- /dev/null +++ b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.modal.js @@ -0,0 +1,166 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, ViewChild } from '@angular/core'; +import { AlertController, ModalController } from '@ionic/angular'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { AppFormUtils, isEmptyArray } from '@sumaris-net/ngx-components'; +import { TranslateService } from '@ngx-translate/core'; +import { AggregatedLandingForm, AggregatedLandingFormOption } from './aggregated-landing.form'; +import { AggregatedLanding } from './aggregated-landing.model'; +import { Alerts } from '@sumaris-net/ngx-components'; +import { referentialToString } from '@sumaris-net/ngx-components'; +import { isNil } from '@sumaris-net/ngx-components'; +let AggregatedLandingModal = class AggregatedLandingModal { + constructor(viewCtrl, alertCtrl, translate, cd) { + this.viewCtrl = viewCtrl; + this.alertCtrl = alertCtrl; + this.translate = translate; + this.cd = cd; + this.loading = true; + this._disabled = false; + this.subscription = new Subscription(); + this.$title = new BehaviorSubject(''); + } + get disabled() { + var _a; + return this._disabled || ((_a = this.form) === null || _a === void 0 ? void 0 : _a.disabled); + } + set disabled(value) { + this._disabled = value; + if (this.form) + this.form.disable(); + } + get canValidate() { + var _a; + return !this.loading && !this.disabled && !((_a = this.options) === null || _a === void 0 ? void 0 : _a.readonly); + } + get dirty() { + return this.form ? (this.form.enabled && this.form.dirty) : false; + } + ngOnInit() { + this.form.enable(); + this.form.data = this.data; + this.updateTitle(); + this.loading = false; + if (!this._disabled) { + this.enable(); + // Add first activity + if (isEmptyArray(this.data.vesselActivities)) { + this.addActivity(); + } + } + } + addActivity() { + return __awaiter(this, void 0, void 0, function* () { + yield this.form.ready(); + this.form.addActivity(); + }); + } + updateTitle() { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const title = yield this.translate.get('AGGREGATED_LANDING.TITLE', { vessel: referentialToString((_a = this.data) === null || _a === void 0 ? void 0 : _a.vesselSnapshot, ['exteriorMarking', 'name']) }).toPromise(); + this.$title.next(title); + }); + } + onSave(event) { + return __awaiter(this, void 0, void 0, function* () { + // Avoid multiple call + if (this.disabled) + return; + yield AppFormUtils.waitWhilePending(this.form); + if (this.form.invalid) { + AppFormUtils.logFormErrors(this.form.form); + this.form.markAllAsTouched(); + return; + } + this.loading = true; + try { + const value = { + aggregatedLanding: this.form.data, + saveOnDismiss: false, + tripToOpen: undefined + }; + this.disable(); + this.form.error = null; + yield this.viewCtrl.dismiss(value); + } + catch (err) { + this.form.error = err && err.message || err; + this.enable(); + this.loading = false; + } + }); + } + disable() { + this.form.disable(); + this._disabled = true; + } + enable() { + this.form.enable(); + this._disabled = false; + } + cancel() { + this.viewCtrl.dismiss({ + aggregatedLanding: undefined, + saveOnDismiss: false, + tripToOpen: undefined + }); + } + ngOnDestroy() { + this.subscription.unsubscribe(); + } + markForCheck() { + this.cd.markForCheck(); + } + openTrip($event) { + return __awaiter(this, void 0, void 0, function* () { + if (!$event || !$event.activity) + return; + let saveBeforeLeave; + if (this.dirty) { + console.warn('The activity is dirty, must save first'); + saveBeforeLeave = yield Alerts.askSaveBeforeLeave(this.alertCtrl, this.translate); + if (isNil(saveBeforeLeave)) { + // user cancel + return; + } + } + // set last activity + this.viewCtrl.dismiss({ + aggregatedLanding: undefined, + saveOnDismiss: saveBeforeLeave, + tripToOpen: $event.activity + }); + }); + } +}; +__decorate([ + ViewChild('form', { static: true }), + __metadata("design:type", AggregatedLandingForm) +], AggregatedLandingModal.prototype, "form", void 0); +__decorate([ + Input(), + __metadata("design:type", AggregatedLanding) +], AggregatedLandingModal.prototype, "data", void 0); +__decorate([ + Input(), + __metadata("design:type", AggregatedLandingFormOption) +], AggregatedLandingModal.prototype, "options", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], AggregatedLandingModal.prototype, "disabled", null); +AggregatedLandingModal = __decorate([ + Component({ + selector: 'app-aggregated-landing-modal', + templateUrl: './aggregated-landing.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [ModalController, + AlertController, + TranslateService, + ChangeDetectorRef]) +], AggregatedLandingModal); +export { AggregatedLandingModal }; +//# sourceMappingURL=aggregated-landing.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.modal.js.map b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.modal.js.map new file mode 100644 index 000000000..e2064538a --- /dev/null +++ b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"aggregated-landing.modal.js","sourceRoot":"","sources":["../../../../../src/app/trip/aggregated-landing/aggregated-landing.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.model.js b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.model.js new file mode 100644 index 000000000..41b0fbafd --- /dev/null +++ b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.model.js @@ -0,0 +1,114 @@ +var VesselActivity_1, AggregatedLanding_1; +import { __decorate, __metadata } from "tslib"; +import { MeasurementUtils, MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { VesselSnapshot } from '@app/referential/services/model/vessel-snapshot.model'; +import { Entity, EntityClass, EntityUtils, fromDateISOString, getPropertyByPath, isEmptyArray, isNil, isNotNil, ReferentialRef, toDateISOString } from '@sumaris-net/ngx-components'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +let VesselActivity = VesselActivity_1 = class VesselActivity extends Entity { + constructor() { + super(VesselActivity_1.TYPENAME); + this.invalid = false; + this.date = null; + this.rankOrder = null; + this.comments = null; + this.measurementValues = {}; + this.metiers = []; + this.observedLocationId = null; + this.landingId = null; + this.tripId = null; + } + static isEmpty(value) { + return !value || (MeasurementValuesUtils.isEmpty(value.measurementValues) + && isEmptyArray(value.metiers)); + } + asObject(opts) { + const target = super.asObject(opts); + target.date = toDateISOString(this.date); + target.measurementValues = MeasurementValuesUtils.asObject(this.measurementValues, opts); + target.metiers = this.metiers && this.metiers.filter(EntityUtils.isRemote) + .map(p => p && p.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))) || undefined; + if (opts === null || opts === void 0 ? void 0 : opts.minify) { + delete target.invalid; + } + return target; + } + fromObject(source) { + super.fromObject(source); + this.date = fromDateISOString(source.date); + this.rankOrder = source.rankOrder; + this.comments = source.comments; + this.measurementValues = source.measurementValues && Object.assign({}, source.measurementValues) || MeasurementUtils.toMeasurementValues(source.measurements); + this.metiers = source.metiers && source.metiers.filter(isNotNil).map(ReferentialRef.fromObject) || []; + this.observedLocationId = source.observedLocationId; + this.landingId = source.landingId; + this.tripId = source.tripId; + if (isNotNil(this.tripId) && isEmptyArray(this.metiers)) { + this.metiers = [ReferentialRef.fromObject({ label: '??', name: '???' })]; + this.invalid = true; + } + } +}; +VesselActivity = VesselActivity_1 = __decorate([ + EntityClass({ typename: 'VesselActivityVO' }), + __metadata("design:paramtypes", []) +], VesselActivity); +export { VesselActivity }; +let AggregatedLanding = AggregatedLanding_1 = class AggregatedLanding extends Entity { + constructor() { + super(AggregatedLanding_1.TYPENAME); + this.synchronizationStatus = null; + this.vesselSnapshot = null; + this.vesselActivities = []; + } + asObject(opts) { + const target = super.asObject(opts); + target.vesselSnapshot = this.vesselSnapshot && this.vesselSnapshot.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS)) || undefined; + target.vesselActivities = this.vesselActivities && this.vesselActivities.map(value => value.asObject(opts)); + if (opts === null || opts === void 0 ? void 0 : opts.minify) { + if (opts.keepSynchronizationStatus !== true) { + delete target.synchronizationStatus; // Remove by default, when minify, because not exists on pod's model + } + } + return target; + } + fromObject(source) { + super.fromObject(source); + this.vesselSnapshot = source.vesselSnapshot && VesselSnapshot.fromObject(source.vesselSnapshot); + // this.id = this.vesselSnapshot.id; + this.observedLocationId = source.observedLocationId; + this.vesselActivities = source.vesselActivities && source.vesselActivities.map(VesselActivity.fromObject) || []; + this.synchronizationStatus = source.synchronizationStatus; + } +}; +AggregatedLanding = AggregatedLanding_1 = __decorate([ + EntityClass({ typename: 'AggregatedLandingVO' }), + __metadata("design:paramtypes", []) +], AggregatedLanding); +export { AggregatedLanding }; +export class AggregatedLandingUtils { + static sort(data, sortBy, sortDirection) { + if ((data === null || data === void 0 ? void 0 : data.length) > 0 && sortBy === 'vessel') { + return data.sort(AggregatedLandingUtils.naturalSortComparator('vesselSnapshot.exteriorMarking', sortDirection)); + } + return data; + } + // todo move to ngx-sumaris-components + static naturalSortComparator(property, sortDirection) { + const collator = new Intl.Collator(undefined, { numeric: true }); + const direction = !sortDirection || sortDirection === 'asc' ? 1 : -1; + return (r1, r2) => { + let v1 = getPropertyByPath(r1, property); + let v2 = getPropertyByPath(r2, property); + if (isNil(v1)) + return -direction; + if (isNil(v2)) + return direction; + if (EntityUtils.isNotEmpty(v1, 'id') && EntityUtils.isNotEmpty(v2, 'id')) { + v1 = v1.id; + v2 = v2.id; + } + return collator.compare(String(v1), String(v2)) * direction; + }; + } +} +//# sourceMappingURL=aggregated-landing.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.model.js.map b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.model.js.map new file mode 100644 index 000000000..081dc2b48 --- /dev/null +++ b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"aggregated-landing.model.js","sourceRoot":"","sources":["../../../../../src/app/trip/aggregated-landing/aggregated-landing.model.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAiD,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAElJ,OAAO,EAA6B,cAAc,EAAE,MAAM,uDAAuD,CAAC;AAClH,OAAO,EACL,MAAM,EAEN,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,cAAc,EACd,eAAe,EAChB,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAGzE,IAAM,cAAc,sBAApB,MAAM,cAAe,SAAQ,MAAsB;IAcxD;QACE,KAAK,CAAC,gBAAc,CAAC,QAAQ,CAAC,CAAC;QAHjC,YAAO,GAAG,KAAK,CAAC;QAId,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,KAAqB;QAClC,OAAO,CAAC,KAAK,IAAI,CACf,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC;eACpD,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAC/B,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,IAA4B;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,iBAAiB,GAAG,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QACzF,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;aACvE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,iCAAK,IAAI,GAAK,kBAAkB,EAAE,CAAC,IAAI,SAAS,CAAC;QAC5E,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,EAAE;YAChB,OAAO,MAAM,CAAC,OAAO,CAAC;SACvB;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,MAAW;QACpB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,sBAAQ,MAAM,CAAC,iBAAiB,CAAC,IAAI,gBAAgB,CAAC,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAChJ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACtG,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAE5B,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACvD,IAAI,CAAC,OAAO,GAAG,CAAE,cAAc,CAAC,UAAU,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACrB;IACH,CAAC;CAEF,CAAA;AA9DY,cAAc;IAD1B,WAAW,CAAC,EAAC,QAAQ,EAAE,kBAAkB,EAAC,CAAC;;GAC/B,cAAc,CA8D1B;SA9DY,cAAc;AAiEpB,IAAM,iBAAiB,yBAAvB,MAAM,iBAAkB,SAAQ,MAA4D;IAYjG;QACE,KAAK,CAAC,mBAAiB,CAAC,QAAQ,CAAC,CAAC;QAHpC,0BAAqB,GAA2B,IAAI,CAAC;QAInD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED,QAAQ,CAAC,IAAgC;QACvC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,iCAAK,IAAI,GAAK,kBAAkB,EAAE,IAAI,SAAS,CAAC;QAC3H,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5G,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,EAAE;YAChB,IAAI,IAAI,CAAC,yBAAyB,KAAK,IAAI,EAAE;gBAC3C,OAAO,MAAM,CAAC,qBAAqB,CAAC,CAAC,oEAAoE;aAC1G;SACF;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,MAAW;QACpB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAChG,oCAAoC;QACpC,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;QACpD,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAChH,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;IAC5D,CAAC;CACF,CAAA;AAtCY,iBAAiB;IAD7B,WAAW,CAAC,EAAC,QAAQ,EAAE,qBAAqB,EAAC,CAAC;;GAClC,iBAAiB,CAsC7B;SAtCY,iBAAiB;AAwC9B,MAAM,OAAO,sBAAsB;IAEjC,MAAM,CAAC,IAAI,CAAC,IAAyB,EAAE,MAAe,EAAE,aAA6B;QACnF,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,IAAG,CAAC,IAAI,MAAM,KAAK,QAAQ,EAAE;YAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,qBAAqB,CAAC,gCAAgC,EAAE,aAAa,CAAC,CAAC,CAAC;SACjH;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sCAAsC;IACtC,MAAM,CAAC,qBAAqB,CAA2B,QAAgB,EAAE,aAA6B;QACpG,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,CAAC,aAAa,IAAI,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;YAChB,IAAI,EAAE,GAAG,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACzC,IAAI,EAAE,GAAG,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACzC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAAE,OAAO,CAAC,SAAS,CAAC;YACjC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAAE,OAAO,SAAS,CAAC;YAChC,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE;gBACxE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;gBACX,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;aACZ;YACD,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;QAC9D,CAAC,CAAC;IACJ,CAAC;CACF"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.module.js b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.module.js new file mode 100644 index 000000000..b381eee2a --- /dev/null +++ b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.module.js @@ -0,0 +1,39 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { AggregatedLandingForm } from './aggregated-landing.form'; +import { AggregatedLandingsTable } from './aggregated-landings.table'; +import { VesselActivityForm } from './vessel-activity.form'; +import { AggregatedLandingModal } from './aggregated-landing.modal'; +import { TranslateModule } from '@ngx-translate/core'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { AppPmfmFormFieldModule } from '@app/referential/pmfm/field/pmfm.form-field.module'; +let AppAggregatedLandingModule = class AppAggregatedLandingModule { + constructor() { + console.debug('[aggregated-landing] Creating module...'); + } +}; +AppAggregatedLandingModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + TranslateModule.forChild(), + // Functional modules + AppReferentialModule, + AppPmfmFormFieldModule + ], + declarations: [ + AggregatedLandingsTable, + AggregatedLandingModal, + AggregatedLandingForm, + VesselActivityForm + ], + exports: [ + // Components + AggregatedLandingsTable + ] + }), + __metadata("design:paramtypes", []) +], AppAggregatedLandingModule); +export { AppAggregatedLandingModule }; +//# sourceMappingURL=aggregated-landing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.module.js.map b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.module.js.map new file mode 100644 index 000000000..073ebdbad --- /dev/null +++ b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"aggregated-landing.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/aggregated-landing/aggregated-landing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAwBrF,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IAErC;QACE,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC3D,CAAC;CACF,CAAA;AALY,0BAA0B;IArBtC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAE1B,qBAAqB;YACrB,oBAAoB;YACpB,sBAAsB;SACvB;QACD,YAAY,EAAE;YACZ,uBAAuB;YACvB,sBAAsB;YACtB,qBAAqB;YACrB,kBAAkB;SACnB;QACD,OAAO,EAAE;YAEP,aAAa;YACb,uBAAuB;SACxB;KACF,CAAC;;GACW,0BAA0B,CAKtC;SALY,0BAA0B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.service.js b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.service.js new file mode 100644 index 000000000..7a092c9f2 --- /dev/null +++ b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.service.js @@ -0,0 +1,349 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable, Injector } from '@angular/core'; +import { AggregatedLanding, AggregatedLandingUtils } from './aggregated-landing.model'; +import { BaseGraphqlService, chainPromises, DateUtils, EntitiesStorage, EntityUtils, firstNotNilPromise, GraphqlService, isEmptyArray, isNil, isNotEmptyArray, isNotNil, NetworkService, toNumber, } from '@sumaris-net/ngx-components'; +import { gql } from '@apollo/client/core'; +import { VesselSnapshotFragments } from '@app/referential/services/vessel-snapshot.service'; +import { ReferentialFragments } from '@app/referential/services/referential.fragments'; +import { EMPTY } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE } from '@app/data/services/model/data-entity.model'; +import { environment } from '@environments/environment'; +import { AggregatedLandingFilter } from '@app/trip/aggregated-landing/aggregated-landing.filter'; +import { DataErrorCodes } from '@app/data/services/errors'; +import { MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +import { TripService } from '@app/trip/trip/trip.service'; +const VesselActivityFragment = gql ` + fragment VesselActivityFragment on VesselActivityVO { + __typename + date + rankOrder + comments + measurementValues + metiers { + ...LightReferentialFragment + } + observedLocationId + landingId + tripId + } + ${ReferentialFragments.lightReferential} +`; +const AggregatedLandingFragment = gql `fragment AggregatedLandingFragment on AggregatedLandingVO { + __typename + id + observedLocationId + vesselSnapshot { + ...LightVesselSnapshotFragment + } + vesselActivities { + ...VesselActivityFragment + } +} +${VesselSnapshotFragments.lightVesselSnapshot} +${ReferentialFragments.lightReferential} +${VesselActivityFragment}`; +const Queries = { + loadAll: gql `query AggregatedLandings($filter: AggregatedLandingFilterVOInput){ + data: aggregatedLandings(filter: $filter){ + ...AggregatedLandingFragment + } + } + ${AggregatedLandingFragment}` +}; +const Mutations = { + saveAll: gql `mutation SaveAggregatedLandings($data:[AggregatedLandingVOInput], $filter: AggregatedLandingFilterVOInput){ + data: saveAggregatedLandings(aggregatedLandings: $data, filter: $filter){ + ...AggregatedLandingFragment + } + } + ${AggregatedLandingFragment}`, + deleteAll: gql `mutation DeleteAggregatedLandings($filter: AggregatedLandingFilterVOInput, $vesselIds: [Int]){ + deleteAggregatedLandings(filter: $filter, vesselIds: $vesselIds) + }` +}; +let AggregatedLandingService = class AggregatedLandingService extends BaseGraphqlService { + constructor(injector, network, tripService, entities) { + super(injector.get(GraphqlService), environment); + this.network = network; + this.tripService = tripService; + this.entities = entities; + // FOR DEV ONLY + this._debug = !environment.production; + } + loadAllByObservedLocation(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + return firstNotNilPromise(this.watchAllByObservedLocation(filter, opts)); + }); + } + watchAllByObservedLocation(filter, opts) { + return this.watchAll(0, -1, null, null, filter, opts); + } + watchAll(offset, size, sortBy, sortDirection, dataFilter, opts) { + // Update previous filter + dataFilter = this.asFilter(dataFilter); + if (!dataFilter || dataFilter.isEmpty()) { + console.warn('[aggregated-landing-service] Trying to load landing without \'filter\'. Skipping.'); + this._lastFilter = null; + return EMPTY; + } + // Remember last filter - used in saveAll() + this._lastFilter = dataFilter.clone(); + // Load offline + const offline = this.network.offline + || (dataFilter && ((dataFilter.synchronizationStatus && dataFilter.synchronizationStatus !== 'SYNC') + || EntityUtils.isLocalId(dataFilter.observedLocationId))) || false; + if (offline) { + return this.watchAllLocally(offset, size, sortBy, sortDirection, dataFilter, opts); + } + const variables = { + filter: dataFilter === null || dataFilter === void 0 ? void 0 : dataFilter.asPodObject() + }; + let now = this._debug && Date.now(); + if (this._debug) + console.debug('[aggregated-landing-service] Loading aggregated landings... using options:', variables); + return this.mutableWatchQuery({ + queryName: 'LoadAll', + query: Queries.loadAll, + arrayFieldName: 'data', + insertFilterFn: dataFilter === null || dataFilter === void 0 ? void 0 : dataFilter.asFilterFn(), + variables, + error: { code: DataErrorCodes.LOAD_ENTITIES_ERROR, message: 'ERROR.LOAD_ENTITIES_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || 'no-cache' + }) + .pipe(filter(isNotNil), map(res => { + let data = (res && res.data || []).map(AggregatedLanding.fromObject); + // Sort locally + data = AggregatedLandingUtils.sort(data, sortBy, sortDirection); + if (now) { + console.debug(`[aggregated-landing-service] Loaded {${data.length || 0}} landings in ${Date.now() - now}ms`, data); + now = undefined; + } + return { + data, + total: undefined + }; + })); + } + /** + * Load many local landings + */ + watchAllLocally(offset, size, sortBy, sortDirection, dataFilter, opts) { + dataFilter = AggregatedLandingFilter.fromObject(dataFilter); + if (!dataFilter || dataFilter.isEmpty()) { + console.warn('[aggregated-landing-service] Trying to watch aggregated landings without \'filter\': skipping.'); + return EMPTY; + } + if (!EntityUtils.isLocalId(dataFilter.observedLocationId)) + throw new Error('Invalid \'filter.observedLocationId\': must be a local ID (id<0)!'); + const variables = { + offset: offset || 0, + size: size >= 0 ? size : 20, + sortBy: (sortBy !== 'id' && sortBy) || (opts && opts.trash ? 'updateDate' : 'dateTime'), + sortDirection: sortDirection || (opts && opts.trash ? 'desc' : 'asc'), + trash: opts && opts.trash || false, + filter: dataFilter.asFilterFn() + }; + if (this._debug) + console.debug(`[aggregated-landing-service] Loading aggregated locally... using options:`, variables); + return this.entities.watchAll(AggregatedLanding.TYPENAME, variables, { fullLoad: opts && opts.fullLoad }) + .pipe(map(({ data, total }) => { + const entities = (!opts || opts.toEntity !== false) + ? (data || []).map(AggregatedLanding.fromObject) + : (data || []); + total = total || entities.length; + return { + data: entities, + total + }; + })); + } + saveAll(entities, options) { + return __awaiter(this, void 0, void 0, function* () { + if (!entities) + return entities; + const filter = this.asFilter((options === null || options === void 0 ? void 0 : options.filter) || this._lastFilter); + if (!filter || filter.isEmpty()) { + console.warn('[aggregated-landing-service] Trying to save aggregated landings without \'filter\': skipping.'); + return entities; + } + const offline = EntityUtils.isLocalId(filter.observedLocationId); + if (offline) { + return this.saveAllLocally(entities, { filter }); + } + const json = entities.map(t => this.asObject(t)); + const now = Date.now(); + if (this._debug) + console.debug('[aggregated-landing-service] Saving aggregated landings...', json); + yield this.graphql.mutate({ + mutation: Mutations.saveAll, + variables: { + data: json, + filter: filter === null || filter === void 0 ? void 0 : filter.asPodObject() + }, + context: { + tracked: false + }, + error: { code: DataErrorCodes.SAVE_ENTITIES_ERROR, message: 'ERROR.SAVE_ENTITIES_ERROR' }, + update: (cache, { data }) => { + const savedEntities = (data === null || data === void 0 ? void 0 : data.data) || []; + if (this._debug) + console.debug(`[aggregated-landing-service] Aggregated landings saved remotely in ${Date.now() - now}ms`, savedEntities); + const newEntities = []; + // Update ids + entities.forEach(aggLanding => { + const savedAggLanding = savedEntities.find(value => value.vesselSnapshot.id === aggLanding.vesselSnapshot.id); + if (savedAggLanding) { + const isNew = isNil(aggLanding.observedLocationId); + if (isNew) { + newEntities.push(aggLanding); + } + aggLanding.observedLocationId = savedAggLanding.observedLocationId; + aggLanding.vesselActivities.forEach(vesselActivity => { + const savedVesselActivity = savedAggLanding.vesselActivities.find(value => DateUtils.equals(value.date, vesselActivity.date)); + if (savedVesselActivity) { + vesselActivity.updateDate = savedVesselActivity.updateDate; + vesselActivity.observedLocationId = savedVesselActivity.observedLocationId; + vesselActivity.landingId = savedVesselActivity.landingId; + if (isNotNil(vesselActivity.tripId) && vesselActivity.tripId !== savedVesselActivity.tripId) { + console.warn(`/!\ ${vesselActivity.tripId} !== ${savedVesselActivity.tripId}`); + } + vesselActivity.tripId = savedVesselActivity.tripId; + } + }); + } + }); + // Insert into the cache + if (isNotEmptyArray(newEntities)) { + this.refetchMutableWatchQueries({ query: Queries.loadAll }); + } + } + }); + return entities; + }); + } + saveAllLocally(entities, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!entities) + return entities; + if (this._debug) + console.debug(`[aggregated-landing-service] Saving ${entities.length} aggregated landings locally...`); + const jobsFactories = (entities || []).map(entity => () => this.saveLocally(entity, Object.assign({}, opts))); + return chainPromises(jobsFactories); + }); + } + deleteAll(entities, options) { + return __awaiter(this, void 0, void 0, function* () { + // Get local entity ids, then delete id + const localIds = entities && entities + .map(t => t.id) + .filter(id => id < 0); + if (isNotEmptyArray(localIds)) { + if (this._debug) + console.debug('[aggregated-landing-service] Deleting aggregated landings locally... ids:', localIds); + yield this.entities.deleteMany(localIds, { entityName: AggregatedLanding.TYPENAME }); + } + const ids = entities && entities + .filter(entity => entity.id === undefined && !!entity.vesselSnapshot.id); + if (isEmptyArray(ids)) + return; // stop, if nothing else to do + const now = Date.now(); + if (this._debug) + console.debug('[aggregated-landing-service] Deleting aggregated landings... ids:', ids); + yield this.graphql.mutate({ + mutation: Mutations.deleteAll, + variables: { + filter: this._lastFilter && this._lastFilter.asPodObject(), + vesselIds: entities.map(value => value.vesselSnapshot.id) + }, + update: (proxy) => { + // Remove from cache + this.removeFromMutableCachedQueriesByIds(proxy, { queryName: 'LoadAll', ids }); + if (this._debug) + console.debug(`[aggregated-landing-service] Aggregated Landings deleted in ${Date.now() - now}ms`); + } + }); + }); + } + synchronizeAll(entities, opts) { + return __awaiter(this, void 0, void 0, function* () { + const filter = this.asFilter(opts === null || opts === void 0 ? void 0 : opts.filter); + if (!filter || filter.isEmpty()) + throw new Error('Missing options filter arguments'); + // TODO: add a local persistence of target observed_location, landing and trip + // const localTripIds = entities.flatMap(source => (source.vesselActivities || []).map(va => va.tripId)) + // .filter(EntityUtils.isLocalId); + // const localTrips = await Promise.all(localTripIds.map(id => this.tripService.load(id, {isLandedTrip: true, fullLoad: true}))); + // const localTripByIds = splitById(localTrips); + // console.log("Local trips to synchronize:", localTrips); + let target = entities.map(source => { + var _a; + const copy = source.clone(); + copy.observedLocationId = (_a = opts === null || opts === void 0 ? void 0 : opts.filter) === null || _a === void 0 ? void 0 : _a.observedLocationId; + copy.id = undefined; + // target.vesselActivities?.forEach(activity => activity.tripId = undefined); + return copy; + }); + target = yield this.saveAll(target, { filter }); + yield this.deleteAll(entities); + return target; + }); + } + asFilter(filter) { + return AggregatedLandingFilter.fromObject(filter); + } + asObject(entity, options) { + options = Object.assign(Object.assign({}, MINIFY_OPTIONS), options); + const copy = entity.asObject(options); + if (options.minify && !options.keepEntityName && !options.keepTypename) { + // Clean vessel features object, before saving + copy.vesselSnapshot = { id: entity.vesselSnapshot && entity.vesselSnapshot.id }; + // Keep id only, on activity.metier + (copy.vesselActivities || []).forEach(activity => activity.metiers = (activity.metiers || []).map(metier => ({ id: metier.id }))); + } + return copy; + } + /** + * Save into the local storage + * + * @param entity + * @param opts + */ + saveLocally(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + // Make sure to fill id, with local ids + yield this.fillOfflineDefaultProperties(entity, opts); + if (!EntityUtils.isLocalId(entity.observedLocationId)) + throw new Error('Must be linked to a local observed location'); + const json = this.asObject(entity, MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE); + if (this._debug) + console.debug('[aggregated-landing-service] [offline] Saving aggregated landing locally...', json); + // Save response locally + yield this.entities.save(json); + return entity; + }); + } + fillOfflineDefaultProperties(entity, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const isNew = isNil(entity.id); + // If new, generate a local id + if (isNew) { + entity.id = yield this.entities.nextValue(entity); + } + // Link to the meta observed location + entity.observedLocationId = toNumber(entity.observedLocationId, (_a = opts === null || opts === void 0 ? void 0 : opts.filter) === null || _a === void 0 ? void 0 : _a.observedLocationId); + // Fill default synchronization status + entity.synchronizationStatus = entity.synchronizationStatus || 'DIRTY'; + }); + } +}; +AggregatedLandingService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [Injector, + NetworkService, + TripService, + EntitiesStorage]) +], AggregatedLandingService); +export { AggregatedLandingService }; +//# sourceMappingURL=aggregated-landing.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.service.js.map b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.service.js.map new file mode 100644 index 000000000..f65d90fe6 --- /dev/null +++ b/out-tsc/app/app/trip/aggregated-landing/aggregated-landing.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"aggregated-landing.service.js","sourceRoot":"","sources":["../../../../../src/app/trip/aggregated-landing/aggregated-landing.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/aggregated-landing/aggregated-landings.table.js b/out-tsc/app/app/trip/aggregated-landing/aggregated-landings.table.js new file mode 100644 index 000000000..6b3221860 --- /dev/null +++ b/out-tsc/app/app/trip/aggregated-landing/aggregated-landings.table.js @@ -0,0 +1,388 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Injector, Input } from '@angular/core'; +import { AlertController } from '@ionic/angular'; +import { UntypedFormBuilder } from '@angular/forms'; +import { TranslateService } from '@ngx-translate/core'; +import { AccountService, DateUtils, filterNotNil, firstNotNilPromise, isNil, isNotEmptyArray, isNotNil, NetworkService, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, toBoolean, } from '@sumaris-net/ngx-components'; +import { VesselSnapshotService } from '@app/referential/services/vessel-snapshot.service'; +import { BehaviorSubject } from 'rxjs'; +import { AggregatedLanding } from './aggregated-landing.model'; +import { AggregatedLandingService } from './aggregated-landing.service'; +import { ObservedLocation } from '../observedlocation/observed-location.model'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { AcquisitionLevelCodes, PmfmIds } from '@app/referential/services/model/model.enum'; +import { AggregatedLandingModal } from './aggregated-landing.modal'; +import { environment } from '@environments/environment'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { AggregatedLandingFilter } from '@app/trip/aggregated-landing/aggregated-landing.filter'; +import { AppBaseTable } from '@app/shared/table/base.table'; +let AggregatedLandingsTable = class AggregatedLandingsTable extends AppBaseTable { + constructor(injector, network, accountService, service, referentialRefService, programRefService, vesselSnapshotService, formBuilder, alertCtrl, translate, cd) { + super(injector, AggregatedLanding, AggregatedLandingFilter, ['vessel'], service, null, { + prependNewElements: false, + suppressErrors: environment.production, + debug: !environment.production, + serviceOptions: { + saveOnlyDirtyRows: true, + }, + }); + this.network = network; + this.accountService = accountService; + this.service = service; + this.referentialRefService = referentialRefService; + this.programRefService = programRefService; + this.vesselSnapshotService = vesselSnapshotService; + this.formBuilder = formBuilder; + this.alertCtrl = alertCtrl; + this.translate = translate; + this.cd = cd; + this.$currentDate = new BehaviorSubject(undefined); + this.$dates = new BehaviorSubject(undefined); + this.$pmfms = new BehaviorSubject(undefined); + this.loadingPmfms = false; + this._onRefreshDates = new EventEmitter(); + this._onRefreshPmfms = new EventEmitter(); + this.useSticky = true; + this.i18nColumnPrefix = 'AGGREGATED_LANDING.TABLE.'; + // NOTE : this.readOnly is false by default + // this.readOnly = false; // Allow deletion + this.inlineEdition = false; + this.confirmBeforeDelete = true; + this.saveBeforeSort = false; + this.saveBeforeFilter = false; + this.saveBeforeDelete = false; + this.autoLoad = false; + this.defaultPageSize = -1; // Do not use paginator + // default acquisition level + this._acquisitionLevel = AcquisitionLevelCodes.LANDING; + // FOR DEV ONLY ---- + this.debug = !environment.production; + } + set nbDays(value) { + if (value && value !== this._nbDays) { + this._nbDays = value; + this._onRefreshDates.emit(); + } + } + set startDate(value) { + if (value && (!this._startDate || !value.isSame(this._startDate))) { + this._startDate = value; + this._onRefreshDates.emit(); + } + } + set timeZone(value) { + if (value && value !== this._timeZone) { + this._timeZone = value; + this._onRefreshDates.emit(); + } + } + set programLabel(value) { + if (this._programLabel !== value && isNotNil(value)) { + this._programLabel = value; + if (!this.loadingPmfms) + this._onRefreshPmfms.emit(); + } + } + get programLabel() { + return this._programLabel; + } + set acquisitionLevel(value) { + if (this._acquisitionLevel !== value && isNotNil(value)) { + this._acquisitionLevel = value; + if (!this.loadingPmfms) + this._onRefreshPmfms.emit(); + } + } + set parent(value) { + this.setParent(value); + } + ngOnInit() { + super.ngOnInit(); + this.isAdmin = this.accountService.isAdmin(); + this.updateCanEditDelete(this.readOnly); + this.registerSubscription(this._onRefreshDates.subscribe(() => this.refreshDates())); + this.registerSubscription(this._onRefreshPmfms.subscribe(() => this.refreshPmfms())); + this.registerSubscription(filterNotNil(this.$dates).subscribe(() => this.updateColumns())); + } + ngOnDestroy() { + super.ngOnDestroy(); + this.$pmfms.complete(); + this.$pmfms.unsubscribe(); + this._onRefreshPmfms.complete(); + this._onRefreshPmfms.unsubscribe(); + this._onRefreshDates.complete(); + this._onRefreshDates.unsubscribe(); + } + updateCanEditDelete(readOnly) { + this.readOnly = readOnly; + this.canEdit = (this.isAdmin || this.accountService.isUser()) && !this.readOnly; + this.canDelete = this.isAdmin && !this.readOnly; + } + markAsReady(opts) { + // DEBUG console.debug('calling marking as ready'); + super.markAsReady(opts); + } + ready() { + const _super = Object.create(null, { + ready: { get: () => super.ready } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.ready.call(this); + // Wait pmfms load, and controls load + yield firstNotNilPromise(this.$pmfms, { stop: this.destroySubject }); + }); + } + trackPmfmFn(index, pmfm) { + return pmfm.id; + } + setParent(parent) { + // Filter on parent + if (!parent) { + this.setFilter(null); // Null filter will return EMPTY observable, in the data service + } + else { + const filter = new AggregatedLandingFilter(); + this.startDate = parent.startDateTime; + filter.observedLocationId = parent.id; + filter.programLabel = this._programLabel; + filter.locationId = parent.location && parent.location.id; + filter.startDate = parent.startDateTime; + filter.endDate = parent.endDateTime || parent.startDateTime.clone().add(this._nbDays, 'day'); + this.setFilter(filter); + } + } + setFilter(filter, opts) { + // Don't refilter if actual filter is equal + if (this.filter && this.filter.equals(filter)) + return; + super.setFilter(filter, opts); + } + getActivities(row, date) { + var _a; + const activities = ((_a = row.currentData) === null || _a === void 0 ? void 0 : _a.vesselActivities.filter((activity) => activity.date.isSame(date))) || []; + return isNotEmptyArray(activities) ? activities : undefined; + } + trackByFn(index, row) { + var _a, _b; + return (_b = (_a = row.currentData) === null || _a === void 0 ? void 0 : _a.vesselSnapshot) === null || _b === void 0 ? void 0 : _b.id; + } + clickRow(event, row) { + if ((event && event.defaultPrevented) || this.loading) + return false; + if (!this.mobile) + return false; + this.highlightedRowId = row.id; + this.markAsLoading(); + this.openModal(event, row, this.$currentDate.getValue()) + .then(() => this.markAsLoaded()) + .catch(() => this.markAsLoaded()); + } + clickCell($event, row, date) { + if ($event) + $event.stopPropagation(); + if (this.debug) + console.debug('clickCell', $event, row.currentData.vesselSnapshot.exteriorMarking + '|' + row.currentData.vesselActivities.length, date.toISOString()); + this.highlightedRowId = row.id; + this.markAsLoading(); + this.openModal($event, row, date) + .then(() => this.markAsLoaded()) + .catch(() => this.markAsLoaded()); + } + openModal(event, row, date) { + return __awaiter(this, void 0, void 0, function* () { + this.editRow(event, row); + const modal = yield this.modalCtrl.create({ + component: AggregatedLandingModal, + componentProps: { + data: row.currentData.clone(), + options: { + dates: this.$dates.getValue(), + initialDate: date, + programLabel: this._programLabel, + acquisitionLevel: this._acquisitionLevel, + readonly: this.readOnly, + }, + }, + backdropDismiss: false, + }); + yield modal.present(); + const res = yield modal.onDidDismiss(); + if (res && res.data) { + if (res.data.aggregatedLanding) { + console.debug('[aggregated-landings-table] data to update:', res.data.aggregatedLanding); + row.currentData.vesselActivities.splice(0, row.currentData.vesselActivities.length, ...res.data.aggregatedLanding.vesselActivities); + this.markAsDirty(); + this.confirmEditCreate(); + this.markForCheck(); + } + if (toBoolean(res.data.saveOnDismiss, false)) { + // call save + yield this.save(); + } + const trip = res.data.tripToOpen; + if (trip) { + if (isNil(trip.observedLocationId) || isNil(trip.tripId)) { + console.warn(`Something is missing to open trip: observedLocationId=${trip.observedLocationId}, tripId=${trip.tripId}`); + return; + } + // navigate to trip + this.markAsLoading(); + this.markForCheck(); + try { + yield this.router.navigateByUrl(`/observations/${trip.observedLocationId}/trip/${trip.tripId}`); + } + finally { + this.markAsLoaded(); + this.markForCheck(); + } + } + } + }); + } + addAggregatedRow(vessel) { + return __awaiter(this, void 0, void 0, function* () { + const row = yield this.addRowToTable(); + row.currentData.vesselSnapshot = vessel; + this.markForCheck(); + // TODO scroll to row + // this.scrollToRow(row); + }); + } + vesselIdsAlreadyPresent() { + return __awaiter(this, void 0, void 0, function* () { + const rows = this.dataSource.getRows(); + return (rows || []).map((row) => row.currentData.vesselSnapshot.id); + }); + } + backwardDay(event) { + const dates = this.$dates.value; + const currentDate = this.$currentDate.value; + if (!dates || !currentDate) + return; // Skip + const currentIndex = dates.findIndex((d) => DateUtils.equals(d, currentDate)); + if (currentIndex > 0) { + this.$currentDate.next(dates[currentIndex - 1]); + } + else { + this.$currentDate.next(dates[dates.length - 1]); + } + } + forwardDay(event) { + const dates = this.$dates.value; + const currentDate = this.$currentDate.value; + if (!dates || !currentDate) + return; // Skip + const currentIndex = dates.findIndex((d) => DateUtils.equals(d, currentDate)); + if (currentIndex < dates.length - 1) { + this.$currentDate.next(dates[currentIndex + 1]); + } + else { + this.$currentDate.next(dates[0]); + } + } + /* -- protected methods -- */ + markForCheck() { + this.cd.markForCheck(); + } + updateColumns() { + if (!this.$dates.getValue()) + return; + this.displayedColumns = this.getDisplayColumns(); + if (!this.loading) + this.markForCheck(); + } + getDisplayColumns() { + var _a; + const additionalColumns = []; + if (this.mobile && this.$currentDate.getValue()) { + additionalColumns.push(this.$currentDate.getValue().valueOf().toString()); + } + else { + additionalColumns.push(...(((_a = this.$dates.getValue()) === null || _a === void 0 ? void 0 : _a.map((date) => date.valueOf().toString())) || [])); + } + return RESERVED_START_COLUMNS.concat(['vessel']).concat(additionalColumns).concat(RESERVED_END_COLUMNS); + } + refreshDates() { + return __awaiter(this, void 0, void 0, function* () { + if (!this._timeZone || isNil(this._startDate) || isNil(this._nbDays)) + return; + // DEBUG + console.debug(`[aggregated-landings-table] Computing dates... {timezone: '${this._timeZone}'}`); + // Clear startDate time (at the TZ expected by the DB) + const firstDay = DateUtils.moment(this._startDate).tz(this._timeZone).startOf('day'); + console.debug(`[aggregated-landings-table] Starting calendar at: '${firstDay.format()}'`); + const dates = []; + for (let d = 0; d < this._nbDays; d++) { + dates[d] = firstDay.clone().add(d, 'day'); + } + // DEBUG + if (this.debug) + console.debug(`[aggregated-landings-table] Calendar will use this dates:\n- '${dates.map((d) => d.format()).join('\n- ')}'`); + const now = DateUtils.moment(); + const currentDay = dates.find((date) => DateUtils.isSame(date, now, 'day')) || firstDay; + this.$currentDate.next(currentDay); + this.$dates.next(dates); + }); + } + refreshPmfms() { + return __awaiter(this, void 0, void 0, function* () { + if (isNil(this._programLabel) || isNil(this._acquisitionLevel)) + return; + this.loadingPmfms = true; + // DEBUG + if (this.debug) + console.debug(`[aggregated-landing-table] Loading pmfms... {program: '${this.programLabel}', acquisitionLevel: '${this._acquisitionLevel}''}̀̀`); + // Load pmfms + const pmfms = (yield this.programRefService.loadProgramPmfms(this._programLabel, { + acquisitionLevel: this._acquisitionLevel, + })) || []; + if (!pmfms.length && this.debug) { + console.debug(`[aggregated-landings-table] No pmfm found (program=${this.programLabel}, acquisitionLevel=${this._acquisitionLevel}). Please fill program's strategies !`); + } + this.showLabelForPmfmIds = [PmfmIds.REFUSED_SURVEY]; + // Apply + this.loadingPmfms = false; + this.$pmfms.next(pmfms); + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], AggregatedLandingsTable.prototype, "programLabel", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], AggregatedLandingsTable.prototype, "acquisitionLevel", null); +__decorate([ + Input(), + __metadata("design:type", ObservedLocation), + __metadata("design:paramtypes", [ObservedLocation]) +], AggregatedLandingsTable.prototype, "parent", null); +__decorate([ + Input(), + __metadata("design:type", Object) +], AggregatedLandingsTable.prototype, "useSticky", void 0); +AggregatedLandingsTable = __decorate([ + Component({ + selector: 'app-aggregated-landings-table', + templateUrl: 'aggregated-landings.table.html', + styleUrls: ['./aggregated-landings.table.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + NetworkService, + AccountService, + AggregatedLandingService, + ReferentialRefService, + ProgramRefService, + VesselSnapshotService, + UntypedFormBuilder, + AlertController, + TranslateService, + ChangeDetectorRef]) +], AggregatedLandingsTable); +export { AggregatedLandingsTable }; +//# sourceMappingURL=aggregated-landings.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/aggregated-landing/aggregated-landings.table.js.map b/out-tsc/app/app/trip/aggregated-landing/aggregated-landings.table.js.map new file mode 100644 index 000000000..4acfa633f --- /dev/null +++ b/out-tsc/app/app/trip/aggregated-landing/aggregated-landings.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"aggregated-landings.table.js","sourceRoot":"","sources":["../../../../../src/app/trip/aggregated-landing/aggregated-landings.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/aggregated-landing/vessel-activity.form.js b/out-tsc/app/app/trip/aggregated-landing/vessel-activity.form.js new file mode 100644 index 000000000..2c46cf614 --- /dev/null +++ b/out-tsc/app/app/trip/aggregated-landing/vessel-activity.form.js @@ -0,0 +1,127 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, EventEmitter, Injector, Input } from '@angular/core'; +import { UntypedFormBuilder } from '@angular/forms'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { ModalController } from '@ionic/angular'; +import { FormArrayHelper, isNotNilOrBlank, NetworkService, ReferentialUtils } from '@sumaris-net/ngx-components'; +import { AggregatedLandingService } from './aggregated-landing.service'; +import { MeasurementValuesForm } from '@app/data/measurement/measurement-values.form.class'; +import { VesselActivityValidatorService } from './vessel-activity.validator'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { METIER_DEFAULT_FILTER } from '@app/referential/services/metier.service'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { MetierFilter } from '@app/referential/services/filter/metier.filter'; +let VesselActivityForm = class VesselActivityForm extends MeasurementValuesForm { + constructor(injector, formBuilder, dataService, programRefService, validatorService, measurementsValidatorService, referentialRefService, modalCtrl, network) { + super(injector, measurementsValidatorService, formBuilder, programRefService, null, { + mapPmfms: (pmfms) => this.mapPmfms(pmfms) + }); + this.formBuilder = formBuilder; + this.dataService = dataService; + this.programRefService = programRefService; + this.validatorService = validatorService; + this.measurementsValidatorService = measurementsValidatorService; + this.referentialRefService = referentialRefService; + this.modalCtrl = modalCtrl; + this.network = network; + this.showError = true; + this.showComment = false; + this.onRefresh = new EventEmitter(); + this.metierFilter = MetierFilter.fromObject(METIER_DEFAULT_FILTER); + this.metierFocusIndex = -1; + this.enableMetierFilter = false; + this._enable = true; + this.mobile = this.settings.mobile; + } + get metiersForm() { + return this.form.controls.metiers; + } + ngOnInit() { + super.ngOnInit(); + // Combo: metiers + const metierAttributes = this.settings.getFieldDisplayAttributes('metier'); + this.registerAutocompleteField('metier', { + service: this.referentialRefService, + // Increase default column size, for 'label' + columnSizes: metierAttributes.map(a => a === 'label' ? 3 : undefined /*auto*/), + mobile: this.mobile + }); + } + onApplyingEntity(data, opts) { + var _a; + // Make sure to have (at least) one metier + if (data === null || data === void 0 ? void 0 : data.metiers) { + data.metiers = data.metiers && data.metiers.length ? data.metiers : [null]; + } + if (!this.metiersHelper) { + this.initMetiersHelper(); + } + // Resize metiers array + this.metiersHelper.resize(Math.max(1, (_a = data === null || data === void 0 ? void 0 : data.metiers) === null || _a === void 0 ? void 0 : _a.length)); + this.showComment = isNotNilOrBlank(data === null || data === void 0 ? void 0 : data.comments); + } + addMetier() { + this.metiersHelper.add(); + if (!this.mobile) { + this.metierFocusIndex = this.metiersHelper.size() - 1; + } + } + removeMetier(index) { + // TODO add confirmation if tripId != null + this.metiersHelper.removeAt(index); + } + initMetiersHelper() { + this.metiersHelper = new FormArrayHelper(FormArrayHelper.getOrCreateArray(this.formBuilder, this.form, 'metiers'), (metier) => this.validatorService.getMetierFormControl(metier), ReferentialUtils.equals, ReferentialUtils.isEmpty, { + allowEmptyArray: false + }); + // Create at least one metier + if (this.metiersHelper.size() === 0) { + this.metiersHelper.resize(1); + } + } + toggleComment() { + this.showComment = !this.showComment; + if (!this.showComment) { + this.form.get('comments').setValue(null); + } + this.markForCheck(); + } + mapPmfms(pmfms) { + return pmfms.filter(p => p.required); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], VesselActivityForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], VesselActivityForm.prototype, "maxVisibleButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], VesselActivityForm.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], VesselActivityForm.prototype, "showComment", void 0); +VesselActivityForm = __decorate([ + Component({ + selector: 'app-vessel-activity-form', + templateUrl: './vessel-activity.form.html', + styleUrls: ['./vessel-activity.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + UntypedFormBuilder, + AggregatedLandingService, + ProgramRefService, + VesselActivityValidatorService, + MeasurementsValidatorService, + ReferentialRefService, + ModalController, + NetworkService]) +], VesselActivityForm); +export { VesselActivityForm }; +//# sourceMappingURL=vessel-activity.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/aggregated-landing/vessel-activity.form.js.map b/out-tsc/app/app/trip/aggregated-landing/vessel-activity.form.js.map new file mode 100644 index 000000000..9c5221985 --- /dev/null +++ b/out-tsc/app/app/trip/aggregated-landing/vessel-activity.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel-activity.form.js","sourceRoot":"","sources":["../../../../../src/app/trip/aggregated-landing/vessel-activity.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/aggregated-landing/vessel-activity.validator.js b/out-tsc/app/app/trip/aggregated-landing/vessel-activity.validator.js new file mode 100644 index 000000000..8645024b8 --- /dev/null +++ b/out-tsc/app/app/trip/aggregated-landing/vessel-activity.validator.js @@ -0,0 +1,63 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { LocalSettingsService, SharedFormArrayValidators, SharedValidators, toBoolean } from '@sumaris-net/ngx-components'; +import { VesselActivity } from './aggregated-landing.model'; +let VesselActivityValidatorService = class VesselActivityValidatorService { + constructor(formBuilder, settings) { + this.formBuilder = formBuilder; + this.settings = settings; + } + getRowValidator(opts) { + return this.getFormGroup(); + } + getFormGroup(data, opts) { + opts = this.fillDefaultOptions(opts); + return this.formBuilder.group(this.getFormGroupConfig(data, opts), this.getFormGroupOptions(data, opts)); + } + getFormGroupConfig(data, opts) { + opts = this.fillDefaultOptions(opts); + return { + __typename: [VesselActivity.TYPENAME], + date: [data && data.date, Validators.compose([Validators.required, SharedValidators.validDate])], + rankOrder: [data && data.rankOrder, Validators.compose([Validators.required, SharedValidators.integer])], + comments: [data && data.comments, Validators.maxLength(2000)], + measurementValues: this.getMeasurementGroup(data), + metiers: this.getMetiersFormArray(data, opts), + tripId: [data && data.tripId], + observedLocationId: [data && data.observedLocationId], + landingId: [data && data.landingId] + }; + } + getFormGroupOptions(data, opts) { + return {}; + } + getMeasurementGroup(data) { + const config = data && data.measurementValues && Object.keys(data.measurementValues) + .reduce((res, pmfmId) => { + res[pmfmId] = [data.measurementValues[pmfmId]]; + return res; + }, {}) + || {}; + return this.formBuilder.group(config); + } + fillDefaultOptions(opts) { + opts = opts || {}; + opts.required = toBoolean(opts.required, false); + return opts; + } + getMetiersFormArray(data, opts) { + return this.formBuilder.array((data && data.metiers || []).map(metier => this.getMetierFormControl(metier, opts)), SharedFormArrayValidators.requiredArrayMinLength(1)); + } + getMetierFormControl(data, opts) { + opts = this.fillDefaultOptions(opts); + return this.formBuilder.control(data || null, opts.required ? [Validators.required, SharedValidators.entity] : SharedValidators.entity); + } +}; +VesselActivityValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + LocalSettingsService]) +], VesselActivityValidatorService); +export { VesselActivityValidatorService }; +//# sourceMappingURL=vessel-activity.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/aggregated-landing/vessel-activity.validator.js.map b/out-tsc/app/app/trip/aggregated-landing/vessel-activity.validator.js.map new file mode 100644 index 000000000..9e046cbd6 --- /dev/null +++ b/out-tsc/app/app/trip/aggregated-landing/vessel-activity.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel-activity.validator.js","sourceRoot":"","sources":["../../../../../src/app/trip/aggregated-landing/vessel-activity.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/batch.errors.js b/out-tsc/app/app/trip/batch/batch.errors.js new file mode 100644 index 000000000..b599e6115 --- /dev/null +++ b/out-tsc/app/app/trip/batch/batch.errors.js @@ -0,0 +1,5 @@ +export const BatchErrorCodes = { + WEIGHT_LENGTH_CONVERSION_NO_RECTANGLE: 4000, + WEIGHT_LENGTH_CONVERSION_NO_LENGTH_PMFM: 4001 +}; +//# sourceMappingURL=batch.errors.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/batch.errors.js.map b/out-tsc/app/app/trip/batch/batch.errors.js.map new file mode 100644 index 000000000..0a1a32d00 --- /dev/null +++ b/out-tsc/app/app/trip/batch/batch.errors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch.errors.js","sourceRoot":"","sources":["../../../../../src/app/trip/batch/batch.errors.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,qCAAqC,EAAE,IAAI;IAC3C,uCAAuC,EAAE,IAAI;CAC9C,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/batch.module.js b/out-tsc/app/app/trip/batch/batch.module.js new file mode 100644 index 000000000..d87752fe3 --- /dev/null +++ b/out-tsc/app/app/trip/batch/batch.module.js @@ -0,0 +1,100 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { CatchBatchForm } from './catch/catch.form'; +import { BatchGroupsTable } from './group/batch-groups.table'; +import { SubBatchesTable } from './sub/sub-batches.table'; +import { SubBatchesModal } from './sub/sub-batches.modal'; +import { SubBatchForm } from './sub/sub-batch.form'; +import { BatchForm } from './common/batch.form'; +import { BatchTreeComponent } from './tree/batch-tree.component'; +import { BatchGroupForm } from './group/batch-group.form'; +import { BatchGroupModal } from './group/batch-group.modal'; +import { SubBatchModal } from './sub/sub-batch.modal'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { AppDataModule } from '@app/data/data.module'; +import { BatchModal } from './common/batch.modal'; +import { TranslateModule } from '@ngx-translate/core'; +import { CommonModule } from '@angular/common'; +import { AppCoreModule } from '@app/core/core.module'; +import { VesselModule } from '@app/vessel/vessel.module'; +import { AppMeasurementModule } from '@app/data/measurement/measurement.module'; +import { MatSamplingRatioFieldModule } from '@app/shared/material/sampling-ratio/material.sampling-ratio.module'; +import { BatchSortingValueIconPipe, IsSamplingRatioComputedPipe, SamplingRatioFormatPipe } from '@app/trip/batch/common/batch.pipes'; +import { BatchFilterForm } from '@app/trip/batch/filter/batch-filter.form'; +import { BatchTreeContainerComponent } from '@app/trip/batch/tree/batch-tree-container.component'; +import { MatTreeModule } from '@angular/material/tree'; +import { BatchesTable } from '@app/trip/batch/common/batches.table'; +import { BatchFormContent } from '@app/trip/batch/common/batch.form.content'; +import { BatchModelTreeComponent } from '@app/trip/batch/tree/batch-model-tree.component'; +import { MatSidenavModule } from '@angular/material/sidenav'; +import { AppIchthyometerModule } from '@app/shared/ichthyometer/ichthyometer.module'; +let AppBatchModule = class AppBatchModule { +}; +AppBatchModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TranslateModule.forChild(), + // Material tree component + MatTreeModule, + MatSidenavModule, + // App module + AppCoreModule, + AppReferentialModule, + AppDataModule, + VesselModule, + AppMeasurementModule, + // Components + MatSamplingRatioFieldModule, + AppIchthyometerModule + ], + declarations: [ + // Pipes + IsSamplingRatioComputedPipe, + SamplingRatioFormatPipe, + BatchSortingValueIconPipe, + // Components + BatchTreeComponent, + BatchTreeContainerComponent, + BatchModelTreeComponent, + CatchBatchForm, + BatchGroupsTable, + BatchGroupForm, + BatchGroupModal, + BatchesTable, + BatchForm, + BatchModal, + BatchFilterForm, + BatchFormContent, + SubBatchesTable, + SubBatchForm, + SubBatchModal, + SubBatchesModal + ], + exports: [ + // Modules + TranslateModule, + // Pipes + IsSamplingRatioComputedPipe, + SamplingRatioFormatPipe, + BatchSortingValueIconPipe, + // Components + BatchTreeComponent, + BatchTreeContainerComponent, + BatchModelTreeComponent, + CatchBatchForm, + BatchGroupsTable, + BatchGroupForm, + BatchGroupModal, + BatchesTable, + BatchForm, + BatchModal, + SubBatchesTable, + SubBatchForm, + SubBatchModal, + SubBatchesModal + ] + }) +], AppBatchModule); +export { AppBatchModule }; +//# sourceMappingURL=batch.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/batch.module.js.map b/out-tsc/app/app/trip/batch/batch.module.js.map new file mode 100644 index 000000000..22cf72701 --- /dev/null +++ b/out-tsc/app/app/trip/batch/batch.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/batch/batch.module.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/catch/catch.form.js b/out-tsc/app/app/trip/batch/catch/catch.form.js new file mode 100644 index 000000000..0117767ac --- /dev/null +++ b/out-tsc/app/app/trip/batch/catch/catch.form.js @@ -0,0 +1,148 @@ +var CatchBatchForm_1; +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, forwardRef, Injector, Input } from '@angular/core'; +import { UntypedFormBuilder } from '@angular/forms'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { BatchValidatorService } from '../common/batch.validator'; +import { isNotEmptyArray } from '@sumaris-net/ngx-components'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { AcquisitionLevelCodes, MatrixIds, PmfmIds } from '@app/referential/services/model/model.enum'; +import { BatchForm } from '@app/trip/batch/common/batch.form'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { environment } from '@environments/environment'; +import { combineLatest } from 'rxjs'; +import { map } from 'rxjs/operators'; +let CatchBatchForm = CatchBatchForm_1 = class CatchBatchForm extends BatchForm { + constructor(injector, measurementsValidatorService, formBuilder, programRefService, referentialRefService, validatorService) { + super(injector, measurementsValidatorService, formBuilder, programRefService, referentialRefService, validatorService); + this.gearPmfms$ = this._state.select('gearPmfms'); + this.onDeckPmfms$ = this._state.select('onDeckPmfms'); + this.sortingPmfms$ = this._state.select('sortingPmfms'); + this.catchPmfms$ = this._state.select('catchPmfms'); + this.otherPmfms$ = this._state.select('otherPmfms'); + this.gridColCount$ = this._state.select('gridColCount'); + this.labelColSize = 1; + this.rxStrategy = 'userBlocking'; + // Set defaults + this.acquisitionLevel = AcquisitionLevelCodes.CATCH_BATCH; + this.i18nPmfmPrefix = 'TRIP.BATCH.PMFM.'; + this.showTaxonGroup = false; + this.showTaxonName = false; + //this.samplingBatchEnabled = false; + // DEBUG + this.debug = !environment.production; + } + enable(opts) { + super.enable(opts); + } + get otherPmfms() { + return this._state.get('otherPmfms'); + } + /* -- protected functions -- */ + // @ts-ignore + dispatchPmfms(pmfms) { + const _super = Object.create(null, { + dispatchPmfms: { get: () => super.dispatchPmfms } + }); + return __awaiter(this, void 0, void 0, function* () { + if (!pmfms) + return; // Skip + // If a catch batch (root) + if (this.acquisitionLevel === AcquisitionLevelCodes.CATCH_BATCH) { + const { weightPmfms, defaultWeightPmfm, weightPmfmsByMethod, pmfms: updatedPmfms } = yield _super.dispatchPmfms.call(this, pmfms); + const onDeckPmfms = pmfms.filter(p => { var _a; return ((_a = p.label) === null || _a === void 0 ? void 0 : _a.indexOf('ON_DECK_')) === 0; }); + const sortingPmfms = pmfms.filter(p => { var _a; return ((_a = p.label) === null || _a === void 0 ? void 0 : _a.indexOf('SORTING_')) === 0; }); + const catchPmfms = pmfms.filter(p => { + var _a; + return (PmfmUtils.isWeight(p) || ((_a = p.label) === null || _a === void 0 ? void 0 : _a.indexOf('_WEIGHT')) !== -1) + && !onDeckPmfms.includes(p) + && !sortingPmfms.includes(p); + }); + const gearPmfms = pmfms.filter(p => p.matrixId === MatrixIds.GEAR || p.id === PmfmIds.CHILD_GEAR); + // Compute grid column count + const gridColCount = this.labelColSize /*label*/ + + Math.min(3, Math.max(onDeckPmfms.length, sortingPmfms.length, catchPmfms.length, gearPmfms.length)); + const otherPmfms = pmfms.filter(p => !onDeckPmfms.includes(p) + && !sortingPmfms.includes(p) + && !catchPmfms.includes(p) + && !gearPmfms.includes(p)); + // Update state + return { + weightPmfms, + defaultWeightPmfm, + weightPmfmsByMethod, + onDeckPmfms, + sortingPmfms, + catchPmfms, + gearPmfms, + otherPmfms, + pmfms: updatedPmfms, + hasContent: pmfms.length > 0, + gridColCount, + showWeight: false, + showIndividualCount: false, + showSamplingBatch: false, + samplingBatchEnabled: false, + showEstimatedWeight: false, + showExhaustiveInventory: false + }; + } + // When using inside a batch tree (.e.g need by APASE) + else { + const state = yield _super.dispatchPmfms.call(this, pmfms); + // Reset some attributes, to keep value from @Input() + delete state.samplingBatchEnabled; + delete state.showSamplingBatch; + return Object.assign(Object.assign({}, state), { onDeckPmfms: [], sortingPmfms: [], catchPmfms: [], gearPmfms: [], otherPmfms: [], gridColCount: 12, showWeight: isNotEmptyArray(state.weightPmfms) }); + } + }); + } + listenHasContent() { + return combineLatest([ + super.listenHasContent(), + this._state.select('showExhaustiveInventory'), + this._state.select(['onDeckPmfms', 'sortingPmfms', 'catchPmfms', 'gearPmfms', 'otherPmfms'], pmfmsMap => Object.values(pmfmsMap).some(isNotEmptyArray)) + // DEBUG + //.pipe(tap(hasPmfms => console.debug(this._logPrefix + ' listenHasContent() - hasPmfms=' + hasPmfms))) + ]) + .pipe(map(values => values.some(v => v === true))); + } + markAsPristine(opts) { + super.markAsPristine(opts); + } + markAsUntouched(opts) { + super.markAsUntouched(opts); + } + markAsDirty(opts) { + super.markAsDirty(opts); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], CatchBatchForm.prototype, "labelColSize", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], CatchBatchForm.prototype, "rxStrategy", void 0); +CatchBatchForm = CatchBatchForm_1 = __decorate([ + Component({ + selector: 'app-form-catch-batch', + templateUrl: './catch.form.html', + styleUrls: ['./catch.form.scss'], + providers: [ + { provide: BatchValidatorService, useClass: BatchValidatorService }, + { provide: BatchForm, useExisting: forwardRef(() => CatchBatchForm_1) }, + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + MeasurementsValidatorService, + UntypedFormBuilder, + ProgramRefService, + ReferentialRefService, + BatchValidatorService]) +], CatchBatchForm); +export { CatchBatchForm }; +//# sourceMappingURL=catch.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/catch/catch.form.js.map b/out-tsc/app/app/trip/batch/catch/catch.form.js.map new file mode 100644 index 000000000..4ea7a3945 --- /dev/null +++ b/out-tsc/app/app/trip/batch/catch/catch.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"catch.form.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/catch/catch.form.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAU,MAAM,eAAe,CAAC;AACxG,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAS,SAAS,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,4CAA4C,CAAC;AACvG,OAAO,EAAE,SAAS,EAAkB,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAc,MAAM,MAAM,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAsB9B,IAAM,cAAc,sBAApB,MAAM,cAAe,SAAQ,SAAqC;IAqBvE,YACE,QAAkB,EAClB,4BAA0D,EAC1D,WAA+B,EAC/B,iBAAoC,EACpC,qBAA4C,EAC5C,gBAAuC;QAEvC,KAAK,CAAC,QAAQ,EACZ,4BAA4B,EAC5B,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,CAAC,CAAC;QA/Bb,eAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC7C,iBAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACjD,kBAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACnD,gBAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC/C,gBAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC/C,kBAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAEnD,iBAAY,GAAG,CAAC,CAAC;QACjB,eAAU,GAA8B,cAAc,CAAC;QAwB9D,eAAe;QACf,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,WAAW,CAAC;QAC1D,IAAI,CAAC,cAAc,GAAG,kBAAkB,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,oCAAoC;QAEpC,QAAQ;QACR,IAAI,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;IACvC,CAAC;IA/BD,MAAM,CAAC,IAAkD;QACvD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IA2BD,+BAA+B;IAE/B,aAAa;IACG,aAAa,CAAC,KAAc;;;;;YAE1C,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,OAAO;YAE3B,0BAA0B;YAC1B,IAAI,IAAI,CAAC,gBAAgB,KAAK,qBAAqB,CAAC,WAAW,EAAE;gBAE/D,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,OAAM,aAAa,YAAC,KAAK,CAAC,CAAC;gBAEtH,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAC,OAAA,CAAA,MAAA,CAAC,CAAC,KAAK,0CAAE,OAAO,CAAC,UAAU,CAAC,MAAK,CAAC,CAAA,EAAA,CAAC,CAAC;gBAC1E,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAC,OAAA,CAAA,MAAA,CAAC,CAAC,KAAK,0CAAE,OAAO,CAAC,UAAU,CAAC,MAAK,CAAC,CAAA,EAAA,CAAC,CAAC;gBAC3E,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;;oBAAC,OAAA,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAA,MAAA,CAAC,CAAC,KAAK,0CAAE,OAAO,CAAC,SAAS,CAAC,MAAK,CAAC,CAAC,CAAC;2BAC7F,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;2BACxB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;iBAAA,CAAC,CAAC;gBAChC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;gBAElG,4BAA4B;gBAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS;sBAC5C,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CACpB,WAAW,CAAC,MAAM,EAClB,YAAY,CAAC,MAAM,EACnB,UAAU,CAAC,MAAM,EACjB,SAAS,CAAC,MAAM,CACjB,CAAC,CAAC;gBAEL,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;uBACxD,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;uBACzB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;uBACvB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE7B,eAAe;gBACf,OAAO;oBACL,WAAW;oBACX,iBAAiB;oBACjB,mBAAmB;oBACnB,WAAW;oBACX,YAAY;oBACZ,UAAU;oBACV,SAAS;oBACT,UAAU;oBACV,KAAK,EAAE,YAAY;oBACnB,UAAU,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;oBAC5B,YAAY;oBACZ,UAAU,EAAE,KAAK;oBACjB,mBAAmB,EAAE,KAAK;oBAC1B,iBAAiB,EAAE,KAAK;oBACxB,oBAAoB,EAAE,KAAK;oBAC3B,mBAAmB,EAAE,KAAK;oBAC1B,uBAAuB,EAAE,KAAK;iBAC/B,CAAC;aACH;YAED,sDAAsD;iBACjD;gBACH,MAAM,KAAK,GAAG,MAAM,OAAM,aAAa,YAAC,KAAK,CAAC,CAAC;gBAE/C,qDAAqD;gBACrD,OAAO,KAAK,CAAC,oBAAoB,CAAC;gBAClC,OAAO,KAAK,CAAC,iBAAiB,CAAC;gBAE/B,uCACK,KAAK,KACR,WAAW,EAAE,EAAE,EACf,YAAY,EAAE,EAAE,EAChB,UAAU,EAAE,EAAE,EACd,SAAS,EAAE,EAAE,EACb,UAAU,EAAE,EAAE,EACd,YAAY,EAAE,EAAE,EAChB,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,IAC9C;aACH;QAEH,CAAC;KAAA;IAES,gBAAgB;QACxB,OAAO,aAAa,CAAC;YACnB,KAAK,CAAC,gBAAgB,EAAE;YACxB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,CAAC,EACvF,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAC5D;YACD,QAAQ;YACR,uGAAuG;SACxG,CAAC;aACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,cAAc,CAAC,IAAkD;QAC/D,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,eAAe,CAAC,IAAkD;QAChE,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,WAAW,CAAC,IAAkD;QAC5D,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF,CAAA;AAzIC;IAAC,KAAK,EAAE;;oDAAkB;AAC1B;IAAC,KAAK,EAAE;;kDAAwD;AAXrD,cAAc;IAV1B,SAAS,CAAC;QACT,QAAQ,EAAE,sBAAsB;QAChC,WAAW,EAAE,mBAAmB;QAChC,SAAS,EAAE,CAAC,mBAAmB,CAAC;QAChC,SAAS,EAAE;YACT,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,qBAAqB,EAAC;YAClE,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,gBAAc,CAAC,EAAC;SACrE;QACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAuBY,QAAQ;QACY,4BAA4B;QAC7C,kBAAkB;QACZ,iBAAiB;QACb,qBAAqB;QAC1B,qBAAqB;GA3B9B,cAAc,CAmJ1B;SAnJY,cAAc"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batch.filter.js b/out-tsc/app/app/trip/batch/common/batch.filter.js new file mode 100644 index 000000000..93c3cb94f --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batch.filter.js @@ -0,0 +1,67 @@ +var BatchFilter_1; +import { __decorate } from "tslib"; +import { EntityClass, EntityFilter, isNotNil, toNumber } from '@sumaris-net/ngx-components'; +import { MeasurementUtils, MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { PmfmValueUtils } from '@app/referential/services/model/pmfm-value.model'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +let BatchFilter = BatchFilter_1 = class BatchFilter extends EntityFilter { + constructor() { + super(...arguments); + this.operationId = null; + this.saleId = null; // not used yet + this.parentId = null; + this.isSamplingBatch = null; + this.measurementValues = null; + this.parentFilter = null; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.operationId = source.operationId; + this.saleId = source.saleId; + this.parentId = source.parentId; + this.isSamplingBatch = source.isSamplingBatch; + this.measurementValues = source.measurementValues && Object.assign({}, source.measurementValues) || MeasurementUtils.toMeasurementValues(source.measurements); + this.parentFilter = source.parentFilter && BatchFilter_1.fromObject(source.parentFilter); + } + asObject(opts) { + const target = super.asObject(opts); + target.measurementValues = MeasurementValuesUtils.asObject(this.measurementValues, opts); + target.parentFilter = this.parentFilter && this.parentFilter.asObject(opts); + return target; + } + buildFilter() { + const filterFns = super.buildFilter(); + if (isNotNil(this.operationId)) { + filterFns.push(b => b.operationId === this.operationId); + } + if (isNotNil(this.saleId)) { + filterFns.push(b => b.saleId === this.saleId); + } + if (isNotNil(this.parentId)) { + filterFns.push(b => { var _a; return toNumber((_a = b.parent) === null || _a === void 0 ? void 0 : _a.id, b.parentId) === this.parentId; }); + } + if (isNotNil(this.isSamplingBatch)) { + filterFns.push(BatchUtils.isSamplingBatch); + } + if (isNotNil(this.measurementValues)) { + Object.keys(this.measurementValues).forEach(pmfmId => { + const pmfmValue = this.measurementValues[pmfmId]; + if (isNotNil(pmfmValue)) { + filterFns.push(b => isNotNil(b.measurementValues[pmfmId]) && PmfmValueUtils.equals(b.measurementValues[pmfmId], pmfmValue)); + } + }); + } + // Parent filter + const parentFilter = this.parentFilter && BatchFilter_1.fromObject(this.parentFilter); + if (parentFilter && !parentFilter.isEmpty()) { + const parentFilterFn = parentFilter.asFilterFn(); + filterFns.push(b => b.parent && parentFilterFn(b.parent)); + } + return filterFns; + } +}; +BatchFilter = BatchFilter_1 = __decorate([ + EntityClass({ typename: 'BatchFilterVO' }) +], BatchFilter); +export { BatchFilter }; +//# sourceMappingURL=batch.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batch.filter.js.map b/out-tsc/app/app/trip/batch/common/batch.filter.js.map new file mode 100644 index 000000000..6f1c6a001 --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batch.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch.filter.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/common/batch.filter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batch.form.content.js b/out-tsc/app/app/trip/batch/common/batch.form.content.js new file mode 100644 index 000000000..3456a4df0 --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batch.form.content.js @@ -0,0 +1,41 @@ +import { __decorate, __metadata, __param } from "tslib"; +import { Component, Input, Optional } from '@angular/core'; +import { BatchForm } from '@app/trip/batch/common/batch.form'; +import { AppFormUtils, toBoolean } from '@sumaris-net/ngx-components'; +import { environment } from '@environments/environment'; +let BatchFormContent = class BatchFormContent { + constructor(delegate) { + this.selectInputContent = AppFormUtils.selectInputContent; + this.delegate = delegate; + } + ngOnInit() { + var _a, _b; + this.debug = toBoolean(this.debug, ((_a = this.delegate) === null || _a === void 0 ? void 0 : _a.debug) || !environment.production); + this.showError = toBoolean(this.showError, (_b = this.delegate) === null || _b === void 0 ? void 0 : _b.showError); + } +}; +__decorate([ + Input(), + __metadata("design:type", BatchForm) +], BatchFormContent.prototype, "delegate", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchFormContent.prototype, "debug", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchFormContent.prototype, "showError", void 0); +BatchFormContent = __decorate([ + Component({ + selector: 'app-batch-form-content', + templateUrl: './batch.form.content.html', + styleUrls: ['./batch.form.content.scss'], + // Do not enable this, because fields with a computed class will not be refreshed well + //changeDetection: ChangeDetectionStrategy.OnPush + }), + __param(0, Optional()), + __metadata("design:paramtypes", [BatchForm]) +], BatchFormContent); +export { BatchFormContent }; +//# sourceMappingURL=batch.form.content.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batch.form.content.js.map b/out-tsc/app/app/trip/batch/common/batch.form.content.js.map new file mode 100644 index 000000000..e6d770054 --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batch.form.content.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch.form.content.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/common/batch.form.content.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAU,QAAQ,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAUjD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAM3B,YACc,QAAyB;QAUvC,uBAAkB,GAAG,YAAY,CAAC,kBAAkB,CAAC;QARnD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,QAAQ;;QACN,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,KAAK,KAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACpF,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,MAAA,IAAI,CAAC,QAAQ,0CAAE,SAAS,CAAC,CAAC;IACvE,CAAC;CAIF,CAAA;AAjBC;IAAC,KAAK,EAAE;8BAAW,SAAS;kDAAM;AAClC;IAAC,KAAK,EAAE;;+CAAgB;AACxB;IAAC,KAAK,EAAE;;mDAAoB;AAJjB,gBAAgB;IAR5B,SAAS,CAAC;QACT,QAAQ,EAAE,wBAAwB;QAClC,WAAW,EAAE,2BAA2B;QACxC,SAAS,EAAE,CAAC,2BAA2B,CAAC;QAExC,sFAAsF;QACtF,iDAAiD;KAClD,CAAC;IAQG,WAAA,QAAQ,EAAE,CAAA;qCAAY,SAAS;GAPvB,gBAAgB,CAmB5B;SAnBY,gBAAgB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batch.form.js b/out-tsc/app/app/trip/batch/common/batch.form.js new file mode 100644 index 000000000..ce4c3db99 --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batch.form.js @@ -0,0 +1,922 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, Component, Inject, InjectionToken, Injector, Input, Optional, } from '@angular/core'; +import { Batch } from './batch.model'; +import { MeasurementValuesForm } from '@app/data/measurement/measurement-values.form.class'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { AppFormArray, firstArrayValue, firstTruePromise, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, ReferentialUtils, splitByProperty, toBoolean, toNumber, waitFor, } from '@sumaris-net/ngx-components'; +import { debounceTime, delay, distinctUntilChanged, filter } from 'rxjs/operators'; +import { AcquisitionLevelCodes, MethodIds, PmfmIds, QualitativeLabels } from '@app/referential/services/model/model.enum'; +import { MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { BatchValidatorService } from './batch.validator'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { equals, roundHalfUp } from '@app/shared/functions'; +import { BatchFilter } from '@app/trip/batch/common/batch.filter'; +import { DenormalizedPmfmFilter } from '@app/referential/services/filter/pmfm.filter'; +export const BATCH_VALIDATOR = new InjectionToken('batchValidatorService'); +export const BATCH_VALIDATOR_OPTIONS_TOKEN = new InjectionToken('batchValidatorOptions'); +let BatchForm = class BatchForm extends MeasurementValuesForm { + constructor(injector, measurementsValidatorService, formBuilder, programRefService, referentialRefService, validatorService, validatorOptions) { + super(injector, measurementsValidatorService, formBuilder, programRefService, validatorService.getFormGroup(null, Object.assign(Object.assign({ withWeight: true, rankOrderRequired: false, labelRequired: false, withChildren: true }, validatorOptions), { childrenOptions: Object.assign({ rankOrderRequired: false, labelRequired: false, withChildrenWeight: true }, validatorOptions === null || validatorOptions === void 0 ? void 0 : validatorOptions.childrenOptions) })), { + mapPmfms: (pmfms) => this.mapPmfms(pmfms), + onUpdateFormGroup: (form) => this.onUpdateFormGroup(form) + }); + this.measurementsValidatorService = measurementsValidatorService; + this.formBuilder = formBuilder; + this.programRefService = programRefService; + this.referentialRefService = referentialRefService; + this.validatorService = validatorService; + this._afterViewInitialized$ = this._state.select('afterViewInitialized'); + this._disableByDefaultControls = []; + this.hasContent$ = this._state.select('hasContent'); + this.showTaxonGroup = true; + this.showTaxonName = true; + this.showError = true; + this.showTaxonGroupSearchBar = true; + this.showComment = false; + this.rxStrategy = 'normal'; + this.errorTranslatorOptions = { separator: '
', controlPathTranslator: this }; + // Set defaults + this.i18nPmfmPrefix = 'TRIP.BATCH.PMFM.'; + this._state.set((state) => (Object.assign(Object.assign({}, state), { acquisitionLevel: AcquisitionLevelCodes.SORTING_BATCH, pmfmFilter: null, showWeight: isNotNil(this.form.get('weight.value')), showChildrenWeight: isNotNil(this.form.get('childrenWeight')) }))); + // Make sure to have a resizable array for children + if (!(this.form.get('children') instanceof AppFormArray)) { + console.warn(this._logPrefix + 'Creating a new AppFormArray for children, using options:', validatorOptions === null || validatorOptions === void 0 ? void 0 : validatorOptions.childrenOptions); + this.form.setControl('children', this.validatorService.getChildrenFormArray(null, Object.assign({}, validatorOptions === null || validatorOptions === void 0 ? void 0 : validatorOptions.childrenOptions))); + } + // for DEV only + //this.debug = !environment.production; + } + set samplingRatioFormat(value) { + this._state.set('samplingRatioFormat', _ => value); + } + get samplingRatioFormat() { + return this._state.get('samplingRatioFormat'); + } + set pmfmFilter(value) { + this._state.set('pmfmFilter', _ => value); + } + get pmfmFilter() { + return this._state.get('pmfmFilter'); + } + set showWeight(value) { + this._state.set('showWeight', _ => value); + } + get showWeight() { + return this._state.get('showWeight'); + } + set showEstimatedWeight(value) { + this._state.set('showEstimatedWeight', _ => value); + } + get showEstimatedWeight() { + return this._state.get('showEstimatedWeight'); + } + set showExhaustiveInventory(value) { + this._state.set('showExhaustiveInventory', _ => value); + } + get showExhaustiveInventory() { + return this._state.get('showExhaustiveInventory'); + } + set requiredWeight(value) { + this._state.set('requiredWeight', _ => value); + } + get requiredWeight() { + return this._state.get('requiredWeight'); + } + set showIndividualCount(value) { + this._state.set('showIndividualCount', _ => value); + } + get showIndividualCount() { + return this._state.get('showIndividualCount'); + } + set requiredIndividualCount(value) { + this._state.set('requiredIndividualCount', _ => value); + } + get requiredIndividualCount() { + return this._state.get('requiredIndividualCount'); + } + set showChildrenWeight(value) { + this._state.set('showChildrenWeight', _ => value); + } + get showChildrenWeight() { + return this._state.get('showChildrenWeight'); + } + set showSamplingBatch(value) { + this._state.set('showSamplingBatch', _ => value); + } + get showSamplingBatch() { + return this._state.get('showSamplingBatch'); + } + set showSampleWeight(value) { + this._state.set('showSampleWeight', _ => value); + } + get showSampleWeight() { + return this._state.get('showSampleWeight'); + } + set requiredSampleWeight(value) { + this._state.set('requiredSampleWeight', _ => value); + } + get requiredSampleWeight() { + return this._state.get('requiredSampleWeight'); + } + set showSampleIndividualCount(value) { + this._state.set('showSampleIndividualCount', _ => value); + } + get showSampleIndividualCount() { + return this._state.get('showSampleIndividualCount'); + } + set requiredSampleIndividualCount(value) { + this._state.set('requiredSampleIndividualCount', _ => value); + } + get requiredSampleIndividualCount() { + return this._state.get('requiredSampleIndividualCount'); + } + set samplingBatchEnabled(value) { + this._state.set('samplingBatchEnabled', _ => value); + } + get samplingBatchEnabled() { + return this._state.get('samplingBatchEnabled'); + } + set filter(value) { + this._filter = value; + } + get filter() { + return this._filter; + } + get defaultWeightPmfm() { + return this._state.get('defaultWeightPmfm'); + } + set defaultWeightPmfm(value) { + this._state.set('defaultWeightPmfm', _ => value); + } + get weightPmfms() { + return this._state.get('weightPmfms'); + } + set weightPmfms(value) { + this._state.set('weightPmfms', _ => value); + } + get weightPmfmsByMethod() { + return this._state.get('weightPmfmsByMethod'); + } + set weightPmfmsByMethod(value) { + this._state.set('weightPmfmsByMethod', _ => value); + } + get childrenFormArray() { + return this.form.controls.children; + } + get samplingBatchForm() { + var _a; + return (_a = this.childrenFormArray) === null || _a === void 0 ? void 0 : _a.at(0); + } + get weightForm() { + return this.form.get('weight'); + } + get hasAvailableTaxonGroups() { + return isNotNil(this.availableTaxonGroups) && (!Array.isArray(this.availableTaxonGroups) || this.availableTaxonGroups.length > 0); + } + get touched() { + var _a; + return (_a = this.form) === null || _a === void 0 ? void 0 : _a.touched; + } + get afterViewInitialized() { + return this._state.get('afterViewInitialized'); + } + disable(opts) { + super.disable(opts); + } + enable(opts) { + super.enable(opts); + // Refresh sampling child form + if (this.samplingBatchEnabled) { + this.enableSamplingBatch(opts); + } + else { + this.disableSamplingBatch(opts); + } + // Refresh weight form + if (this.showWeight) { + this.enableWeightFormGroup(opts); + } + else { + this.disableWeightFormGroup(opts); + } + // Other field to disable by default (e.g. discard reason, in SUMARiS program) + this._disableByDefaultControls.forEach(c => c.disable(opts)); + } + ngOnInit() { + // Default values + this.mobile = isNotNil(this.mobile) ? this.mobile : this.settings.mobile; + this.tabindex = isNotNil(this.tabindex) ? this.tabindex : 1; + this.showWeight = toBoolean(this.showWeight, true); + this.requiredWeight = toBoolean(this.requiredWeight, false); + this.requiredIndividualCount = toBoolean(this.requiredIndividualCount, false); + this.showIndividualCount = toBoolean(this.showIndividualCount, false); + this.showChildrenWeight = toBoolean(this.showChildrenWeight, false); + this.showSampleWeight = toBoolean(this.showSampleWeight, this.showWeight); + this.showSampleIndividualCount = toBoolean(this.showSampleIndividualCount, false); + this.requiredSampleWeight = toBoolean(this.requiredSampleWeight, false); + this.showExhaustiveInventory = toBoolean(this.showExhaustiveInventory, false); + this.samplingRatioFormat = this.samplingRatioFormat || ProgramProperties.TRIP_BATCH_SAMPLING_RATIO_FORMAT.defaultValue; + // Inherited. WARN will enable the form + super.ngOnInit(); + // When pmfm filter change, re-apply initial pmfms + this._state.hold(this._state.select('pmfmFilter') + .pipe( + // DEBUG + //tap(pmfmFilter => console.debug(this._logPrefix + 'pmfmFilter changes', pmfmFilter)), + filter(_ => this.enabled && !this.loading)), _ => this.setPmfms(this._initialPmfms)); + // Update form if need + this._state.hold(this._state.select(['showWeight', 'requiredWeight', + 'showSamplingBatch', 'requiredSampleWeight', + 'requiredIndividualCount', 'showChildrenWeight'], res => res) + .pipe(filter(_ => !this.loading)), (_) => this.onUpdateFormGroup()); + // Has content ? + this._state.connect('hasContent', this.listenHasContent()); + // Listen samplingBatchEnabled, to enable/disable sampling form + this._state.hold(this._state.select('samplingBatchEnabled') + .pipe(filter(_ => this.enabled && !this.loading), distinctUntilChanged()), samplingBatchEnabled => { + if (samplingBatchEnabled) + this.enableSamplingBatch(); + else + this.disableSamplingBatch(); + }); + // Taxon group combo + if (this.hasAvailableTaxonGroups) { + // Set items (useful to speed up the batch group modal) + this.registerAutocompleteField('taxonGroup', { + items: this.availableTaxonGroups, + mobile: this.mobile + }); + // Hide taxon group searchbar, if only few items + if (Array.isArray(this.availableTaxonGroups) && this.mobile && this.availableTaxonGroups.length < 10) { + this.showTaxonGroupSearchBar = false; + } + } + else { + this.registerAutocompleteField('taxonGroup', { + suggestFn: (value, filter) => this.programRefService.suggestTaxonGroups(value, Object.assign(Object.assign({}, filter), { program: this.programLabel })), + mobile: this.mobile + }); + } + // Taxon name combo + this.updateTaxonNameFilter(); + this.registerAutocompleteField('taxonName', { + suggestFn: (value, filter) => this.programRefService.suggestTaxonNames(value, filter), + filter: this.taxonNameFilter, + mobile: this.mobile, + showAllOnFocus: this.showTaxonName + }); + this.registerSubscription(this.form.get('taxonGroup').valueChanges + .pipe(debounceTime(250), filter(_ => this.showTaxonGroup && this.showTaxonName)) + .subscribe(taxonGroup => this.updateTaxonNameFilter({ taxonGroup }))); + this.ngInitExtension(); + } + ngAfterViewInit() { + // This will cause update controls + this._state.set('afterViewInitialized', _ => true); + } + ngOnDestroy() { + super.ngOnDestroy(); + } + isVisiblePmfm(pmfm) { + return !pmfm.hidden; + } + isVisibleNotWeightPmfm(pmfm) { + return !pmfm.hidden && !PmfmUtils.isWeight(pmfm); + } + applyState(state) { + this._state.set(oldState => (Object.assign(Object.assign(Object.assign({}, oldState), state), { + // Keep some protected inputs + pmfms: oldState.pmfms }))); + // Apply pmfms + if (state === null || state === void 0 ? void 0 : state.pmfms) { + this.setPmfms(state === null || state === void 0 ? void 0 : state.pmfms); + } + } + onApplyingEntity(data, opts) { + super.onApplyingEntity(data, opts); + if (!data) + return; // Skip + // Init default + data.label = data.label || this.acquisitionLevel; + data.rankOrder = toNumber(data.rankOrder, 0); + } + translateControlPath(path) { + // Translate specific path + let i18nSuffix; + switch (path) { + case 'individualCount': + i18nSuffix = 'TOTAL_INDIVIDUAL_COUNT'; + break; + case 'weight': + case 'weight.value': + i18nSuffix = 'TOTAL_WEIGHT'; + break; + case 'children.0': + i18nSuffix = 'SAMPLING_BATCH'; + break; + case 'children.0.weight.value': + i18nSuffix = 'SAMPLING_WEIGHT'; + break; + case 'children.0.individualCount': + i18nSuffix = 'SAMPLING_INDIVIDUAL_COUNT'; + break; + case 'children.0.samplingRatio': + i18nSuffix = this.samplingRatioFormat === '1/w' ? 'SAMPLING_COEFFICIENT' : 'SAMPLING_RATIO_PCT'; + break; + } + if (i18nSuffix) { + const i18nKey = (this.i18nFieldPrefix || 'TRIP.BATCH.EDIT.') + i18nSuffix; + return this.translate.instant(i18nKey); + } + // Default translation (pmfms) + return super.translateControlPath(path, this._initialPmfms /*give the full list*/); + } + /* -- protected method -- */ + ngInitExtension() { + return __awaiter(this, void 0, void 0, function* () { + yield this.ready(); + const discardReasonControl = this.form.get('measurementValues.' + PmfmIds.DISCARD_REASON); + const discardOrLandingControl = this.form.get('measurementValues.' + PmfmIds.DISCARD_OR_LANDING); + // Manage DISCARD_REASON validator + if (discardOrLandingControl && discardReasonControl) { + // Always disable by default, while discard/Landing not set + this._disableByDefaultControls.push(discardReasonControl); + this.registerSubscription(discardOrLandingControl.valueChanges + .pipe( + // IMPORTANT: add a delay, to make sure to be executed AFTER the form.enable() + delay(200)) + .subscribe((value) => { + if (ReferentialUtils.isNotEmpty(value) && value.label === QualitativeLabels.DISCARD_OR_LANDING.DISCARD) { + if (this.form.enabled) { + discardReasonControl.enable(); + } + discardReasonControl.setValidators(Validators.required); + discardReasonControl.updateValueAndValidity({ onlySelf: true }); + this.form.updateValueAndValidity({ onlySelf: true }); + } + else { + discardReasonControl.setValue(null); + discardReasonControl.setValidators(null); + discardReasonControl.disable(); + } + })); + } + }); + } + updateView(data, opts) { + const _super = Object.create(null, { + updateView: { get: () => super.updateView } + }); + return __awaiter(this, void 0, void 0, function* () { + const defaultWeightPmfm = this.defaultWeightPmfm; + const weightPmfms = this.weightPmfms; + const childrenFormArray = this.childrenFormArray; + // Fill weight, if a weight PMFM exists + if (defaultWeightPmfm && this.showWeight) { + data.weight = BatchUtils.getWeight(data, weightPmfms) || { + value: null, + methodId: defaultWeightPmfm.methodId, + computed: defaultWeightPmfm.isComputed, + estimated: defaultWeightPmfm.methodId === MethodIds.ESTIMATED_BY_OBSERVER + }; + // Clean all weight values and control (to keep only the weight form group) + weightPmfms === null || weightPmfms === void 0 ? void 0 : weightPmfms.forEach(p => { + delete data.measurementValues[p.id.toString()]; + this.form.removeControl(p.id.toString()); + }); + } + // No weight PMFM : disable weight form group, if exists (will NOT exists in BatchGroupForm sub classe) + else { + // Disable weight (if form group exists) + this.disableWeightFormGroup(opts); + } + // Adapt measurement values to form + if (!opts || opts.normalizeEntityToForm !== false) { + // IMPORTANT: applying normalisation of measurement values on ALL pmfms (not only displayed pmfms) + // This is required by the batch-group-form component, to keep the value of hidden PMFM, such as Landing/Discard Pmfm + MeasurementValuesUtils.normalizeEntityToForm(data, this.pmfms, this.form); + } + if (this.showSamplingBatch) { + childrenFormArray.resize(1, opts); + const samplingFormGroup = childrenFormArray.at(0); + const samplingBatch = BatchUtils.getOrCreateSamplingChild(data); + // Force isSampling=true, if sampling batch it NOT empty + this.samplingBatchEnabled = toBoolean(this.samplingBatchEnabled, BatchUtils.isSamplingNotEmpty(samplingBatch)); + // Read child weight (use the first one) + if (defaultWeightPmfm) { + samplingBatch.weight = BatchUtils.getWeight(samplingBatch, weightPmfms); + // Adapt measurement values to form + MeasurementValuesUtils.normalizeEntityToForm(samplingBatch, [], samplingFormGroup); + } + // Convert sampling ratio + //samplingBatch.samplingRatio = BatchUtils.getSamplingRatio(samplingBatch, this.samplingRatioType); + /*if (isNotNil(samplingBatch.samplingRatio)) { + BatchUtils.normalizedSamplingRatioToForm(samplingBatch, this.samplingRatioType); + }*/ + } + // No sampling batch + else { + childrenFormArray.resize(((data === null || data === void 0 ? void 0 : data.children) || []).length, opts); + childrenFormArray.disable(Object.assign(Object.assign({}, opts), { onlySelf: true })); + } + // Call inherited function + yield _super.updateView.call(this, data, Object.assign(Object.assign({}, opts), { normalizeEntityToForm: false // Already normalized (see upper) + })); + }); + } + updateViewState(opts) { + super.updateViewState(opts); + } + getValue() { + var _a, _b; + if (!this.data) + return undefined; + const json = this.form.value; + const data = this.data; + const weightPmfms = this.weightPmfms; + const weightPmfmsByMethod = this.weightPmfmsByMethod; + // Reset comment, when hidden + if (!this.showComment) + json.comments = undefined; + // Get existing measurements + const measurementValues = data.measurementValues || {}; + // Clean previous all weights + weightPmfms === null || weightPmfms === void 0 ? void 0 : weightPmfms.forEach(p => measurementValues[p.id.toString()] = undefined); + // Convert weight into measurement + const totalWeight = this.defaultWeightPmfm && ((_a = json.weight) === null || _a === void 0 ? void 0 : _a.value); + if (isNotNil(totalWeight)) { + const totalWeightPmfm = BatchUtils.getWeightPmfm(json.weight, weightPmfms, weightPmfmsByMethod); + json.measurementValues = Object.assign(Object.assign({}, json.measurementValues), { [totalWeightPmfm.id.toString()]: totalWeight }); + } + // Convert measurements + json.measurementValues = Object.assign(Object.assign({}, measurementValues), MeasurementValuesUtils.normalizeValuesToModel(json.measurementValues, this._initialPmfms)); + if (this.showSamplingBatch) { + if (this.samplingBatchEnabled) { + const child = BatchUtils.getOrCreateSamplingChild(data); + const childJson = json.children && json.children[0] || {}; + childJson.rankOrder = 1; + childJson.label = json.label && (json.label + Batch.SAMPLING_BATCH_SUFFIX) || undefined; + childJson.measurementValues = childJson.measurementValues || {}; + // Clean existing weights + weightPmfms === null || weightPmfms === void 0 ? void 0 : weightPmfms.forEach(p => childJson.measurementValues[p.id.toString()] = undefined); + // Convert weight into measurement + if (isNotNil((_b = childJson.weight) === null || _b === void 0 ? void 0 : _b.value)) { + const childWeightPmfm = BatchUtils.getWeightPmfm(childJson.weight, weightPmfms, weightPmfmsByMethod); + childJson.measurementValues[childWeightPmfm.id.toString()] = childJson.weight.value; + } + // Convert measurements + childJson.measurementValues = Object.assign({}, child.measurementValues, // Keep existing extra measurements + MeasurementValuesUtils.normalizeValuesToModel(childJson.measurementValues, weightPmfms)); + // Special case: when sampling on individual count only (e.g. RJB - Pocheteau) + if (!this.showWeight && isNotNil(childJson.individualCount) && isNotNil(json.individualCount)) { + console.debug(this._logPrefix + 'Computing samplingRatio, using individualCount (e.g. special case for species without weight)'); + childJson.samplingRatio = childJson.individualCount / json.individualCount; + childJson.samplingRatioText = `${childJson.individualCount}/${json.individualCount}`; + } + json.children = [childJson]; + } + else { + // No sampling batch + json.children = []; + } + // Update data + data.fromObject(json, { withChildren: true }); + } + else { + // Keep existing children + data.fromObject(json); + } + // DEBUG + //if (this.debug) console.debug(`[batch-form] ${data.label} getValue():`, data); + return data; + } + /** + * Compute 'hasContent' value, from other inputs + * + * @protected + */ + listenHasContent() { + return this._state.select([ + 'showWeight', 'weightPmfms', 'pmfms', + 'showIndividualCount', 'showSampleIndividualCount', + 'showSamplingBatch', + ], state => (state.showWeight && isNotEmptyArray(state.weightPmfms)) + || (state.pmfms && state.pmfms.some(this.isVisibleNotWeightPmfm)) + || state.showIndividualCount || state.showSampleIndividualCount + || state.showSamplingBatch || this.showTaxonGroup || this.showTaxonName); + } + enableSamplingBatch(opts) { + return __awaiter(this, void 0, void 0, function* () { + const array = this.childrenFormArray; + if (!array) + return; + array.enable(opts); + yield this.enableWeightsComputation(); + }); + } + disableSamplingBatch(opts) { + this.disableSamplingWeightComputation(); + const array = this.childrenFormArray; + if (!array) + return; + array.disable(opts); + } + copyChildrenWeight(event, samplingBatchForm) { + var _a, _b; + const source = (_a = samplingBatchForm.get('childrenWeight')) === null || _a === void 0 ? void 0 : _a.value; + if (isNil(source === null || source === void 0 ? void 0 : source.value)) + return; // Nothing to copy + const totalWeight = (_b = this.weightForm) === null || _b === void 0 ? void 0 : _b.value; + const target = Object.assign(Object.assign({}, source), { + // Adapt max decimals to targeted weight + value: roundHalfUp(source.value, this.defaultWeightPmfm.maximumNumberDecimals || 3), + // Force to not computed, to be able to update value + computed: false }); + if (isNotNil(totalWeight === null || totalWeight === void 0 ? void 0 : totalWeight.value) && !totalWeight.computed) { + // Apply the new weight + // + Clean sampling ratio (will be computed, using weights) + samplingBatchForm.patchValue({ + weight: target, + samplingRatio: null, + samplingRatioText: null, + }); + } + else { + // Apply the new weight + samplingBatchForm.patchValue({ + weight: target + }); + } + } + toggleComment() { + this.showComment = !this.showComment; + // Mark form as dirty, if need to reset comment (see getValue()) + if (!this.showComment && isNotNilOrBlank(this.form.get('comments').value)) + this.form.markAsDirty(); + this.markForCheck(); + } + /* -- protected methods -- */ + /** + * Wait ngAfterViewInit() + */ + waitViewInit() { + if (this.afterViewInitialized) + return; + return firstTruePromise(this._afterViewInitialized$, { stop: this.destroySubject }); + } + updateTaxonNameFilter(opts) { + // If taxonGroup exists: taxon group must be filled first + if (this.showTaxonGroup && ReferentialUtils.isEmpty(opts && opts.taxonGroup)) { + this.taxonNameFilter = { + programLabel: 'NONE' /*fake program, will cause empty array*/ + }; + } + else { + this.taxonNameFilter = { + programLabel: this.programLabel, + taxonGroupId: opts && opts.taxonGroup && opts.taxonGroup.id + }; + } + this.markForCheck(); + } + mapPmfms(pmfms) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!pmfms) + return; // Skip if empty + this._initialPmfms = pmfms; // Copy original pmfms list + // Filter pmfms + const filterFn = (_a = DenormalizedPmfmFilter.fromObject(this.pmfmFilter)) === null || _a === void 0 ? void 0 : _a.asFilterFn(); + if (filterFn) { + pmfms = pmfms.filter(filterFn); + } + // dispatch pmfms, and return partial state + const state = yield this.dispatchPmfms(pmfms); + this._state.set(state); + return state.pmfms; + }); + } + dispatchPmfms(pmfms) { + return __awaiter(this, void 0, void 0, function* () { + if (!pmfms) + return; // Skip + // DEBUG + console.debug(this._logPrefix + ' Dispatching pmfms...', pmfms); + // Read weight PMFMs + let weightPmfms = pmfms.filter(p => PmfmUtils.isWeight(p)); + // Exclude weight (because we use special fields for weights) + // or hidden PMFMs + const notWeightPmfms = pmfms.filter(p => !weightPmfms.includes(p)); + // Fix weight pmfms + weightPmfms = weightPmfms.map(p => { + if (isNil(p.methodId) || p.required) { + p = p.clone(); + // Fill methodId (need by the map 'weightPmfmsByMethod') + p.methodId = toNumber(p.methodId, MethodIds.OBSERVED_BY_OBSERVER); + // Required will be managed by validator, and template, using the @Input 'requiredWeight' + p.required = false; + } + return p; + }); + const defaultWeightPmfm = firstArrayValue(weightPmfms); + const weightPmfmsByMethod = splitByProperty(weightPmfms, 'methodId'); + // All pmfms to keep (visible or not) + pmfms = notWeightPmfms.concat(weightPmfms); + // Hide sampling batch, if no weight pmfm + const showSamplingBatch = toBoolean(this.showSamplingBatch, isNotNil(defaultWeightPmfm)); + return { + showSamplingBatch, + weightPmfms, + defaultWeightPmfm, + showWeight: !!defaultWeightPmfm, + showEstimatedWeight: !!weightPmfmsByMethod[MethodIds.ESTIMATED_BY_OBSERVER], + weightPmfmsByMethod, + pmfms + }; + }); + } + onUpdateFormGroup(form) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + form = form || this.form; + console.debug(this._logPrefix + 'Updating form group...'); + try { + // Wait ngAfterViewInit() + yield this.waitViewInit(); + // Add pmfms to form + const measFormGroup = form.get('measurementValues'); + if (measFormGroup) { + this.measurementsValidatorService.updateFormGroup(measFormGroup, { pmfms: this.pmfms, emitEvent: false }); + } + const childrenFormArray = this.childrenFormArray; + const hasSamplingForm = (childrenFormArray === null || childrenFormArray === void 0 ? void 0 : childrenFormArray.length) === 1 && this.defaultWeightPmfm && true; + // If the sample batch exists + if (this.showSamplingBatch) { + childrenFormArray.resize(1); + const samplingForm = childrenFormArray.at(0); + // Reset measurementValues (if exists) + const samplingMeasFormGroup = samplingForm.get('measurementValues'); + if (samplingMeasFormGroup) { + this.measurementsValidatorService.updateFormGroup(samplingMeasFormGroup, { pmfms: [] }); + } + // Adapt exists sampling child, if any + if (this.data) { + const samplingChildBatch = BatchUtils.getOrCreateSamplingChild(this.data); + this.samplingBatchEnabled = toBoolean(this.samplingBatchEnabled, BatchUtils.isSamplingNotEmpty(samplingChildBatch)); + } + else { + // No data: disable sampling + this.samplingBatchEnabled = toBoolean(this.samplingBatchEnabled, false); + } + // Update form validators + this.validatorService.updateFormGroup(this.form, { + withWeight: this.showWeight, + weightRequired: this.requiredWeight, + individualCountRequired: this.requiredIndividualCount, + withChildrenWeight: this.showChildrenWeight, + isOnFieldMode: this.settings.isOnFieldMode(this.usageMode) + }); + this.markForCheck(); + // Has sample batch, and weight is enable + yield this.enableWeightsComputation(); + } + // Remove existing sample, if exists but showSample=false + else if (hasSamplingForm) { + childrenFormArray.resize(0); + // Unregister to previous sampling weight validator + (_a = this._formValidatorSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + } + if (this.showWeight) { + this.enableWeightFormGroup({ emitEvent: false }); + } + else { + this.disableWeightFormGroup({ emitEvent: false }); + } + } + catch (err) { + console.error(this._logPrefix + 'Error while updating controls', err); + } + }); + } + enableWeightFormGroup(opts) { + const weightForm = this.weightForm; + if (!weightForm || weightForm.enabled) + return; + weightForm.enable(opts); + } + disableWeightFormGroup(opts) { + const weightForm = this.weightForm; + if (!weightForm || weightForm.disabled) + return; + weightForm.disable(opts); + } + disableSamplingWeightComputation() { + var _a; + (_a = this._formValidatorSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + } + enableWeightsComputation() { + var _a, _b, _c; + return __awaiter(this, void 0, void 0, function* () { + if (!this.showWeight || !this.samplingBatchEnabled || !this.showSamplingBatch) { + // Unregister to previous validator + (_a = this._formValidatorSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + return; + } + // Make sure required attribute have been set + if (!this.samplingRatioFormat || !this.defaultWeightPmfm) { + // Wait 2s + yield waitFor(() => !!this.samplingRatioFormat && !!this.defaultWeightPmfm, { timeout: 2000, stopError: false }); + // Stop if not found + if (!this.samplingRatioFormat || !this.defaultWeightPmfm) { + console.warn(this._logPrefix + 'Missing samplingRatioFormat or weight Pmfm. Skipping sampling ratio and weight computation'); + return; + } + } + const opts = { + requiredSampleWeight: this.requiredSampleWeight, + requiredIndividualCount: this.requiredIndividualCount, + samplingRatioFormat: this.samplingRatioFormat, + weightMaxDecimals: (_b = this.defaultWeightPmfm) === null || _b === void 0 ? void 0 : _b.maximumNumberDecimals, + debounceTime: this.mobile ? 650 : 0 + }; + // Skip if unchanged + if (equals(opts, this._formValidatorOpts)) + return; + // Unregister to previous validator + (_c = this._formValidatorSubscription) === null || _c === void 0 ? void 0 : _c.unsubscribe(); + this._formValidatorOpts = opts; + // Create a sampling form validator + const subscription = this.validatorService.enableSamplingRatioAndWeight(this.form, Object.assign(Object.assign({}, this._formValidatorOpts), { markForCheck: () => this.markForCheck() })); + // Register subscription + this._formValidatorSubscription = subscription; + this.registerSubscription(this._formValidatorSubscription); + subscription.add(() => { + this.unregisterSubscription(subscription); + this._formValidatorSubscription = null; + this._formValidatorOpts = null; + }); + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchForm.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], BatchForm.prototype, "tabindex", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchForm.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchForm.prototype, "showTaxonGroup", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchForm.prototype, "showTaxonName", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchForm.prototype, "availableTaxonGroups", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchForm.prototype, "showTaxonGroupSearchBar", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], BatchForm.prototype, "maxVisibleButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], BatchForm.prototype, "maxItemCountForButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchForm.prototype, "i18nSuffix", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchForm.prototype, "showComment", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchForm.prototype, "rxStrategy", void 0); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], BatchForm.prototype, "samplingRatioFormat", null); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], BatchForm.prototype, "pmfmFilter", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchForm.prototype, "showWeight", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchForm.prototype, "showEstimatedWeight", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchForm.prototype, "showExhaustiveInventory", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchForm.prototype, "requiredWeight", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchForm.prototype, "showIndividualCount", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchForm.prototype, "requiredIndividualCount", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchForm.prototype, "showChildrenWeight", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchForm.prototype, "showSamplingBatch", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchForm.prototype, "showSampleWeight", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchForm.prototype, "requiredSampleWeight", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchForm.prototype, "showSampleIndividualCount", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchForm.prototype, "requiredSampleIndividualCount", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchForm.prototype, "samplingBatchEnabled", null); +__decorate([ + Input(), + __metadata("design:type", BatchFilter), + __metadata("design:paramtypes", [BatchFilter]) +], BatchForm.prototype, "filter", null); +BatchForm = __decorate([ + Component({ + selector: 'app-batch-form', + templateUrl: './batch.form.html', + styleUrls: ['batch.form.scss'], + providers: [ + { provide: BATCH_VALIDATOR, useExisting: BatchValidatorService }, + { provide: BATCH_VALIDATOR_OPTIONS_TOKEN, useValue: {} } + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __param(5, Inject(BATCH_VALIDATOR)), + __param(6, Inject(BATCH_VALIDATOR_OPTIONS_TOKEN)), + __param(6, Optional()), + __metadata("design:paramtypes", [Injector, + MeasurementsValidatorService, + UntypedFormBuilder, + ProgramRefService, + ReferentialRefService, Object, Object]) +], BatchForm); +export { BatchForm }; +//# sourceMappingURL=batch.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batch.form.js.map b/out-tsc/app/app/trip/batch/common/batch.form.js.map new file mode 100644 index 000000000..3b566e122 --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batch.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch.form.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/common/batch.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batch.modal.js b/out-tsc/app/app/trip/batch/common/batch.modal.js new file mode 100644 index 000000000..c219147bc --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batch.modal.js @@ -0,0 +1,189 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input, ViewChild } from '@angular/core'; +import { Batch } from './batch.model'; +import { BehaviorSubject } from 'rxjs'; +import { BatchForm } from './batch.form'; +import { ModalController } from '@ionic/angular'; +import { AppFormUtils, isNotNil, LocalSettingsService, toBoolean } from '@sumaris-net/ngx-components'; +import { TranslateService } from '@ngx-translate/core'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +let BatchModal = class BatchModal { + constructor(injector, viewCtrl, settings, translate, cd) { + this.injector = injector; + this.viewCtrl = viewCtrl; + this.settings = settings; + this.translate = translate; + this.cd = cd; + this.debug = false; + this.loading = false; + this.$title = new BehaviorSubject(undefined); + this.isNew = false; + this.showTaxonGroup = true; + this.showTaxonName = true; + this.showIndividualCount = false; + this.showTotalIndividualCount = false; + this.showSamplingBatch = false; + // Default value + this.acquisitionLevel = AcquisitionLevelCodes.SORTING_BATCH; + // TODO: for DEV only + //this.debug = !environment.production; + } + get dirty() { + return this.form.dirty; + } + get invalid() { + return this.form.invalid; + } + get valid() { + return this.form.valid; + } + ngOnInit() { + // Default values + this.mobile = isNotNil(this.mobile) ? this.mobile : this.settings.mobile; + this.disabled = toBoolean(this.disabled, false); + this.showComment = toBoolean(this.showComment, !this.mobile || isNotNil(this.data.comments)); + if (this.disabled) { + this.form.disable(); + } + this.form.value = this.data || new Batch(); + // Compute the title + this.computeTitle(); + if (!this.isNew) { + // Update title each time value changes + this.form.valueChanges.subscribe(batch => this.computeTitle(batch)); + } + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.viewCtrl.dismiss(); + }); + } + close(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.loading) + return; // avoid many call + if (this.invalid) { + if (this.debug) + AppFormUtils.logFormErrors(this.form.form, '[batch-modal] '); + this.form.error = 'COMMON.FORM.HAS_ERROR'; + this.form.markAllAsTouched(); + return; + } + this.loading = true; + // Save table content + const data = this.form.value; + yield this.viewCtrl.dismiss(data); + }); + } + /* -- protected methods -- */ + markForCheck() { + this.cd.markForCheck(); + } + computeTitle(data) { + return __awaiter(this, void 0, void 0, function* () { + data = data || this.data; + if (this.isNew || !data) { + this.$title.next(yield this.translate.get('TRIP.BATCH.NEW.TITLE').toPromise()); + } + else { + const label = BatchUtils.parentToString(data); + this.$title.next(yield this.translate.get('TRIP.BATCH.EDIT.TITLE', { label }).toPromise()); + } + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", Batch) +], BatchModal.prototype, "data", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchModal.prototype, "disabled", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchModal.prototype, "isNew", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchModal.prototype, "acquisitionLevel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchModal.prototype, "programLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchModal.prototype, "showTaxonGroup", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchModal.prototype, "showTaxonName", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchModal.prototype, "showIndividualCount", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchModal.prototype, "showTotalIndividualCount", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchModal.prototype, "showSamplingBatch", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchModal.prototype, "showComment", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], BatchModal.prototype, "maxVisibleButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], BatchModal.prototype, "maxItemCountForButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchModal.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchModal.prototype, "pmfms", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchModal.prototype, "samplingRatioFormat", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchModal.prototype, "i18nSuffix", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchModal.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], BatchModal.prototype, "onDelete", void 0); +__decorate([ + ViewChild('form', { static: true }), + __metadata("design:type", BatchForm) +], BatchModal.prototype, "form", void 0); +BatchModal = __decorate([ + Component({ + selector: 'app-batch-modal', + templateUrl: './batch.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + ModalController, + LocalSettingsService, + TranslateService, + ChangeDetectorRef]) +], BatchModal); +export { BatchModal }; +//# sourceMappingURL=batch.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batch.modal.js.map b/out-tsc/app/app/trip/batch/common/batch.modal.js.map new file mode 100644 index 000000000..3375b0553 --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batch.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch.modal.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/common/batch.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batch.model.js b/out-tsc/app/app/trip/batch/common/batch.model.js new file mode 100644 index 000000000..449418314 --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batch.model.js @@ -0,0 +1,197 @@ +var Batch_1; +import { __decorate, __metadata } from "tslib"; +import { AcquisitionLevelCodes, PmfmIds, QualitativeValueIds } from '@app/referential/services/model/model.enum'; +import { DataEntity } from '@app/data/services/model/data-entity.model'; +import { MeasurementUtils, MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { EntityClass, isNil, isNilOrBlank, isNotNil, isNotNilOrBlank, ReferentialUtils, toNumber } from '@sumaris-net/ngx-components'; +import { TaxonGroupRef } from '@app/referential/services/model/taxon-group.model'; +import { TaxonNameRef } from '@app/referential/services/model/taxon-name.model'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +import { PmfmValueUtils } from '@app/referential/services/model/pmfm-value.model'; +// WARN: always recreate en entity, even if source is a Batch +// because options can have changed +let Batch = Batch_1 = class Batch extends DataEntity { + constructor(__typename) { + super(__typename || Batch_1.TYPENAME); + this.label = null; + this.rankOrder = null; + this.exhaustiveInventory = null; + this.samplingRatio = null; + this.samplingRatioText = null; + this.samplingRatioComputed = null; + this.individualCount = null; + this.taxonGroup = null; + this.taxonName = null; + this.comments = null; + this.measurementValues = {}; + this.weight = null; + this.childrenWeight = null; + this.operationId = null; + this.saleId = null; + this.parentId = null; + this.parent = null; + this.children = null; + } + static fromObjectArrayAsTree(sources) { + if (!sources) + return null; + const batches = (sources || []).map(json => this.fromObject(json)); + const catchBatch = batches.find(b => isNil(b.parentId) && (isNilOrBlank(b.label) || b.label === AcquisitionLevelCodes.CATCH_BATCH)) || undefined; + if (!catchBatch) + return undefined; + batches.forEach(s => { + // Link to parent + s.parent = isNotNil(s.parentId) && batches.find(p => p.id === s.parentId) || undefined; + s.parentId = undefined; // Avoid redundant info on parent + }); + // Link to children + batches.forEach(s => s.children = batches.filter(p => p.parent && p.parent === s) || []); + // Fill catch children + if (!catchBatch.children || !catchBatch.children.length) { + catchBatch.children = batches.filter(b => b.parent === catchBatch); + } + //console.debug("[batch-model] fromObjectArrayAsTree()", this.catchBatch); + return catchBatch; + } + /** + * Transform a batch entity tree, into a array of object. + * Parent/.children link are removed, to keep only a parentId/ + * + * @param source + * @param opts + * @throw Error if a batch has no id + */ + static treeAsObjectArray(source, opts) { + if (!source) + return null; + // Convert entity into object, WITHOUT children (will be add later) + const target = source.asObject ? source.asObject(Object.assign(Object.assign({}, opts), { withChildren: false })) : Object.assign(Object.assign({}, source), { children: undefined }); + // Link target with the given parent + const parent = opts && opts.parent; + if (parent) { + if (isNil(parent.id)) { + throw new Error(`Cannot convert batch tree into array: No id found for batch ${parent.label}!`); + } + target.parentId = parent.id; + delete target.parent; // not need + } + return (source.children || []).reduce((res, batch) => res.concat(this.treeAsObjectArray(batch, Object.assign(Object.assign({}, opts), { parent: target })) || []), [target]) || undefined; + } + static equals(b1, b2) { + return b1 && b2 && ((isNotNil(b1.id) && b1.id === b2.id) + // Or by functional attributes + || (b1.rankOrder === b2.rankOrder + // same operation + && ((!b1.operationId && !b2.operationId) || b1.operationId === b2.operationId) + // same sale + && ((!b1.saleId && !b2.saleId) || b1.saleId === b2.saleId) + // same label + && ((!b1.label && !b2.label) || b1.label === b2.label) + // Warn: compare using the parent ID is too complicated + )); + } + /** + * Sort batch, by id (if exists) or by rankOrder (if no id) + * + * @param sortDirection + */ + static idOrRankOrderComparator(sortDirection = 'asc') { + const sign = !sortDirection || sortDirection !== 'desc' ? 1 : -1; + return (b1, b2) => { + const id1 = toNumber(b1.id, Number.MAX_SAFE_INTEGER); + const id2 = toNumber(b2.id, Number.MAX_SAFE_INTEGER); + const rankOrder1 = toNumber(b1.rankOrder, Number.MAX_SAFE_INTEGER); + const rankOrder2 = toNumber(b2.rankOrder, Number.MAX_SAFE_INTEGER); + if (id1 !== id2) { + return sign * (Math.abs(id1) - Math.abs(id2)); // Need ABS to make localId be positive + } + else { + return sign * (rankOrder1 - rankOrder2); + } + }; + } + asObject(opts) { + const parent = this.parent; + this.parent = null; // avoid to process the parent + const target = super.asObject(opts); + delete target.parentBatch; + this.parent = parent; + target.taxonGroup = this.taxonGroup && this.taxonGroup.asObject(Object.assign(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS), { keepEntityName: true /*fix #32*/ })) || undefined; + target.taxonName = this.taxonName && this.taxonName.asObject(Object.assign(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS), { keepEntityName: true /*fix #32*/ })) || undefined; + target.children = this.children && (!opts || opts.withChildren !== false) && this.children.map(c => c.asObject && c.asObject(opts) || c) || undefined; + target.parentId = this.parentId || this.parent && this.parent.id || undefined; + target.measurementValues = MeasurementValuesUtils.asObject(this.measurementValues, opts); + if (opts && opts.minify) { + // Parent Id not need, as the tree batch will be used by pod + delete target.parent; + delete target.parentId; + // Remove computed properties + delete target.samplingRatioComputed; + delete target.weight; + delete target.childrenWeight; + if (target.measurementValues) + delete target.measurementValues.__typename; + // Can occur on SubBatch + delete target.parentGroup; + } + return target; + } + fromObject(source, opts) { + super.fromObject(source); + this.label = source.label; + this.rankOrder = +source.rankOrder; + this.exhaustiveInventory = source.exhaustiveInventory; + this.samplingRatio = isNotNilOrBlank(source.samplingRatio) ? parseFloat(source.samplingRatio) : null; + this.samplingRatioText = source.samplingRatioText; + this.samplingRatioComputed = source.samplingRatioComputed; + this.individualCount = isNotNilOrBlank(source.individualCount) ? parseInt(source.individualCount) : null; + this.taxonGroup = source.taxonGroup && TaxonGroupRef.fromObject(source.taxonGroup) || undefined; + this.taxonName = source.taxonName && TaxonNameRef.fromObject(source.taxonName) || undefined; + this.comments = source.comments; + this.operationId = source.operationId; + this.saleId = source.saleId; + this.parentId = source.parentId; + this.parent = source.parent; + this.weight = source.weight && Object.assign({}, source.weight) || undefined; + this.childrenWeight = source.childrenWeight && Object.assign({}, source.childrenWeight) || undefined; + if (source.measurementValues) { + this.measurementValues = Object.assign({}, source.measurementValues); + } + // Convert measurement lists to map + else if (source.sortingMeasurements || source.quantificationMeasurements) { + const measurements = (source.sortingMeasurements || []).concat(source.quantificationMeasurements); + this.measurementValues = MeasurementUtils.toMeasurementValues(measurements); + } + if (!opts || opts.withChildren !== false) { + this.children = source.children && source.children.map(child => Batch_1.fromObject(child, opts)) || undefined; + } + } + equals(other) { + // equals by ID + return (super.equals(other) && isNotNil(this.id)) + // Or by functional attributes + || (this.rankOrder === other.rankOrder + // same operation + && ((!this.operationId && !other.operationId) || this.operationId === other.operationId) + // same sale + && ((!this.saleId && !other.saleId) || this.saleId === other.saleId) + // same label + && ((!this.label && !other.label) || this.label === other.label) + // Warn: compare using the parent ID is too complicated + ); + } + get hasTaxonNameOrGroup() { + return (ReferentialUtils.isNotEmpty(this.taxonName) || ReferentialUtils.isNotEmpty(this.taxonGroup)) && true; + } + get isLanding() { + var _a; + return PmfmValueUtils.equals((_a = this.measurementValues) === null || _a === void 0 ? void 0 : _a[PmfmIds.DISCARD_OR_LANDING], QualitativeValueIds.DISCARD_OR_LANDING.LANDING); + } +}; +Batch.SAMPLING_BATCH_SUFFIX = '.%'; +Batch = Batch_1 = __decorate([ + EntityClass({ typename: 'BatchVO', fromObjectReuseStrategy: 'clone' }), + __metadata("design:paramtypes", [String]) +], Batch); +export { Batch }; +//# sourceMappingURL=batch.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batch.model.js.map b/out-tsc/app/app/trip/batch/common/batch.model.js.map new file mode 100644 index 000000000..725932f4e --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batch.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch.model.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/common/batch.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batch.pipes.js b/out-tsc/app/app/trip/batch/common/batch.pipes.js new file mode 100644 index 000000000..c9fe499c3 --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batch.pipes.js @@ -0,0 +1,81 @@ +import { __decorate } from "tslib"; +import { Pipe } from '@angular/core'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +import { isNil, toNumber } from '@sumaris-net/ngx-components'; +import { roundHalfUp } from '@app/shared/functions'; +import { PmfmValueUtils } from '@app/referential/services/model/pmfm-value.model'; +import { PmfmIds, QualitativeValueIds } from '@app/referential/services/model/model.enum'; +let IsSamplingRatioComputedPipe = class IsSamplingRatioComputedPipe { + transform(batch, format) { + if (!batch) + return false; + if (typeof batch === 'string') + return BatchUtils.isSamplingRatioComputed(batch, format); + return batch.samplingRatioComputed || BatchUtils.isSamplingRatioComputed(batch.samplingRatioText, format); + } +}; +IsSamplingRatioComputedPipe = __decorate([ + Pipe({ + name: 'isSamplingRatioComputed' + }) +], IsSamplingRatioComputedPipe); +export { IsSamplingRatioComputedPipe }; +let SamplingRatioFormatPipe = class SamplingRatioFormatPipe { + transform(value, format, maxDecimals) { + if (isNil(value) || !format) + return ''; + maxDecimals = toNumber(maxDecimals, 2); + switch (format) { + case '%': + const percent = roundHalfUp(value * 100, maxDecimals); + return '' + percent + '%̀'; + case '1/w': + const ratio = roundHalfUp(1 / value, 2); + return '1/' + ratio; + } + } +}; +SamplingRatioFormatPipe = __decorate([ + Pipe({ + name: 'samplingRatioFormat' + }) +], SamplingRatioFormatPipe); +export { SamplingRatioFormatPipe }; +let BatchSortingValueIconPipe = class BatchSortingValueIconPipe { + transform(value, pmfm) { + if (isNil(value) || !pmfm) + return undefined; + switch (pmfm.id) { + // Discard or landing + case PmfmIds.DISCARD_OR_LANDING: + // Landing + if (PmfmValueUtils.equals(value, QualitativeValueIds.DISCARD_OR_LANDING.LANDING)) { + return { icon: 'file-tray-stacked' }; + } + // Discard + else { + return { icon: 'remove-circle' }; + } + // Vrac / Hors vrac + /*case PmfmIds.BATCH_SORTING: + // Vrac + if (PmfmValueUtils.equals(value, QualitativeValueIds.BATCH_SORTING.BULK)) { + return {icon: 'file-tray-stacked'}; + } + // Hors vrac + else { + return {matIcon: 'playlist_remove'}; + }*/ + // No icon + default: + return undefined; + } + } +}; +BatchSortingValueIconPipe = __decorate([ + Pipe({ + name: 'batchSortingValueIcon' + }) +], BatchSortingValueIconPipe); +export { BatchSortingValueIconPipe }; +//# sourceMappingURL=batch.pipes.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batch.pipes.js.map b/out-tsc/app/app/trip/batch/common/batch.pipes.js.map new file mode 100644 index 000000000..4221f3016 --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batch.pipes.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch.pipes.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/common/batch.pipes.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAiB,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAGhE,OAAO,EAAW,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAa,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAE7F,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAKnF,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IACtC,SAAS,CAAC,KAA4G,EAAE,MAA4B;QAClJ,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,UAAU,CAAC,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACxF,OAAO,KAAK,CAAC,qBAAqB,IAAI,UAAU,CAAC,uBAAuB,CAAC,KAAK,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IAC5G,CAAC;CACF,CAAA;AANY,2BAA2B;IAHvC,IAAI,CAAC;QACJ,IAAI,EAAE,yBAAyB;KAChC,CAAC;GACW,2BAA2B,CAMvC;SANY,2BAA2B;AAWjC,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAClC,SAAS,CAAC,KAAa,EAAE,MAA4B,EAAE,WAAoB;QACzE,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QACvC,WAAW,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACvC,QAAQ,MAAM,EAAE;YACd,KAAK,GAAG;gBACN,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,GAAG,GAAG,EAAE,WAAW,CAAC,CAAC;gBACtD,OAAO,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC;YAC7B,KAAK,KAAK;gBACR,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;gBACxC,OAAO,IAAI,GAAG,KAAK,CAAC;SACvB;IACH,CAAC;CACF,CAAA;AAbY,uBAAuB;IAHnC,IAAI,CAAC;QACJ,IAAI,EAAE,qBAAqB;KAC5B,CAAC;GACW,uBAAuB,CAanC;SAbY,uBAAuB;AAkB7B,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IACpC,SAAS,CAAC,KAAgB,EAAE,IAAW;QACrC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5C,QAAQ,IAAI,CAAC,EAAE,EAAE;YACf,qBAAqB;YACrB,KAAK,OAAO,CAAC,kBAAkB;gBAC7B,UAAU;gBACV,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,mBAAmB,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE;oBAChF,OAAO,EAAC,IAAI,EAAE,mBAAmB,EAAC,CAAC;iBACpC;gBACD,UAAU;qBACL;oBACH,OAAO,EAAC,IAAI,EAAE,eAAe,EAAC,CAAC;iBAChC;YAEH,mBAAmB;YACnB;;;;;;;;iBAQK;YAEL,UAAU;YACV;gBACE,OAAO,SAAS,CAAC;SACpB;IACH,CAAC;CACF,CAAA;AA/BY,yBAAyB;IAHrC,IAAI,CAAC;QACJ,IAAI,EAAE,uBAAuB;KAC9B,CAAC;GACW,yBAAyB,CA+BrC;SA/BY,yBAAyB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batch.service.js b/out-tsc/app/app/trip/batch/common/batch.service.js new file mode 100644 index 000000000..f4cf05ae4 --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batch.service.js @@ -0,0 +1,491 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder } from '@angular/forms'; +import { AppFormUtils, changeCaseToUnderscore, FormErrorTranslator, isEmptyArray, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, LocalSettingsService, toNumber, } from '@sumaris-net/ngx-components'; +import { AcquisitionLevelCodes, MethodIds } from '@app/referential/services/model/model.enum'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { BatchValidatorService } from '@app/trip/batch/common/batch.validator'; +import { BatchGroupValidators, BatchGroupValidatorService } from '@app/trip/batch/group/batch-group.validator'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { BatchGroup, BatchGroupUtils } from '@app/trip/batch/group/batch-group.model'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { TranslateService } from '@ngx-translate/core'; +import { MEASUREMENT_VALUES_PMFM_ID_REGEXP } from '@app/data/measurement/measurement.model'; +import { countSubString } from '@app/shared/functions'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +import { BatchModelValidatorService } from '@app/trip/batch/tree/batch-model.validator'; +import { PhysicalGearService } from '@app/trip/physicalgear/physicalgear.service'; +import { ProgressionModel } from '@app/shared/progression/progression.model'; +let BatchService = class BatchService { + constructor(formBuilder, translate, settings, measurementsValidatorService, programRefService, batchGroupValidatorService, batchModelValidatorService, physicalGearService, formErrorTranslator) { + this.formBuilder = formBuilder; + this.translate = translate; + this.settings = settings; + this.measurementsValidatorService = measurementsValidatorService; + this.programRefService = programRefService; + this.batchGroupValidatorService = batchGroupValidatorService; + this.batchModelValidatorService = batchModelValidatorService; + this.physicalGearService = physicalGearService; + this.formErrorTranslator = formErrorTranslator; + } + canUserWrite(data, opts) { + return true; + } + control(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + const program = opts === null || opts === void 0 ? void 0 : opts.program; + if (!program || !program.label) + throw new Error('Missing opts.program'); + const editor = program.getProperty(ProgramProperties.TRIP_OPERATION_EDITOR); + opts = Object.assign({ maxProgression: 100 }, opts); + opts.progression = opts.progression || new ProgressionModel({ total: opts.maxProgression }); + const endProgression = opts.progression.current + opts.maxProgression; + try { + switch (editor) { + case 'selectivity': + return this.controlSelectivity(entity, program, opts); + case 'legacy': + default: + return this.controlLegacy(entity, program, opts); + } + } + finally { + if (opts.progression.current < endProgression) { + opts.progression.current = endProgression; + } + } + return null; + }); + } + qualify(data, qualityFlagId) { + throw new Error('No implemented'); + } + translateControlPath(path, opts) { + var _a, _b; + opts = opts || {}; + opts.i18nPrefix = opts.i18nPrefix || 'TRIP.BATCH.EDIT.'; + // Translate PMFM field + if (opts.pmfms && MEASUREMENT_VALUES_PMFM_ID_REGEXP.test(path)) { + const pmfmId = parseInt(path.split('.').pop()); + const pmfm = opts.pmfms.find(p => p.id === pmfmId); + return PmfmUtils.getPmfmName(pmfm); + } + // Translate known Batch property + let cleanPath = path.indexOf('catch.children.') !== -1 + ? path.split('.').slice(3).join('.') + : path; + // If path = the batch group form itself: return an empty string + if (cleanPath.length === 0) + return this.translate.instant(opts.i18nPrefix + 'PARENT_GROUP'); + const depth = countSubString(cleanPath, 'children.'); + let prefix = ''; + let isSampling; + if (opts.qvPmfm) { + isSampling = depth === 2; + const parts = cleanPath.split('.'); + const qvIndex = parseInt(parts[1]); + const qvName = (_b = (_a = opts.qvPmfm.qualitativeValues) === null || _a === void 0 ? void 0 : _a[qvIndex]) === null || _b === void 0 ? void 0 : _b.name; + prefix = qvName || ''; + cleanPath = parts.slice(depth * 2).join('.'); // remove the qv part (remove 'children..') + } + else { + const parts = cleanPath.split('.'); + cleanPath = parts.slice(depth * 2).join('.'); + isSampling = depth === 1; + } + // Transform 'weight.value' into 'weight' + if (cleanPath === 'weight.value') + cleanPath = 'weight'; + if (cleanPath === 'weight' + || cleanPath === 'individualCount' + || cleanPath === 'label' + || cleanPath === 'rankOrder') { + const i18nKey = opts.i18nPrefix + // Add a sampling prefix + + (isSampling ? 'SAMPLING_' : 'TOTAL_') + // Change fieldName into i18n suffix + + changeCaseToUnderscore(cleanPath).toUpperCase(); + return (prefix.length ? `${prefix} > ` : prefix) + + this.translate.instant(i18nKey); + } + // Example: error on a form group (e.g. the sampling batch form) + if (prefix.length) { + if (isSampling) { + prefix += ' > ' + this.translate.instant(opts.i18nPrefix + 'SAMPLING_BATCH'); + } + return prefix; + } + // Default translation + return this.formErrorTranslator.translateControlPath(cleanPath, opts); + } + /* -- private functions -- */ + controlLegacy(entity, program, opts) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const maxProgression = toNumber(opts === null || opts === void 0 ? void 0 : opts.maxProgression, 100); + const progressionStep = maxProgression / (1 + (((_a = entity === null || entity === void 0 ? void 0 : entity.children) === null || _a === void 0 ? void 0 : _a.length) || 0)); + // Control catch batch + const catchErrors = yield this.controlCatchBatch(entity, program, opts); + if (opts.progression) + opts.progression.increment(progressionStep); + if ((_b = opts.progression) === null || _b === void 0 ? void 0 : _b.cancelled) + return catchErrors; // Stop here + // Control sorting batches + const childrenErrors = yield this.controlBatchGroups(entity, program, Object.assign(Object.assign({}, opts), { maxProgression: (maxProgression - progressionStep) })); + // Has some children errors + if (childrenErrors) { + console.info(`[batch-service] Control children of catch batch {${entity.id}} [INVALID]`, childrenErrors); + // Mark catch batch as invalid (if not already done) + if (!entity.qualificationComments) { + BatchUtils.markAsInvalid(entity, this.translate.instant('ERROR.INVALID_OR_INCOMPLETE_FILL')); + } + } + if (catchErrors || childrenErrors) { + return Object.assign(Object.assign({}, catchErrors), childrenErrors); + } + return null; // No error + }); + } + /** + * Control a catch batch + * + * @param entity + * @param program + * @param opts + * @private + */ + controlCatchBatch(entity, program, opts) { + return __awaiter(this, void 0, void 0, function* () { + // Load catch pmfms + const catchPmfms = yield this.programRefService.loadProgramPmfms(program.label, { + acquisitionLevel: AcquisitionLevelCodes.CATCH_BATCH, + gearId: opts === null || opts === void 0 ? void 0 : opts.gearId + }); + const validator = new BatchValidatorService(this.formBuilder, this.translate, this.settings, this.measurementsValidatorService); + const form = validator.getFormGroup(entity, { pmfms: catchPmfms, withChildren: false }); + if (!form.valid) { + // Wait if pending + yield AppFormUtils.waitWhilePending(form); + // Form is invalid (after pending) + if (form.invalid) { + // Translate form error + const errors = AppFormUtils.getFormErrors(form, { controlName: opts === null || opts === void 0 ? void 0 : opts.controlName }); + const message = this.formErrorTranslator.translateErrors(errors, { + controlPathTranslator: { + translateControlPath: (path) => this.translateControlPath(path, { + pmfms: catchPmfms, + i18nPrefix: 'TRIP.CATCH.FORM.' + }) + } + }); + console.info(`[batch-service] Control catch batch {${entity.id}} [INVALID]`, message); + // Mark as invalid (=not controlled) + BatchUtils.markAsInvalid(entity, message); + return errors; + } + } + console.debug(`[batch-service] Control catch batch {${entity.id}} [VALID]`); + // Mark as controlled (e.g. reset quality flag) + BatchUtils.markAsControlled(entity, { withChildren: false /*will be mark later*/ }); + return null; // no errors + }); + } + controlBatchGroups(entity, program, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (isEmptyArray(entity.children)) + return null; // No children: stop here + const maxProgression = toNumber(opts === null || opts === void 0 ? void 0 : opts.maxProgression, 100); + const progressionStep = maxProgression / entity.children.length; + const incrementProgression = () => { var _a; return (_a = opts.progression) === null || _a === void 0 ? void 0 : _a.increment(progressionStep); }; + // Load sorting batch pmfms + const pmfms = yield this.programRefService.loadProgramPmfms(program.label, { + acquisitionLevel: AcquisitionLevelCodes.SORTING_BATCH, + gearId: opts === null || opts === void 0 ? void 0 : opts.gearId + }); + // Load taxon groups with no weight + const taxonGroupsNoWeight = (program.getPropertyAsStrings(ProgramProperties.TRIP_BATCH_TAXON_GROUPS_NO_WEIGHT) || []) + .map(label => label.trim().toUpperCase()) + .filter(isNotNilOrBlank); + const taxonGroupsNoLanding = (program.getPropertyAsStrings(ProgramProperties.TRIP_BATCH_TAXON_GROUPS_NO_LANDING) || []) + .map(label => label.trim().toUpperCase()) + .filter(isNotNilOrBlank); + const weightPmfms = pmfms.filter(PmfmUtils.isWeight); + const qvPmfm = BatchGroupUtils.getQvPmfm(pmfms); + // Compute species pmfms (at species batch level) + let speciesPmfms; + let childrenPmfms; + if (!qvPmfm) { + speciesPmfms = pmfms.filter(pmfm => !PmfmUtils.isWeight(pmfm)); + childrenPmfms = []; + } + else { + const qvPmfmIndex = pmfms.findIndex(pmfm => pmfm.id === qvPmfm.id); + speciesPmfms = pmfms.filter((pmfm, index) => index < qvPmfmIndex); + childrenPmfms = pmfms.filter((pmfm, index) => index > qvPmfmIndex && !PmfmUtils.isWeight(pmfm)); + } + const samplingRatioFormat = program.getProperty(ProgramProperties.TRIP_BATCH_SAMPLING_RATIO_FORMAT); + const weightMaxDecimals = pmfms.filter(PmfmUtils.isWeight).reduce((res, pmfm) => Math.max(res, pmfm.maximumNumberDecimals || 0), 0); + // Create validator service + const validator = this.batchGroupValidatorService; + // TODO + // - make sure to translate all errors + // - add sub batches validation + const controlNamePrefix = (opts === null || opts === void 0 ? void 0 : opts.controlName) ? `${opts.controlName}.` : ''; + const errors = (yield Promise.all( + // For each catch's child + entity.children.map((source, index) => __awaiter(this, void 0, void 0, function* () { + var _b; + if ((_b = opts.progression) === null || _b === void 0 ? void 0 : _b.cancelled) + return; // Stop here + // Avoid error on label and rankOrder + if (!source.label || !source.rankOrder) { + console.warn('[batch-service] Missing label or rankOrder in batch:', source); + } + const target = BatchGroup.fromBatch(source); + const isTaxonGroupNoWeight = target.taxonGroup && taxonGroupsNoWeight.includes(target.taxonGroup.label); + const isTaxonGroupNoLanding = target.taxonGroup && taxonGroupsNoLanding.includes(target.taxonGroup.label); + const enableSamplingBatch = (!opts || opts.allowSamplingBatches !== false) || target.observedIndividualCount > 0; + const weightRequired = isNotEmptyArray(weightPmfms) && !isTaxonGroupNoWeight; + const individualCountRequired = isTaxonGroupNoWeight; + // For each batch that holds weight + (qvPmfm ? (target.children || []) : [target]).forEach(batch => { + // Compute weight + batch.weight = BatchUtils.getWeight(batch, weightPmfms); + // Set default values, when landings not legal on this species (e.g. RJB) + if (isTaxonGroupNoLanding) + this.fillNoLandingDefault(batch, { weightPmfms, weightRequired, individualCountRequired }); + // Set sampling batch default (eg. weight=0 if parent weight = 0); + if (enableSamplingBatch && isNotEmptyArray(batch.children)) + this.fillSamplingBatchDefault(batch, { weightPmfms, weightRequired, samplingRatioFormat }); + }); + // Create a form, with data + const form = validator.getFormGroup(target, { + isOnFieldMode: opts.isOnFieldMode, + rankOrderRequired: false, + labelRequired: false, + weightRequired, + individualCountRequired, + qvPmfm, + pmfms: speciesPmfms, + childrenPmfms, + enableSamplingBatch + }); + // Add complex validator + if (form.valid && !isTaxonGroupNoWeight && enableSamplingBatch) { + const requiredSampleWeight = target.observedIndividualCount > 0; + form.setValidators(BatchGroupValidators.samplingRatioAndWeight({ qvPmfm, requiredSampleWeight, samplingRatioFormat, weightMaxDecimals })); + form.updateValueAndValidity(); + } + // Get form errors + if (!form.valid) { + yield AppFormUtils.waitWhilePending(form); + if (form.invalid) { + const errors = AppFormUtils.getFormErrors(form, { controlName: `${controlNamePrefix}children.${index}` }); + const message = this.formErrorTranslator.translateErrors(errors, { + controlPathTranslator: { + translateControlPath: (path) => this.translateControlPath(path, { pmfms, qvPmfm }) + }, + separator: '\n' + }); + // Mark current batch as invalid + BatchUtils.markAsInvalid(source, message); + // Increment progression + incrementProgression(); + // Return errors + return errors; + } + } + // Mark as controlled + BatchUtils.markAsControlled(source); + // Increment progression + incrementProgression(); + // No error (will be excluded by next filter) + return null; + })))) + .filter(isNotNil); + if ((_a = opts.progression) === null || _a === void 0 ? void 0 : _a.cancelled) + return; // Stop here + // Concat all errors + if (errors.length) { + return errors.reduce((res, err) => (Object.assign(Object.assign({}, res), err))); + } + return null; // no errors + }); + } + fillNoLandingDefault(batch, opts) { + var _a, _b, _c, _d; + if (opts.individualCountRequired && isNil(batch.individualCount) && batch.isLanding) { + // Compute and fill individual count (if possible) in children + BatchUtils.computeIndividualCount(batch); + const sumIndividualCount = ((_a = BatchUtils.getSamplingChild(batch)) === null || _a === void 0 ? void 0 : _a.individualCount) || 0; + // no individual measure: OK, set default + if (sumIndividualCount === 0) { + console.info(`[batch-service] Force individualCount to {0} on batch ${batch.label}, because landings are not legal for this species`); + batch.individualCount = 0; + } + } + if (opts.weightRequired && isNil((_b = batch.weight) === null || _b === void 0 ? void 0 : _b.value) && batch.isLanding) { + const computedWeight = ((_c = BatchUtils.computeWeight(batch)) === null || _c === void 0 ? void 0 : _c.value) || 0; + // no weight: OK, set default + if (computedWeight === 0) { + console.info(`[batch-service] Force weight to {0} on batch ${batch.label}, because landings are not legal for this species`); + const defaultWeightPmfm = (_d = opts.weightPmfms) === null || _d === void 0 ? void 0 : _d[0]; + batch.weight = { + value: 0, + methodId: defaultWeightPmfm === null || defaultWeightPmfm === void 0 ? void 0 : defaultWeightPmfm.methodId, + computed: (defaultWeightPmfm === null || defaultWeightPmfm === void 0 ? void 0 : defaultWeightPmfm.isComputed) || false, + estimated: (defaultWeightPmfm === null || defaultWeightPmfm === void 0 ? void 0 : defaultWeightPmfm.methodId) === MethodIds.ESTIMATED_BY_OBSERVER || false + }; + } + } + } + fillSamplingBatchDefault(batch, opts) { + var _a, _b, _c, _d, _e, _f; + const totalWeight = (_a = batch.weight) === null || _a === void 0 ? void 0 : _a.value; + const samplingBatch = BatchUtils.getSamplingChild(batch); + if (samplingBatch) + samplingBatch.weight = BatchUtils.getWeight(samplingBatch); + // Remove the sampling batch, if exists but empty + // /!\ If sampling weight is computed, and its the only filled data: should be consider like an empty value - fix #482 + if (BatchUtils.isEmptySamplingBatch(samplingBatch)) { + batch.children = []; + return; + } + // If total weight = 0, fill sampling weight to zero (if weight is required) + if (opts.weightRequired && totalWeight === 0) { + if (samplingBatch && BatchUtils.isNilOrComputedWeight(samplingBatch)) { + const computedWeight = ((_b = BatchUtils.computeWeight(batch)) === null || _b === void 0 ? void 0 : _b.value) || 0; + // computed weight = 0 => OK, we can set a default value + if (computedWeight === 0 && isNil(samplingBatch.samplingRatio) && (samplingBatch.individualCount || 0) === 0) { + console.info(`[batch-service] Force sampling weight to {0} on batch ${samplingBatch.label}, because parent weight = 0`); + // Find same weight pmfm as total weight, or use the first one + const sampleWeightPmfm = (_c = opts.weightPmfms) === null || _c === void 0 ? void 0 : _c.find(p => { var _a; return isNil((_a = batch.weight) === null || _a === void 0 ? void 0 : _a.methodId) || p.methodId === batch.weight.methodId; }); + samplingBatch.weight = { + value: 0, + methodId: sampleWeightPmfm === null || sampleWeightPmfm === void 0 ? void 0 : sampleWeightPmfm.methodId, + computed: (sampleWeightPmfm === null || sampleWeightPmfm === void 0 ? void 0 : sampleWeightPmfm.isComputed) || false, + estimated: (sampleWeightPmfm === null || sampleWeightPmfm === void 0 ? void 0 : sampleWeightPmfm.methodId) === MethodIds.ESTIMATED_BY_OBSERVER || false + }; + // Set sampling ratio + samplingBatch.samplingRatio = 0; + samplingBatch.samplingRatioComputed = true; + // WARN: to be detected as 'computed' by BatchUtils.isSamplingRatioComputed(), should not be 'x%' nor '1/x' + // => '0/1' should work with all samplingRatioFormats + samplingBatch.samplingRatioText = '0/1'; + } + } + } + // If total weight > 0 + else if (opts.weightRequired && totalWeight > 0) { + const samplingWeight = (_d = samplingBatch === null || samplingBatch === void 0 ? void 0 : samplingBatch.weight) === null || _d === void 0 ? void 0 : _d.value; + // Set sampling ratio, if can be computed by weights + if (samplingBatch && isNil(samplingBatch.samplingRatio) && samplingWeight >= 0 && samplingWeight <= totalWeight) { + // Set sampling ratio + samplingBatch.samplingRatio = (totalWeight === 0 || samplingWeight === 0) ? 0 : samplingWeight / totalWeight; + samplingBatch.samplingRatioText = `${samplingWeight}/${totalWeight}`; + samplingBatch.samplingRatioComputed = true; + } + // Compute sampling weight, from total weight and sampling ratio (not computed) + else if (samplingBatch && isNil(samplingWeight) + && isNotNil(samplingBatch.samplingRatio) + && samplingBatch.samplingRatioComputed !== true + && samplingBatch.samplingRatio >= 0 && samplingBatch.samplingRatio <= 1) { + const computedWeightPmfm = (_e = opts.weightPmfms) === null || _e === void 0 ? void 0 : _e.find(pmfm => pmfm.methodId === MethodIds.CALCULATED || pmfm.isComputed); + const defaultWeightPmfm = (_f = opts.weightPmfms) === null || _f === void 0 ? void 0 : _f[0]; + samplingBatch.weight = { + value: totalWeight * samplingBatch.samplingRatio, + methodId: (computedWeightPmfm === null || computedWeightPmfm === void 0 ? void 0 : computedWeightPmfm.methodId) || (defaultWeightPmfm === null || defaultWeightPmfm === void 0 ? void 0 : defaultWeightPmfm.methodId) || MethodIds.CALCULATED, + computed: true, + estimated: false + }; + } + } + } + controlSelectivity(entity, program, opts) { + return __awaiter(this, void 0, void 0, function* () { + let physicalGear = opts === null || opts === void 0 ? void 0 : opts.physicalGear; + if (!physicalGear) + throw new Error('Missing required \'opts.physicalGear\''); + // Recompute rank order + //BatchUtils.computeRankOrder(entity); + // if (!environment.production) { + // // SKip validation + // return undefined; + // } + const allowSamplingBatches = ((opts === null || opts === void 0 ? void 0 : opts.allowSamplingBatches) || BatchUtils.sumObservedIndividualCount(entity.children) > 0); + const allowDiscard = allowSamplingBatches; + const allowChildrenGears = program.getPropertyAsBoolean(ProgramProperties.TRIP_PHYSICAL_GEAR_ALLOW_CHILDREN); + const [catchPmfms, sortingPmfms] = yield Promise.all([ + this.programRefService.loadProgramPmfms(program.label, { acquisitionLevel: AcquisitionLevelCodes.CATCH_BATCH, gearId: opts === null || opts === void 0 ? void 0 : opts.gearId }), + this.programRefService.loadProgramPmfms(program.label, { acquisitionLevel: AcquisitionLevelCodes.SORTING_BATCH, gearId: opts === null || opts === void 0 ? void 0 : opts.gearId }) + ]); + const pmfms = [...catchPmfms, ...sortingPmfms]; + // Load sub gears + if (allowChildrenGears && isNil(physicalGear.children)) { + physicalGear = physicalGear === null || physicalGear === void 0 ? void 0 : physicalGear.clone(); // Keep original unchanged + physicalGear.children = yield this.physicalGearService.loadAllByParentId({ + tripId: physicalGear.tripId, + parentGearId: physicalGear.id + }); + } + // Create batch model, and the form + const model = yield this.batchModelValidatorService.createModel(entity, { catchPmfms, sortingPmfms, allowDiscard, physicalGear }); + const form = this.batchModelValidatorService.createFormGroupByModel(model, { + allowSpeciesSampling: allowSamplingBatches, + isOnFieldMode: false + }); + if (!form.valid) { + // Wait if pending + yield AppFormUtils.waitWhilePending(form); + // Form is invalid (after pending) + if (form.invalid) { + if ((opts === null || opts === void 0 ? void 0 : opts.debug) !== false) { + AppFormUtils.logFormErrors(form, '[batch-service] '); + } + // Translate form error + const translatePathOption = { + pmfms, + i18nPrefix: 'TRIP.BATCH.EDIT.' + }; + const translateErrorsOptions = { + controlPathTranslator: { + translateControlPath: (path) => { + const cleanPath = (opts === null || opts === void 0 ? void 0 : opts.controlName) ? path.substring(opts.controlName.length + 1) : path; + const controlName = this.translateControlPath(cleanPath, translatePathOption); + const modelPath = cleanPath.replace(/\.weight\.value$|.individualCount$|.label$|.rankOrder$|/gi, ''); + const batchModel = model.get(modelPath); + if (batchModel) + batchModel.valid = false; + return (batchModel === null || batchModel === void 0 ? void 0 : batchModel.name) ? `${batchModel.name} > ${controlName}` : controlName; + } + }, + separator: '\n' + }; + const errors = AppFormUtils.getFormErrors(form, { controlName: opts === null || opts === void 0 ? void 0 : opts.controlName }); + const message = this.formErrorTranslator.translateErrors(errors, translateErrorsOptions); + console.warn(`[batch-service] Control batch tree [INVALID]`, message); + // Mark catch batch as invalid (=not controlled) + BatchUtils.markAsInvalid(entity, message); + return errors; + } + } + return null; + }); + } +}; +BatchService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + LocalSettingsService, + MeasurementsValidatorService, + ProgramRefService, + BatchGroupValidatorService, + BatchModelValidatorService, + PhysicalGearService, + FormErrorTranslator]) +], BatchService); +export { BatchService }; +//# sourceMappingURL=batch.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batch.service.js.map b/out-tsc/app/app/trip/batch/common/batch.service.js.map new file mode 100644 index 000000000..6ffb81732 --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batch.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch.service.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/common/batch.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batch.utils.js b/out-tsc/app/app/trip/batch/common/batch.utils.js new file mode 100644 index 000000000..d25b8de43 --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batch.utils.js @@ -0,0 +1,630 @@ +// @dynamic +import { EntityUtils, isEmptyArray, isNil, isNotEmptyArray, isNotNil, isNotNilOrNaN, referentialToString, ReferentialUtils, splitByProperty, toNumber, TreeItemEntityUtils, } from '@sumaris-net/ngx-components'; +import { MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { PmfmValueUtils } from '@app/referential/services/model/pmfm-value.model'; +import { AcquisitionLevelCodes, MatrixIds, MethodIds, ParameterLabelGroups, PmfmIds, QualitativeValueIds, QualityFlagIds, UnitLabel, } from '@app/referential/services/model/model.enum'; +import { Batch } from '@app/trip/batch/common/batch.model'; +import { DenormalizedPmfmStrategy } from '@app/referential/services/model/pmfm-strategy.model'; +import { roundHalfUp } from '@app/shared/functions'; +import { BatchFilter } from '@app/trip/batch/common/batch.filter'; +import { DataEntityUtils } from '@app/data/services/model/data-entity.model'; +export class BatchUtils { + static isNotEmpty(source, opts = { ignoreChildren: false, ignoreTaxonGroup: false, ignoreTaxonName: false }) { + var _a; + return (source && + (isNotNil(source.individualCount) || + (!opts.ignoreTaxonGroup && ReferentialUtils.isNotEmpty(source.taxonGroup)) || + (!opts.ignoreTaxonName && ReferentialUtils.isNotEmpty(source.taxonName)) || + isNotNilOrNaN(source.samplingRatio) || + isNotNilOrNaN((_a = source.weight) === null || _a === void 0 ? void 0 : _a.value) || + MeasurementValuesUtils.isNotEmpty(source.measurementValues) || + (!opts.ignoreChildren && source.children && source.children.some((b) => BatchUtils.isNotEmpty(b, opts))))); + } + static isEmpty(source, opts = { ignoreChildren: false, ignoreTaxonGroup: false, ignoreTaxonName: false }) { + return !this.isNotEmpty(source, opts); + } + static isCatchBatch(source) { + var _a; + return ((_a = source === null || source === void 0 ? void 0 : source.label) === null || _a === void 0 ? void 0 : _a.startsWith(AcquisitionLevelCodes.CATCH_BATCH)) || false; + } + static isSortingBatch(source) { + var _a; + return ((_a = source === null || source === void 0 ? void 0 : source.label) === null || _a === void 0 ? void 0 : _a.startsWith(AcquisitionLevelCodes.SORTING_BATCH + '#')) || false; + } + static isIndividualBatch(source) { + var _a; + return ((_a = source === null || source === void 0 ? void 0 : source.label) === null || _a === void 0 ? void 0 : _a.startsWith(AcquisitionLevelCodes.SORTING_BATCH_INDIVIDUAL + '#')) || false; + } + static parentToString(parent, opts) { + if (!parent) + return null; + opts = opts || { taxonGroupAttributes: ['label', 'name'], taxonNameAttributes: ['label', 'name'] }; + if (opts.pmfm && parent.measurementValues && isNotNil(parent.measurementValues[opts.pmfm.id])) { + return PmfmValueUtils.valueToString(parent.measurementValues[opts.pmfm.id], { pmfm: opts.pmfm }); + } + const hasTaxonGroup = ReferentialUtils.isNotEmpty(parent.taxonGroup); + const hasTaxonName = ReferentialUtils.isNotEmpty(parent.taxonName); + // Display only taxon name, if no taxon group or same label + if (hasTaxonName && (!hasTaxonGroup || parent.taxonGroup.label === parent.taxonName.label)) { + return referentialToString(parent.taxonName, opts.taxonNameAttributes); + } + // Display both, if both exists + if (hasTaxonName && hasTaxonGroup) { + return (referentialToString(parent.taxonGroup, opts.taxonGroupAttributes) + ' / ' + referentialToString(parent.taxonName, opts.taxonNameAttributes)); + } + // Display only taxon group + if (hasTaxonGroup) { + return referentialToString(parent.taxonGroup, opts.taxonGroupAttributes); + } + // Display rankOrder only (should never occur) + return `#${parent.rankOrder}`; + } + static isSamplingBatch(batch) { + var _a; + return ((_a = batch === null || batch === void 0 ? void 0 : batch.label) === null || _a === void 0 ? void 0 : _a.endsWith(Batch.SAMPLING_BATCH_SUFFIX)) || false; + } + static isParentOfSamplingBatch(batch) { + var _a; + return ((_a = batch.children) === null || _a === void 0 ? void 0 : _a.length) === 1 && this.isSamplingBatch(batch.children[0]); + } + static isSamplingNotEmpty(samplingBatch) { + return (isNotNil(samplingBatch.individualCount) || + isNotNil(samplingBatch.samplingRatio) || + Object.getOwnPropertyNames(samplingBatch.measurementValues || {}).filter((key) => isNotNil(samplingBatch.measurementValues[key])).length > 0); + } + static isSamplingRatioComputed(samplingRatioText, format) { + if (!samplingRatioText) + return false; + format = format || this.getSamplingRatioFormat(samplingRatioText); + switch (format) { + case '%': + return !samplingRatioText.endsWith('%') || samplingRatioText.includes('/'); + case '1/w': + return !samplingRatioText.startsWith('1/'); + } + } + static getSamplingRatioFormat(samplingRatioText, defaultFormat) { + if (samplingRatioText === null || samplingRatioText === void 0 ? void 0 : samplingRatioText.endsWith('%')) + return '%'; + if (samplingRatioText === null || samplingRatioText === void 0 ? void 0 : samplingRatioText.startsWith('1/')) + return '1/w'; + return defaultFormat; // Default + } + static canMergeSubBatch(b1, b2, pmfms) { + return (EntityUtils.equals(b1.parent, b2.parent, 'label') && + ReferentialUtils.equals(b1.taxonName, b2.taxonName) && + MeasurementValuesUtils.equalsPmfms(b1.measurementValues, b2.measurementValues, pmfms)); + } + static getOrCreateSamplingChild(parent) { + const samplingLabel = parent.label + Batch.SAMPLING_BATCH_SUFFIX; + const samplingChild = (parent.children || []).find((b) => b.label === samplingLabel) || new Batch(); + const isNew = !samplingChild.label && true; + if (isNew) { + samplingChild.rankOrder = 1; + samplingChild.label = samplingLabel; + // Copy children into the sample batch + samplingChild.children = parent.children || []; + // Set sampling batch in parent's children + parent.children = [samplingChild]; + } + return samplingChild; + } + static getSamplingChild(parent) { + var _a; + const samplingLabel = parent.label + Batch.SAMPLING_BATCH_SUFFIX; + return ((_a = parent.children) === null || _a === void 0 ? void 0 : _a.length) === 1 && parent.children.find((b) => b.label === samplingLabel); + } + static isEmptySamplingBatch(batch) { + var _a; + return (BatchUtils.isSamplingBatch(batch) && + isNil((_a = BatchUtils.getWeight(batch)) === null || _a === void 0 ? void 0 : _a.value) && + isNil(batch.samplingRatio) && + (batch.individualCount || 0) === 0 && + isEmptyArray(batch.children)); + } + static isNilOrComputedWeight(batch) { + const weight = BatchUtils.getWeight(batch); + return isNil(weight === null || weight === void 0 ? void 0 : weight.value) || weight.computed; + } + /** + * Will copy root (species) batch id into subBatch.parentId + * AND copy the QV sorting measurement hold by direct parent + * + * @param rootBatches + * @param subAcquisitionLevel + * @param qvPmfm + */ + static prepareSubBatchesForTable(rootBatches, subAcquisitionLevel, qvPmfm) { + if (qvPmfm) { + return rootBatches.reduce((res, rootBatch) => res.concat((rootBatch.children || []).reduce((res, qvBatch) => { + const children = BatchUtils.getChildrenByLevel(qvBatch, subAcquisitionLevel); + return res.concat(children.map((child) => { + // Copy QV value from the root batch + child.measurementValues = child.measurementValues || {}; + child.measurementValues[qvPmfm.id] = qvBatch.measurementValues[qvPmfm.id]; + // Replace parent by the group (instead of the sampling batch) + child.parentId = rootBatch.id; + return child; + })); + }, [])), []); + } + return rootBatches.reduce((res, rootBatch) => res.concat(BatchUtils.getChildrenByLevel(rootBatch, subAcquisitionLevel).map((child) => { + // Replace parent by the group (instead of the sampling batch) + child.parentId = rootBatch.id; + return child; + })), []); + } + static getChildrenByLevel(batch, acquisitionLevel) { + return (batch.children || []).reduce((res, child) => { + var _a; + if ((_a = child.label) === null || _a === void 0 ? void 0 : _a.startsWith(acquisitionLevel + '#')) + return res.concat(child); + return res.concat(BatchUtils.getChildrenByLevel(child, acquisitionLevel)); // recursive call + }, []); + } + static hasChildrenWithLevel(batch, acquisitionLevel) { + return (batch && + (batch.children || []).findIndex((child) => { + var _a; + return ((_a = child.label) === null || _a === void 0 ? void 0 : _a.startsWith(acquisitionLevel + '#')) || + // If children, recursive call + (child.children && BatchUtils.hasChildrenWithLevel(child, acquisitionLevel)); + }) !== -1); + } + /** + * Méthode servant à corriger les rankOrder (et les label) des lots, à utiliser : + * - quand les lots ont été importés (copier/coller) + * - ou quand la saisie a été faite par plusieurs éditeurs de lots déconnecté les uns des autres (e.g. Batch Tree container) + * - ou pour corriger des problèmes dans les données (e.g. introduit par un bug, comme cela est arrivé sur la BDD SUMARiS historique) + * + * @param source + * @param sortingBatchIndividualRankOrder + */ + static computeRankOrder(source, sortingBatchIndividualRankOrder = 1) { + if (!(source === null || source === void 0 ? void 0 : source.label) || !source.children) + return; // skip + source.children + // Sort by id, then rankOrder. New batch at the end + .sort(Batch.idOrRankOrderComparator('asc')) + // For each child + .forEach((b, index) => { + // Individual measure batch + if (this.isIndividualBatch(b)) { + b.rankOrder = sortingBatchIndividualRankOrder++; + b.label = `${AcquisitionLevelCodes.SORTING_BATCH_INDIVIDUAL}#${b.rankOrder}`; + } + // Sampling batch + else if (this.isSamplingBatch(b)) { + b.rankOrder = index + 1; + b.label = source.label + Batch.SAMPLING_BATCH_SUFFIX; + } + // Sorting batch + else { + b.rankOrder = index + 1; + // Do NOT compute label on SORTING BATCH, because it need sorting QV values + //b.label = ... + } + this.computeRankOrder(b, sortingBatchIndividualRankOrder); // Loop + }); + } + /** + * Compute individual count, from individual measures + * + * @param source + */ + static computeIndividualCount(source) { + var _a; + if (!source.label || !source.children) + return; // skip + let sumChildrenIndividualCount = null; + source.children.forEach((b, index) => { + var _a; + this.computeIndividualCount(b); // Recursive call + // Update sum of individual count + if ((_a = b.label) === null || _a === void 0 ? void 0 : _a.startsWith(AcquisitionLevelCodes.SORTING_BATCH_INDIVIDUAL)) { + sumChildrenIndividualCount = toNumber(sumChildrenIndividualCount, 0) + toNumber(b.individualCount, 1); + } + }); + // Parent batch is a sampling batch: update individual count + if (BatchUtils.isSamplingBatch(source)) { + source.individualCount = sumChildrenIndividualCount || null; + } + // Parent is NOT a sampling batch + else if (isNotNil(sumChildrenIndividualCount) && ((_a = source.label) === null || _a === void 0 ? void 0 : _a.startsWith(AcquisitionLevelCodes.SORTING_BATCH))) { + if (isNotNil(source.individualCount) && source.individualCount < sumChildrenIndividualCount) { + console.warn(`[batch-utils] Fix batch {${source.label}} individual count =${source.individualCount} but children individual count = ${sumChildrenIndividualCount}`); + //source.individualCount = childrenIndividualCount; + source.qualityFlagId = QualityFlagIds.BAD; + } + else if (isNil(source.individualCount) || source.individualCount > sumChildrenIndividualCount) { + // Create a sampling batch, to hold the sampling individual count + const samplingBatch = new Batch(); + samplingBatch.label = source.label + Batch.SAMPLING_BATCH_SUFFIX; + samplingBatch.rankOrder = 1; + samplingBatch.individualCount = sumChildrenIndividualCount; + samplingBatch.children = source.children; + source.children = [samplingBatch]; + } + } + } + /** + * Sum individual count, onlly on batch with measure + * + * @param batches + */ + static sumObservedIndividualCount(batches) { + return (batches || []) + .map((b) => { + var _a; + return isNotEmptyArray(b.children) + ? // Recursive call + BatchUtils.sumObservedIndividualCount(b.children) + : // Or get value from individual batches + ((_a = b.label) === null || _a === void 0 ? void 0 : _a.startsWith(AcquisitionLevelCodes.SORTING_BATCH_INDIVIDUAL)) + ? toNumber(b.individualCount, 1) + : // Default value, if not an individual batches + // Use '0' because we want only observed batches count + 0; + }) + .reduce((sum, individualCount) => sum + individualCount, 0); + } + static getDefaultSortedWeightPmfms() { + return [ + { id: PmfmIds.BATCH_MEASURED_WEIGHT, isComputed: false, methodId: MethodIds.MEASURED_BY_OBSERVER }, + { id: PmfmIds.BATCH_ESTIMATED_WEIGHT, isComputed: false, methodId: MethodIds.MEASURED_BY_OBSERVER }, + { id: PmfmIds.BATCH_CALCULATED_WEIGHT, isComputed: true, methodId: MethodIds.CALCULATED }, + { id: PmfmIds.BATCH_CALCULATED_WEIGHT_LENGTH, isComputed: true, methodId: MethodIds.CALCULATED_WEIGHT_LENGTH, maximumNumberDecimals: 6 }, + { id: PmfmIds.BATCH_CALCULATED_WEIGHT_LENGTH_SUM, isComputed: true, methodId: MethodIds.CALCULATED_WEIGHT_LENGTH_SUM }, + ] + .map((spec) => (Object.assign({ label: ParameterLabelGroups.WEIGHT[0], + //parameterId: ParameterIds.WEIGHT, + matrixId: MatrixIds.INDIVIDUAL, type: 'double', unitLabel: UnitLabel.KG, maximumNumberDecimals: 3 }, spec))) + .map((json) => DenormalizedPmfmStrategy.fromObject(json)); + } + static sumCalculatedWeight(batches, weightPmfms, weightPmfmsByMethodId) { + var _a; + let isExhaustive = true; + weightPmfms = weightPmfms && this.getDefaultSortedWeightPmfms(); + weightPmfmsByMethodId = weightPmfmsByMethodId || splitByProperty(weightPmfms, 'methodId'); + const childrenWeightMethodIds = []; + const value = (batches || []) + .map((b) => { + // Recursive call + if (isNotEmptyArray(b.children)) { + return BatchUtils.sumCalculatedWeight(b.children, weightPmfms, weightPmfmsByMethodId); + } + // If individual batches + if (this.isIndividualBatch(b)) { + const weight = b.weight || this.getWeight(b, weightPmfms); + if (isNotNil(weight === null || weight === void 0 ? void 0 : weight.value)) { + // Collect method used by children + if (!childrenWeightMethodIds.includes(weight.methodId)) { + childrenWeightMethodIds.push(weight.methodId); + } + return weight; + } + else { + isExhaustive = false; + } + } + return undefined; // Ignore + }) + .filter(isNotNil) + .reduce((sum, weight) => sum + +(weight.value || 0), 0); + if (isNil(value) || !isExhaustive) + return undefined; + // Compute method and pmfm for SUM + const weightPmfm = (childrenWeightMethodIds.length === 1 && + childrenWeightMethodIds[0] === MethodIds.CALCULATED_WEIGHT_LENGTH && + weightPmfmsByMethodId[MethodIds.CALCULATED_WEIGHT_LENGTH_SUM]) || + weightPmfmsByMethodId[MethodIds.CALCULATED]; + const methodId = toNumber(weightPmfm === null || weightPmfm === void 0 ? void 0 : weightPmfm.methodId, MethodIds.CALCULATED); + const maxDecimals = toNumber(weightPmfm === null || weightPmfm === void 0 ? void 0 : weightPmfm.maximumNumberDecimals, ((_a = weightPmfms[0]) === null || _a === void 0 ? void 0 : _a.maximumNumberDecimals) || 3); + return { + value: roundHalfUp(value, maxDecimals), + methodId, + computed: true, + estimated: false, + }; + } + static computeWeight(source, weightPmfms, weightPmfmsByMethodId) { + var _a, _b; + if (!source.label || !source.children) + return; // skip + weightPmfms = weightPmfms || this.getDefaultSortedWeightPmfms(); + weightPmfmsByMethodId = weightPmfmsByMethodId || splitByProperty(weightPmfms, 'methodId'); + if (BatchUtils.isCatchBatch(source)) + console.debug('[batch-utils] Computed batch tree weights...', source); + let isExhaustive = true; + const childrenWeightMethodIds = []; + const value = (source.children || []) + .map((b, index) => { + // Recursive call + if (isNotEmptyArray(b.children)) + return this.computeWeight(b, weightPmfms, weightPmfmsByMethodId); + // If individual batches + if (this.isIndividualBatch(b) && this.isNotEmpty(b)) { + const weight = b.weight || this.getWeight(b, weightPmfms); + if (isNotNil(weight === null || weight === void 0 ? void 0 : weight.value)) { + // Collect method used by children + if (!childrenWeightMethodIds.includes(weight.methodId)) { + childrenWeightMethodIds.push(weight.methodId); + } + return weight; + } + else { + isExhaustive = false; + } + } + }) + .filter(isNotNil) + .reduce((sum, weight) => sum + +(weight.value || 0), 0); + if (isNil(value) || value === 0 || !isExhaustive) + return undefined; + // Compute method and pmfm for SUM + const weightPmfm = (childrenWeightMethodIds.length === 1 && + childrenWeightMethodIds[0] === MethodIds.CALCULATED_WEIGHT_LENGTH && + weightPmfmsByMethodId[MethodIds.CALCULATED_WEIGHT_LENGTH_SUM]) || + weightPmfmsByMethodId[MethodIds.CALCULATED]; + const methodId = toNumber(weightPmfm === null || weightPmfm === void 0 ? void 0 : weightPmfm.id, MethodIds.CALCULATED); + source.weight = source.weight || this.getWeight(source, weightPmfms); + // Check weight is valid + if (isNotNil((_a = source.weight) === null || _a === void 0 ? void 0 : _a.value) && !source.weight.computed && source.weight.value < value) { + console.warn(`[batch-utils] Fix batch {${source.label}} weight=${source.weight.value} but children weight = ${value}`); + source.qualityFlagId = QualityFlagIds.BAD; + } + // Weight not computed and greater than the sum + else { + const samplingBatch = this.isSamplingBatch(source) ? source : this.getOrCreateSamplingChild(source); + samplingBatch.weight = samplingBatch.weight || this.getWeight(samplingBatch, weightPmfms); + // Set the sampling weight + if (isNil((_b = samplingBatch.weight) === null || _b === void 0 ? void 0 : _b.value) || samplingBatch.weight.computed) { + samplingBatch.weight = { + value: roundHalfUp(value, (weightPmfm === null || weightPmfm === void 0 ? void 0 : weightPmfm.maximumNumberDecimals) || 3), + unit: 'kg', + methodId, + computed: false, + estimated: false, + }; + samplingBatch.measurementValues[weightPmfm.id] = samplingBatch.weight.value; + } + console.debug('[batch-utils] Computed weight sum=' + value, source); + } + } + static isEmptyWeight(weight) { + return !weight || (isNil(weight.value) && isNil(weight.computed) && isNil(weight.methodId) && isNil(weight.computed)); + } + static isNotEmptyWeight(weight) { + return !this.isEmptyWeight(weight); + } + static getWeight(source, weightPmfms) { + if (!source) + return undefined; + if (this.isNotEmptyWeight(source.weight)) + return source.weight; + weightPmfms = weightPmfms || this.getDefaultSortedWeightPmfms(); + return weightPmfms + .map((pmfm) => { + const value = source.measurementValues[pmfm.id]; + return isNotNilOrNaN(value) + ? { + value: +value, + estimated: pmfm.methodId === MethodIds.ESTIMATED_BY_OBSERVER, + computed: pmfm.isComputed || pmfm.methodId === MethodIds.CALCULATED, + methodId: toNumber(pmfm.methodId, MethodIds.OBSERVED_BY_OBSERVER), // Need by BatchForm - see dispatchPmfms() + } + : undefined; + }) + .filter(isNotNil) + .sort((w1, w2) => { + const score1 = BatchUtils.getWeightScore(w1); + const score2 = BatchUtils.getWeightScore(w2); + return score1 - score2; + }) + .find(isNotNil); + } + static getWeightScore(weight) { + return 10 * (!weight.computed ? 1 : 0) + (!weight.estimated ? 1 : 0); + } + static getWeightPmfm(weight, weightPmfms, weightPmfmsByMethodId) { + if (!weight) + return undefined; + weightPmfms = weightPmfms || this.getDefaultSortedWeightPmfms(); + weightPmfmsByMethodId = weightPmfmsByMethodId || splitByProperty(weightPmfms, 'methodId'); + return (((weight === null || weight === void 0 ? void 0 : weight.estimated) && weightPmfmsByMethodId[MethodIds.ESTIMATED_BY_OBSERVER]) || + ((weight === null || weight === void 0 ? void 0 : weight.computed) && (weightPmfmsByMethodId[weight.methodId] || weightPmfmsByMethodId[MethodIds.CALCULATED])) || + // Or default weight + weightPmfms[0]); + } + /** + * Compute individual count, and weights, from a batch tree + * + * @param source + */ + static computeTree(source) { + this.computeIndividualCount(source); + this.computeWeight(source); + } + /** + * Remove empty batches. Return if the source is empty (after the children cleanup) + * + * @param source + */ + static cleanTree(source) { + source.children = source.children && source.children.filter((b) => !this.cleanTree(b)); + return (isEmptyArray(source.children) && + this.isEmpty(source, { ignoreChildren: true /* already check */, ignoreTaxonGroup: true, ignoreTaxonName: true })); + } + static logTree(batch, opts) { + opts = opts || {}; + const indent = (opts && opts.indent) || ''; + const nextIndent = (opts && opts.nextIndent) || indent; + let message = indent + (batch.label || 'NO_LABEL'); + if (opts.showAll) { + const excludeKeys = ['label', 'parent', 'children', '__typename']; + Object.keys(batch) + .filter((key) => !excludeKeys.includes(key) && isNotNil(batch[key])) + .forEach((key) => { + let value = batch[key]; + if (value instanceof Object) { + if (!(value instanceof Batch)) { + value = JSON.stringify(value); + } + } + message += ' ' + key + ':' + value; + }); + } + else { + if (isNotNil(batch.id)) { + message += ' id:' + batch.id; + } + // Parent + if (opts.showParent !== false) { + if (batch.parent) { + if (isNotNil(batch.parent.id)) { + message += ' parent.id:' + batch.parent.id; + } + else if (isNotNil(batch.parent.label)) { + message += ' parent.label:' + batch.parent.label; + } + } + if (isNotNil(batch.parentId)) { + message += ' parentId:' + batch.parentId; + } + } + // Taxon + if (opts.showTaxon !== false) { + if (batch.taxonGroup) { + message += ' taxonGroup:' + (batch.taxonGroup && (batch.taxonGroup.label || batch.taxonGroup.id)); + } + if (batch.taxonName) { + message += ' taxonName:' + (batch.taxonName && (batch.taxonName.label || batch.taxonName.id)); + } + } + // Measurement + if (opts.showMeasure !== false && batch.measurementValues) { + if (batch.measurementValues[PmfmIds.BATCH_GEAR_POSITION]) { + // eslint-disable-next-line eqeqeq + message += + ' batchGearPosition:' + + (batch.measurementValues[PmfmIds.BATCH_GEAR_POSITION] == QualitativeValueIds.BATCH_GEAR_POSITION.PORT ? 'B' : 'T'); + } + if (batch.measurementValues[PmfmIds.DISCARD_OR_LANDING]) { + // eslint-disable-next-line eqeqeq + message += + ' discardOrLanding:' + + (batch.measurementValues[PmfmIds.DISCARD_OR_LANDING] == QualitativeValueIds.DISCARD_OR_LANDING.LANDING ? 'LAN' : 'DIS'); + } + const length = batch.measurementValues[PmfmIds.LENGTH_TOTAL_CM]; + if (isNotNil(length)) { + message += ' length:' + length + 'cm'; + } + const weight = batch.measurementValues[PmfmIds.BATCH_MEASURED_WEIGHT] || + batch.measurementValues[PmfmIds.BATCH_ESTIMATED_WEIGHT] || + batch.measurementValues[PmfmIds.DISCARD_WEIGHT]; + if (isNotNil(weight)) { + message += ' weight:' + weight + 'kg'; + } + const computedWeight = batch.measurementValues[PmfmIds.BATCH_CALCULATED_WEIGHT] || + batch.measurementValues[PmfmIds.BATCH_CALCULATED_WEIGHT_LENGTH] || + batch.measurementValues[PmfmIds.BATCH_CALCULATED_WEIGHT_LENGTH_SUM]; + if (isNotNil(computedWeight)) { + message += ' weight:~' + computedWeight + 'kg'; + } + if (BatchUtils.isSamplingBatch(batch)) { + const samplingRatio = batch.samplingRatio; + const samplingRatioText = batch.samplingRatio; + if (isNotNil(samplingRatio)) { + message += ` ${samplingRatio}: ${samplingRatio} (${samplingRatioText})`; + } + } + } + } + // Print + if (opts.println) + opts.println(message); + else + console.debug(message); + const childrenCount = (batch.children && batch.children.length) || 0; + if (childrenCount > 0) { + batch.children.forEach((b, index) => { + const childOpts = index === childrenCount - 1 + ? { + println: opts.println, + indent: nextIndent + ' \\- ', + nextIndent: nextIndent + '\t', + } + : { + println: opts.println, + indent: nextIndent + ' |- ', + }; + this.logTree(b, childOpts); // Loop + }); + } + } + /** + * Get all batches that matches the given filter + * + * @param batch + * @param filter + */ + static findByFilterInTree(batch, filter) { + return TreeItemEntityUtils.findByFilter(batch, BatchFilter.fromObject(filter)); + } + /** + * Get all batches that matches the given filter + * + * @param batch + * @param filter + */ + static deleteByFilterInTree(batch, filter) { + return TreeItemEntityUtils.deleteByFilter(batch, BatchFilter.fromObject(filter)); + } + /* -- internal functions -- */ + /** + * Reset controlDate and quality fLag and comment + * + * @param entity + * @param opts + * @private + */ + static markAsNotControlled(entity, opts) { + DataEntityUtils.markAsNotControlled(entity); + // Recursive call to children + if (!opts || opts.withChildren !== false) { + (entity.children || []).forEach((c) => this.markAsNotControlled(c, opts)); + } + } + /** + * Set controlDate, and reset quality fLag and comment + * + * @param entity + * @param opts + * @private + */ + static markAsControlled(entity, opts) { + DataEntityUtils.markAsControlled(entity, opts); + // Recursive call to children + if (!opts || opts.withChildren !== false) { + (entity.children || []).forEach((c) => this.markAsControlled(c, opts)); + } + } + /** + * Mark as invalid, using qualityFlag + * + * @param entity + * @param errorMessage + */ + static markAsInvalid(entity, errorMessage) { + DataEntityUtils.markAsInvalid(entity, errorMessage); + } + /** + * Check if an entity has been mark as invalid + * + * @param entity + */ + static isInvalid(entity) { + return DataEntityUtils.isInvalid(entity); + } +} +//# sourceMappingURL=batch.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batch.utils.js.map b/out-tsc/app/app/trip/batch/common/batch.utils.js.map new file mode 100644 index 000000000..77a759bc5 --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batch.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch.utils.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/common/batch.utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batch.validator.js b/out-tsc/app/app/trip/batch/common/batch.validator.js new file mode 100644 index 000000000..5b1171a45 --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batch.validator.js @@ -0,0 +1,534 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, UntypedFormControl, Validators, } from '@angular/forms'; +import { AppFormArray, EntityUtils, equals, isNil, isNotEmptyArray, isNotNil, isNotNilOrNaN, LocalSettingsService, SharedAsyncValidators, SharedValidators, toBoolean, toFloat, toNumber, } from '@sumaris-net/ngx-components'; +import { Batch } from './batch.model'; +import { MethodIds, QualityFlagIds } from '@app/referential/services/model/model.enum'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { DataEntityValidatorService } from '@app/data/services/validator/data-entity.validator'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +import { roundHalfUp } from '@app/shared/functions'; +import { MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { debounceTime } from 'rxjs/operators'; +import { TranslateService } from '@ngx-translate/core'; +export function getFormOptions(form) { + return form['__options']; +} +export function setFormOptions(form, opts) { + form['__options'] = opts; +} +let BatchValidatorService = class BatchValidatorService extends DataEntityValidatorService { + constructor(formBuilder, translate, settings, measurementsValidatorService) { + super(formBuilder, translate, settings); + this.measurementsValidatorService = measurementsValidatorService; + } + fillDefaultOptions(opts) { + opts = super.fillDefaultOptions(opts); + opts.withWeight = toBoolean(opts.withWeight, true); + opts.withChildrenWeight = toBoolean(opts.withChildrenWeight, false); + return opts; + } + getFormGroupConfig(data, opts) { + var _a; + const rankOrder = toNumber(data === null || data === void 0 ? void 0 : data.rankOrder, null); + const label = (data === null || data === void 0 ? void 0 : data.label) || null; + const samplingRatioComputed = data && (isNotNil(data.samplingRatioComputed) ? data.samplingRatioComputed : BatchUtils.isSamplingRatioComputed(data.samplingRatioText)) || false; + const config = { + __typename: [Batch.TYPENAME], + id: [toNumber(data === null || data === void 0 ? void 0 : data.id, null)], + updateDate: [(data === null || data === void 0 ? void 0 : data.updateDate) || null], + rankOrder: (opts === null || opts === void 0 ? void 0 : opts.rankOrderRequired) !== false ? [rankOrder, Validators.required] : [rankOrder], + label: (opts === null || opts === void 0 ? void 0 : opts.labelRequired) !== false ? [label, Validators.required] : [label], + individualCount: [toNumber(data === null || data === void 0 ? void 0 : data.individualCount, null), + ((opts === null || opts === void 0 ? void 0 : opts.individualCountRequired) === true) + ? Validators.compose([Validators.required, Validators.min(0), SharedValidators.integer]) + : Validators.compose([Validators.min(0), SharedValidators.integer]) + ], + samplingRatio: [toNumber(data === null || data === void 0 ? void 0 : data.samplingRatio, null), SharedValidators.decimal()], + samplingRatioText: [(data === null || data === void 0 ? void 0 : data.samplingRatioText) || null], + samplingRatioComputed: [samplingRatioComputed], + taxonGroup: [(data === null || data === void 0 ? void 0 : data.taxonGroup) || null, SharedValidators.entity], + taxonName: [(data === null || data === void 0 ? void 0 : data.taxonName) || null, SharedValidators.entity], + exhaustiveInventory: [toBoolean(data === null || data === void 0 ? void 0 : data.exhaustiveInventory, null)], + comments: [(data === null || data === void 0 ? void 0 : data.comments) || null], + parent: [(data === null || data === void 0 ? void 0 : data.parent) || null, SharedValidators.entity], + // Quality properties + controlDate: [(data === null || data === void 0 ? void 0 : data.controlDate) || null], + qualificationDate: [(data === null || data === void 0 ? void 0 : data.qualificationDate) || null], + qualificationComments: [(data === null || data === void 0 ? void 0 : data.qualificationComments) || null], + qualityFlagId: [toNumber(data === null || data === void 0 ? void 0 : data.qualityFlagId, QualityFlagIds.NOT_QUALIFIED)], + // Sub forms + measurementValues: this.formBuilder.group({}), + // TODO: add operationId, saleId, parentId + }; + // there is a second level of children only if there is qvPmfm and sampling batch columns + if (opts === null || opts === void 0 ? void 0 : opts.withChildren) { + const childrenArray = this.getChildrenFormArray(data === null || data === void 0 ? void 0 : data.children, Object.assign(Object.assign({}, opts.childrenOptions), { isOnFieldMode: opts === null || opts === void 0 ? void 0 : opts.isOnFieldMode })); + if ((opts === null || opts === void 0 ? void 0 : opts.childrenCount) > 0) { + childrenArray.resize(opts === null || opts === void 0 ? void 0 : opts.childrenCount); + } + config['children'] = childrenArray; + } + else { + config['children'] = this.formBuilder.array([]); + } + if ((opts === null || opts === void 0 ? void 0 : opts.withWeight) || (opts === null || opts === void 0 ? void 0 : opts.withChildrenWeight)) { + const weightPmfms = (_a = opts.pmfms) === null || _a === void 0 ? void 0 : _a.filter(PmfmUtils.isWeight); + // Add weight sub form + if (opts.withWeight) { + config['weight'] = this.getWeightFormGroup(data === null || data === void 0 ? void 0 : data.weight, { + required: opts === null || opts === void 0 ? void 0 : opts.weightRequired, + pmfm: BatchUtils.getWeightPmfm(data === null || data === void 0 ? void 0 : data.weight, weightPmfms) + }); + } + // Add weight sub form + if (opts.withChildrenWeight) { + config['childrenWeight'] = this.getWeightFormGroup(data === null || data === void 0 ? void 0 : data.childrenWeight, { + required: false, + pmfm: BatchUtils.getWeightPmfm(data === null || data === void 0 ? void 0 : data.childrenWeight, weightPmfms), + maxDecimals: false // Disable decimals validator + }); + } + } + // Add measurement values + if ((opts === null || opts === void 0 ? void 0 : opts.withMeasurements) && isNotEmptyArray(opts.pmfms)) { + config['measurementValues'] = this.getMeasurementValuesForm(data === null || data === void 0 ? void 0 : data.measurementValues, { + pmfms: opts.pmfms, + forceOptional: opts.isOnFieldMode, + withTypename: opts.withMeasurementTypename + }); + } + return config; + } + getChildrenFormArray(data, opts) { + const formArray = new AppFormArray((value) => this.getFormGroup(value, Object.assign({ withWeight: true, withMeasurements: true }, opts)), (v1, v2) => EntityUtils.equals(v1, v2, 'label'), (value) => isNil(value), { + allowEmptyArray: true, + allowReuseControls: false + }); + if (data) { + formArray.patchValue(data); + } + return formArray; + } + getFormGroupOptions(data, opts) { + let validators; + // Add a form group control, to make sure weight > 0 if individual + // (skip if no weight, or on field mode) + if ((opts === null || opts === void 0 ? void 0 : opts.withWeight) && (opts === null || opts === void 0 ? void 0 : opts.isOnFieldMode) === false) { + validators = BatchValidators.weightForIndividualCount; + } + return validators ? { validators } : null; + } + updateFormGroup(form, opts) { + var _a, _b; + opts = this.fillDefaultOptions(opts); + const weightPmfms = (_a = opts.pmfms) === null || _a === void 0 ? void 0 : _a.filter(PmfmUtils.isWeight); + // Individual count + { + const individualCountControl = form.get('individualCount'); + if (opts.individualCountRequired === true) { + individualCountControl.setValidators(Validators.compose([Validators.required, Validators.min(0), SharedValidators.integer])); + } + else { + individualCountControl.setValidators(Validators.compose([Validators.min(0), SharedValidators.integer])); + } + individualCountControl.updateValueAndValidity(); + } + // Weight + { + const weightForm = form.get('weight'); + // Remove if exists, and not need anymore + if (!opts.withWeight) { + if (weightForm) { + weightForm.disable({ onlySelf: true }); + weightForm.setValidators(null); + form.removeControl('weight'); + } + } + else { + // Add if missing + if (!weightForm) { + form.addControl('weight', this.getWeightFormGroup(null, { + required: opts.weightRequired + })); + } + // Update if already exist + else { + this.updateWeightFormGroup(weightForm, { + required: opts.weightRequired + }); + if (weightForm.disabled) + weightForm.enable({ onlySelf: true }); + } + } + } + // Children weight (=sum of children weight) + { + const childrenWeightForm = form.get('childrenWeight'); + if (opts.withChildrenWeight) { + // Create if need + if (!childrenWeightForm) { + form.addControl('childrenWeight', this.getWeightFormGroup(null, { + required: false, + pmfm: BatchUtils.getWeightPmfm(null, weightPmfms), + maxDecimals: false // Disable decimals validator + })); + } + } + else if (childrenWeightForm) { + form.removeControl('childrenWeight'); + } + } + // Update form validators (if need) + const validators = (_b = this.getFormGroupOptions(null, opts)) === null || _b === void 0 ? void 0 : _b.validators; + if (validators) { + if (Array.isArray(validators) || !form.hasValidator(validators)) { + form.setValidators(validators); + } + } + else { + form.clearValidators(); + } + } + enableSamplingRatioAndWeight(form, opts) { + const computeFn = BatchValidators.samplingRatioAndWeight(opts); + return form.valueChanges + .pipe(debounceTime((opts === null || opts === void 0 ? void 0 : opts.debounceTime) || 0)) + .subscribe(value => { + const errors = computeFn(form); + if (errors) + form.setErrors(errors); + if (opts === null || opts === void 0 ? void 0 : opts.markForCheck) + opts.markForCheck(); + }); + } + enableRoundWeightConversion(form, opts) { + return SharedAsyncValidators.registerAsyncValidator(form, BatchValidators.roundWeightConversion(opts), { markForCheck: opts === null || opts === void 0 ? void 0 : opts.markForCheck }); + } + /* -- protected functions -- */ + getWeightFormGroup(data, opts) { + const form = this.formBuilder.group(BatchWeightValidator.getFormGroupConfig(data, opts)); + setFormOptions(form, opts); + return form; + } + updateWeightFormGroup(form, opts) { + const previousOptions = getFormOptions(form); + opts = Object.assign(Object.assign({}, getFormOptions(form)), opts); + if (!equals(previousOptions, opts)) { + const control = form.get('value'); + control.setValidators(BatchWeightValidator.getValueValidator(opts)); + control.updateValueAndValidity(); + setFormOptions(form, opts); + } + } + getMeasurementValuesForm(data, opts) { + const measurementValues = data && MeasurementValuesUtils.normalizeValuesToForm(data, opts.pmfms); + return this.measurementsValidatorService.getFormGroup(measurementValues, opts); + } +}; +BatchValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + LocalSettingsService, + MeasurementsValidatorService]) +], BatchValidatorService); +export { BatchValidatorService }; +export class BatchWeightValidator { + /** + * + * @param data + * @param opts Use 'required' or 'maxDecimals' + */ + static getFormGroupConfig(data, opts) { + const validator = this.getValueValidator(opts); + return { + methodId: [toNumber(data === null || data === void 0 ? void 0 : data.methodId, null), SharedValidators.integer], + estimated: [toBoolean(data === null || data === void 0 ? void 0 : data.estimated, null)], + computed: [toBoolean(data === null || data === void 0 ? void 0 : data.computed, null)], + value: [toNumber(data === null || data === void 0 ? void 0 : data.value, null), validator] + }; + } + /** + * + * @param data + * @param opts Use 'required' or 'maxDecimals' + */ + static getValueValidator(opts) { + var _a, _b; + const maxDecimals = toNumber((opts === null || opts === void 0 ? void 0 : opts.pmfm) && ((_a = opts.pmfm) === null || _a === void 0 ? void 0 : _a.maximumNumberDecimals), (opts === null || opts === void 0 ? void 0 : opts.maxDecimals) || 3 /* grams by default */); + const required = toBoolean(opts === null || opts === void 0 ? void 0 : opts.required, toBoolean((opts === null || opts === void 0 ? void 0 : opts.pmfm) && ((_b = opts.pmfm) === null || _b === void 0 ? void 0 : _b.required), false)); + return (opts === null || opts === void 0 ? void 0 : opts.maxDecimals) === false && !required + ? null + : (required + ? Validators.compose([Validators.required, SharedValidators.decimal({ maxDecimals })]) + : SharedValidators.decimal({ maxDecimals })); + } +} +export class BatchValidators { + /** + * Check if weight > 0 when individualCount > 0 + * + * @param control + */ + static weightForIndividualCount(control) { + var _a; + const individualCount = control.get('individualCount').value; + if (individualCount > 0) { + const weightForm = control.get('weight'); + const weight = (_a = weightForm === null || weightForm === void 0 ? void 0 : weightForm.get('value')) === null || _a === void 0 ? void 0 : _a.value; + if (isNotNil(weight) && weight <= 0) { + return { weightForIndividualCount: { individualCount } }; + } + } + } + /** + * Computing weight, sampling weight and/or sampling ratio + * + * @param opts + */ + static samplingRatioAndWeight(opts) { + if (!(opts === null || opts === void 0 ? void 0 : opts.qvPmfm)) { + return (control) => BatchValidators.computeSamplingRatioAndWeight(control, Object.assign(Object.assign({}, opts), { emitEvent: false, onlySelf: false })); + } + return Validators.compose((opts.qvPmfm.qualitativeValues || []) + .map((qv, qvIndex) => { + const qvFormPath = `children.${qvIndex}`; + return (control) => BatchValidators.computeSamplingRatioAndWeight(control.get(qvFormPath), Object.assign(Object.assign({}, opts), { emitEvent: false, onlySelf: false })); + })); + return (control) => BatchValidators.computeSamplingRatioAndWeight(control, Object.assign(Object.assign({}, opts), { emitEvent: false, onlySelf: false })); + } + static roundWeightConversion(opts) { + return (control) => BatchValidators.computeRoundWeightConversion(control, Object.assign(Object.assign({}, opts), { emitEvent: false, onlySelf: false })); + } + static computeSamplingRatioAndWeight(form, opts) { + var _a, _b, _c; + if (!opts.samplingRatioFormat) + throw Error('[batch-validator] Missing sampling ratio format. Skip computation'); + const samplingFormPath = 'children.0'; + const samplingForm = form.get(samplingFormPath); + if (!samplingForm) + return; // No sample batch: skip + const totalWeightControl = form.get('weight'); + if (!totalWeightControl) + return; // No weight: skip + const totalWeightValueControl = totalWeightControl.get('value'); + //const samplingWeightPath = opts?.samplingWeightPath || `${samplingFormPath}.weight`; + const samplingWeightForm = samplingForm.get('weight'); + const samplingWeightValueControl = samplingWeightForm.get('value'); + //const samplingRatioPath = opts?.samplingRatioPath || `${samplingFormPath}.samplingRatio`; + const samplingRatioControl = samplingForm.get('samplingRatio'); + const totalWeight = toFloat((_a = totalWeightControl.value) === null || _a === void 0 ? void 0 : _a.value); + if (totalWeightControl.disabled) + totalWeightControl.enable(opts); + if (samplingRatioControl.disabled) + samplingRatioControl.enable(opts); + if (samplingWeightForm.disabled) + samplingWeightForm.enable(opts); + const batch = form.value; + if (!batch.weight) { + batch.weight = { + value: totalWeight || 0, + computed: false, + estimated: false + }; + } + const isTotalWeightComputed = batch.weight.computed; + const isTotalWeightValid = !isTotalWeightComputed && isNotNilOrNaN(totalWeight) && totalWeight >= 0; + let samplingBatch = BatchUtils.getSamplingChild(batch); + const samplingWeight = (samplingWeightForm === null || samplingWeightForm === void 0 ? void 0 : samplingWeightForm.value) || samplingBatch.weight; + const isSamplingWeightComputed = samplingWeight.computed === true && samplingWeight.methodId !== MethodIds.CALCULATED_WEIGHT_LENGTH_SUM; + if (!samplingBatch) { + samplingBatch = samplingForm.value; + batch.children.push(samplingBatch); + } + if (!samplingBatch.weight) { + samplingBatch.weight = { + value: toNumber(samplingWeight === null || samplingWeight === void 0 ? void 0 : samplingWeight.value, 0), + computed: false, + estimated: false, + methodId: toNumber(samplingWeight === null || samplingWeight === void 0 ? void 0 : samplingWeight.methodId, batch.weight.methodId) + }; + } + const isSamplingWeightValid = !isSamplingWeightComputed && isNotNilOrNaN(samplingWeight === null || samplingWeight === void 0 ? void 0 : samplingWeight.value) && samplingWeight.value >= 0; + opts.samplingRatioFormat = opts.samplingRatioFormat || BatchUtils.getSamplingRatioFormat(samplingBatch.samplingRatioText); + if (!opts.samplingRatioFormat) { + console.warn('[batch-validator] Missing sampling ratio type. Skip computation'); + return; + } + const isSamplingRatioComputed = isNotNil(samplingBatch.samplingRatioComputed) + ? samplingBatch.samplingRatioComputed + : BatchUtils.isSamplingRatioComputed(samplingBatch.samplingRatioText, opts.samplingRatioFormat); + const samplingRatio = samplingBatch.samplingRatio; + const isSamplingRatioValid = !isSamplingRatioComputed && isNotNilOrNaN(samplingRatio) && samplingRatio >= 0 && samplingRatio <= 1; + // DEBUG + console.debug(`[batch-validator] Start computing: totalWeight=${totalWeight}, samplingRatio=${samplingRatio}${isSamplingRatioComputed ? ' (computed)' : ''}, samplingWeight=${samplingWeight === null || samplingWeight === void 0 ? void 0 : samplingWeight.value}`); + // *********** + // samplingRatio = totalWeight/samplingWeight + // *********** + if (isTotalWeightValid && isSamplingWeightValid) { + // If samplingWeight > totalWeight => Error + if (toNumber(samplingWeight.value) > toNumber(totalWeight)) { + // Before error, try to recompute from invalid sampling weight - fix ADAP issue #482 + if (isTotalWeightValid && isSamplingRatioValid && samplingWeight.computed) { + const computedSamplingWeight = roundHalfUp(totalWeight * samplingRatio, opts.weightMaxDecimals || 3); + console.debug('[batch-validator] Applying computed sampling weight = ' + computedSamplingWeight); + if ((samplingWeight === null || samplingWeight === void 0 ? void 0 : samplingWeight.value) !== computedSamplingWeight) { + samplingWeightForm.patchValue({ + computed: true, + estimated: false, + value: computedSamplingWeight, + methodId: MethodIds.CALCULATED + }, opts); + } + return; + } + // Add max error (if not yet defined) + if (((_c = (_b = samplingWeightValueControl.errors) === null || _b === void 0 ? void 0 : _b.max) === null || _c === void 0 ? void 0 : _c.max) !== totalWeight) { + samplingWeightValueControl.markAsPending({ onlySelf: true, emitEvent: true }); + samplingWeightValueControl.markAsTouched({ onlySelf: true }); + samplingWeightValueControl.setErrors(Object.assign(Object.assign({}, samplingWeightValueControl.errors), { max: { max: totalWeight } }), opts); + } + return { max: { max: totalWeight } }; // Stop with an error + } + else { + SharedValidators.clearError(samplingWeightValueControl, 'max'); + } + // Update sampling ratio + const computedSamplingRatio = (totalWeight === 0 || samplingWeight.value === 0) ? 0 : samplingWeight.value / totalWeight; + if (samplingRatioControl.value !== computedSamplingRatio || !isSamplingRatioComputed) { + console.debug('[batch-validator] Applying computed sampling ratio = ' + samplingBatch.samplingRatio); + samplingForm.patchValue({ + samplingRatio: computedSamplingRatio, + samplingRatioText: `${samplingWeight.value}/${totalWeight}`, + samplingRatioComputed: true + }, opts); + } + return; + } + // *********** + // samplingWeight = totalWeight * samplingRatio + // *********** + else if (isSamplingRatioValid && isTotalWeightValid) { + if (isSamplingWeightComputed || isNil(samplingWeight === null || samplingWeight === void 0 ? void 0 : samplingWeight.value)) { + const computedSamplingWeight = roundHalfUp(totalWeight * samplingRatio, opts.weightMaxDecimals || 3); + if ((samplingWeight === null || samplingWeight === void 0 ? void 0 : samplingWeight.value) !== computedSamplingWeight) { + samplingWeightForm.patchValue({ + computed: true, + estimated: false, + value: computedSamplingWeight, + methodId: MethodIds.CALCULATED + }, opts); + } + return; + } + } + // *********** + // totalWeight = samplingWeight / samplingRatio + // *********** + else if (isSamplingRatioValid && isSamplingWeightValid && samplingRatio > 0) { + if (isTotalWeightComputed || isNil(totalWeight)) { + const computedTotalWeight = roundHalfUp(samplingWeight.value / samplingRatio, opts.weightMaxDecimals || 3); + if (totalWeight !== computedTotalWeight) { + totalWeightControl.patchValue({ + computed: true, + estimated: false, + value: computedTotalWeight, + methodId: MethodIds.CALCULATED + }, opts); + samplingWeightForm.patchValue({ computed: false }, opts); + return; + } + } + } + // *********** + // Nothing can be computed: enable all controls + // *********** + else { + // Enable total weight (and remove computed value, if any) + if (isTotalWeightComputed) { + totalWeightControl.patchValue({ + value: null, + computed: false, + estimated: false + }, opts); + if (!isTotalWeightValid && !totalWeightValueControl.hasError('required')) { + totalWeightValueControl.markAsPending({ onlySelf: true, emitEvent: true }); + totalWeightValueControl.markAsTouched({ onlySelf: true }); + totalWeightValueControl.setErrors(Object.assign(Object.assign({}, totalWeightValueControl.errors), { required: true }), opts); + } + } + if (totalWeightControl.disabled) + totalWeightControl.enable(opts); + if (samplingForm.enabled) { + // Clear computed sampling ratio + if (isSamplingRatioComputed) { + samplingForm.patchValue({ + samplingRatio: null, + samplingRatioText: null, + samplingRatioComputed: false + }, opts); + } + // Enable sampling ratio + if (samplingRatioControl.disabled) + samplingRatioControl.enable(Object.assign(Object.assign({}, opts), { emitEvent: true /*force repaint*/ })); + // Enable sampling weight (and remove computed value, if any) + if (isSamplingWeightComputed) { + samplingWeightForm.patchValue({ + value: null, + computed: false, + estimated: false + }, opts); + } + // If sampling weight is required, but a value is expected + // BUT skip if totalWeight=0 + if (!isSamplingWeightValid && (opts === null || opts === void 0 ? void 0 : opts.requiredSampleWeight) === true && totalWeight !== 0) { + if (!samplingWeightValueControl.hasError('required')) { + samplingWeightValueControl.setErrors(Object.assign(Object.assign({}, samplingWeightValueControl.errors), { required: true }), opts); + } + } + else { + SharedValidators.clearError(samplingWeightValueControl, 'required'); + } + if (samplingWeightForm.disabled) + samplingWeightForm.enable(opts); + } + // Disable sampling fields + else { + if (samplingRatioControl.enabled) + samplingRatioControl.disable(Object.assign(Object.assign({}, opts), { emitEvent: true /*force repaint*/ })); + if (samplingWeightForm.enabled) + samplingWeightForm.disable(opts); + } + } + } + /** + * Converting length into a weight + * + * @param form + * @param opts + */ + static computeRoundWeightConversion(form, opts) { + const weightPath = (opts === null || opts === void 0 ? void 0 : opts.weightPath) || 'weight'; + let weightControl = form.get(weightPath); + // Create weight control - should not occur ?? + if (!weightControl) { + console.warn('Creating missing weight control - Please add it to the validator instead'); + const weightValidators = (opts === null || opts === void 0 ? void 0 : opts.requiredWeight) ? Validators.required : undefined; + weightControl = new UntypedFormControl(null, weightValidators); + form.addControl(weightPath, weightControl); + } + if (weightControl.disabled) + weightControl.enable(opts); + //const weight = weightControl.value; + // DEBUG + console.debug('[batch-validator] Start computing round weight: '); + // TODO + return null; + } +} +export const BATCH_VALIDATOR_I18N_ERROR_KEYS = { + weightForIndividualCount: 'TRIP.BATCH.ERROR.INVALID_WEIGHT_FOR_INDIVIDUAL_COUNT' +}; +//# sourceMappingURL=batch.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batch.validator.js.map b/out-tsc/app/app/trip/batch/common/batch.validator.js.map new file mode 100644 index 000000000..ec196e7e8 --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batch.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch.validator.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/common/batch.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batches.table.class.js b/out-tsc/app/app/trip/batch/common/batches.table.class.js new file mode 100644 index 000000000..dbe20c0fb --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batches.table.class.js @@ -0,0 +1,281 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectorRef, Directive, Injector, Input } from '@angular/core'; +import { firstArrayValue, isEmptyArray, isNil, isNilOrBlank, isNotEmptyArray, isNotNil, ReferentialUtils, removeDuplicatesFromArray, splitByProperty, } from '@sumaris-net/ngx-components'; +import { BaseMeasurementsTable } from '@app/data/measurement/measurements-table.class'; +import { TaxonGroupRef } from '@app/referential/services/model/taxon-group.model'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { Operation } from '../../trip/trip.model'; +import { TaxonNameRef } from '@app/referential/services/model/taxon-name.model'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { Sale } from '@app/trip/sale/sale.model'; +export const BATCH_RESERVED_START_COLUMNS = ['taxonGroup', 'taxonName']; +export const BATCH_RESERVED_END_COLUMNS = ['comments']; +let AbstractBatchesTable = class AbstractBatchesTable extends BaseMeasurementsTable { + constructor(injector, dataType, filterType, dataService, validatorService, options) { + super(injector, dataType, filterType, dataService, validatorService, Object.assign(Object.assign({ reservedStartColumns: BATCH_RESERVED_START_COLUMNS, reservedEndColumns: BATCH_RESERVED_END_COLUMNS, i18nColumnPrefix: 'TRIP.BATCH.TABLE.', i18nPmfmPrefix: 'TRIP.BATCH.PMFM.' }, options), { mapPmfms: (pmfms) => this.mapPmfms(pmfms) })); + this.useSticky = false; + this.samplingRatioFormat = ProgramProperties.TRIP_BATCH_SAMPLING_RATIO_FORMAT.defaultValue; + this.cd = injector.get(ChangeDetectorRef); + this.referentialRefService = injector.get(ReferentialRefService); + this.inlineEdition = this.validatorService && !this.mobile; + this.defaultSortBy = 'id'; + this.defaultSortDirection = 'asc'; + // Set default value + this.showCommentsColumn = false; + this.acquisitionLevel = AcquisitionLevelCodes.SORTING_BATCH; + // -- DEV only + //this.debug = !environment.production; + this.logPrefix = '[batches-table]'; + } + set value(data) { + this.memoryDataService.value = data; + } + get value() { + return this.memoryDataService.value; + } + set showTaxonGroupColumn(value) { + this.setShowColumn('taxonGroup', value); + } + get showTaxonGroupColumn() { + return this.getShowColumn('taxonGroup'); + } + set showTaxonNameColumn(value) { + this.setShowColumn('taxonName', value); + } + get showTaxonNameColumn() { + return this.getShowColumn('taxonName'); + } + ngOnInit() { + super.ngOnInit(); + // Taxon group combo + this.registerAutocompleteField('taxonGroup', { + suggestFn: (value, options) => this.suggestTaxonGroups(value, options), + mobile: this.mobile + }); + // Taxon name combo + this.registerAutocompleteField('taxonName', { + suggestFn: (value, options) => this.suggestTaxonNames(value, options), + mobile: this.mobile + }); + } + setParent(data) { + if (!data) { + this.setFilter({}); + } + else if (data instanceof Operation) { + this.setFilter({ operationId: data.id }); + } + else if (data instanceof Sale) { + this.setFilter({ saleId: data.id }); + } + } + openNewRowDetail() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail) + return false; + const { data, role } = yield this.openDetailModal(); + if (data && role !== 'delete') { + // Can be an update (is user use the 'save and new' modal's button) + yield this.addOrUpdateEntityToTable(data); + return true; + } + else { + this.editedRow = null; + return false; + } + }); + } + openRow(id, row) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail) + return false; + if (this.onOpenRow.observers.length) { + this.onOpenRow.emit(row); + return true; + } + const dataToOpen = this.toEntity(row, true); + // Prepare entity measurement values + this.prepareEntityToSave(dataToOpen); + const { data, role } = yield this.openDetailModal(dataToOpen, row); + if (data && role !== 'delete') { + // Can be an update (is user use the 'save and new' modal's button) + yield this.addOrUpdateEntityToTable(data); + return true; + } + else { + this.editedRow = null; + return false; + } + }); + } + /** + * Auto fill table (e.g. with taxon groups found in strategies) - #176 + */ + autoFillTable(opts = { skipIfDisabled: true, skipIfNotEmpty: false }) { + return __awaiter(this, void 0, void 0, function* () { + try { + // Wait table loaded + yield this.waitIdle({ stop: this.destroySubject }); + // Skip if disabled + if (opts.skipIfDisabled && this.disabled) { + console.warn(this.logPrefix + 'Skipping autofill as table is disabled'); + return; + } + // Skip if not empty + if (opts.skipIfNotEmpty && this.totalRowCount > 0) { + console.warn('[batches-table] Skipping autofill because table is not empty'); + return; + } + // Skip if no available taxon group configured (should be set by parent page - e.g. OperationPage) + if (isEmptyArray(this.availableTaxonGroups)) { + console.warn('[batches-table] Skipping autofill, because no availableTaxonGroups has been set'); + return; + } + // Skip when editing a row + if (!this.confirmEditCreate()) { + console.warn('[batches-table] Skipping autofill, as table still editing a row'); + return; + } + this.markAsLoading(); + console.debug('[batches-table] Auto fill table, using options:', opts); + // Read existing taxonGroups + const data = this.dataSource.getData(); + const existingTaxonGroups = removeDuplicatesFromArray(data.map(batch => batch.taxonGroup).filter(isNotNil), 'id'); + const taxonGroupsToAdd = this.availableTaxonGroups + // Exclude if already exists + .filter(taxonGroup => !existingTaxonGroups.some(tg => ReferentialUtils.equals(tg, taxonGroup))); + if (isNotEmptyArray(taxonGroupsToAdd)) { + let rankOrder = data.reduce((res, b) => Math.max(res, b.rankOrder || 0), 0) + 1; + const entities = []; + for (const taxonGroup of taxonGroupsToAdd) { + const entity = new this.dataType(); + entity.taxonGroup = TaxonGroupRef.fromObject(taxonGroup); + entity.rankOrder = rankOrder++; + entities.push(entity); + } + yield this.addEntitiesToTable(entities, { emitEvent: false }); + // Mark as dirty + this.markAsDirty({ emitEvent: false /* done in markAsLoaded() */ }); + } + this.markForCheck(); + } + catch (err) { + console.error(err && err.message || err, err); + this.setError(err && err.message || err); + } + finally { + this.markAsLoaded(); + } + }); + } + suggestTaxonGroups(value, options) { + return __awaiter(this, void 0, void 0, function* () { + //if (isNilOrBlank(value)) return []; + return this.programRefService.suggestTaxonGroups(value, { + program: this.programLabel, + searchAttribute: options && options.searchAttribute + }); + }); + } + suggestTaxonNames(value, options) { + return __awaiter(this, void 0, void 0, function* () { + const taxonGroup = this.editedRow && this.editedRow.validator.get('taxonGroup').value; + // IF taxonGroup column exists: taxon group must be filled first + if (this.showTaxonGroupColumn && isNilOrBlank(value) && isNil(taxonGroup)) + return { data: [] }; + return this.programRefService.suggestTaxonNames(value, { + programLabel: this.programLabel, + searchAttribute: options && options.searchAttribute, + taxonGroupId: taxonGroup && taxonGroup.id || undefined + }); + }); + } + prepareEntityToSave(data) { + // Override by subclasses + } + /** + * Allow to remove/Add some pmfms. Can be override by subclasses + * + * @param pmfms + */ + mapPmfms(pmfms) { + if (!pmfms) + return pmfms; // Skip (no pmfms) + this._initialPmfms = pmfms; // Copy original pmfms list + this.weightPmfms = pmfms.filter(p => PmfmUtils.isWeight(p)); + this.defaultWeightPmfm = firstArrayValue(this.weightPmfms); // First as default + this.weightPmfmsByMethod = splitByProperty(this.weightPmfms, 'methodId'); + // Exclude weight PMFMs + return pmfms.filter(p => !this.weightPmfms.includes(p)); + } + onNewEntity(data) { + const _super = Object.create(null, { + onNewEntity: { get: () => super.onNewEntity } + }); + return __awaiter(this, void 0, void 0, function* () { + console.debug('[sample-table] Initializing new row data...'); + yield _super.onNewEntity.call(this, data); + // generate label + data.label = `${this.acquisitionLevel}#${data.rankOrder}`; + // Default values + if (isNotNil(this.defaultTaxonName)) { + data.taxonName = this.defaultTaxonName; + } + if (isNotNil(this.defaultTaxonGroup)) { + data.taxonGroup = this.defaultTaxonGroup; + } + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], AbstractBatchesTable.prototype, "value", null); +__decorate([ + Input(), + __metadata("design:type", String) +], AbstractBatchesTable.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], AbstractBatchesTable.prototype, "showTaxonGroupColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], AbstractBatchesTable.prototype, "showTaxonNameColumn", null); +__decorate([ + Input(), + __metadata("design:type", Object) +], AbstractBatchesTable.prototype, "useSticky", void 0); +__decorate([ + Input(), + __metadata("design:type", TaxonGroupRef) +], AbstractBatchesTable.prototype, "defaultTaxonGroup", void 0); +__decorate([ + Input(), + __metadata("design:type", TaxonNameRef) +], AbstractBatchesTable.prototype, "defaultTaxonName", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], AbstractBatchesTable.prototype, "availableTaxonGroups", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], AbstractBatchesTable.prototype, "samplingRatioFormat", void 0); +AbstractBatchesTable = __decorate([ + Directive() + // tslint:disable-next-line:directive-class-suffix + , + __metadata("design:paramtypes", [Injector, Function, Function, Object, Object, Object]) +], AbstractBatchesTable); +export { AbstractBatchesTable }; +//# sourceMappingURL=batches.table.class.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batches.table.class.js.map b/out-tsc/app/app/trip/batch/common/batches.table.class.js.map new file mode 100644 index 000000000..ca7e52218 --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batches.table.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batches.table.class.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/common/batches.table.class.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batches.table.js b/out-tsc/app/app/trip/batch/common/batches.table.js new file mode 100644 index 000000000..c96a28fa9 --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batches.table.js @@ -0,0 +1,81 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, Input } from '@angular/core'; +import { InMemoryEntitiesService } from '@sumaris-net/ngx-components'; +import { Batch } from './batch.model'; +import { BatchFilter } from '@app/trip/batch/common/batch.filter'; +import { AbstractBatchesTable } from '@app/trip/batch/common/batches.table.class'; +import { BatchValidatorService } from '@app/trip/batch/common/batch.validator'; +import { BatchModal } from '@app/trip/batch/common/batch.modal'; +export const BATCH_RESERVED_START_COLUMNS = ['taxonGroup', 'taxonName', 'weight']; +let BatchesTable = class BatchesTable extends AbstractBatchesTable { + constructor(injector, memoryDataService, validatorService) { + super(injector, Batch, BatchFilter, memoryDataService, validatorService, { + reservedStartColumns: BATCH_RESERVED_START_COLUMNS + }); + this.memoryDataService = memoryDataService; + this.compactFields = true; + } + setModalOption(key, value) { + this.modalOptions = this.modalOptions || {}; + this.modalOptions[key] = value; + } + ngOnDestroy() { + super.ngOnDestroy(); + this.memoryDataService.stop(); + } + /* -- protected methods -- */ + openDetailModal(dataToOpen) { + return __awaiter(this, void 0, void 0, function* () { + const isNew = !dataToOpen && true; + if (isNew) { + dataToOpen = new this.dataType(); + yield this.onNewEntity(dataToOpen); + } + this.markAsLoading(); + const modal = yield this.modalCtrl.create({ + component: BatchModal, + componentProps: Object.assign({ programLabel: this.programLabel, acquisitionLevel: this.acquisitionLevel, disabled: this.disabled, data: dataToOpen, isNew, showTaxonGroup: this.showTaxonGroupColumn, showTaxonName: this.showTaxonNameColumn, + // Not need on a root species batch (fill in sub-batches) + showTotalIndividualCount: false, showIndividualCount: false, mobile: this.mobile, usageMode: this.usageMode, i18nSuffix: this.i18nColumnSuffix, maxVisibleButtons: 3 }, this.modalOptions), + keyboardClose: true + }); + // Open the modal + yield modal.present(); + // Wait until closed + const { data, role } = yield modal.onDidDismiss(); + if (data && this.debug) + console.debug('[batches-table] Batch modal result: ', data, role); + this.markAsLoaded(); + return { data: (data instanceof Batch) ? data : undefined, role }; + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchesTable.prototype, "modalOptions", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchesTable.prototype, "compactFields", void 0); +BatchesTable = __decorate([ + Component({ + selector: 'app-batches-table', + templateUrl: 'batches.table.html', + styleUrls: ['batches.table.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + providers: [ + { provide: BatchValidatorService, useClass: BatchValidatorService }, + { provide: InMemoryEntitiesService, useFactory: () => new InMemoryEntitiesService(Batch, BatchFilter, { + equals: Batch.equals, + sortByReplacement: { id: 'rankOrder' } + }) + } + ] + }), + __metadata("design:paramtypes", [Injector, + InMemoryEntitiesService, + BatchValidatorService]) +], BatchesTable); +export { BatchesTable }; +//# sourceMappingURL=batches.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/batches.table.js.map b/out-tsc/app/app/trip/batch/common/batches.table.js.map new file mode 100644 index 000000000..de682714a --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/batches.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batches.table.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/common/batches.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/testing/batch.form.test.js b/out-tsc/app/app/trip/batch/common/testing/batch.form.test.js new file mode 100644 index 000000000..bb361426b --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/testing/batch.form.test.js @@ -0,0 +1,242 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Component, ViewChild } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { BehaviorSubject } from 'rxjs'; +import { Batch } from '../../common/batch.model'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { filter, mergeMap } from 'rxjs/operators'; +import { EntitiesStorage, EntityUtils, firstNotNilPromise, isNotNilOrBlank, MatAutocompleteConfigHolder, SharedValidators, toNumber, waitFor } from '@sumaris-net/ngx-components'; +import { AcquisitionLevelCodes, MethodIds } from '@app/referential/services/model/model.enum'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { BatchGroupUtils } from '@app/trip/batch/group/batch-group.model'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +import { BATCH_TREE_EXAMPLES, getExampleTree } from '@app/trip/batch/testing/batch-data.test'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { BatchValidatorService } from '@app/trip/batch/common/batch.validator'; +import { BatchForm } from '@app/trip/batch/common/batch.form'; +let BatchFormTestPage = class BatchFormTestPage { + constructor(formBuilder, referentialRefService, programRefService, entities) { + this.referentialRefService = referentialRefService; + this.programRefService = programRefService; + this.entities = entities; + this.$programLabel = new BehaviorSubject(undefined); + this.$gearId = new BehaviorSubject(undefined); + this.autocomplete = new MatAutocompleteConfigHolder(); + this.showWeight = true; + this.requiredWeight = true; + this.showIndividualCount = false; + this.requiredIndividualCount = false; + this.showSamplingBatch = true; + this.samplingBatchEnabled = true; + this.showSampleWeight = true; + this.requiredSampleWeight = true; + this.showChildrenWeight = true; + this.showSampleIndividualCount = false; + this.requiredSampleIndividualCount = false; + this.showExhaustiveInventory = true; + this.showEstimatedWeight = true; + this.samplingRatioFormats = ProgramProperties.TRIP_BATCH_SAMPLING_RATIO_FORMAT.values; + this.$program = new BehaviorSubject(null); + this.outputs = {}; + this.filterForm = formBuilder.group({ + program: [null, Validators.compose([Validators.required, SharedValidators.entity])], + gear: [null, Validators.compose([Validators.required, SharedValidators.entity])], + example: [null, Validators.required], + }); + } + ngOnInit() { + // Program + this.autocomplete.add('program', { + suggestFn: (value, filter) => this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { entityName: 'Program' })), + attributes: ['label', 'name'], + }); + this.filterForm.get('program').valueChanges + //.pipe(debounceTime(450)) + .subscribe(p => { + const label = p && p.label; + if (label) { + this.$programLabel.next(label); + } + }); + this.$programLabel + .pipe(filter(isNotNilOrBlank), mergeMap(programLabel => this.referentialRefService.ready() + .then(() => this.programRefService.loadByLabel(programLabel)))) + .subscribe(program => this.setProgram(program)); + // Gears (from program) + this.autocomplete.add('gear', { + items: this.$programLabel.pipe(mergeMap((programLabel) => { + if (!programLabel) + return Promise.resolve([]); + return this.programRefService.loadGears(programLabel); + })), + attributes: ['label', 'name'], + showAllOnFocus: true + }); + this.filterForm.get('gear').valueChanges + //.pipe(debounceTime(450)) + .subscribe(g => this.$gearId.next(toNumber(g && g.id, null))); + // Input example + this.autocomplete.add('example', { + items: BATCH_TREE_EXAMPLES.map((label, index) => ({ id: index + 1, label })), + attributes: ['label'], + showAllOnFocus: true + }); + this.filterForm.get('example').valueChanges + //.pipe(debounceTime(450)) + .pipe() + .subscribe(example => { + if (example && typeof example.label == 'string' && this.outputs.example) { + const json = this.getExampleBatch(example.label); + this.dumpBatch(Batch.fromObject(json), 'example'); + } + }); + this.filterForm.patchValue({ + program: { id: 10, label: 'ADAP-MER' }, + //program: { id: 70, label: 'APASE' }, + gear: { id: 6, label: 'OTB' }, + example: { id: 1, label: 'default' }, + }); + this.applyExample(); + } + setProgram(program) { + // DEBUG + console.debug('[batch-group-form-test] Applying program:', program); + const hasBatchMeasure = program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_MEASURE_ENABLE); + this.showSamplingBatch = hasBatchMeasure; + this.samplingRatioFormat = program.getProperty(ProgramProperties.TRIP_BATCH_SAMPLING_RATIO_FORMAT); + this.taxonGroupsNoWeight = program.getPropertyAsStrings(ProgramProperties.TRIP_BATCH_TAXON_GROUPS_NO_WEIGHT); + this.$program.next(program); + } + // Load data into components + updateView(data) { + return __awaiter(this, void 0, void 0, function* () { + yield waitFor(() => !!this.form); + yield firstNotNilPromise(this.$program); + // DEBUG + console.debug('[batch-form-test] Applying data:', data); + this.markAsReady(); + this.form.value = data && data.clone() || new Batch(); + this.form.enable(); + }); + } + markAsReady() { + this.form.markAsReady(); + } + markAsLoaded() { + this.form.markAsLoaded(); + } + doSubmit(event) { + // Nothing to do + } + getExampleBatch(key, index) { + var _a, _b, _c; + return __awaiter(this, void 0, void 0, function* () { + if (!key) { + const example = this.filterForm.get('example').value; + key = example && example.label || 'default'; + } + // Get program + const programLabel = (_a = this.filterForm.get('program').value) === null || _a === void 0 ? void 0 : _a.label; + // Load example + const json = getExampleTree(key, programLabel); + // Convert to array (as Pod should sent) with: + // - a local ID + // - only the parentId, and NOT the parent + const batches = EntityUtils.treeToArray(json) || []; + yield EntityUtils.fillLocalIds(batches, (_, count) => this.entities.nextValues('BatchVO', count)); + batches.forEach(b => { + b.parentId = b.parent && b.parent.id; + delete b.parent; + }); + // Convert into Batch tree + const catchBatch = Batch.fromObjectArrayAsTree(batches); + BatchUtils.computeIndividualCount(catchBatch); + const batchGroups = BatchGroupUtils.fromBatchTree(catchBatch); + const parent = batchGroups[index || 0]; + const batch = (_c = (_b = parent === null || parent === void 0 ? void 0 : parent.children) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.clone(); + batch.taxonGroup = parent.taxonGroup || batch.taxonGroup; + const samplingBatch = BatchUtils.getSamplingChild(batch); + // Add a childrenWeight value, on the sampling batch + if (samplingBatch) { + samplingBatch.childrenWeight = { value: 0.2510, computed: true, methodId: MethodIds.CALCULATED_WEIGHT_LENGTH_SUM }; + } + return batch; + }); + } + // Load data into components + applyExample(key) { + return __awaiter(this, void 0, void 0, function* () { + // Wait enumerations override + yield this.referentialRefService.ready(); + const batch = yield this.getExampleBatch(key); + yield this.updateView(batch); + }); + } + dumpExample(key) { + return __awaiter(this, void 0, void 0, function* () { + const batch = yield this.getExampleBatch(key); + this.dumpBatch(batch, 'example'); + }); + } + dumpBatchForm(form, outputName) { + return __awaiter(this, void 0, void 0, function* () { + this.dumpBatch(form.value, outputName); + }); + } + dumpBatch(batch, outputName) { + let html = ''; + if (batch) { + const catchBatch = new Batch(); + catchBatch.label = AcquisitionLevelCodes.CATCH_BATCH; + catchBatch.children = [batch]; + BatchUtils.logTree(catchBatch, { + showAll: false, + println: (m) => { + html += '
' + m; + }, + }); + html = html.replace(/\t/g, '  '); + this.outputs[outputName] = html; + } + else { + this.outputs[outputName] = ' No result'; + } + console.debug(html); + } + copyBatch(source, target) { + return __awaiter(this, void 0, void 0, function* () { + source.disable(); + target.disable(); + try { + yield target.setValue(source.value); + } + finally { + source.enable(); + target.enable(); + } + }); + } + /* -- protected methods -- */ + stringify(value) { + return JSON.stringify(value); + } +}; +__decorate([ + ViewChild(BatchForm, { static: true }), + __metadata("design:type", BatchForm) +], BatchFormTestPage.prototype, "form", void 0); +BatchFormTestPage = __decorate([ + Component({ + selector: 'app-batch-form-test', + templateUrl: './batch.form.test.html', + providers: [ + { provide: BatchValidatorService, useClass: BatchValidatorService } + ] + }), + __metadata("design:paramtypes", [UntypedFormBuilder, + ReferentialRefService, + ProgramRefService, + EntitiesStorage]) +], BatchFormTestPage); +export { BatchFormTestPage }; +//# sourceMappingURL=batch.form.test.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/common/testing/batch.form.test.js.map b/out-tsc/app/app/trip/batch/common/testing/batch.form.test.js.map new file mode 100644 index 000000000..3b3fbd02b --- /dev/null +++ b/out-tsc/app/app/trip/batch/common/testing/batch.form.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch.form.test.js","sourceRoot":"","sources":["../../../../../../../src/app/trip/batch/common/testing/batch.form.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/filter/batch-filter.form.js b/out-tsc/app/app/trip/batch/filter/batch-filter.form.js new file mode 100644 index 000000000..66083e70c --- /dev/null +++ b/out-tsc/app/app/trip/batch/filter/batch-filter.form.js @@ -0,0 +1,107 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Injector, Input, Output, QueryList, ViewChildren } from '@angular/core'; +import { UntypedFormBuilder } from '@angular/forms'; +import { AppForm, firstArrayValue } from '@sumaris-net/ngx-components'; +import { tap } from 'rxjs/operators'; +import { PmfmValueUtils } from '@app/referential/services/model/pmfm-value.model'; +let BatchFilterForm = class BatchFilterForm extends AppForm { + constructor(injector, formBuilder, cd) { + super(injector, formBuilder.group({ + measurementValues: formBuilder.group({}) + })); + this.formBuilder = formBuilder; + this.cd = cd; + this.debounceTime = 0; + this.valueChanges = new EventEmitter(); + } + set pmfms(value) { + this.setPmfms(value); + } + get pmfms() { + return this._pmfms; + } + ngOnInit() { + this.enable(); + this.markAsReady(); + } + ngAfterViewInit() { + this.registerSubscription(this.form.valueChanges + .pipe( + //map(BatchFilter.fromObject), + // DEBUG + tap(value => console.debug('[batch-filter] Filter change to:', value))) + .subscribe(value => this.valueChanges.emit(value))); + } + applyPmfmValue(pmfm, value) { + const control = this.form.get(`measurementValues.${pmfm.id}`); + control.patchValue(PmfmValueUtils.toModelValue(value, pmfm)); + } + /** + * Use in ngFor, for trackBy + * + * @param index + * @param pmfm + */ + trackPmfmFn(index, pmfm) { + return pmfm.id; + } + setPmfms(pmfms) { + const measurementValuesForm = this.form.get('measurementValues'); + // Remove previous controls + const existingControlKeys = Object.keys(measurementValuesForm.controls); + (pmfms || []).forEach(pmfm => { + const key = pmfm.id.toString(); + let control = measurementValuesForm.get(key); + if (!control) { + control = this.formBuilder.control(null); + measurementValuesForm.addControl(key, control); + if (pmfm.type === 'qualitative_value') { + const value = firstArrayValue(pmfm.qualitativeValues); + this.applyPmfmValue(pmfm, value); + } + } + else { + existingControlKeys.splice(existingControlKeys.indexOf(key), 1); + } + }); + // Remove unused + existingControlKeys.forEach(key => measurementValuesForm.removeControl(key)); + this._pmfms = pmfms; + this.cd.detectChanges(); + } + realignInkBar() { + this.navBars.forEach(tab => tab._alignInkBarToSelectedTab()); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchFilterForm.prototype, "debounceTime", void 0); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], BatchFilterForm.prototype, "pmfms", null); +__decorate([ + Output(), + __metadata("design:type", Object) +], BatchFilterForm.prototype, "valueChanges", void 0); +__decorate([ + ViewChildren('navBar'), + __metadata("design:type", QueryList) +], BatchFilterForm.prototype, "navBars", void 0); +BatchFilterForm = __decorate([ + Component({ + selector: 'app-batch-filter-form', + templateUrl: './batch-filter.form.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + UntypedFormBuilder, + ChangeDetectorRef]) +], BatchFilterForm); +export { BatchFilterForm }; +//# sourceMappingURL=batch-filter.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/filter/batch-filter.form.js.map b/out-tsc/app/app/trip/batch/filter/batch-filter.form.js.map new file mode 100644 index 000000000..81e564d63 --- /dev/null +++ b/out-tsc/app/app/trip/batch/filter/batch-filter.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch-filter.form.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/filter/batch-filter.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/group/batch-group.form.js b/out-tsc/app/app/trip/batch/group/batch-group.form.js new file mode 100644 index 000000000..33fa3f1bd --- /dev/null +++ b/out-tsc/app/app/trip/batch/group/batch-group.form.js @@ -0,0 +1,421 @@ +var BatchGroupForm_1; +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, forwardRef, Injector, Input, QueryList, ViewChildren } from '@angular/core'; +import { Batch } from '../common/batch.model'; +import { UntypedFormBuilder, UntypedFormControl } from '@angular/forms'; +import { AppFormUtils, isNil, isNotNil, isNotNilOrBlank, ReferentialUtils, toBoolean, waitFor, } from '@sumaris-net/ngx-components'; +import { BatchGroupValidatorService } from './batch-group.validator'; +import { BatchForm } from '../common/batch.form'; +import { debounceTime, distinctUntilChanged, filter, map, tap } from 'rxjs/operators'; +import { BatchGroupUtils } from './batch-group.model'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { merge } from 'rxjs'; +import { MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +let BatchGroupForm = BatchGroupForm_1 = class BatchGroupForm extends BatchForm { + constructor(injector, measurementsValidatorService, formBuilder, programRefService, referentialRefService, validatorService) { + super(injector, measurementsValidatorService, formBuilder, programRefService, referentialRefService, validatorService, { + withWeight: false, + withChildren: false, + withMeasurements: false + }); + this.childrenPmfmsByQvId$ = this._state.select('childrenPmfmsByQvId'); + this.hasSubBatches$ = this._state.select('hasSubBatches'); + this.allowSubBatches = true; + this.defaultHasSubBatches = false; + this.showHasSubBatchesButton = true; + // Default value + this._state.set((state) => (Object.assign(Object.assign({}, state), { showSamplingBatch: false, showWeight: false }))); + // Create control for hasSubBatches button + this.hasSubBatchesControl = new UntypedFormControl(false); + // DEBUG + //this.debug = !environment.production; + this._logPrefix = '[batch-group-form]'; + } + set qvPmfm(value) { + this._state.set('qvPmfm', _ => value); + } + get qvPmfm() { + return this._state.get('qvPmfm'); + } + get childrenState() { + return this._state.get('childrenState'); + } + set childrenState(value) { + this._state.set('childrenState', oldState => (Object.assign(Object.assign({}, oldState.childrenState), value))); + } + get invalid() { + return this.form.invalid + || this.hasSubBatchesControl.invalid + || ((this.childrenList || []).find(child => child.invalid) && true) || false; + } + get valid() { + // Important: Should be not invalid AND not pending, so use '!valid' (and NOT 'invalid') + return this.form.valid + && (this.hasSubBatchesControl.disabled /*ignore when disabled*/ || this.hasSubBatchesControl.valid) + && (!this.childrenList || !this.childrenList.find(child => child.enabled && !child.valid)) || false; + } + get pending() { + return this.form.pending + || this.hasSubBatchesControl.pending + || (this.childrenList && this.childrenList.find(child => child.pending) && true) || false; + } + get loading() { + return super.loading || (this.childrenList && this.childrenList.find(child => child.loading) && true) || false; + } + get dirty() { + return this.form.dirty || this.hasSubBatchesControl.dirty || + (this.childrenList && this.childrenList.find(child => child.dirty) && true) || false; + } + markAllAsTouched(opts) { + var _a; + super.markAllAsTouched(opts); + (_a = this.childrenList) === null || _a === void 0 ? void 0 : _a.forEach(f => f.markAllAsTouched(opts)); + this.hasSubBatchesControl.markAsTouched(opts); + } + markAsPristine(opts) { + super.markAsPristine(opts); + (this.childrenList || []).forEach(child => child.markAsPristine(opts)); + this.hasSubBatchesControl.markAsPristine(opts); + } + markAsUntouched(opts) { + super.markAsUntouched(opts); + (this.childrenList || []).forEach(child => child.markAsUntouched(opts)); + this.hasSubBatchesControl.markAsUntouched(opts); + } + markAsDirty(opts) { + super.markAsDirty(opts); + (this.childrenList || []).forEach(child => child.markAsDirty(opts)); + this.hasSubBatchesControl.markAsDirty(opts); + } + disable(opts) { + super.disable(opts); + (this.childrenList || []).forEach(child => child.disable(opts)); + this.hasSubBatchesControl.disable(opts); + } + enable(opts) { + super.enable(opts); + (this.childrenList || []).forEach(child => child.enable(opts)); + } + get hasSubBatches() { + return this._state.get('hasSubBatches'); + } + set hasSubBatches(value) { + this._state.set('hasSubBatches', _ => value); + } + ngOnInit() { + super.ngOnInit(); + this.showHasSubBatchesButton = toBoolean(this.showHasSubBatchesButton, true); + this.defaultHasSubBatches = toBoolean(this.defaultHasSubBatches, false); + // Set isSampling on each child forms, when has indiv. measure changed + this._state.connect('hasSubBatches', this.hasSubBatchesControl.valueChanges + .pipe(filter(() => !this.applyingValue && !this.loading), distinctUntilChanged(), tap(_ => this.markAsDirty()))); + this._state.hold(this.hasSubBatches$, (value) => { + if (this.hasSubBatchesControl.value !== value) { + this.hasSubBatchesControl.setValue(value, { emitEvent: false }); + this.markForCheck(); + } + // Enable control if need + if (!value && this.hasSubBatchesControl.disabled && this.enabled) { + this.hasSubBatchesControl.enable(); + } + // Disable control if need + else if (value && this.hasSubBatchesControl.enabled && this.enabled) { + this.hasSubBatchesControl.disable(); + } + }); + // Listen form changes, to update children state (e.g. when taxonGroup changes, check if RJB special case) + this._state.connect('childrenState', merge(this.form.valueChanges, this.hasSubBatches$).pipe(filter(() => !this.applyingValue && this.enabled && !this.loading), debounceTime(450), map(_ => this.computeChildrenState(this.form.value)))); + // Listen children state, and update forms + this._state.hold(this._state.select('childrenState') + .pipe(filter(() => this.enabled && !this.loading)), (childrenState) => { + var _a; + if (this.qvPmfm) { + (_a = this.childrenList) === null || _a === void 0 ? void 0 : _a.forEach(childForm => childForm.applyState(childrenState)); + } + // No QV: apply to himself + else + this.applyState(childrenState); + }); + } + focusFirstInput() { + const element = this.firstInputFields.first; + if (element) + element.focus(); + } + logFormErrors(logPrefix) { + logPrefix = logPrefix || ''; + AppFormUtils.logFormErrors(this.form, logPrefix); + if (this.childrenList) + this.childrenList.forEach((childForm, index) => { + AppFormUtils.logFormErrors(childForm.form, logPrefix, `children#${index}`); + }); + } + ready(opts) { + const _super = Object.create(null, { + ready: { get: () => super.ready } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.ready.call(this, opts); + }); + } + /* -- protected methods -- */ + waitForChildren(opts) { + return waitFor(() => { var _a; return ((_a = this.childrenList) === null || _a === void 0 ? void 0 : _a.length) > 0; }, opts); + } + mapPmfms(pmfms) { + if (this.debug) + console.debug('[batch-group-form] mapPmfm()...'); + let qvPmfm = this.qvPmfm || BatchGroupUtils.getQvPmfm(pmfms); + if (qvPmfm) { + // Create a copy, to keep original pmfm unchanged + qvPmfm = qvPmfm.clone(); + // Hide for children form, and change it as required + qvPmfm.hidden = true; + qvPmfm.required = true; + const qvPmfmIndex = pmfms.findIndex(pmfm => pmfm.id === qvPmfm.id); + const speciesPmfms = pmfms.filter((pmfm, index) => index < qvPmfmIndex); + const childrenPmfms = [ + qvPmfm, + ...pmfms.filter((pmfm, index) => index > qvPmfmIndex) + ]; + // Prepare a map of pmfm, by QV id. + const childrenPmfmsByQvId = qvPmfm.qualitativeValues.reduce((res, qv) => { + // Map PMFM, for batch group's children + // Depending of the qvId, some pmfms can be hidden (e.g. DRESSING and PRESERVATION) + res[qv.id] = BatchGroupUtils.mapChildrenPmfms(childrenPmfms, { qvPmfm, qvId: qv.id }); + return res; + }, {}); + // Update state + this._state.set({ childrenPmfmsByQvId, qvPmfm }); + // Limit to species pmfms + return super.mapPmfms(speciesPmfms); + } + else { + if (this.debug) + console.debug('[batch-group-form] No qv pmfms...'); + return super.mapPmfms(pmfms); + } + } + updateView(data, opts) { + const _super = Object.create(null, { + updateView: { get: () => super.updateView } + }); + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.debug(this._logPrefix + ' updateView() with value:', data); + // Show comments if any + this.showComment = this.showComment || isNotNilOrBlank(data === null || data === void 0 ? void 0 : data.comments); + // Compute has sub batches (will be updated later in this function) + let hasSubBatches = data.observedIndividualCount > 0 || this.defaultHasSubBatches || false; + const qvPmfm = this.qvPmfm; + if (qvPmfm) { + // Prepare data array, for each qualitative values + data.children = qvPmfm.qualitativeValues.map((qv, index) => { + // Find existing child, or create a new one + // tslint:disable-next-line:triple-equals + const child = (data.children || []).find(c => MeasurementValuesUtils.hasPmfmValue(c.measurementValues, qvPmfm.id, qv)) + || new Batch(); + // Make sure label and rankOrder are correct + child.label = `${data.label}.${qv.label}`; + child.measurementValues[this.qvPmfm.id] = qv; + child.rankOrder = index + 1; + // Should have sub batches, when sampling batch exists + const samplingBatchExists = isNotNil(BatchUtils.getSamplingChild(child)); + hasSubBatches = hasSubBatches || samplingBatchExists; + // Create sampling batch, if has sub batches + if (hasSubBatches && !samplingBatchExists) + BatchUtils.getOrCreateSamplingChild(child); + return child; + }); + // Set has subbatches, if changed + if (this.hasSubBatches !== hasSubBatches) + this.hasSubBatches = hasSubBatches; + // Compute if should show total individual count, instead of weight (eg. ADAP program, for species "RJB_x - Pocheteaux") + this.childrenState = this.computeChildrenState(data, { hasSubBatches }); + // Wait children forms + this.cd.detectChanges(); + yield this.waitForChildren({ stop: this.destroySubject }); + // Set value of each child form + yield Promise.all(this.childrenList.map((childForm, index) => __awaiter(this, void 0, void 0, function* () { + childForm.markAsReady(); + return childForm.setValue(data.children[index] || new Batch(), { emitEvent: true }); + }))); + // Set value (batch group) + yield _super.updateView.call(this, data, Object.assign(Object.assign({}, opts), { emitEvent: false })); + } + // No QV pmfm + else { + // Should have sub batches, when sampling batch exists + const samplingBatchExists = isNotNil(BatchUtils.getSamplingChild(data)); + hasSubBatches = hasSubBatches || samplingBatchExists; + // Create sampling batch, if has sub batches + if (hasSubBatches && !samplingBatchExists) + BatchUtils.getOrCreateSamplingChild(data); + // Configure as child form (will copy some childrenXXX properties into self) + if (hasSubBatches !== this.hasSubBatches) + this.hasSubBatches = hasSubBatches; + // Compute state + const state = this.computeChildrenState(data, { hasSubBatches }); + this.applyState(state); + this.childrenState = state; + this.markAsReady(); + // Set value (batch group) + yield _super.updateView.call(this, data, opts); + } + // Apply computed value + if (this.showHasSubBatchesButton || !this.hasSubBatchesControl.value) { + this.hasSubBatchesControl.setValue(hasSubBatches, { emitEvent: false }); + } + // If there is already some measure + // Not allow to change 'has measure' field + if (data.observedIndividualCount > 0) { + this.hasSubBatchesControl.disable(); + } + else if (this.enabled) { + this.hasSubBatchesControl.enable(); + } + }); + } + getValue() { + const data = super.getValue(); + if (!data) + return; // No set yet + if (this.qvPmfm) { + // For each child + data.children = this.childrenList.map((childForm, index) => { + const qv = this.qvPmfm.qualitativeValues[index]; + const child = childForm.value; + if (!child) + return; // No set yet + child.rankOrder = index + 1; + child.label = `${data.label}.${qv.label}`; + child.measurementValues = child.measurementValues || {}; + child.measurementValues[this.qvPmfm.id.toString()] = '' + qv.id; + // Copy other pmfms + const childMeasurementValues = childForm.measurementValuesForm.value; + Object.keys(childMeasurementValues) + .filter(key => isNil(child.measurementValues[key])) + .forEach(key => child.measurementValues[key] = childMeasurementValues[key]); + return child; + }); + } + else { + // Nothing to do + } + if (this.debug) + console.debug(this._logPrefix + 'getValue():', data); + return data; + } + /** + * Compute if should show total individual count, instead of weight (eg. ADAP program, for species "RJB_x - Pocheteaux") + * + * @param data + * @param opts + * @protected + */ + computeChildrenState(data, opts) { + data = data || this.data; + if (this.debug) + console.debug(this._logPrefix + 'updateChildrenFormState():', data); + // Generally, individual count are not need, on a root species batch, because filled in sub-batches, + // but some species (e.g. RJB) can have no weight. + const taxonGroupNoWeight = ReferentialUtils.isNotEmpty(data === null || data === void 0 ? void 0 : data.taxonGroup) + && (this.taxonGroupsNoWeight || []).includes(data.taxonGroup.label); + const hasSubBatches = toBoolean(opts === null || opts === void 0 ? void 0 : opts.hasSubBatches, this.hasSubBatches); + // Show/hide + const showWeight = !taxonGroupNoWeight; + const showIndividualCount = taxonGroupNoWeight; + const showSamplingBatch = showWeight && this.allowSubBatches; + const samplingBatchEnabled = !taxonGroupNoWeight && hasSubBatches && this.allowSubBatches; + const showSampleWeight = showSamplingBatch && showWeight; + const showChildrenWeight = !taxonGroupNoWeight; + // Required ? + const requiredWeight = showWeight && hasSubBatches; + const requiredSampleWeight = showSampleWeight && hasSubBatches; + const requiredIndividualCount = !showWeight && showIndividualCount && hasSubBatches; + // Update children state + const childrenState = Object.assign(Object.assign({}, this.childrenState), { showWeight, + requiredWeight, + showIndividualCount, + requiredIndividualCount, + showSamplingBatch, + showSampleWeight, + requiredSampleWeight, + showChildrenWeight, + samplingBatchEnabled }); + return childrenState; + } + onUpdateFormGroup(form) { + const _super = Object.create(null, { + onUpdateFormGroup: { get: () => super.onUpdateFormGroup } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.onUpdateFormGroup.call(this, form); + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], BatchGroupForm.prototype, "qvPmfm", null); +__decorate([ + Input(), + __metadata("design:type", Array) +], BatchGroupForm.prototype, "childrenPmfms", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], BatchGroupForm.prototype, "taxonGroupsNoWeight", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchGroupForm.prototype, "allowSubBatches", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchGroupForm.prototype, "defaultHasSubBatches", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchGroupForm.prototype, "showHasSubBatchesButton", void 0); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], BatchGroupForm.prototype, "childrenState", null); +__decorate([ + ViewChildren('firstInput'), + __metadata("design:type", QueryList) +], BatchGroupForm.prototype, "firstInputFields", void 0); +__decorate([ + ViewChildren('childForm'), + __metadata("design:type", QueryList) +], BatchGroupForm.prototype, "childrenList", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchGroupForm.prototype, "hasSubBatches", null); +BatchGroupForm = BatchGroupForm_1 = __decorate([ + Component({ + selector: 'app-batch-group-form', + templateUrl: 'batch-group.form.html', + styleUrls: ['batch-group.form.scss'], + providers: [ + { provide: BatchForm, useExisting: forwardRef(() => BatchGroupForm_1) }, + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + MeasurementsValidatorService, + UntypedFormBuilder, + ProgramRefService, + ReferentialRefService, + BatchGroupValidatorService]) +], BatchGroupForm); +export { BatchGroupForm }; +//# sourceMappingURL=batch-group.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/group/batch-group.form.js.map b/out-tsc/app/app/trip/batch/group/batch-group.form.js.map new file mode 100644 index 000000000..1f56d52da --- /dev/null +++ b/out-tsc/app/app/trip/batch/group/batch-group.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch-group.form.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/group/batch-group.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/group/batch-group.modal.js b/out-tsc/app/app/trip/batch/group/batch-group.modal.js new file mode 100644 index 000000000..2d40ff7c7 --- /dev/null +++ b/out-tsc/app/app/trip/batch/group/batch-group.modal.js @@ -0,0 +1,532 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input, ViewChild } from '@angular/core'; +import { Alerts, AppFormUtils, AudioProvider, ErrorCodes, isNil, isNotNil, isNotNilOrBlank, LocalSettingsService, PlatformService, ReferentialUtils, toBoolean, } from '@sumaris-net/ngx-components'; +import { AlertController, IonContent, ModalController } from '@ionic/angular'; +import { BehaviorSubject, merge, Subscription } from 'rxjs'; +import { TranslateService } from '@ngx-translate/core'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { BatchGroupForm } from './batch-group.form'; +import { debounceTime, filter, map, startWith } from 'rxjs/operators'; +import { BatchGroup } from './batch-group.model'; +import { environment } from '@environments/environment'; +import { TripContextService } from '@app/trip/trip-context.service'; +import { ContextService } from '@app/shared/context.service'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +let BatchGroupModal = class BatchGroupModal { + constructor(injector, alertCtrl, modalCtrl, platform, settings, translate, audio, cd) { + this.injector = injector; + this.alertCtrl = alertCtrl; + this.modalCtrl = modalCtrl; + this.platform = platform; + this.settings = settings; + this.translate = translate; + this.audio = audio; + this.cd = cd; + this._subscription = new Subscription(); + this.debug = false; + this.loading = false; + this.$title = new BehaviorSubject(undefined); + this.showTaxonGroup = true; + this.showTaxonName = true; + this.showIndividualCount = false; + this.allowSubBatches = true; + this.taxonGroupsNoWeight = []; + // Default value + this.acquisitionLevel = AcquisitionLevelCodes.SORTING_BATCH; + // TODO: for DEV only + this.debug = !environment.production; + } + get dirty() { + return this.form.dirty; + } + get invalid() { + return this.form.invalid; + } + get valid() { + return this.form.valid; + } + get pending() { + return this.form.pending; + } + get enabled() { + return !this.disabled; + } + enable(opts) { + this.form.enable(opts); + } + disable(opts) { + this.form.disable(opts); + } + ngOnInit() { + var _a; + this.mobile = isNotNil(this.mobile) ? this.mobile : this.settings.mobile; + this.isNew = toBoolean(this.isNew, !this.data); + this.usageMode = this.usageMode || this.settings.usageMode; + this._isOnFieldMode = this.settings.isOnFieldMode(this.usageMode); + this.playSound = toBoolean(this.playSound, this.mobile || this._isOnFieldMode); + this.disabled = toBoolean(this.disabled, false); + this.enableBulkMode = this.enableBulkMode && !this.disabled && (typeof this.onSaveAndNew === 'function'); + this.showComment = toBoolean(this.showComment, !this.mobile || isNotNil(this.data.comments)); + if (this.disabled) + this.disable(); + // Update title, when form change + this._subscription.add(merge(this.form.form.get('taxonGroup').valueChanges, this.form.form.get('taxonName').valueChanges) + .pipe(filter(_ => !this.form.loading), debounceTime(500), map(() => this.form.value), + // Start with current data + startWith(this.data)) + .subscribe((data) => this.computeTitle(data))); + this.form.childrenState = { + showSamplingBatch: this.showSamplingBatch, + samplingBatchEnabled: ((_a = this.data) === null || _a === void 0 ? void 0 : _a.observedIndividualCount) > 0 || this.defaultHasSubBatches, + showExhaustiveInventory: false, + showEstimatedWeight: false + }; + this.load(); + } + ngAfterViewInit() { + // Focus on the first field (if new AND desktop AND enabled) + if (this.isNew && !this.mobile && this.enabled) { + this.form.ready().then(() => this.form.focusFirstInput()); + } + } + load() { + return __awaiter(this, void 0, void 0, function* () { + this.markAsReady(); + this.markAsLoading(); + try { + yield this.updateView(this.data); + } + catch (err) { + if (err === 'CANCELLED') + return; + this.setError(err); + } + finally { + this.markAsLoaded(); + } + }); + } + ngOnDestroy() { + this._subscription.unsubscribe(); + } + updateView(data, opts) { + return __awaiter(this, void 0, void 0, function* () { + this.resetError(); + if (!data) + throw { code: ErrorCodes.DATA_NOT_FOUND_ERROR, message: 'ERROR.DATA_NO_FOUND' }; + this.data = data; + yield this.setValue(data); + if (!opts || opts.emitEvent !== false) { + this.markAsPristine(); + this.markAsUntouched(); + this.updateViewState(data); + } + }); + } + setValue(data) { + return __awaiter(this, void 0, void 0, function* () { + yield this.form.setValue(data); + }); + } + ready() { + return this.form.ready(); + } + updateViewState(data, opts) { + if (this.isNew || this.enabled) { + this.enable(opts); + } + else { + this.disable(opts); + } + const errorMessage = this.enabled && this.usageMode === 'DESK' && isNil(data.controlDate) ? data.qualificationComments : null; + // Skip if default/generic error, because this one is not useful. It can have been set when closing the modal + if (isNotNilOrBlank(errorMessage) && errorMessage !== this.translate.instant('ERROR.INVALID_OR_INCOMPLETE_FILL')) { + // Replace newline by a
tag, then display + this.setError(errorMessage.replace(/(\n|\r|)+/g, '
')); + } + } + close(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.dirty) { + let saveBeforeLeave = yield Alerts.askSaveBeforeLeave(this.alertCtrl, this.translate, event); + // User cancelled + if (isNil(saveBeforeLeave) || event && event.defaultPrevented) + return; + // Ask a second confirmation, if observed individual count > 0 + if (saveBeforeLeave === false && this.isNew && this.data.observedIndividualCount > 0) { + saveBeforeLeave = yield Alerts.askSaveBeforeLeave(this.alertCtrl, this.translate, event); + // User cancelled + if (isNil(saveBeforeLeave) || event && event.defaultPrevented) + return; + } + // Is user confirm: close normally + if (saveBeforeLeave === true) { + yield this.onSubmit(event); + return; + } + } + yield this.modalCtrl.dismiss(); + }); + } + getDataToSave(opts) { + return __awaiter(this, void 0, void 0, function* () { + if (this.loading) + return undefined; // avoid many call + // Force enable form, before use value + if (!this.enabled) + this.enable({ emitEvent: false }); + this.markAsLoading(); + this.resetError(); + try { + try { + // Wait pending async validator + yield AppFormUtils.waitWhilePending(this.form, { + timeout: 2000 // Workaround because of child form never finish FIXME + }); + } + catch (err) { + console.warn('FIXME - Batch group form pending timeout!'); + } + const invalid = !this.valid; + if (invalid) { + let allowInvalid = !opts || opts.allowInvalid !== false; + // DO not allow invalid form, when taxon group and taxon name are missed + const taxonGroup = this.form.form.get('taxonGroup').value; + const taxonName = this.form.form.get('taxonName').value; + if (ReferentialUtils.isEmpty(taxonGroup) && ReferentialUtils.isEmpty(taxonName)) { + this.setError('COMMON.FORM.HAS_ERROR'); + allowInvalid = false; + } + // Invalid not allowed: stop + if (!allowInvalid) { + if (this.debug) + this.form.logFormErrors('[batch-group-modal] '); + this.form.markAllAsTouched(); + return undefined; + } + } + // Save table content + this.data = this.form.value; + // Mark as invalid + if (invalid) { + BatchUtils.markAsInvalid(this.data, this.translate.instant('ERROR.INVALID_OR_INCOMPLETE_FILL')); + } + // Reset control (and old invalid quality flag) + else { + BatchUtils.markAsNotControlled(this.data, { withChildren: true }); + } + return this.data; + } + finally { + this.markAsLoaded(); + } + }); + } + /** + * Validate and close. If on bulk mode is enable, skip validation if form is pristine + * + * @param event + */ + onSubmitIfDirty(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.loading) + return undefined; // avoid many call + if (this.enableBulkMode && !this.dirty) { + yield this.modalCtrl.dismiss(); + } + else { + return this.onSubmit(event); + } + }); + } + onSubmit(event, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (this.loading) + return undefined; // avoid many call + const data = yield this.getDataToSave(Object.assign({ allowInvalid: true }, opts)); + if (!data) + return; + this.markAsLoading(); + yield this.modalCtrl.dismiss(data); + }); + } + delete(event) { + return __awaiter(this, void 0, void 0, function* () { + // Apply deletion, if callback exists + if (this.onDelete) { + const deleted = yield this.onDelete(event, this.data); + if (isNil(deleted) || (event && event.defaultPrevented)) + return; // User cancelled + if (deleted) + yield this.modalCtrl.dismiss(); + } + else { + // Ask caller the modal owner apply deletion + yield this.modalCtrl.dismiss(this.data, 'delete'); + } + }); + } + /** + * Add and reset form + */ + onSubmitAndNext(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.loading) + return undefined; // avoid many call + // DEBUG + //console.debug('[batch-group-modal] Calling onSubmitAndNext()'); + // If new AND pristine BUT valid (e.g. all PMFMs are optional): avoid to validate + if (this.isNew && !this.dirty && this.valid) { + return; // skip + } + const data = yield this.getDataToSave(); + // invalid + if (!data) { + if (this.playSound) + yield this.audio.playBeepError(); + return; + } + this.markAsLoading(); + try { + const newData = yield this.onSaveAndNew(data); + if (!newData) + return; // Failed to save row + yield this.reset(newData); + this.isNew = true; + if (this.playSound) { + setTimeout(() => __awaiter(this, void 0, void 0, function* () { + try { + yield this.audio.playBeepConfirm(); + } + catch (err) { + console.error(err); + } + }), 50); + } + yield this.scrollToTop(); + } + finally { + this.markAsLoaded(); + } + }); + } + reset(data) { + return __awaiter(this, void 0, void 0, function* () { + yield this.updateView(data || new BatchGroup()); + }); + } + onShowSubBatchesButtonClick(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.openSubBatchesModal) + return; // Skip + // Save + const data = yield this.getDataToSave({ allowInvalid: true }); + if (!data) + return; + // Execute the callback + const updatedParent = yield this.openSubBatchesModal(data); + if (!updatedParent) + return; // User cancelled + this.data = updatedParent; + yield this.form.setValue(this.data); + this.form.markAsDirty(); + }); + } + /* -- protected methods -- */ + computeTitle(data) { + return __awaiter(this, void 0, void 0, function* () { + data = data || this.data; + if (this.isNew) { + this.$title.next(yield this.translate.get('TRIP.BATCH.NEW.TITLE').toPromise()); + } + else { + const label = BatchUtils.parentToString(data); + this.$title.next(yield this.translate.get('TRIP.BATCH.EDIT.TITLE', { label }).toPromise()); + } + }); + } + markAllAsTouched() { + this.form.markAllAsTouched(); + } + markAsUntouched() { + this.form.markAsUntouched(); + } + markAsPristine() { + this.form.markAsPristine(); + } + scrollToTop() { + return __awaiter(this, void 0, void 0, function* () { + return this.content.scrollToTop(); + }); + } + markForCheck() { + this.cd.markForCheck(); + } + markAsReady() { + this.form.markAsReady(); + } + markAsLoading() { + this.loading = true; + this.markForCheck(); + } + markAsLoaded() { + this.loading = false; + this.markForCheck(); + } + setError(error) { + const errorMessage = (error === null || error === void 0 ? void 0 : error.message) ? error.message : error; + this.form.error = errorMessage; + } + resetError() { + this.form.error = null; + } +}; +__decorate([ + Input(), + __metadata("design:type", BatchGroup) +], BatchGroupModal.prototype, "data", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchGroupModal.prototype, "isNew", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchGroupModal.prototype, "disabled", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchGroupModal.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchGroupModal.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchGroupModal.prototype, "playSound", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchGroupModal.prototype, "qvPmfm", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchGroupModal.prototype, "pmfms", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], BatchGroupModal.prototype, "childrenPmfms", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchGroupModal.prototype, "acquisitionLevel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchGroupModal.prototype, "programLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchGroupModal.prototype, "showTaxonGroup", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchGroupModal.prototype, "showTaxonName", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchGroupModal.prototype, "showIndividualCount", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchGroupModal.prototype, "showSamplingBatch", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchGroupModal.prototype, "showComment", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchGroupModal.prototype, "allowSubBatches", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchGroupModal.prototype, "showHasSubBatchesButton", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchGroupModal.prototype, "defaultHasSubBatches", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], BatchGroupModal.prototype, "taxonGroupsNoWeight", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchGroupModal.prototype, "availableTaxonGroups", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchGroupModal.prototype, "enableWeightConversion", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], BatchGroupModal.prototype, "maxVisibleButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], BatchGroupModal.prototype, "maxItemCountForButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchGroupModal.prototype, "samplingRatioFormat", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchGroupModal.prototype, "i18nSuffix", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchGroupModal.prototype, "enableBulkMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], BatchGroupModal.prototype, "openSubBatchesModal", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], BatchGroupModal.prototype, "onDelete", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], BatchGroupModal.prototype, "onSaveAndNew", void 0); +__decorate([ + ViewChild('form', { static: true }), + __metadata("design:type", BatchGroupForm) +], BatchGroupModal.prototype, "form", void 0); +__decorate([ + ViewChild(IonContent), + __metadata("design:type", IonContent) +], BatchGroupModal.prototype, "content", void 0); +BatchGroupModal = __decorate([ + Component({ + selector: 'app-batch-group-modal', + templateUrl: 'batch-group.modal.html', + styleUrls: ['batch-group.modal.scss'], + providers: [ + { provide: ContextService, useExisting: TripContextService } + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + AlertController, + ModalController, + PlatformService, + LocalSettingsService, + TranslateService, + AudioProvider, + ChangeDetectorRef]) +], BatchGroupModal); +export { BatchGroupModal }; +//# sourceMappingURL=batch-group.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/group/batch-group.modal.js.map b/out-tsc/app/app/trip/batch/group/batch-group.modal.js.map new file mode 100644 index 000000000..6a0db0194 --- /dev/null +++ b/out-tsc/app/app/trip/batch/group/batch-group.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch-group.modal.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/group/batch-group.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/group/batch-group.model.js b/out-tsc/app/app/trip/batch/group/batch-group.model.js new file mode 100644 index 000000000..b2b8a6ab6 --- /dev/null +++ b/out-tsc/app/app/trip/batch/group/batch-group.model.js @@ -0,0 +1,154 @@ +var BatchGroup_1; +import { __decorate, __metadata } from "tslib"; +import { Batch } from '../common/batch.model'; +import { AcquisitionLevelCodes, PmfmIds, QualitativeValueIds } from '@app/referential/services/model/model.enum'; +import { EntityClass, EntityUtils, isNotEmptyArray, isNotNil, ReferentialRef } from '@sumaris-net/ngx-components'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { PmfmValueUtils } from '@app/referential/services/model/pmfm-value.model'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +let BatchGroup = BatchGroup_1 = class BatchGroup extends Batch { + constructor() { + super(BatchGroup_1.TYPENAME); + } + static fromBatch(batch) { + const target = new BatchGroup_1(); + Object.assign(target, batch); + // Compute observed indiv. count + target.observedIndividualCount = BatchUtils.sumObservedIndividualCount(batch.children); + return target; + } + asObject(opts) { + const target = super.asObject(opts); + if (opts && opts.minify === true) { + delete target.observedIndividualCount; + } + return target; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.observedIndividualCount = source.observedIndividualCount; + } +}; +BatchGroup = BatchGroup_1 = __decorate([ + EntityClass({ typename: 'BatchGroupVO', fromObjectReuseStrategy: 'clone' }), + __metadata("design:paramtypes", []) +], BatchGroup); +export { BatchGroup }; +export class BatchGroupUtils { + static fromBatchTree(catchBatch) { + // Retrieve batch group (make sure label start with acquisition level) + // Then convert into batch group entities + return (catchBatch.children || []) + .filter(s => s.label && s.label.startsWith(AcquisitionLevelCodes.SORTING_BATCH + '#')) + // Convert to Batch Group + .map(BatchGroup.fromBatch); + } + /** + * Count only individual count with measure + * + * @param batch + */ + static computeObservedIndividualCount(batch) { + // Compute observed indiv. count + batch.observedIndividualCount = BatchUtils.sumObservedIndividualCount(batch.children); + } + /** + * Check equality of BatchGroup + * + * @param batchGroup1 + * @param batchGroup2 + */ + static equals(batchGroup1, batchGroup2) { + return EntityUtils.equals(batchGroup1, batchGroup2, 'rankOrder') + && EntityUtils.equals(batchGroup1, batchGroup2, 'parentId'); + } + /** + * Map PMFM, for batch group's children. + * Depending of the qvId, some pmfms can be hidden (e.g. DRESSING and PRESERVATION are hidden, if qvId = DISCARD) + * + * @param pmfms + * @param opts + */ + static mapChildrenPmfms(pmfms, opts) { + const isDiscard = opts.isDiscard + || (opts.qvId === QualitativeValueIds.DISCARD_OR_LANDING.DISCARD); + const childrenPmfms = (pmfms || []) + // Remove qvPmfm (will be add first) + .filter(pmfm => { var _a; return pmfm.id !== ((_a = opts.qvPmfm) === null || _a === void 0 ? void 0 : _a.id); }) + // Allow DISCARD_REASON only on DISCARD + .filter(pmfm => pmfm.id !== PmfmIds.DISCARD_REASON || isDiscard) + .map(pmfm => { + // If DISCARD + if (isDiscard) { + // Hide pmfm DRESSING and PRESERVATION, and force default values + if (PmfmUtils.isDressing(pmfm)) { + pmfm = pmfm.clone(); + pmfm.hidden = true; + pmfm.defaultValue = ReferentialRef.fromObject({ id: QualitativeValueIds.DRESSING.WHOLE, label: 'WHL' }); + } + else if (pmfm.id === PmfmIds.PRESERVATION) { + pmfm = pmfm.clone(); + pmfm.hidden = true; + pmfm.defaultValue = ReferentialRef.fromObject({ id: QualitativeValueIds.PRESERVATION.FRESH, label: 'FRE' }); + } + else if (pmfm.id === PmfmIds.TRAWL_SIZE_CAT) { + pmfm = pmfm.clone(); + pmfm.hidden = true; + pmfm.defaultValue = ReferentialRef.fromObject({ id: QualitativeValueIds.SIZE_UNLI_CAT.NONE, label: 'NA' }); + } + // Hide computed weight + else if (pmfm.isComputed && PmfmUtils.isWeight(pmfm)) { + pmfm = pmfm.clone(); + pmfm.hidden = true; + } + } + return pmfm; + }); + if (opts.qvPmfm && isNotNil(opts === null || opts === void 0 ? void 0 : opts.qvId)) { + const qvPmfm = opts.qvPmfm.clone(); + qvPmfm.hidden = true; + qvPmfm.required = true; + qvPmfm.defaultValue = opts.qvPmfm.qualitativeValues.find(qv => qv.id === opts.qvId); + return [qvPmfm, ...childrenPmfms]; + } + else { + return childrenPmfms; + } + } + /** + * Find the parent batch, of a subBatches, by the parent group + * + * @param batchGroup + * @param qvValue + * @param qvPmfm + */ + static findChildByQvValue(batchGroup, qvValue, qvPmfm) { + const qvPmfmId = qvPmfm.id; + const value = PmfmValueUtils.toModelValue(qvValue, qvPmfm); + return (batchGroup.children || []).find(parent => + // WARN: use '==' and NOT '===', because measurementValues can use string, for values + // eslint-disable-next-line eqeqeq + value == PmfmValueUtils.toModelValue(parent.measurementValues[qvPmfmId], qvPmfm)); + } + static getQvPmfm(pmfms, opts) { + opts = Object.assign({ preferredPmfmIds: [PmfmIds.DISCARD_OR_LANDING], onlyFirst: true }, opts); + let qvPmfm = pmfms && ( + // Use the first preferred pmfm if present AND visible (e.g. DISCARD/LANDING) + (isNotEmptyArray(opts.preferredPmfmIds) && pmfms.find(p => opts.preferredPmfmIds.includes(p.id) && !p.hidden)) + // Or get the first QV pmfm + || PmfmUtils.getFirstQualitativePmfm(pmfms, { + excludeHidden: true, + minQvCount: 2, + maxQvCount: 3, + //excludePmfmIds: [PmfmIds.DRESSING, PmfmIds.TRAWL_SIZE_CAT], + filterFn: (p, index) => !opts.onlyFirst || index === 0 // Should be the first visible (e.g. no number before) + })); + // If landing/discard: 'Landing' is always before 'Discard (see issue #122) + if ((qvPmfm === null || qvPmfm === void 0 ? void 0 : qvPmfm.id) === PmfmIds.DISCARD_OR_LANDING) { + qvPmfm = qvPmfm.clone(); // copy, to keep original array + qvPmfm.qualitativeValues.sort((qv1, qv2) => qv1.label === 'LAN' ? -1 : 1); + } + return qvPmfm; + } +} +//# sourceMappingURL=batch-group.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/group/batch-group.model.js.map b/out-tsc/app/app/trip/batch/group/batch-group.model.js.map new file mode 100644 index 000000000..11466bd6d --- /dev/null +++ b/out-tsc/app/app/trip/batch/group/batch-group.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch-group.model.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/group/batch-group.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/group/batch-group.validator.js b/out-tsc/app/app/trip/batch/group/batch-group.validator.js new file mode 100644 index 000000000..5e2448b0e --- /dev/null +++ b/out-tsc/app/app/trip/batch/group/batch-group.validator.js @@ -0,0 +1,151 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { BatchValidators, BatchValidatorService } from '../common/batch.validator'; +import { isNotEmptyArray, isNotNil, LocalSettingsService, SharedValidators, toBoolean } from '@sumaris-net/ngx-components'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { debounceTime } from 'rxjs/operators'; +import { TranslateService } from '@ngx-translate/core'; +let BatchGroupValidatorService = class BatchGroupValidatorService extends BatchValidatorService { + constructor(formBuilder, translate, settings, measurementsValidatorService) { + super(formBuilder, translate, settings, measurementsValidatorService); + } + getFormGroupConfig(data, opts) { + const config = super.getFormGroupConfig(data, opts); + if (opts === null || opts === void 0 ? void 0 : opts.root) { + config['observedIndividualCount'] = [data && data.observedIndividualCount, SharedValidators.integer]; + } + return config; + } + enableSamplingRatioAndWeight(form, opts) { + if (!form) { + console.warn('Argument \'form\' required'); + return null; + } + const computeFn = BatchValidators.samplingRatioAndWeight(opts); + return form.valueChanges + .pipe(debounceTime((opts === null || opts === void 0 ? void 0 : opts.debounceTime) || 0)) + .subscribe(value => { + const errors = computeFn(form); + if (errors) + form.setErrors(errors); + if (opts === null || opts === void 0 ? void 0 : opts.markForCheck) + opts.markForCheck(); + }); + } + updateFormGroup(form, opts) { + opts = this.fillDefaultOptions(opts); + if (opts.qvPmfm) { + const childrenArray = form.get('children'); + childrenArray.controls.forEach(child => this.updateFormGroup(child, opts.childrenOptions)); + } + else { + super.updateFormGroup(form, opts); + } + } + /* -- protected method -- */ + fillDefaultOptions(opts) { + var _a, _b; + opts = opts || {}; + opts.root = toBoolean(opts.root, true); + if (opts.root) { + opts.isOnFieldMode = isNotNil(opts.isOnFieldMode) ? opts.isOnFieldMode : (((_a = this.settings) === null || _a === void 0 ? void 0 : _a.isOnFieldMode()) || false); + const weightRequired = opts.isOnFieldMode === false && (opts.weightRequired !== false); + const individualCountRequired = opts.isOnFieldMode === false && (opts.individualCountRequired === true); + const withChildrenWeight = opts.withChildrenWeight !== false; + if (opts.qvPmfm) { + // Disabled weight/individual required validator, on the root level + opts.individualCountRequired = false; + opts.weightRequired = false; + // Disable children (sum) weight here: should be visible in the sample batch, is any + opts.withChildrenWeight = false; + // Configure children (on child by QV) + opts.withChildren = true; + opts.childrenCount = ((_b = opts.qvPmfm.qualitativeValues) === null || _b === void 0 ? void 0 : _b.length) || 1; + opts.childrenOptions = { + root: false, + withWeight: true, + weightRequired, + individualCountRequired, + pmfms: [opts.qvPmfm, ...(opts.childrenPmfms || [])], + withMeasurements: true + }; + opts.childrenOptions.withChildren = opts.enableSamplingBatch; + if (opts.childrenOptions.withChildren) { + opts.childrenOptions.childrenCount = 1; // One sampling batch + opts.childrenOptions.childrenOptions = { + root: false, + withWeight: true, + withMeasurements: false, + pmfms: null, + withChildrenWeight, + // Need for v1 compatibility - sampling batch may not be created + labelRequired: false, + rankOrderRequired: false + }; + } + } + else { + opts.withWeight = true; + opts.withChildren = opts.enableSamplingBatch; + opts.weightRequired = weightRequired; + opts.individualCountRequired = individualCountRequired; + if (opts.withChildren) { + opts.childrenCount = 1; // One sampling batch + opts.childrenOptions = { + root: false, + withWeight: true, + withMeasurements: false, + pmfms: null, + withChildrenWeight, + // Need for v1 compatibility - sampling batch may not be created + labelRequired: false, + rankOrderRequired: false + }; + } + } + opts.withMeasurements = toBoolean(opts.withMeasurements, isNotEmptyArray(opts.pmfms)); + opts.withMeasurementTypename = toBoolean(opts.withMeasurementTypename, opts.withMeasurements); + } + return opts; + } +}; +BatchGroupValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + LocalSettingsService, + MeasurementsValidatorService]) +], BatchGroupValidatorService); +export { BatchGroupValidatorService }; +export class BatchGroupValidators { + /** + * Same as BatchValidators.computeSamplingWeight() but for a batch group form + * + * @param opts + */ + static samplingRatioAndWeight(opts) { + if (!(opts === null || opts === void 0 ? void 0 : opts.qvPmfm)) { + return (control) => BatchValidators.computeSamplingRatioAndWeight(control, Object.assign(Object.assign({}, opts), { emitEvent: false, onlySelf: false })); + } + return Validators.compose((opts.qvPmfm.qualitativeValues || []) + .map((qv, qvIndex) => { + const qvFormPath = `children.${qvIndex}`; + return (control) => { + const form = control; + const individualCount = form.get(qvFormPath + '.individualCount'); + const samplingIndividualCount = form.get(qvFormPath + '.children.0.individualCount'); + if (!samplingIndividualCount) + return; // Nothing to compute (no sampling batch) + // Enable controls + if (individualCount.disabled) + individualCount.enable(); + if (samplingIndividualCount.disabled) + samplingIndividualCount.enable(); + // Start computation + return BatchValidators.computeSamplingRatioAndWeight(control.get(qvFormPath), Object.assign(Object.assign({}, opts), { emitEvent: false, onlySelf: false })); + }; + })); + } +} +//# sourceMappingURL=batch-group.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/group/batch-group.validator.js.map b/out-tsc/app/app/trip/batch/group/batch-group.validator.js.map new file mode 100644 index 000000000..804ae3746 --- /dev/null +++ b/out-tsc/app/app/trip/batch/group/batch-group.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch-group.validator.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/group/batch-group.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/group/batch-groups.table.js b/out-tsc/app/app/trip/batch/group/batch-groups.table.js new file mode 100644 index 000000000..4ab7c3157 --- /dev/null +++ b/out-tsc/app/app/trip/batch/group/batch-groups.table.js @@ -0,0 +1,1383 @@ +var BatchGroupsTable_1; +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, EventEmitter, Injector, Input, Output } from '@angular/core'; +import { Validators } from '@angular/forms'; +import { BATCH_RESERVED_END_COLUMNS, BATCH_RESERVED_START_COLUMNS, } from '../common/batches.table.class'; +import { changeCaseToUnderscore, firstArrayValue, InMemoryEntitiesService, isEmptyArray, isNil, isNotEmptyArray, isNotNil, isNotNilOrNaN, LocalSettingsService, ReferentialUtils, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, SETTINGS_DISPLAY_COLUMNS, TableSelectColumnsComponent, toBoolean, } from '@sumaris-net/ngx-components'; +import { AcquisitionLevelCodes, MethodIds, PmfmIds, QualityFlagIds, UnitLabel } from '@app/referential/services/model/model.enum'; +import { MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { Batch } from '../common/batch.model'; +import { BatchGroupModal } from './batch-group.modal'; +import { BatchGroup, BatchGroupUtils } from './batch-group.model'; +import { debounceTime, Subject, Subscription } from 'rxjs'; +import { filter, map, takeUntil, tap } from 'rxjs/operators'; +import { SubBatchesModal } from '../sub/sub-batches.modal'; +import { TaxonGroupRef } from '@app/referential/services/model/taxon-group.model'; +import { BatchGroupValidatorService } from './batch-group.validator'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { TaxonNameRef } from '@app/referential/services/model/taxon-name.model'; +import { TripContextService } from '@app/trip/trip-context.service'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +import { PmfmValueUtils } from '@app/referential/services/model/pmfm-value.model'; +import { PmfmNamePipe } from '@app/referential/pipes/pmfms.pipe'; +import { BatchFilter } from '@app/trip/batch/common/batch.filter'; +import { AbstractBatchesTable } from '@app/trip/batch/common/batches.table.class'; +import { hasFlag } from '@app/shared/flags.utils'; +import { environment } from '@environments/environment'; +import { RxStateProperty } from '@app/shared/state/state.decorator'; +const DEFAULT_USER_COLUMNS = ['weight', 'individualCount']; +/** + * Compose many computed functions to one function.
+ * return true (=computed) when one function return true (= OR operand between functions). + * Nil value are ignored + * + * @param values + */ +export function composeBatchComputed(values) { + // Remove nil value + values = values === null || values === void 0 ? void 0 : values.filter(isNotNil); + if (isEmptyArray(values)) + return false; // Empty + // Only one value: use it + if (values.length === 1) + return values[0]; + // Convert boolean values to functions + const fns = values + .map(value => { + if (typeof value !== 'function') + return () => value; + return value; // already a function + }); + // Compose functions: return true (=computed) when one function return true (= OR operand between functions) + return (batch, parent, samplingRatioFormat) => fns.some(fn => fn(batch, parent, samplingRatioFormat)); +} +export const BatchGroupColumnFlags = Object.freeze({ + IS_WEIGHT: 0x0000001, + IS_INDIVIDUAL_COUNT: 0x0000010, + IS_SAMPLING: 0x0000100, + IS_SAMPLING_RATIO: 0x0001000, + IS_ALWAYS_COMPUTED: 0x0010000, + IS_TOTAL: 0x0100000, + IS_LANDING: 0x1000000 +}); +let BatchGroupsTable = BatchGroupsTable_1 = class BatchGroupsTable extends AbstractBatchesTable { + constructor(injector, validatorService, context, pmfmNamePipe) { + super(injector, BatchGroup, BatchFilter, new InMemoryEntitiesService(BatchGroup, BatchFilter, { + onLoad: (data) => this.onLoad(data), + onSave: (data) => this.onSave(data), + equals: BatchGroup.equals, + sortByReplacement: { + id: 'rankOrder', + }, + }), + // Force no validator (readonly mode, if mobile) + injector.get(LocalSettingsService).mobile ? null : validatorService, { + // Need to set additional validator here + // WARN: we cannot use onStartEditingRow here, because it is called AFTER row.validator.patchValue() + // e.g. When we add some validator (see operation page), so new row should always be INVALID with those additional validators + onPrepareRowForm: (form) => this.onPrepareRowForm(form), + }); + this.context = context; + this.pmfmNamePipe = pmfmNamePipe; + this._showWeightColumns = true; + this.showSamplingBatchColumns$ = this._state.select('showSamplingBatchColumns'); + this.showAutoFillButton$ = this._state.select('showAutoFillButton'); + this.showError = true; + this.allowSubBatches = true; + this.defaultHasSubBatches = false; + this.taxonGroupsNoWeight = []; + this.taxonGroupsNoLanding = []; + this.onSubBatchesChanges = new EventEmitter(); + // Set default values + this.confirmBeforeDelete = this.mobile; + this.i18nColumnPrefix = 'TRIP.BATCH.TABLE.'; + this.i18nPmfmPrefix = 'TRIP.BATCH.PMFM.'; + this.keepEditedRowOnSave = !this.mobile; + this.saveBeforeDelete = true; + this.saveBeforeFilter = true; + this.saveBeforeSort = true; + this.errorTranslatorOptions = { separator: '\n', controlPathTranslator: this }; + this.showCommentsColumn = !this.mobile; // Was set to 'false' in batches-table + // this.acquisitionLevel = AcquisitionLevelCodes.SORTING_BATCH; // Already set in batches-table + // -- For DEV only + //this.debug = !environment.production; + this.logPrefix = '[batch-groups-table] '; + } + disable(opts) { + super.disable(opts); + if (this.weightMethodForm) + this.weightMethodForm.disable(opts); + } + enable(opts) { + super.enable(opts); + if (this.weightMethodForm) + this.weightMethodForm.enable(opts); + } + markAsPristine(opts) { + super.markAsPristine(opts); + if (this.weightMethodForm) + this.weightMethodForm.markAsPristine(opts); + } + markAsTouched(opts) { + super.markAsTouched(opts); + if (this.weightMethodForm) + this.weightMethodForm.markAsTouched(opts); + } + markAllAsTouched(opts) { + super.markAllAsTouched(opts); + if (this.weightMethodForm) + this.weightMethodForm.markAllAsTouched(); + } + markAsUntouched(opts) { + super.markAsUntouched(opts); + if (this.weightMethodForm) + this.weightMethodForm.markAsUntouched(opts); + } + get dirty() { + return this.dirtySubject.value || (this.weightMethodForm && this.weightMethodForm.dirty); + } + set showWeightColumns(value) { + if (this._showWeightColumns !== value) { + this._showWeightColumns = value; + // updateColumns only if pmfms are ready + if (!this.loading && this._initialPmfms) { + this.computeDynamicColumns(this.qvPmfm, { cache: false /* no cache, to force computed */ }); + this.updateColumns(); + } + } + } + get showWeightColumns() { + return this._showWeightColumns; + } + setShowSpeciesPmfmColumn(pmfmId, show, opts = { emitEvent: true }) { + const pmfmIndex = (this._speciesPmfms || []).findIndex((p) => p.id === pmfmId); + if (pmfmIndex !== -1) { + this._speciesPmfms[pmfmIndex] = this._speciesPmfms[pmfmIndex].clone(); + this._speciesPmfms[pmfmIndex].hidden = !show; + } + this.setShowColumn(pmfmId.toString(), show); + } + ngOnInit() { + this.inlineEdition = this.validatorService && !this.mobile; + this.allowRowDetail = !this.inlineEdition; + this.showIndividualCountColumns = toBoolean(this.showIndividualCountColumns, !this.mobile); + this.showSamplingBatchColumns = toBoolean(this.showSamplingBatchColumns, true); + // in DEBUG only: force validator = null + //if (this.debug && this.mobile) this.setValidatorService(null); + super.ngOnInit(); + // Configure sortBy replacement + this.memoryDataService.addSortByReplacement('taxonGroup', `taxonGroup.${firstArrayValue(this.autocompleteFields.taxonGroup.attributes)}`); + this.memoryDataService.addSortByReplacement('taxonName', `taxonName.${firstArrayValue(this.autocompleteFields.taxonName.attributes)}`); + // Listen showSamplingBatchColumns + this._state.hold(this.showSamplingBatchColumns$, (value) => __awaiter(this, void 0, void 0, function* () { + if (this.validatorService) { + this.configureValidator(this.validatorService.measurementsOptions); + } + this.setModalOption('showSamplingBatch', value); + // updateColumns only if pmfms are ready + if (this._initialPmfms) { + if (this.loading) + yield this.waitIdle({ timeout: 500 }); + this.computeDynamicColumns(this.qvPmfm, { cache: false /* no cache, to force computed */ }); + this.updateColumns(); + } + })); + } + ngOnDestroy() { + super.ngOnDestroy(); + } + configureValidator(opts) { + // make sure to confirm editing row, before to change validator + this.confirmEditCreate(); + this.validatorService.measurementsOptions = null; // disable + this.validatorService.delegateOptions = { + qvPmfm: this.qvPmfm, + withMeasurements: !this.qvPmfm && isNotEmptyArray(this._speciesPmfms), + pmfms: this._speciesPmfms, + childrenPmfms: this._childrenPmfms, + enableSamplingBatch: this.showSamplingBatchColumns, + }; + } + translateControlPath(controlPath) { + var _a; + if (controlPath.startsWith('measurementValues.')) { + const parts = controlPath.split('.'); + const pmfmId = parseInt(parts[parts.length - 1]); + const pmfm = (this._speciesPmfms || []).find((p) => p.id === pmfmId); + if (pmfm) + return PmfmUtils.getPmfmName(pmfm); + } + else if (controlPath.includes('.measurementValues.')) { + const parts = controlPath.split('.'); + const pmfmId = parseInt(parts[parts.length - 1]); + const pmfm = [...this._childrenPmfms, this.qvPmfm].find((p) => (p === null || p === void 0 ? void 0 : p.id) === pmfmId); + if (pmfm) + return PmfmUtils.getPmfmName(pmfm); + } + else if (controlPath.startsWith('children.')) { + const parts = controlPath.split('.'); + let prefix = ''; + if (this.qvPmfm) { + const qvIndex = parseInt(parts[1]); + prefix = (_a = this.qvPmfm.qualitativeValues[qvIndex]) === null || _a === void 0 ? void 0 : _a.name; + controlPath = parts.slice(2).join('.'); + } + const col = BatchGroupsTable_1.BASE_DYNAMIC_COLUMNS.find((col) => col.path === controlPath); + prefix = prefix.length ? `${prefix} > ` : prefix; + if (col) + return `${prefix} > ${this.translate.instant(col.label)}`; + // Example: error on the sampling form group + if (controlPath === 'children.0') { + return prefix + this.translate.instant('TRIP.BATCH.EDIT.SAMPLING_BATCH'); + } + } + return super.translateControlPath(controlPath); + } + setModalOption(key, value) { + this.modalOptions = this.modalOptions || {}; + this.modalOptions[key] = value; + } + setSubBatchesModalOption(key, value) { + this.subBatchesModalOptions = this.subBatchesModalOptions || {}; + this.subBatchesModalOptions[key] = value; + } + onLoad(data) { + if (this.debug) + console.debug('[batch-group-table] Preparing data to be loaded as table rows...'); + const weightMethodValues = this.qvPmfm + ? this.qvPmfm.qualitativeValues.reduce((res, qv, qvIndex) => { + res[qvIndex] = false; + return res; + }, {}) + : { 0: false }; + // Transform entities into object array + data = data.map((batch) => { + if (isNotEmptyArray(batch.children) && this.qvPmfm) { + // For each group (one by qualitative value) + this.qvPmfm.qualitativeValues.forEach((qv, qvIndex) => { + const childLabel = `${batch.label}.${qv.label}`; + // tslint:disable-next-line:triple-equals + const child = batch.children.find((c) => c.label === childLabel || c.measurementValues[this.qvPmfm.id] == qv.id); + if (child) { + // Replace measurement values inside a new map, based on fake pmfms + this.normalizeChildToRow(child, qvIndex); + // Remember method used for the weight (estimated or not) + if (!weightMethodValues[qvIndex]) { + if (child.weight && child.weight.estimated) { + weightMethodValues[qvIndex] = true; + } + else if (child.children && child.children.length === 1) { + const samplingChild = child.children[0]; + weightMethodValues[qvIndex] = samplingChild.weight && samplingChild.weight.estimated; + } + } + // Should have sub batches, when sampling batch exists + const hasSubBatches = this.showSamplingBatchColumns || isNotNil(BatchUtils.getSamplingChild(child)); + // Make sure to create a sampling batch, if has sub bacthes + if (hasSubBatches) { + BatchUtils.getOrCreateSamplingChild(child); + } + } + }); + } + else if (!this.qvPmfm && batch) { + // Replace measurement values inside a new map, based on fake pmfms + this.normalizeChildToRow(batch, -1); + // Remember method used for the weight (estimated or not) + if (!weightMethodValues[0]) { + if (batch.weight && batch.weight.estimated) { + weightMethodValues[0] = true; + } + else if (batch.children && batch.children.length === 1) { + const samplingChild = batch.children[0]; + weightMethodValues[0] = samplingChild.weight && samplingChild.weight.estimated; + } + } + // Should have sub batches, when sampling batch exists + const hasSubBatches = this.showSamplingBatchColumns || isNotNil(BatchUtils.getSamplingChild(batch)); + // Make sure to create a sampling batch, if has sub bacthes + if (hasSubBatches) { + BatchUtils.getOrCreateSamplingChild(batch); + } + } + MeasurementValuesUtils.normalizeEntityToForm(batch, this._speciesPmfms, null, { keepOtherExistingPmfms: true }); + return batch; + }); + // Set weight is estimated ? + if (this.weightMethodForm) { + console.debug('[batch-group-table] Set weight form values (is estimated ?)'); + this.weightMethodForm.patchValue(weightMethodValues); + } + return data; + } + onSave(data) { + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.debug('[batch-group-table] Preparing data to be saved...'); + data = data.map((entity) => { + this.prepareEntityToSave(entity); + return entity; + }); + return data; + }); + } + isComputed(col, row) { + if (typeof col.computed !== 'function') + return col.computed === true; + // With qv pmfm + if (col.qvIndex >= 0) { + const parent = row.currentData; + const batch = parent.children[col.qvIndex]; + return col.computed(batch, parent, this.samplingRatioFormat); + } + return col.computed(row.currentData, null, this.samplingRatioFormat); + } + /** + * Use in ngFor, for trackBy + * + * @param index + * @param column + */ + trackColumnFn(index, column) { + return column.rankOrder; + } + setFilter(filterData, opts) { + const filteredSpeciesPmfmIds = filterData && Object.keys(filterData.measurementValues); + if (isNotEmptyArray(filteredSpeciesPmfmIds)) { + let changed = false; + filteredSpeciesPmfmIds.forEach((pmfmId) => { + const shouldExcludeColumn = PmfmValueUtils.isNotEmpty(filterData.measurementValues[pmfmId]); + if (shouldExcludeColumn !== this.excludesColumns.includes(pmfmId)) { + this.setShowSpeciesPmfmColumn(+pmfmId, false, { emitEvent: false }); + changed = true; + } + }); + if (changed) + this.updateColumns(); + } + super.setFilter(filterData, opts); + } + updateView(res, opts) { + const _super = Object.create(null, { + updateView: { get: () => super.updateView } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.updateView.call(this, res, opts); + // Add hidden data to row count (e.g. when a filter has been applied) + this.totalRowCount = this.totalRowCount + this.memoryDataService.hiddenCount; + }); + } + /* -- protected methods -- */ + normalizeEntityToRow(batch, row) { + // When batch has the QV value + if (this.qvPmfm) { + if (isNotEmptyArray(batch.children)) { + // For each group (one by qualitative value) + this.qvPmfm.qualitativeValues.forEach((qv, qvIndex) => { + const childLabel = `${batch.label}.${qv.label}`; + // tslint:disable-next-line:triple-equals + const child = batch.children.find((c) => c.label === childLabel || c.measurementValues[this.qvPmfm.id] == qv.id); + if (child) { + this.normalizeChildToRow(child, qvIndex); + } + // DEBUG + // else console.warn('[batch-group-table] Missing child batch having QV=' + qv.label, batch); + }); + } + } + // Inherited method + super.normalizeEntityToRow(batch, row, { keepOtherExistingPmfms: true }); + } + normalizeChildToRow(data, qvIndex) { + // DEBUG + //if (this.debug) console.debug('[batch-group-table] Normalize QV child batch', data); + var _a, _b; + if (isNil(qvIndex)) { + const qvId = this.qvPmfm && data.measurementValues[this.qvPmfm.id]; + qvIndex = isNotNil(qvId) && this.qvPmfm.qualitativeValues.findIndex((qv) => qv.id === +qvId); + if (qvIndex === -1) + throw Error('Invalid batch: no QV value'); + } + // Column: total weight + data.weight = BatchUtils.getWeight(data, this.weightPmfms); + // DEBUG + if (this.debug && data.qualityFlagId === QualityFlagIds.BAD) { + console.warn('[batch-group-table] Invalid batch (individual count or weight)', data); + } + // Sampling batch + const samplingChild = BatchUtils.getSamplingChild(data); + if (samplingChild) { + // Column: sampling weight + samplingChild.weight = BatchUtils.getWeight(samplingChild, this.weightPmfms); + // Transform sampling ratio + if (this.inlineEdition && isNotNil(samplingChild.samplingRatio)) { + samplingChild.samplingRatioComputed = BatchUtils.isSamplingRatioComputed(samplingChild.samplingRatioText, this.samplingRatioFormat); + } + } + const qvId = ((_b = (_a = this.qvPmfm) === null || _a === void 0 ? void 0 : _a.qualitativeValues[qvIndex]) === null || _b === void 0 ? void 0 : _b.id) || -1; + const childrenPmfms = qvId !== -1 ? BatchGroupUtils.mapChildrenPmfms(this._childrenPmfms, { qvPmfm: this.qvPmfm, qvId }) : this._speciesPmfms; + data.measurementValues = MeasurementValuesUtils.normalizeValuesToForm(data.measurementValues, childrenPmfms, { keepSourceObject: true }); + } + prepareEntityToSave(batch) { + if (this.qvPmfm) { + batch.children = (this.qvPmfm.qualitativeValues || []).map((qv, qvIndex) => this.prepareChildToSave(batch, qv, qvIndex)); + batch.measurementValues = MeasurementValuesUtils.normalizeValuesToModel(batch.measurementValues, this._speciesPmfms); + } + else { + batch.measurementValues = MeasurementValuesUtils.normalizeValuesToModel(batch.measurementValues, this._speciesPmfms); + this.prepareChildToSave(batch); + } + } + prepareChildToSave(source, qv, qvIndex) { + var _a, _b, _c, _d; + qvIndex = isNotNil(qvIndex) ? qvIndex : -1; + const isEstimatedWeight = ((_a = this.weightMethodForm) === null || _a === void 0 ? void 0 : _a.controls[qvIndex].value) || false; + const childLabel = qv ? `${source.label}.${qv.label}` : source.label; + // If qv, add sub level at sorting batch for each qv value + // If no qv, keep measurements in sorting batch level + const batch = !qv ? source : (source.children || []).find((b) => b.label === childLabel) || new Batch(); + // If qv compute rank order with qv index, else keep existing rank order + batch.rankOrder = qvIndex >= 0 ? qvIndex + 1 : batch.rankOrder; + batch.label = childLabel; + if (qv) { + batch.measurementValues[this.qvPmfm.id.toString()] = qv; + } + // Clean previous weights + this.weightPmfms.forEach((p) => (batch.measurementValues[p.id.toString()] = undefined)); + // Set weight + if (isNotNilOrNaN((_b = batch.weight) === null || _b === void 0 ? void 0 : _b.value)) { + batch.weight.estimated = isEstimatedWeight; + const weightPmfm = BatchUtils.getWeightPmfm(batch.weight, this.weightPmfms, this.weightPmfmsByMethod); + batch.measurementValues[weightPmfm.id.toString()] = (_c = batch.weight.value) === null || _c === void 0 ? void 0 : _c.toString(); + } + // Convert measurementValues to model + batch.measurementValues = MeasurementValuesUtils.normalizeValuesToModel(batch.measurementValues, this._childrenPmfms, + // Keep weight values + { keepSourceObject: true }); + // If sampling + if (isNotEmptyArray(batch.children)) { + const samplingBatchLabel = childLabel + Batch.SAMPLING_BATCH_SUFFIX; + const samplingBatch = (batch.children || []).find((b) => b.label === samplingBatchLabel) || new Batch(); + samplingBatch.rankOrder = 1; + samplingBatch.label = samplingBatchLabel; + // Clean previous weights + this.weightPmfms.forEach((p) => (samplingBatch.measurementValues[p.id.toString()] = undefined)); + // Set weight + if (isNotNilOrNaN((_d = samplingBatch.weight) === null || _d === void 0 ? void 0 : _d.value)) { + samplingBatch.weight.estimated = isEstimatedWeight; + const samplingWeightPmfm = BatchUtils.getWeightPmfm(samplingBatch.weight, this.weightPmfms, this.weightPmfmsByMethod); + samplingBatch.measurementValues[samplingWeightPmfm.id.toString()] = samplingBatch.weight.value; + } + // Convert sampling ratio + if (this.inlineEdition && isNotNil(samplingBatch.samplingRatio)) { + const detectedFormat = BatchUtils.getSamplingRatioFormat(samplingBatch.samplingRatioText, this.samplingRatioFormat); + if (detectedFormat !== this.samplingRatioFormat) { + // TODO adapt text if format change ? + console.warn('[batch-group-table] TODO: adapt samplingRatioText to new format=' + this.samplingRatioFormat); + } + } + batch.children = [samplingBatch]; + } + // Remove children + else { + batch.children = []; + } + return batch; + } + onSubBatchesClick(event, row, opts) { + return __awaiter(this, void 0, void 0, function* () { + event === null || event === void 0 ? void 0 : event.preventDefault(); + event === null || event === void 0 ? void 0 : event.stopPropagation(); // Avoid to send event to clicRow() + // Loading spinner + this.markAsLoading(); + try { + const selectedParent = this.toEntity(row); + const subBatches = yield this.openSubBatchesModal(selectedParent, opts); + if (isNil(subBatches)) + return; // User cancelled + // Update the batch group, from subbatches (e.g. observed individual count) + this.updateBatchGroupRow(row, subBatches); + } + finally { + // Hide loading + if (!opts || opts.emitLoaded !== false) { + this.markAsLoaded(); + } + this.markForCheck(); + } + }); + } + /* -- protected functions -- */ + // Override parent function + mapPmfms(pmfms) { + if (!pmfms) + return pmfms; // Skip (no pmfms) + super.mapPmfms(pmfms); // Should find the qvPmfm + // Find the first qualitative PMFM + this.qvPmfm = BatchGroupUtils.getQvPmfm(pmfms); + // Compute species pmfms (at species batch level) + if (this.qvPmfm) { + const qvPmfmIndex = this._initialPmfms.findIndex((pmfm) => pmfm.id === this.qvPmfm.id); + this._speciesPmfms = this._initialPmfms.filter((pmfm, index) => index < qvPmfmIndex); + this._childrenPmfms = [this.qvPmfm, ...this._initialPmfms.filter((pmfm, index) => index > qvPmfmIndex && !PmfmUtils.isWeight(pmfm))]; + } + else { + this._speciesPmfms = this._initialPmfms.filter((pmfm) => !PmfmUtils.isWeight(pmfm)); + this._childrenPmfms = []; + } + // Init dynamic columns + this.computeDynamicColumns(this.qvPmfm, { cache: false }); + //Additional pmfms managed by validator on children batch + return this._speciesPmfms; + } + computeDynamicColumns(qvPmfm, opts = { cache: true }) { + // Use cache + if (this.dynamicColumns) { + if (opts.cache !== false) { + console.debug(this.logPrefix + 'Reusing cached dynamic columns', this.dynamicColumns); + return this.dynamicColumns; + } + else { + console.debug(this.logPrefix + 'Updating dynamic columns'); + } + } + // DEBUG + if (this.debug) { + // Log QV pmfm + if (this.qvPmfm) + console.debug('[batch-group-table] Using a qualitative PMFM, to group columns: ' + qvPmfm.label); + // Make sure default weight pmfm exists + if (isNil(this.defaultWeightPmfm)) { + //throw new Error(`[batch-group-table] Unable to construct the table. No weight PMFM found in strategy - acquisition level ${this.acquisitionLevel})`); + console.warn(`[batch-group-table] Unable to construct the table. No weight PMFM found in strategy - acquisition level ${this.acquisitionLevel})`); + } + // Check rankOrder is correct + else if (PmfmUtils.isDenormalizedPmfm(this.defaultWeightPmfm) && + qvPmfm && + PmfmUtils.isDenormalizedPmfm(qvPmfm) && + qvPmfm.rankOrder > this.defaultWeightPmfm.rankOrder) { + throw new Error(`[batch-group-table] Unable to construct the table. First qualitative value PMFM must be define BEFORE any weight PMFM (by rankOrder in PMFM strategy - acquisition level ${this.acquisitionLevel})`); + } + } + // If estimated weight is allow, init a form for weight methods + if (!this.weightMethodForm && this.weightPmfmsByMethod[MethodIds.ESTIMATED_BY_OBSERVER]) { + // Create the form, for each QV value + if (qvPmfm) { + this.weightMethodForm = this.formBuilder.group(qvPmfm.qualitativeValues.reduce((res, qv, index) => { + res[index] = [false, Validators.required]; + return res; + }, {})); + } + else { + // TODO create weightMethodForm when no QV Pmfm + console.warn('[batch-groups-table] TODO: create weightMethodForm, when no QV Pmfm'); + } + } + this.estimatedWeightPmfm = (this.weightPmfmsByMethod && this.weightPmfmsByMethod[MethodIds.ESTIMATED_BY_OBSERVER]) || this.defaultWeightPmfm; + this.showAutoFillButton = toBoolean(this.showAutoFillButton, isNotEmptyArray(this.availableTaxonGroups)); + // No QV pmfm (no grouped columns) + if (!qvPmfm) { + this.groupColumns = []; + // Add species Pmfms + const speciesColumns = this.computePmfmColumns(this._speciesPmfms || [], 0, { + qvIndex: -1, + }); + const childrenColumns = this.computeDynamicColumnsByQv(); + this.dynamicColumns = speciesColumns.concat(childrenColumns); + // show toolbar if desktop, or on mobile when auto-fill button is visible + this.showToolbar = !this.mobile || this.showAutoFillButton; + } + else { + const groupColumns = []; + // Add species Pmfms + const speciesColumns = this.computePmfmColumns(this._speciesPmfms || [], 0, { + qvIndex: -1, + }); + const childrenColumns = qvPmfm.qualitativeValues.flatMap((qv, qvIndex) => { + const qvColumns = this.computeDynamicColumnsByQv(qv, qvIndex); + // Create the group column + const visibleColumnCount = qvColumns.filter((c) => !c.hidden).length; + const groupKey = `group-${qv.label}`; + groupColumns.push({ + key: groupKey, + name: qv.name, + qvIndex, + colSpan: visibleColumnCount, + }); + return qvColumns; + }); + // DEBUG + if (this.debug) + console.debug('[batch-groups-table] Dynamic columns: ' + speciesColumns.map((c) => c.key).join(',')); + this.groupColumns = groupColumns; + this.dynamicColumns = speciesColumns.concat(childrenColumns); + this.showToolbar = true; // Always show + } + } + computeDynamicColumnsByQv(qvGroup, qvIndex) { + qvIndex = isNotNil(qvIndex) ? qvIndex : -1; + const qvId = (qvGroup === null || qvGroup === void 0 ? void 0 : qvGroup.id) || -1; + let rankOrderOffset = this._speciesPmfms.filter((p) => !p.hidden).length; + if (qvIndex > 0) { + rankOrderOffset += qvIndex * (BatchGroupsTable_1.BASE_DYNAMIC_COLUMNS.length + ((!this.mobile && this._childrenPmfms.length) || 0)); + } + const hideWeightColumns = !this._showWeightColumns; + const hideIndividualCountColumns = !this.showIndividualCountColumns; + const hideSamplingColumns = !this.showSamplingBatchColumns; + const hideSamplingRatioColumns = hideSamplingColumns; + // Add pmfm columns + const childrenPmfms = BatchGroupUtils.mapChildrenPmfms(this._childrenPmfms, { qvPmfm: this.qvPmfm, qvId }); + const pmfmColumns = childrenPmfms.map((pmfm, index) => { + const key = qvGroup ? `${qvGroup.label}_${pmfm.id}` : `${pmfm.id}`; + const rankOrder = rankOrderOffset + index; + const hidden = this.mobile || pmfm.hidden; + const path = qvIndex === -1 ? `measurementValues.${pmfm.id}` : `children.${qvIndex}.measurementValues.${pmfm.id}`; + return { + type: 'pmfm', + label: this.pmfmNamePipe.transform(pmfm, { i18nPrefix: this.i18nPmfmPrefix, i18nContext: this.i18nColumnSuffix }), + key, + qvIndex, + rankOrder, + hidden, + classList: 'total', + computed: pmfm.isComputed || false, + isIndividualCount: false, + isSampling: false, + pmfm, + unitLabel: pmfm.unitLabel, + path, + }; + }); + const qvColumns = BatchGroupsTable_1.BASE_DYNAMIC_COLUMNS.map((def, index) => { + const key = qvGroup ? `${qvGroup.label}_${def.key}` : def.key; + const path = qvIndex >= 0 ? `children.${qvIndex}.${def.path}` : def.path; + const rankOrder = rankOrderOffset + pmfmColumns.length + index; + const isSamplingRatio = hasFlag(def.flags, BatchGroupColumnFlags.IS_SAMPLING_RATIO); + const hidden = (hideWeightColumns && hasFlag(def.flags, BatchGroupColumnFlags.IS_WEIGHT)) || + (hideIndividualCountColumns && hasFlag(def.flags, BatchGroupColumnFlags.IS_INDIVIDUAL_COUNT)) || + (hideSamplingColumns && hasFlag(def.flags, BatchGroupColumnFlags.IS_SAMPLING)) || + (hideSamplingRatioColumns && hasFlag(def.flags, BatchGroupColumnFlags.IS_SAMPLING_RATIO)); + const label = isSamplingRatio && this.samplingRatioFormat === '1/w' ? 'TRIP.BATCH.TABLE.SAMPLING_COEFFICIENT' : def.label; + const unitLabel = isSamplingRatio && this.samplingRatioFormat === '1/w' ? null : def.unitLabel; + let computed = def.computed; + let flags = def.flags; + // Detect computed column, when taxonGroupsNoWeight is used + if (isNotEmptyArray(this.taxonGroupsNoWeight)) { + if (def.key === 'totalIndividualCount') { + computed = composeBatchComputed([computed, (batch, parent) => !this.isTaxonGroupNoWeight((parent === null || parent === void 0 ? void 0 : parent.taxonGroup) || (batch === null || batch === void 0 ? void 0 : batch.taxonGroup))]); + } + else if (hasFlag(def.flags, BatchGroupColumnFlags.IS_WEIGHT)) { + computed = composeBatchComputed([computed, (batch, parent) => this.isTaxonGroupNoWeight((parent === null || parent === void 0 ? void 0 : parent.taxonGroup) || (batch === null || batch === void 0 ? void 0 : batch.taxonGroup))]); + } + } + // Is Landing ? + if (qvIndex < 0 || qvIndex === 0) { + // eslint-disable-next-line no-bitwise + flags = flags | BatchGroupColumnFlags.IS_LANDING; + // Detect computed column, when taxonGroupsNoLanding is used + if (isNotEmptyArray(this.taxonGroupsNoLanding)) { + computed = composeBatchComputed([computed, (batch, parent) => this.isTaxonGroupNoLanding((parent === null || parent === void 0 ? void 0 : parent.taxonGroup) || (batch === null || batch === void 0 ? void 0 : batch.taxonGroup))]); + } + } + return Object.assign(Object.assign(Object.assign({}, ((def.isWeight && this.defaultWeightPmfm) || {})), def), { key, + flags, + label, + unitLabel, + qvIndex, + rankOrder, + hidden, + path, + computed }); + }); + return pmfmColumns.concat(qvColumns); + } + computePmfmColumns(pmfms, offset, opts) { + offset = offset || 0; + // Add Pmfm columns + return (pmfms || []).map((pmfm, index) => (Object.assign({ type: 'pmfm', label: this.pmfmNamePipe.transform(pmfm, { i18nPrefix: this.i18nPmfmPrefix, i18nContext: this.i18nColumnSuffix }), key: pmfm.id.toString(), rankOrder: offset + index, qvIndex: -1, hidden: pmfm.hidden, computed: pmfm.isComputed || false, isIndividualCount: false, isSampling: false, pmfm, unitLabel: pmfm.unitLabel, path: `measurementValues.${pmfm.id}` }, opts))); + } + getUserColumns(userColumns) { + userColumns = userColumns || this.settings.getPageSettings(this.settingsId, SETTINGS_DISPLAY_COLUMNS); + // Exclude OLD user columns (fix issue on v0.16.2) + userColumns = userColumns && userColumns.filter((c) => c === 'weight' || c === 'individualCount'); + return isNotEmptyArray(userColumns) && userColumns.length === 2 + ? userColumns + : // If not user column override (or if bad format), then use defaults + DEFAULT_USER_COLUMNS.slice(0); + } + updateColumns() { + if (!this.dynamicColumns) + return; // skip + this.displayedColumns = this.getDisplayColumns(); + this.groupColumnStartColSpan = RESERVED_START_COLUMNS.length + (this.showTaxonGroupColumn ? 1 : 0) + (this.showTaxonNameColumn ? 1 : 0); + if (this.qvPmfm) { + this.groupColumnStartColSpan += isEmptyArray(this._speciesPmfms) + ? 0 + : this._speciesPmfms.filter((p) => !p.hidden && !this.excludesColumns.includes('' + p.id)).length; + } + else { + this.groupColumnStartColSpan += this.dynamicColumns.filter((c) => !c.hidden && !this.excludesColumns.includes(c.key)).length; + } + if (!this.loading) + this.markForCheck(); + } + deleteSelection(event) { + return super.deleteSelection(event); + } + getDisplayColumns() { + if (!this.dynamicColumns) + return this.columns; + const userColumns = this.getUserColumns(); + const weightIndex = userColumns.findIndex((c) => c === 'weight'); + let individualCountIndex = userColumns.findIndex((c) => c === 'individualCount'); + individualCountIndex = individualCountIndex !== -1 && weightIndex === -1 ? 0 : individualCountIndex; + const inverseOrder = individualCountIndex < weightIndex; + const dynamicColumnKeys = (this.dynamicColumns || []) + .map((c) => ({ + key: c.key, + hidden: c.hidden, + rankOrder: c.rankOrder + (inverseOrder ? (c.isWeight && 1) || (c.isIndividualCount && -1) : 0), + })) + .sort((c1, c2) => c1.rankOrder - c2.rankOrder) + .filter((c) => !c.hidden) + .map((c) => c.key); + this.groupColumnNames = ['top-start'].concat(this.groupColumns.map((c) => c.key)).concat(['top-end']); + return RESERVED_START_COLUMNS.concat(BATCH_RESERVED_START_COLUMNS) + .concat(dynamicColumnKeys) + .concat(BATCH_RESERVED_END_COLUMNS) + .concat(RESERVED_END_COLUMNS) + .filter((name) => !this.excludesColumns.includes(name)); + } + /** + * Open the sub batches modal, from a parent batch group. + * Return the updated parent, or undefined if o changes (e.g. user cancelled) + * + * @param data + * @protected + */ + openSubBatchesModalFromParentModal(data) { + return __awaiter(this, void 0, void 0, function* () { + let changes = false; + // Search if row already exists + let row = yield this.findRowByEntity(data); + // Row already exists: edit the row + if (row) { + if (row !== this.editedRow) { + const confirmed = this.confirmEditCreate(); + if (!confirmed) + throw new Error('Cannot confirmed the preview edited row !'); + } + // Update row's data + row.currentData = data; + // Select the row (highlight) + this.editedRow = row; + } + // Add new row to table + else { + console.debug('[batch-group-table] Adding batch group, before opening sub batches modal...'); + row = yield this.addEntityToTable(data, { confirmCreate: false }); + if (!row) + throw new Error('Cannot add new row!'); + changes = true; + } + const subBatches = yield this.openSubBatchesModal(data, { + showParent: false, // action triggered from the parent batch modal, so the parent field can be hidden + }); + // User cancelled from the subbatches modal + if (!subBatches) { + // If row was added, return changes made when adding the row + if (changes) + return data; + // No changes + return; + } + // Update the parent + data = this.updateBatchGroupFromSubBatches(data, subBatches); + return data; + }); + } + openSubBatchesModal(parentGroup, opts) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + // DEBUG + if (this.debug) + console.debug('[batches-table] Open individual measures modal...'); + // FIXME: opts.showParent=true not working + const showParentGroup = !opts || opts.showParent !== false; // True by default + const stopSubject = new Subject(); + const hasTopModal = !!(yield this.modalCtrl.getTop()); + const modal = yield this.modalCtrl.create({ + component: SubBatchesModal, + componentProps: Object.assign({ programLabel: this.programLabel, acquisitionLevel: AcquisitionLevelCodes.SORTING_BATCH_INDIVIDUAL, usageMode: this.usageMode, showParentGroup, + parentGroup, data: this.availableSubBatches, qvPmfm: this.qvPmfm, disabled: this.disabled, + // Scientific species is required, only not already set in batch groups + showTaxonNameColumn: !this.showTaxonNameColumn, + // If on field mode: use individualCount=1 on each sub-batches + showIndividualCount: !this.settings.isOnFieldMode(this.usageMode), + // Define available parent, as an observable (if new parent can added) + availableParents: this.dataSource.rowsSubject.pipe(takeUntil(stopSubject), map((rows) => rows.map((r) => r.currentData)), tap((data) => console.warn('[batch-groups-table] Modal -> New available parents:', data))), onNewParentClick: () => __awaiter(this, void 0, void 0, function* () { + const { data, role } = yield this.openDetailModal(); + if (data) { + yield this.addEntityToTable(data, { editing: false }); + } + return data; + }), i18nSuffix: this.i18nColumnSuffix, mobile: this.mobile, + // Override using input options + maxVisibleButtons: (_a = this.modalOptions) === null || _a === void 0 ? void 0 : _a.maxVisibleButtons, maxItemCountForButtons: (_b = this.modalOptions) === null || _b === void 0 ? void 0 : _b.maxItemCountForButtons }, this.subBatchesModalOptions), + backdropDismiss: false, + keyboardClose: true, + cssClass: hasTopModal ? 'modal-large stack-modal' : 'modal-large', + }); + // Open the modal + yield modal.present(); + // Wait until closed + const { data, role } = yield modal.onDidDismiss(); + stopSubject.next(); // disconnect datasource observables + // User cancelled + if (isNil(data) || role === 'cancel') { + if (this.debug) + console.debug('[batches-table] Sub-batches modal: user cancelled'); + } + else { + // DEBUG + //if (this.debug) console.debug('[batches-table] Sub-batches modal result: ', data); + this.onSubBatchesChanges.emit(data); + } + return data; + }); + } + openDetailModal(dataToOpen, row) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[batch-group-table] Opening detail modal...'); + let originalData; + let isNew = !dataToOpen && true; + if (isNew) { + dataToOpen = new BatchGroup(); + yield this.onNewEntity(dataToOpen); + } + else { + // Clone data, to keep the original data (allow to cancel - see below) + originalData = this.asEntity(dataToOpen).clone(); + } + this.markAsLoading(); + const modal = yield this.modalCtrl.create({ + component: BatchGroupModal, + componentProps: Object.assign(Object.assign({ acquisitionLevel: this.acquisitionLevel, pmfms: this._initialPmfms, qvPmfm: this.qvPmfm, disabled: this.disabled, showTaxonGroup: this.showTaxonGroupColumn, showTaxonName: this.showTaxonNameColumn, availableTaxonGroups: this.availableTaxonGroups, taxonGroupsNoWeight: this.taxonGroupsNoWeight, showSamplingBatch: this.showSamplingBatchColumns, allowSubBatches: this.allowSubBatches, defaultHasSubBatches: this.defaultHasSubBatches, samplingRatioFormat: this.samplingRatioFormat, openSubBatchesModal: (data) => this.openSubBatchesModalFromParentModal(data), onDelete: (event, batchGroup) => this.deleteEntity(event, batchGroup), onSaveAndNew: (dataToSave) => __awaiter(this, void 0, void 0, function* () { + // Always try to retrieve the row (fix #403) + row = yield this.findRowByEntity(dataToSave); + // Insert or update + let savedRow; + if (isNew && !row) { + savedRow = yield this.addEntityToTable(dataToSave, { editing: false }); + } + else if (row) { + savedRow = yield this.updateEntityToTable(dataToSave, row, { confirmEdit: true }); + } + if (!savedRow) + return undefined; // Failed + // Prepare new entity + dataToOpen = new BatchGroup(); + yield this.onNewEntity(dataToOpen); + isNew = true; // Next row should be new + row = null; // Forget the row to update + originalData = null; // forget the orignal data + return dataToOpen; + }), i18nSuffix: this.i18nColumnSuffix, mobile: this.mobile, usageMode: this.usageMode }, this.modalOptions), { + // Data to open + isNew, data: dataToOpen }), + cssClass: 'modal-large', + backdropDismiss: false, + keyboardClose: true, + }); + // Open the modal + yield modal.present(); + // Wait until closed + // /!\ we use 'onWillDismiss' (and NOT 'onDidDismiss') to make sure row is deleted if cancelled, BEFORE modal is really closed + const { data, role } = yield modal.onWillDismiss(); + if (data && this.debug) + console.debug('[batch-group-table] Batch group modal result: ', data, role); + this.markAsLoaded(); + // User cancelled: try to rollback changes + if (!data || role === 'cancel') { + // new data: delete if exists + // /!\ it can be added when open the subbatches moda : that why we need to delete a new row ! + if (isNew) { + yield this.deleteEntity(null, dataToOpen); + } + // Revert changes + else if (originalData) { + row = yield this.findRowByEntity(dataToOpen); + row.currentData = originalData; + } + } + return { data: data instanceof BatchGroup ? data : undefined, role }; + }); + } + openSelectColumnsModal(event) { + return __awaiter(this, void 0, void 0, function* () { + let userColumns = this.getUserColumns(); + const hiddenColumns = DEFAULT_USER_COLUMNS.slice(0).filter((name) => userColumns.indexOf(name) === -1); + let columns = (userColumns || []).concat(hiddenColumns).map((name) => { + const label = this.i18nColumnPrefix + changeCaseToUnderscore(name).toUpperCase(); + return { + name, + label, + visible: userColumns.indexOf(name) !== -1, + }; + }); + const modal = yield this.modalCtrl.create({ + component: TableSelectColumnsComponent, + componentProps: { + columns, + canHideColumns: false, + }, + }); + // Open the modal + yield modal.present(); + // On dismiss + const res = yield modal.onDidDismiss(); + if (!res || !res.data) + return; // CANCELLED + columns = res.data; + // Update columns + userColumns = columns.filter((c) => c.visible).map((c) => c.name) || []; + // Update user settings + yield this.settings.savePageSetting(this.settingsId, userColumns, SETTINGS_DISPLAY_COLUMNS); + this.updateColumns(); + }); + } + findRowByEntity(data) { + const _super = Object.create(null, { + findRowByEntity: { get: () => super.findRowByEntity } + }); + return __awaiter(this, void 0, void 0, function* () { + const result = yield _super.findRowByEntity.call(this, data); + // TODO: remove this code, after testing well the App + if (!environment.production) { + const result2 = data && this.dataSource.getRows().find((r) => BatchGroup.equals(r.currentData, data)); + if (result !== result2) { + console.warn('[batch-group-table] TODO: findRowByEntity(). Not same result, using static BatchGroup.equals() !', result, result2); + } + } + return result; + }); + } + /** + * Update the batch group row (e.g. observed individual count), from subbatches + * + * @param row + * @param subBatches + * @param opts + */ + updateBatchGroupRow(row, subBatches, opts = { emitEvent: true }) { + const parent = row && row.currentData; + if (!parent) + return; // skip + const updatedParent = this.updateBatchGroupFromSubBatches(parent, subBatches || []); + if (row.validator) { + row.validator.patchValue(updatedParent, opts); + } + else { + row.currentData = updatedParent.clone(); // Force a refresh (because of propertyGet pipe) + } + return updatedParent; + } + /** + * Update the batch group row (e.g. observed individual count), from subbatches + * + * @param parent + * @param subBatches + */ + updateBatchGroupFromSubBatches(parent, subBatches) { + if (!parent) + return parent; // skip + const children = (subBatches || []).filter((b) => this.equals(parent, b.parentGroup)); + if (this.debug) + console.debug('[batch-group-table] Updating batch group, from batches...', parent, children); + const updateSortingBatch = (batch, children) => { + const samplingBatch = BatchUtils.getOrCreateSamplingChild(batch); + // Update individual count + samplingBatch.individualCount = BatchUtils.sumObservedIndividualCount(children); + parent.observedIndividualCount = samplingBatch.individualCount || 0; + // Update weight, if Length-Weight conversion enabled + if (this.enableWeightLengthConversion) { + samplingBatch.childrenWeight = BatchUtils.sumCalculatedWeight(children, this.weightPmfms, this.weightPmfmsByMethod); + console.debug('[batch-group-table] Computed children weight: ', samplingBatch.childrenWeight); + } + else { + samplingBatch.childrenWeight = null; + } + // return some values, to compute sum on the batch group + return { + individualCount: samplingBatch.individualCount, + childrenWeight: samplingBatch.childrenWeight, + }; + }; + if (this.qvPmfm) { + const qvPmfmId = this.qvPmfm.id.toString(); + let observedIndividualCount = 0; + this.qvPmfm.qualitativeValues.forEach((qv, qvIndex) => { + const batchGroup = (parent.children || []).find((b) => PmfmValueUtils.equals(b.measurementValues[qvPmfmId], qv)); + const qvChildren = children.filter((c) => PmfmValueUtils.equals(c.measurementValues[qvPmfmId], qv)); + if (!batchGroup) { + throw new Error('Invalid batch group: missing children with QV pmfm = ' + qv.label); + } + else { + const { individualCount } = updateSortingBatch(batchGroup, qvChildren); + // Update individual count + observedIndividualCount += individualCount || 0; + } + }); + parent.observedIndividualCount = observedIndividualCount; + } + else { + const { individualCount, childrenWeight } = updateSortingBatch(parent, children); + parent.observedIndividualCount = individualCount || 0; + } + return parent; + } + onNewEntity(data) { + const _super = Object.create(null, { + onNewEntity: { get: () => super.onNewEntity } + }); + return __awaiter(this, void 0, void 0, function* () { + console.debug('[batch-group-table] Initializing new row data...'); + yield _super.onNewEntity.call(this, data); + // generate label (override default) + data.label = this.labelPrefix ? `${this.labelPrefix}${data.rankOrder}` : `${this.acquisitionLevel || ''}#${data.rankOrder}`; + // Default taxon name + if (isNotNil(this.defaultTaxonName)) { + data.taxonName = TaxonNameRef.fromObject(this.defaultTaxonName); + } + // Default taxon group + if (isNotNil(this.defaultTaxonGroup)) { + data.taxonGroup = TaxonGroupRef.fromObject(this.defaultTaxonGroup); + } + // Default measurements + const filter = this.filter; + const filteredSpeciesPmfmIds = MeasurementValuesUtils.getPmfmIds(filter === null || filter === void 0 ? void 0 : filter.measurementValues); + if (isNotEmptyArray(filteredSpeciesPmfmIds)) { + data.measurementValues = data.measurementValues || {}; + filteredSpeciesPmfmIds.forEach((pmfmId) => { + const pmfm = (this._speciesPmfms || []).find((p) => p.id === +pmfmId); + const filterValue = pmfm && filter.measurementValues[pmfmId]; + if (isNil(data.measurementValues[pmfmId]) && isNotNil(filterValue)) { + data.measurementValues[pmfmId] = PmfmValueUtils.fromModelValue(filterValue, pmfm); + } + }); + } + if (this.qvPmfm) { + data.children = (this.qvPmfm.qualitativeValues || []).reduce((res, qv, qvIndex) => { + const childLabel = `${data.label}.${qv.label}`; + const child = (data.children || []).find((b) => b.label === childLabel) || new Batch(); + child.rankOrder = qvIndex + 1; + child.measurementValues = child.measurementValues || {}; + child.measurementValues[this.qvPmfm.id.toString()] = qv.id.toString(); + child.label = childLabel; + // If sampling + if (this.showSamplingBatchColumns) { + const samplingLabel = childLabel + Batch.SAMPLING_BATCH_SUFFIX; + const samplingChild = (child.children || []).find((b) => b.label === samplingLabel) || new Batch(); + samplingChild.rankOrder = 1; + samplingChild.label = samplingLabel; + samplingChild.measurementValues = samplingChild.measurementValues || {}; + child.children = [samplingChild]; + } + // Remove children + else { + child.children = []; + } + return res.concat(child); + }, []); + } + // If sampling + else if (this.showSamplingBatchColumns) { + const samplingLabel = data.label + Batch.SAMPLING_BATCH_SUFFIX; + const samplingChild = (data.children || []).find((b) => b.label === samplingLabel) || new Batch(); + samplingChild.rankOrder = 1; + samplingChild.label = samplingLabel; + samplingChild.measurementValues = samplingChild.measurementValues || {}; + data.children = [samplingChild]; + } + }); + } + onPrepareRowForm(form) { + var _a, _b, _c; + if (!form) + return; // Skip + console.debug('[batch-group-table] Init row validator'); + // Remove previous subscription + (_a = this._rowValidatorSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + const data = form.value; + // Clean quality flag + const qualityFlagId = data.qualityFlagId; + if (qualityFlagId !== QualityFlagIds.NOT_QUALIFIED) { + form.patchValue({ controlDate: null, qualificationDate: null, qualificationComments: null, qualityFlagId: QualityFlagIds.NOT_QUALIFIED }, { emitEvent: false }); + form.markAsDirty(); + this.markAsDirty({ emitEvent: false }); + } + const hasSubBatches = (data.observedIndividualCount || 0) > 0; + const taxonGroupNoLanding = this.isTaxonGroupNoLanding(data.taxonGroup); + const taxonGroupNoWeight = this.isTaxonGroupNoWeight(data.taxonGroup); + const weightRequired = !taxonGroupNoWeight; + const individualCountRequired = taxonGroupNoWeight; + const requiredSampleWeight = weightRequired && hasSubBatches; + // Updating row form, with new options + this.validatorService.updateFormGroup(form, { + withWeight: weightRequired, + weightRequired, + individualCountRequired, + }); + if (isNotEmptyArray(this.taxonGroupsNoWeight)) { + // If taxon group with NO weights: reset weight and sampling ratio + if (taxonGroupNoWeight) { + this.resetColumnValueByFlag(form, BatchGroupColumnFlags.IS_WEIGHT); + this.resetColumnValueByFlag(form, BatchGroupColumnFlags.IS_SAMPLING_RATIO); + } + // Default case (weight allowed) + // - Reset totalIndividualCount + else { + // eslint-disable-next-line no-bitwise + this.resetColumnValueByFlag(form, BatchGroupColumnFlags.IS_INDIVIDUAL_COUNT | BatchGroupColumnFlags.IS_TOTAL); + } + } + // Disable/enable landing form + if (isNotEmptyArray(this.taxonGroupsNoLanding)) { + if (((_b = this.qvPmfm) === null || _b === void 0 ? void 0 : _b.id) === PmfmIds.DISCARD_OR_LANDING) { + const landingForm = form.get('children.0'); + if (taxonGroupNoLanding) { + this.resetColumnValueByFlag(form, BatchGroupColumnFlags.IS_LANDING, { emitEvent: false }); + landingForm.disable(); + } + else if (landingForm.disabled) { + landingForm.enable(); + landingForm.markAsUntouched(); + } + } + } + const subscription = new Subscription(); + // Detect taxon group changes + // e.g. if a taxon group becomes 'RJB' (no weight, and no landing), we should refresh the form + if (isNotEmptyArray(this.taxonGroupsNoWeight) || isNotEmptyArray(this.taxonGroupsNoLanding)) { + subscription.add(form + .get('taxonGroup') + .valueChanges.pipe(debounceTime(250), filter(ReferentialUtils.isNotEmpty), // Skip if not item selected + map((taxonGroup) => [this.isTaxonGroupNoWeight(taxonGroup), this.isTaxonGroupNoLanding(taxonGroup)]), filter(([noWeight, noLanding]) => noWeight !== taxonGroupNoWeight || noLanding !== taxonGroupNoLanding) // distinguish changes from initial call + ) + .subscribe((_) => { + // DEBUG + //console.debug(this.logPrefix + 'Detecting taxon group changes: will update form...'); + // Refresh form, because taxon group has changed + this.onPrepareRowForm(form); // Loop + })); + } + // Enable computation of weights and sampling ratio + if (!taxonGroupNoWeight) { + subscription.add(this.validatorService.delegate.enableSamplingRatioAndWeight(form, { + qvPmfm: this.qvPmfm, + samplingRatioFormat: this.samplingRatioFormat, + requiredSampleWeight, + weightMaxDecimals: (_c = this.defaultWeightPmfm) === null || _c === void 0 ? void 0 : _c.maximumNumberDecimals, + markForCheck: () => this.markForCheck(), + })); + } + // Register row subscription + this._rowValidatorSubscription = subscription; + this.registerSubscription(this._rowValidatorSubscription); + subscription.add(() => { + this.unregisterSubscription(subscription); + this._rowValidatorSubscription = undefined; + }); + } + isTaxonGroupNoWeight(taxonGroup) { + if (!taxonGroup || !(taxonGroup === null || taxonGroup === void 0 ? void 0 : taxonGroup.label) || isEmptyArray(this.taxonGroupsNoWeight)) + return false; + return this.taxonGroupsNoWeight.includes(taxonGroup.label); + } + isTaxonGroupNoLanding(taxonGroup) { + if (!taxonGroup || !(taxonGroup === null || taxonGroup === void 0 ? void 0 : taxonGroup.label) || isEmptyArray(this.taxonGroupsNoLanding)) + return false; + return this.taxonGroupsNoLanding.includes(taxonGroup.label); + } + resetColumnValueByFlag(form, flag, opts) { + let dirty = false; + this.dynamicColumns + .filter((column) => hasFlag(column.flags, flag)) + .forEach((column) => { + const control = form.get(column.path); + if (isNotNil(control.value)) { + control.setValue(null); + dirty = true; + } + }); + if (dirty && (opts === null || opts === void 0 ? void 0 : opts.emitEvent) !== false) { + form.markAsDirty(); + this.markAsDirty({ emitEvent: false }); + } + return dirty; + } + confirmEditCreate(event, row) { + var _a; + const confirmed = super.confirmEditCreate(event, row); + // Stop row subscription + if (confirmed && (!row || !row.editing)) { + (_a = this._rowValidatorSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + } + return confirmed; + } + getDebugData(type) { + switch (type) { + case 'rowValidator': + const form = this.validatorService.getRowValidator(); + form.disable(); + return form; + } + } +}; +BatchGroupsTable.BASE_DYNAMIC_COLUMNS = [ + // Column on total (weight, nb indiv) + { + type: 'double', + key: 'totalWeight', + path: 'weight.value', + label: 'TRIP.BATCH.TABLE.TOTAL_WEIGHT', + unitLabel: UnitLabel.KG, + minValue: 0, + maxValue: 10000, + maximumNumberDecimals: 3, + isWeight: true, + // eslint-disable-next-line no-bitwise + flags: BatchGroupColumnFlags.IS_WEIGHT | BatchGroupColumnFlags.IS_TOTAL, + classList: 'total mat-column-weight', + computed: (batch) => { var _a; return (batch && ((_a = batch.weight) === null || _a === void 0 ? void 0 : _a.computed)) || false; }, + }, + { + type: 'double', + key: 'totalIndividualCount', + path: 'individualCount', + label: 'TRIP.BATCH.TABLE.TOTAL_INDIVIDUAL_COUNT', + minValue: 0, + maxValue: 10000, + maximumNumberDecimals: 2, + isIndividualCount: true, + // eslint-disable-next-line no-bitwise + flags: BatchGroupColumnFlags.IS_INDIVIDUAL_COUNT | BatchGroupColumnFlags.IS_TOTAL, + classList: 'total', + }, + // Column on sampling (ratio, nb indiv, weight) + { + type: 'samplingRatio', + key: 'samplingRatio', + path: 'children.0.samplingRatio', + label: 'TRIP.BATCH.TABLE.SAMPLING_RATIO', + unitLabel: '%', + // eslint-disable-next-line no-bitwise + flags: BatchGroupColumnFlags.IS_SAMPLING | BatchGroupColumnFlags.IS_SAMPLING_RATIO, + isSampling: true, + computed: (batch, parent, samplingRatioFormat) => { var _a, _b; return BatchUtils.isSamplingRatioComputed((_b = (_a = batch === null || batch === void 0 ? void 0 : batch.children) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.samplingRatioText, samplingRatioFormat) || false; }, + }, + { + type: 'double', + key: 'samplingWeight', + path: 'children.0.weight.value', + label: 'TRIP.BATCH.TABLE.SAMPLING_WEIGHT', + unitLabel: UnitLabel.KG, + minValue: 0, + maxValue: 1000, + maximumNumberDecimals: 3, + isWeight: true, + isSampling: true, + // eslint-disable-next-line no-bitwise + flags: BatchGroupColumnFlags.IS_SAMPLING | BatchGroupColumnFlags.IS_WEIGHT, + computed: (batch) => { var _a, _b, _c; return ((_c = (_b = (_a = batch === null || batch === void 0 ? void 0 : batch.children) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.weight) === null || _c === void 0 ? void 0 : _c.computed) || false; }, + }, + { + type: 'double', + key: 'samplingIndividualCount', + path: 'children.0.individualCount', + label: 'TRIP.BATCH.TABLE.SAMPLING_INDIVIDUAL_COUNT', + isIndividualCount: true, + isSampling: true, + // eslint-disable-next-line no-bitwise + flags: BatchGroupColumnFlags.IS_SAMPLING | BatchGroupColumnFlags.IS_INDIVIDUAL_COUNT | BatchGroupColumnFlags.IS_ALWAYS_COMPUTED, + computed: true, + }, +]; +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchGroupsTable.prototype, "modalOptions", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchGroupsTable.prototype, "subBatchesModalOptions", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchGroupsTable.prototype, "availableSubBatches", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchGroupsTable.prototype, "enableWeightLengthConversion", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchGroupsTable.prototype, "labelPrefix", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchGroupsTable.prototype, "showWeightColumns", null); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchGroupsTable.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchGroupsTable.prototype, "allowSubBatches", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchGroupsTable.prototype, "defaultHasSubBatches", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], BatchGroupsTable.prototype, "taxonGroupsNoWeight", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], BatchGroupsTable.prototype, "taxonGroupsNoLanding", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", Boolean) +], BatchGroupsTable.prototype, "showAutoFillButton", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", Boolean) +], BatchGroupsTable.prototype, "showSamplingBatchColumns", void 0); +__decorate([ + Input(), + RxStateProperty(), + __metadata("design:type", Boolean) +], BatchGroupsTable.prototype, "showIndividualCountColumns", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], BatchGroupsTable.prototype, "onSubBatchesChanges", void 0); +BatchGroupsTable = BatchGroupsTable_1 = __decorate([ + Component({ + selector: 'app-batch-groups-table', + templateUrl: 'batch-groups.table.html', + styleUrls: ['batch-groups.table.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + BatchGroupValidatorService, + TripContextService, + PmfmNamePipe]) +], BatchGroupsTable); +export { BatchGroupsTable }; +//# sourceMappingURL=batch-groups.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/group/batch-groups.table.js.map b/out-tsc/app/app/trip/batch/group/batch-groups.table.js.map new file mode 100644 index 000000000..7635a0a9a --- /dev/null +++ b/out-tsc/app/app/trip/batch/group/batch-groups.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch-groups.table.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/group/batch-groups.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/group/testing/batch-group.form.test.js b/out-tsc/app/app/trip/batch/group/testing/batch-group.form.test.js new file mode 100644 index 000000000..62c1524cd --- /dev/null +++ b/out-tsc/app/app/trip/batch/group/testing/batch-group.form.test.js @@ -0,0 +1,238 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Component, ViewChild } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { BehaviorSubject } from 'rxjs'; +import { Batch } from '../../common/batch.model'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { filter, mergeMap } from 'rxjs/operators'; +import { EntitiesStorage, EntityUtils, firstNotNilPromise, isNotNilOrBlank, MatAutocompleteConfigHolder, SharedValidators, toNumber, waitFor } from '@sumaris-net/ngx-components'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { BatchGroupForm } from '@app/trip/batch/group/batch-group.form'; +import { BatchGroup, BatchGroupUtils } from '@app/trip/batch/group/batch-group.model'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +import { BatchGroupValidatorService } from '@app/trip/batch/group/batch-group.validator'; +import { BATCH_TREE_EXAMPLES, getExampleTree } from '@app/trip/batch/testing/batch-data.test'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +let BatchGroupFormTestPage = class BatchGroupFormTestPage { + constructor(formBuilder, referentialRefService, programRefService, entities) { + this.referentialRefService = referentialRefService; + this.programRefService = programRefService; + this.entities = entities; + this.$programLabel = new BehaviorSubject(undefined); + this.$gearId = new BehaviorSubject(undefined); + this.autocomplete = new MatAutocompleteConfigHolder(); + this.showSamplingBatch = true; + this.samplingBatchEnabled = true; + this.allowSubBatches = true; + this.defaultHasSubBatches = false; + this.hasSubBatches = false; + this.showHasSubBatchesButton = true; + this.showEstimatedWeight = true; + this.showChildrenWeight = true; + this.samplingRatioFormats = ProgramProperties.TRIP_BATCH_SAMPLING_RATIO_FORMAT.values; + this.$program = new BehaviorSubject(null); + this.outputs = {}; + this.filterForm = formBuilder.group({ + program: [null, Validators.compose([Validators.required, SharedValidators.entity])], + gear: [null, Validators.compose([Validators.required, SharedValidators.entity])], + example: [null, Validators.required], + }); + } + get childrenState() { + return { + showChildrenWeight: this.showChildrenWeight, + showSamplingBatch: this.showSamplingBatch, + samplingBatchEnabled: this.samplingBatchEnabled, + showEstimatedWeight: this.showEstimatedWeight, + }; + } + ngOnInit() { + // Program + this.autocomplete.add('program', { + suggestFn: (value, filter) => this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { entityName: 'Program' })), + attributes: ['label', 'name'], + }); + this.filterForm.get('program').valueChanges + //.pipe(debounceTime(450)) + .subscribe(p => { + const label = p && p.label; + if (label) { + this.$programLabel.next(label); + } + }); + this.$programLabel + .pipe(filter(isNotNilOrBlank), mergeMap(programLabel => this.referentialRefService.ready() + .then(() => this.programRefService.loadByLabel(programLabel)))) + .subscribe(program => this.setProgram(program)); + // Gears (from program) + this.autocomplete.add('gear', { + items: this.$programLabel.pipe(mergeMap((programLabel) => { + if (!programLabel) + return Promise.resolve([]); + return this.programRefService.loadGears(programLabel); + })), + attributes: ['label', 'name'], + showAllOnFocus: true + }); + this.filterForm.get('gear').valueChanges + //.pipe(debounceTime(450)) + .subscribe(g => this.$gearId.next(toNumber(g && g.id, null))); + // Input example + this.autocomplete.add('example', { + items: BATCH_TREE_EXAMPLES.map((label, index) => ({ id: index + 1, label })), + attributes: ['label'], + showAllOnFocus: true + }); + this.filterForm.get('example').valueChanges + //.pipe(debounceTime(450)) + .pipe() + .subscribe(example => { + if (example && typeof example.label == 'string' && this.outputs.example) { + const json = this.getExampleBatchGroup(example.label); + this.dumpBatchGroup(BatchGroup.fromObject(json), 'example'); + } + }); + this.filterForm.patchValue({ + program: { id: 10, label: 'ADAP-MER' }, + //program: { id: 70, label: 'APASE' }, + gear: { id: 6, label: 'OTB' }, + example: { id: 1, label: 'default' }, + }); + this.applyExample(); + } + setProgram(program) { + // DEBUG + console.debug('[batch-group-form-test] Applying program:', program); + const hasBatchMeasure = program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_MEASURE_ENABLE); + this.allowSubBatches = hasBatchMeasure; + this.showSamplingBatch = hasBatchMeasure; + this.samplingRatioFormat = program.getProperty(ProgramProperties.TRIP_BATCH_SAMPLING_RATIO_FORMAT); + this.taxonGroupsNoWeight = program.getPropertyAsStrings(ProgramProperties.TRIP_BATCH_TAXON_GROUPS_NO_WEIGHT); + this.$program.next(program); + } + // Load data into components + updateView(data) { + return __awaiter(this, void 0, void 0, function* () { + yield waitFor(() => !!this.form); + yield firstNotNilPromise(this.$program); + // DEBUG + console.debug('[batch-group-form-test] Applying data:', data); + this.markAsReady(); + this.form.value = data && data.clone() || new BatchGroup(); + this.form.enable(); + }); + } + markAsReady() { + this.form.markAsReady(); + } + markAsLoaded() { + this.form.markAsLoaded(); + } + doSubmit(event) { + // Nothing to do + } + getExampleBatchGroup(key, index) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!key) { + const example = this.filterForm.get('example').value; + key = example && example.label || 'default'; + } + // Get program + const programLabel = (_a = this.filterForm.get('program').value) === null || _a === void 0 ? void 0 : _a.label; + // Load example + const json = getExampleTree(key, programLabel); + // Convert to array (as Pod should sent) with: + // - a local ID + // - only the parentId, and NOT the parent + const batches = EntityUtils.treeToArray(json) || []; + yield EntityUtils.fillLocalIds(batches, (_, count) => this.entities.nextValues('BatchVO', count)); + batches.forEach(b => { + b.parentId = b.parent && b.parent.id; + delete b.parent; + }); + // Convert into Batch tree + const catchBatch = Batch.fromObjectArrayAsTree(batches); + BatchUtils.computeIndividualCount(catchBatch); + const batchGroups = BatchGroupUtils.fromBatchTree(catchBatch); + return batchGroups[index || 0]; + }); + } + // Load data into components + applyExample(key) { + return __awaiter(this, void 0, void 0, function* () { + // Wait enumerations override + yield this.referentialRefService.ready(); + const batchGroup = yield this.getExampleBatchGroup(key); + yield this.updateView(batchGroup); + }); + } + dumpExample(key) { + return __awaiter(this, void 0, void 0, function* () { + const batchGroup = yield this.getExampleBatchGroup(key); + this.dumpBatchGroup(batchGroup, 'example'); + }); + } + dumpBatchGroupForm(form, outputName) { + return __awaiter(this, void 0, void 0, function* () { + this.dumpBatchGroup(form.value, outputName); + }); + } + dumpBatchGroup(batchGroup, outputName) { + let html = ''; + if (batchGroup) { + const catchBatch = new Batch(); + catchBatch.label = AcquisitionLevelCodes.CATCH_BATCH; + catchBatch.children = [batchGroup]; + BatchUtils.logTree(catchBatch, { + showAll: false, + println: (m) => { + html += '
' + m; + }, + }); + html = html.replace(/\t/g, '  '); + this.outputs[outputName] = html; + } + else { + this.outputs[outputName] = ' No result'; + } + console.debug(html); + } + copyBatchGroup(source, target) { + return __awaiter(this, void 0, void 0, function* () { + source.disable(); + target.disable(); + try { + yield target.setValue(source.value); + } + finally { + source.enable(); + target.enable(); + } + }); + } + /* -- protected methods -- */ + stringify(value) { + return JSON.stringify(value); + } +}; +__decorate([ + ViewChild(BatchGroupForm, { static: true }), + __metadata("design:type", BatchGroupForm) +], BatchGroupFormTestPage.prototype, "form", void 0); +BatchGroupFormTestPage = __decorate([ + Component({ + selector: 'app-batch-group-form-test', + templateUrl: './batch-group.form.test.html', + providers: [ + { provide: BatchGroupValidatorService, useClass: BatchGroupValidatorService } + ] + }), + __metadata("design:paramtypes", [UntypedFormBuilder, + ReferentialRefService, + ProgramRefService, + EntitiesStorage]) +], BatchGroupFormTestPage); +export { BatchGroupFormTestPage }; +//# sourceMappingURL=batch-group.form.test.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/group/testing/batch-group.form.test.js.map b/out-tsc/app/app/trip/batch/group/testing/batch-group.form.test.js.map new file mode 100644 index 000000000..13851808b --- /dev/null +++ b/out-tsc/app/app/trip/batch/group/testing/batch-group.form.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch-group.form.test.js","sourceRoot":"","sources":["../../../../../../../src/app/trip/batch/group/testing/batch-group.form.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/sub/sub-batch.form.js b/out-tsc/app/app/trip/batch/sub/sub-batch.form.js new file mode 100644 index 000000000..6f7d82680 --- /dev/null +++ b/out-tsc/app/app/trip/batch/sub/sub-batch.form.js @@ -0,0 +1,757 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, Input, QueryList, ViewChild, ViewChildren, } from '@angular/core'; +import { Batch } from '../common/batch.model'; +import { MeasurementValuesForm } from '@app/data/measurement/measurement-values.form.class'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { SubBatchValidatorService } from './sub-batch.validator'; +import { AppFormUtils, EntityUtils, focusNextInput, focusPreviousInput, getPropertyByPath, isEmptyArray, isNil, isNilOrBlank, isNotNil, isNotNilOrBlank, ReferentialUtils, SharedValidators, startsWithUpperCase, toBoolean, toNumber, } from '@sumaris-net/ngx-components'; +import { debounceTime, delay, distinctUntilChanged, filter, map, mergeMap, skip, startWith, takeUntil, tap } from 'rxjs/operators'; +import { AcquisitionLevelCodes, MethodIds, PmfmIds, QualitativeLabels, } from '@app/referential/services/model/model.enum'; +import { BehaviorSubject, combineLatest, from, Subject } from 'rxjs'; +import { MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { PmfmFormField } from '@app/referential/pmfm/field/pmfm.form-field.component'; +import { BatchGroup, BatchGroupUtils } from '../group/batch-group.model'; +import { TranslateService } from '@ngx-translate/core'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { TaxonNameRef } from '@app/referential/services/model/taxon-name.model'; +import { environment } from '@environments/environment'; +import { IonButton } from '@ionic/angular'; +import { IchthyometerService } from '@app/shared/ichthyometer/ichthyometer.service'; +import { PmfmValueUtils } from '@app/referential/services/model/pmfm-value.model'; +let SubBatchForm = class SubBatchForm extends MeasurementValuesForm { + constructor(injector, measurementsValidatorService, formBuilder, programRefService, validatorService, referentialRefService, ichthyometerService, translate) { + super(injector, measurementsValidatorService, formBuilder, programRefService, validatorService.getFormGroup(null, { + rankOrderRequired: false, // Avoid to have form.invalid, in Burst mode + }), { + mapPmfms: (pmfms) => this.mapPmfms(pmfms), + onUpdateFormGroup: (form) => this.onUpdateControls(form) + }); + this.measurementsValidatorService = measurementsValidatorService; + this.formBuilder = formBuilder; + this.programRefService = programRefService; + this.validatorService = validatorService; + this.referentialRefService = referentialRefService; + this.ichthyometerService = ichthyometerService; + this.translate = translate; + this._availableParents = []; + this._disableByDefaultControls = []; + this.computingWeight$ = this._state.select('computingWeight'); + this.$taxonNames = new BehaviorSubject(undefined); + this.selectedTaxonNameIndex = -1; + this.showParentGroup = true; + this.showIndividualCount = true; + this.showError = true; + this.showWarning = true; + this.showSubmitButton = true; + this.selectInputContent = AppFormUtils.selectInputContent; + this.filterNumberInput = AppFormUtils.filterNumberInput; + // Remove required label/rankOrder + this.form.controls.label.setValidators(null); + this.form.controls.rankOrder.setValidators(null); + // Set default values + this.mobile = this.settings.mobile; + this._enable = false; + this.acquisitionLevel = AcquisitionLevelCodes.SORTING_BATCH_INDIVIDUAL; + this.i18nPmfmPrefix = 'TRIP.BATCH.PMFM.'; + // Control for indiv. count enable + this.enableIndividualCountControl = this.formBuilder.control(false, Validators.required); + this.enableIndividualCountControl.setValue(false, { emitEvent: false }); + // Freeze QV value control + this.freezeQvPmfmControl = this.formBuilder.control(true, Validators.required); + this.freezeQvPmfmControl.setValue(true, { emitEvent: false }); + this.freezeTaxonNameControl = this.formBuilder.control(!this.mobile, Validators.required); + // Listen pending status + this._state.connect('computingWeight', this.form.statusChanges.pipe(map(status => status === 'PENDING'), filter(v => v === true))); + // For DEV only + this.debug = !environment.production; + } + set showTaxonName(show) { + var _a; + this._showTaxonName = show; + const taxonNameControl = (_a = this.form) === null || _a === void 0 ? void 0 : _a.get('taxonName'); + if (taxonNameControl) { + if (show) { + taxonNameControl.setValidators([SharedValidators.entity, Validators.required]); + } + else { + taxonNameControl.setValidators(null); + } + } + } + get showTaxonName() { + return this._showTaxonName; + } + get taxonNames() { + return this.$taxonNames.getValue(); + } + set qvPmfm(value) { + this._qvPmfm = value; + // If already loaded, re apply pmfms, to be able to execute mapPmfms + if (value && !this.loading) { + this.setPmfms(this.pmfms); + } + } + get qvPmfm() { + return this._qvPmfm; + } + set availableParents(value) { + if (this._availableParents !== value) { + this.setAvailableParents(value); + } + } + get availableParents() { + return this._availableParents; + } + get enableIndividualCount() { + return this.enableIndividualCountControl.value; + } + get freezeTaxonName() { + return this.freezeTaxonNameControl.value; + } + set freezeTaxonName(value) { + this.freezeTaxonNameControl.setValue(value); + if (!value) { + this.form.get('taxonName').reset(null); + } + } + get freezeQvPmfm() { + return this.freezeQvPmfmControl.value; + } + set freezeQvPmfm(value) { + this.freezeQvPmfmControl.setValue(value); + if (!value) { + this.form.get('measurements.' + this.qvPmfm.id).reset(null); + } + } + get parentGroup() { + return this.form.controls.parentGroup.value; + } + set parentGroup(value) { + this.form.controls.parentGroup.setValue(value); + } + get computingWeight() { + return this._state.get('computingWeight'); + } + set computingWeight(value) { + this._state.set('computingWeight', _ => value); + } + ngOnInit() { + super.ngOnInit(); + // Default values + this.tabindex = isNotNil(this.tabindex) ? this.tabindex : 1; + this.isNew = toBoolean(this.isNew, false); + this.maxVisibleButtons = toNumber(this.maxVisibleButtons, 4); + this.freezeTaxonNameControl.setValue(!this.mobile, { emitEvent: false }); + // Get display attributes for parent + this._parentAttributes = this.settings.getFieldDisplayAttributes('taxonGroup').map(attr => 'taxonGroup.' + attr) + .concat(!this.showTaxonName ? this.settings.getFieldDisplayAttributes('taxonName').map(attr => 'taxonName.' + attr) : []); + // Parent combo + const parentControl = this.form.get('parentGroup'); + this.registerAutocompleteField('parentGroup', { + suggestFn: (value, options) => this.suggestParents(value, options), + attributes: ['rankOrder'].concat(this._parentAttributes), + showAllOnFocus: true, + mobile: this.mobile + }); + // Taxon name + const taxonNameControl = this.form.get('taxonName'); + if (this.showTaxonName) { + // Add required validator on TaxonName + taxonNameControl.setValidators([SharedValidators.entity, Validators.required]); + } + this.registerAutocompleteField('taxonName', { + items: this.$taxonNames, + mobile: this.mobile + }); + // Fill taxon names, from the parent changes + if (this.showTaxonName) { + // Mobile + if (this.mobile) { + // Compute taxon names when parent has changed + let currentParenLabel; + this.registerSubscription(parentControl.valueChanges + .pipe(filter(parent => isNotNilOrBlank(parent === null || parent === void 0 ? void 0 : parent.label) && currentParenLabel !== parent.label), tap(parent => currentParenLabel = parent.label), mergeMap((_) => this.suggestTaxonNames()), tap(({ data }) => this.$taxonNames.next(data)) // Update taxon names + ) + .subscribe()); + this.waitIdle().then(() => { + // Init the value on form when there is only 1 value because the input is hidden and never set + this.registerSubscription(this.$taxonNames.pipe(filter(values => (values === null || values === void 0 ? void 0 : values.length) === 1)).subscribe(values => { + taxonNameControl.setValue(values[0], { emitEvent: false }); + })); + // Update taxonName when need + let lastTaxonName; + this.registerSubscription(combineLatest([ + this.$taxonNames, + taxonNameControl.valueChanges.pipe(tap(v => lastTaxonName = v)) + ]) + .pipe(filter(([items, value]) => isNotNil(items))) + .subscribe(([items, value]) => { + let index = -1; + // Compute index in list, and get value + if (items && items.length === 1) { + index = 0; + } + else if (ReferentialUtils.isNotEmpty(lastTaxonName)) { + index = items.findIndex(v => TaxonNameRef.equalsOrSameReferenceTaxon(v, lastTaxonName)); + } + const newTaxonName = (index !== -1) ? items[index] : null; + // Apply to form, if need + if (!ReferentialUtils.equals(lastTaxonName, newTaxonName)) { + taxonNameControl.setValue(newTaxonName, { emitEvent: false }); + lastTaxonName = newTaxonName; + this.markAsDirty(); + } + // Apply to button index, if need + if (this.selectedTaxonNameIndex !== index) { + this.selectedTaxonNameIndex = index; + this.markForCheck(); + } + })); + }) + .catch(err => console.error(err)); + } + // Desktop + else { + // Reset taxon name combo when parent changed + this.registerSubscription(parentControl.valueChanges + .pipe( + // Warn: skip the first trigger (ignore set value) + skip(1), debounceTime(250), + // Ignore changes if parent is not an entity (WARN: we use 'label' because id can be null, when not saved yet) + filter(parent => this.form.enabled && EntityUtils.isNotEmpty(parent, 'label')), distinctUntilChanged(Batch.equals), mergeMap(() => this.suggestTaxonNames())) + .subscribe(({ data }) => { + // Update taxon names + this.$taxonNames.next(data); + // Is only one value + if (data.length === 1) { + const defaultTaxonName = data[0]; + // Set the field + taxonNameControl.patchValue(defaultTaxonName, { emitEVent: false }); + // Remember for next form reset + this.data.taxonName = defaultTaxonName; + } + else { + taxonNameControl.reset(null, { emitEVent: false }); + // Remember for next form reset + this.data.taxonName = undefined; + } + })); + } + } + // Compute taxon names when parent has changed + this.registerSubscription(parentControl.valueChanges + .pipe( + // Detected parent changes + filter(parentGroup => { var _a; return parentGroup && !BatchGroupUtils.equals(parentGroup, (_a = this.data) === null || _a === void 0 ? void 0 : _a.parentGroup); })) + .subscribe(parentGroup => { + // Remember (for next values changes, or next form reset) + this.data.parentGroup = parentGroup; + // Update pmfms (it can depends on the selected parent's taxon group - see mapPmfm()) + if (!this.starting) + this._onRefreshPmfms.emit(); + })); + this.registerSubscription(this.enableIndividualCountControl.valueChanges + .pipe(startWith(this.enableIndividualCountControl.value)) + .subscribe((enable) => { + const individualCountControl = this.form.get('individualCount'); + if (enable) { + individualCountControl.enable(); + individualCountControl.setValidators([Validators.required, Validators.min(0)]); + } + else { + individualCountControl.disable(); + individualCountControl.setValue(null); + } + })); + // Listen icthyometer values + if (this.mobile) { + this.registerSubscription(this.listenIchthyometer()); + } + this.ngInitExtension(); + } + doNewParentClick(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.onNewParentClick) + return; // No callback: skip + const res = yield this.onNewParentClick(); + if (res instanceof Batch) { + this.form.get('parent').setValue(res); + } + }); + } + checkIfSubmit(event, submitButton) { + if (event === null || event === void 0 ? void 0 : event.defaultPrevented) + return false; + submitButton = submitButton || this.submitButton; + if (event.currentTarget === submitButton['el']) { + event.preventDefault(); + event.stopPropagation(); + event.stopImmediatePropagation(); + event.returnValue = false; + this.doSubmit(null); + return false; + } + return true; + } + onApplyingEntity(data, opts) { + super.onApplyingEntity(data); + // Replace parent with value from availableParents + if (!opts || opts.linkToParent !== false) { + this.linkToParentGroup(data); + } + } + updateView(data, opts) { + const _super = Object.create(null, { + updateView: { get: () => super.updateView } + }); + return __awaiter(this, void 0, void 0, function* () { + // Reset taxon name button index + if (this.mobile && data && data.taxonName && isNotNil(data.taxonName.id)) { + this.selectedTaxonNameIndex = (this.$taxonNames.getValue() || []).findIndex(tn => tn.id === data.taxonName.id); + } + else { + this.selectedTaxonNameIndex = -1; + } + // Parent not found + if (!data.parentGroup) { + // Force to allow parent selection + this.showParentGroup = this.showParentGroup || true; + } + // Inherited method + yield _super.updateView.call(this, data, opts); + }); + } + enable(opts) { + super.enable(opts); + if (!this.enableIndividualCount) { + this.form.get('individualCount').disable(opts); + } + // Other field to disable by default (e.g. discard reason, in SUMARiS program) + this._disableByDefaultControls.forEach(c => c.disable(opts)); + } + onTaxonNameButtonClick(event, taxonName, minTabindex) { + this.form.patchValue({ taxonName }); + if (event) { + event.preventDefault(); + event.stopPropagation(); + } + this.focusNextInput(null, { minTabindex }); + } + focusFirstEmptyInput(event) { + return focusNextInput(event, this.inputFields, { + excludeEmptyInput: true, + minTabindex: -1, + // DEBUG + //debug: this.debug + }); + } + focusNextInput(event, opts) { + // DEBUG + //return focusNextInput(event, this.inputFields, opts{debug: this.debug, ...opts}); + return focusNextInput(event, this.inputFields, opts); + } + focusPreviousInput(event, opts) { + // DEBUG + // return focusPreviousInput(event, this.inputFields, {debug: this.debug, ...opts}); + return focusPreviousInput(event, this.inputFields, opts); + } + focusNextInputOrSubmit(event, isLastPmfm) { + return __awaiter(this, void 0, void 0, function* () { + if (event.defaultPrevented) + return; // Skip + event.preventDefault(); + if (isLastPmfm) { + if (this.enableIndividualCount) { + // Focus to last (=individual count input) + this.inputFields.last.nativeElement.focus(); + return true; + } + yield this.doSubmit(null); + return true; + } + return this.focusNextInput(event); + }); + } + trySubmit(event, opts) { + if (event === null || event === void 0 ? void 0 : event.defaultPrevented) + return false; + super.doSubmit(event, opts); + return true; + } + doSubmit(event, opts) { + if (event === null || event === void 0 ? void 0 : event.defaultPrevented) { + console.debug('[sub-batch-form] Cancel submit (event.defaultPrevented=true)'); + return; + } + return super.doSubmit(event, opts); + } + /* -- protected method -- */ + ngInitExtension() { + return __awaiter(this, void 0, void 0, function* () { + yield this.ready(); + const discardOrLandingControl = this.form.get('measurementValues.' + PmfmIds.DISCARD_OR_LANDING); + const discardReasonControl = this.form.get('measurementValues.' + PmfmIds.DISCARD_REASON); + // Manage DISCARD_REASON validator + if (discardOrLandingControl && discardReasonControl) { + // Always disable by default, while discard/Landing not set + this._disableByDefaultControls.push(discardReasonControl); + this.registerSubscription(discardOrLandingControl.valueChanges + .pipe( + // IMPORTANT: add a delay, to make sure to be executed AFTER the form.enable() + delay(200)) + .subscribe((value) => { + if (ReferentialUtils.isNotEmpty(value) && value.label === QualitativeLabels.DISCARD_OR_LANDING.DISCARD) { + if (this.form.enabled) { + discardReasonControl.enable(); + } + discardReasonControl.setValidators(Validators.required); + discardReasonControl.updateValueAndValidity({ onlySelf: true }); + this.form.updateValueAndValidity({ onlySelf: true }); + } + else { + discardReasonControl.setValue(null); + discardReasonControl.setValidators(null); + discardReasonControl.disable(); + } + })); + } + }); + } + setAvailableParents(value) { + this._availableParents = value; + // DEBUG + //console.debug('[sub-batch-form] setAvailableParents() ', value); + // Reset parentGroup control, if no more in the list + if (!this.loading && this.showParentGroup) { + const selectedParent = this.parentGroup; + const selectedParentExists = selectedParent && (this._availableParents || []).findIndex(parent => BatchGroup.equals(parent, this.parentGroup)) !== -1; + if (selectedParent && !selectedParentExists) { + this.form.patchValue({ parentGroup: null, taxonName: null }); + } + } + } + suggestParents(value, options) { + return __awaiter(this, void 0, void 0, function* () { + // Has select a valid parent: return the parent + if (EntityUtils.isNotEmpty(value, 'label')) + return [value]; + value = (typeof value === 'string' && value !== '*') && value || undefined; + if (isNilOrBlank(value)) + return this._availableParents; // All + const ucValueParts = value.trim().toUpperCase().split(' ', 1); + if (this.debug) + console.debug(`[sub-batch-form] Searching parent {${value || '*'}}...`); + // Search on attributes + return this._availableParents.filter(parent => ucValueParts + .filter(valuePart => this._parentAttributes + .findIndex(attr => startsWithUpperCase(getPropertyByPath(parent, attr), valuePart.trim())) !== -1).length === ucValueParts.length); + }); + } + suggestTaxonNames(value, options) { + return __awaiter(this, void 0, void 0, function* () { + const parentGroup = this.parentGroup; + if (isNil(parentGroup)) + return { data: [] }; + if (this.debug) + console.debug(`[sub-batch-form] Searching taxon name {${value || '*'}}...`); + return this.programRefService.suggestTaxonNames(value, { + programLabel: this.programLabel, + searchAttribute: options && options.searchAttribute, + taxonGroupId: parentGroup && parentGroup.taxonGroup && parentGroup.taxonGroup.id || undefined + }); + }); + } + mapPmfms(pmfms) { + // Hide the QV pmfm + if (this._qvPmfm) { + const index = pmfms.findIndex(pmfm => pmfm.id === this._qvPmfm.id); + if (index !== -1) { + const qvPmfm = this._qvPmfm.clone(); + qvPmfm.hidden = true; + qvPmfm.required = true; + pmfms[index] = qvPmfm; + } + else { + console.warn('Cannot found the QVPmfm with ID=' + this._qvPmfm.id); + } + } + // If there is a parent: filter on parent's taxon group + const parentTaxonGroupId = this.parentGroup && this.parentGroup.taxonGroup && this.parentGroup.taxonGroup.id; + if (isNotNil(parentTaxonGroupId)) { + pmfms = pmfms.filter(pmfm => !PmfmUtils.isDenormalizedPmfm(pmfm) + || isEmptyArray(pmfm.taxonGroupIds) + || pmfm.taxonGroupIds.includes(parentTaxonGroupId)); + } + // Check weight-length conversion is enabled + pmfms = pmfms.filter(pmfm => { + // If RTP weight: enable conversion, and hidden pmfms + if (pmfm.id === PmfmIds.BATCH_CALCULATED_WEIGHT_LENGTH + || pmfm.methodId === MethodIds.CALCULATED_WEIGHT_LENGTH) { + this.enableLengthWeightConversion = true; + if (this.weightDisplayedUnit) { + pmfm = PmfmUtils.setWeightUnitConversion(pmfm, this.weightDisplayedUnit); + } + this.weightPmfm = pmfm; + return false; + } + return true; + }); + return pmfms; + } + onUpdateControls(form) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + // If QV: must be required + if (this._qvPmfm) { + const measFormGroup = form.get('measurementValues'); + const qvControl = measFormGroup.get(this._qvPmfm.id.toString()); + if (qvControl) { + qvControl.setValidators(Validators.required); + } + } + // Weight/length computation + (_a = this._weightConversionSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + if (this.enableLengthWeightConversion) { + // DEBUG + if (this.debug) + console.debug('[sub-batch-form] Enabling weight/length conversion...'); + try { + const subscription = yield this.validatorService.enableWeightLengthConversion(form, { + pmfms: this.pmfms, + qvPmfm: this._qvPmfm, + parentGroup: !this.showParentGroup ? this.parentGroup : undefined /*will use parent control*/, + onError: (err) => { + this.warning = err && err.message || 'TRIP.SUB_BATCH.ERROR.WEIGHT_LENGTH_CONVERSION_FAILED'; + this.computingWeight = false; + this.markForCheck(); + }, + markForCheck: () => this.computingWeight = false, + // DEBUG + debug: this.debug + }); + if (subscription) { + this.registerSubscription(subscription); + this._weightConversionSubscription = subscription; + subscription.add(() => { + this.unregisterSubscription(subscription); + this._weightConversionSubscription = null; + }); + } + } + catch (err) { + console.error('[sub-batch-form] Failed to enable weight/length conversion:', err); + } + } + }); + } + getValue() { + if (!this.form.dirty) + return this.data; + const json = this.form.value; + // Read the individual count (if has been disable) + if (!this.enableIndividualCount) { + json.individualCount = this.form.get('individualCount').value || 1; + } + const measurementValuesForm = this.measurementValuesForm; + // Adapt measurement values for entity + if (measurementValuesForm) { + const pmfms = this.pmfms || []; + json.measurementValues = Object.assign({}, this.data.measurementValues || {}, // Keep additional PMFM values + MeasurementValuesUtils.normalizeValuesToModel(measurementValuesForm.value, pmfms)); + } + else { + json.measurementValues = {}; + } + this.data.fromObject(json); + return this.data; + } + linkToParentGroup(data) { + if (!data) + return; + // Find the parent + const parentGroup = data.parentGroup; + if (!parentGroup) + return; // no parent = nothing to link + data.parentGroup = (this._availableParents || []).find(p => Batch.equals(p, parentGroup)); + // Get the parent of the parent (e.g. if parent is a sample batch) + if (data.parentGroup && data.parent && !data.parent.hasTaxonNameOrGroup && data.parent.parent && data.parent.parent.hasTaxonNameOrGroup) { + data.parentGroup = BatchGroup.fromBatch(data.parent.parent); + } + } + listenIchthyometer() { + const stopSubject = new Subject(); + return combineLatest([ + this.ichthyometerService.enabled$, + from(this.ready()), + this.pmfms$ + ]) + .pipe(filter(([enabled, _, __]) => enabled), + // DEBUG + //tap(pmfms => console.debug('[sub-batch-form] Looking for length pmfms: ' + JSON.stringify(pmfms))), + mergeMap(([_, __, pmfms]) => { + // Cancel previous watch + stopSubject.next(); + // Collect all length fields + const lengthFields = (pmfms || []).filter(PmfmUtils.isLength) + .reduce((res, pmfm) => { + const control = this._measurementValuesForm.get(pmfm.id.toString()); + if (!control) + return res; // No control: skip + const unit = (pmfm.unitLabel || 'cm'); + const precision = PmfmUtils.getOrComputePrecision(pmfm, 0.000001); // 6 decimals by default + return res.concat({ control, unit, precision }); + }, []); + // No length pmfms found: stop here + if (isEmptyArray(lengthFields)) { + console.debug('[sub-batch-form] Cannot used ichthyometer: no length pmfm found'); + return; + } + console.debug(`[sub-batch-form] Start watching length from ichthyometer...`); + return this.ichthyometerService.watchLength() + .pipe(takeUntil(stopSubject), map(({ value, unit }) => { + console.debug(`[sub-batch-form] Receiving value: ${value} ${unit}`); + // Find first length control enabled + const lengthField = lengthFields.find(field => field.control.enabled); + if (lengthField) { + // Convert value into the expected unit/precision + const convertedValue = PmfmValueUtils.convertLengthValue(value, unit, lengthField.unit, lengthField.precision); + // Apply converted value to control + lengthField.control.setValue(convertedValue); + // Try to submit the form (e.g. when only one control) + this.trySubmit(null); + } + })); + })) + .subscribe(); + } +}; +__decorate([ + Input(), + __metadata("design:type", String) +], SubBatchForm.prototype, "title", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubBatchForm.prototype, "showParentGroup", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubBatchForm.prototype, "showIndividualCount", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubBatchForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubBatchForm.prototype, "showWarning", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubBatchForm.prototype, "showSubmitButton", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubBatchForm.prototype, "displayParentPmfm", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SubBatchForm.prototype, "isNew", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], SubBatchForm.prototype, "tabindex", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubBatchForm.prototype, "floatLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubBatchForm.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], SubBatchForm.prototype, "maxVisibleButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], SubBatchForm.prototype, "maxItemCountForButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubBatchForm.prototype, "i18nSuffix", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SubBatchForm.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubBatchForm.prototype, "weightDisplayedUnit", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], SubBatchForm.prototype, "onNewParentClick", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Object]) +], SubBatchForm.prototype, "showTaxonName", null); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], SubBatchForm.prototype, "qvPmfm", null); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], SubBatchForm.prototype, "availableParents", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SubBatchForm.prototype, "freezeTaxonName", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SubBatchForm.prototype, "freezeQvPmfm", null); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], SubBatchForm.prototype, "parentGroup", null); +__decorate([ + ViewChildren(PmfmFormField), + __metadata("design:type", QueryList) +], SubBatchForm.prototype, "measurementFormFields", void 0); +__decorate([ + ViewChildren('inputField'), + __metadata("design:type", QueryList) +], SubBatchForm.prototype, "inputFields", void 0); +__decorate([ + ViewChild('submitButton'), + __metadata("design:type", IonButton) +], SubBatchForm.prototype, "submitButton", void 0); +SubBatchForm = __decorate([ + Component({ + selector: 'app-sub-batch-form', + templateUrl: 'sub-batch.form.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + MeasurementsValidatorService, + UntypedFormBuilder, + ProgramRefService, + SubBatchValidatorService, + ReferentialRefService, + IchthyometerService, + TranslateService]) +], SubBatchForm); +export { SubBatchForm }; +//# sourceMappingURL=sub-batch.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/sub/sub-batch.form.js.map b/out-tsc/app/app/trip/batch/sub/sub-batch.form.js.map new file mode 100644 index 000000000..38902f6de --- /dev/null +++ b/out-tsc/app/app/trip/batch/sub/sub-batch.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sub-batch.form.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/sub/sub-batch.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/sub/sub-batch.modal.js b/out-tsc/app/app/trip/batch/sub/sub-batch.modal.js new file mode 100644 index 000000000..6f196b7fc --- /dev/null +++ b/out-tsc/app/app/trip/batch/sub/sub-batch.modal.js @@ -0,0 +1,237 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input, ViewChild } from '@angular/core'; +import { AppFormUtils, LocalSettingsService, toBoolean } from '@sumaris-net/ngx-components'; +import { IonContent, ModalController } from '@ionic/angular'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { TranslateService } from '@ngx-translate/core'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { PmfmStrategy } from '@app/referential/services/model/pmfm-strategy.model'; +import { SubBatchForm } from './sub-batch.form'; +import { SubBatch } from './sub-batch.model'; +import { debounceTime } from 'rxjs/operators'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +import { SubBatchValidatorService } from '@app/trip/batch/sub/sub-batch.validator'; +import { ContextService } from '@app/shared/context.service'; +import { TripContextService } from '@app/trip/trip-context.service'; +let SubBatchModal = class SubBatchModal { + constructor(injector, modalCtrl, settings, translate, cd) { + this.injector = injector; + this.modalCtrl = modalCtrl; + this.settings = settings; + this.translate = translate; + this.cd = cd; + this._subscription = new Subscription(); + this.debug = false; + this.loading = false; + this.$title = new BehaviorSubject(undefined); + this.showParent = true; + this.showTaxonName = true; + this.showIndividualCount = false; + // Default value + this.acquisitionLevel = AcquisitionLevelCodes.SORTING_BATCH; + this.mobile = settings.mobile; + // TODO: for DEV only + //this.debug = !environment.production; + } + get dirty() { + return this.form.dirty; + } + get invalid() { + return this.form.invalid; + } + get valid() { + return this.form.valid; + } + ngOnInit() { + this.disabled = toBoolean(this.disabled, false); + this.isNew = toBoolean(this.isNew, false); + if (this.disabled) { + this.form.disable(); + } + // Update title each time value changes + if (!this.isNew) { + this._subscription.add(this.form.valueChanges + .pipe(debounceTime(250)) + .subscribe(json => this.computeTitle(json))); + } + this.setValue(this.data); + } + ngOnDestroy() { + this._subscription.unsubscribe(); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.modalCtrl.dismiss(); + }); + } + close(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.loading) + return; // avoid many call + // Leave without saving + if (!this.dirty) { + this.markAsLoading(); + yield this.modalCtrl.dismiss(); + } + // Convert and dismiss + else { + const data = this.getDataToSave(); + if (!data) + return; // invalid + this.markAsLoading(); + yield this.modalCtrl.dismiss(data); + } + }); + } + /* -- protected methods -- */ + setValue(data) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[sub-batch-modal] Applying value to form...', data); + this.form.markAsReady(); + this.form.error = null; + try { + // Set form value + this.data = this.data || new SubBatch(); + yield this.form.setValue(this.data); + // Call ready callback + /*if (this.onReady) { + promiseOrVoid = this.onReady(this); + if (promiseOrVoid) await promiseOrVoid; + }*/ + yield this.computeTitle(); + } + finally { + if (!this.disabled) + this.enable(); + this.form.markAsUntouched(); + this.form.markAsPristine(); + this.markForCheck(); + } + }); + } + getDataToSave(opts) { + if (this.invalid) { + if (this.debug) + AppFormUtils.logFormErrors(this.form.form, '[sample-modal] '); + this.form.error = 'COMMON.FORM.HAS_ERROR'; + this.form.markAllAsTouched(); + this.scrollToTop(); + return undefined; + } + this.markAsLoading(); + // To force enable, to get computed values + this.enable(); + try { + // Get form value + return this.form.value; + } + finally { + if (!opts || opts.disable !== false) { + this.disable(); + } + } + } + computeTitle(data) { + return __awaiter(this, void 0, void 0, function* () { + data = data || this.data; + if (this.isNew || !data) { + this.$title.next(yield this.translate.get('TRIP.SUB_BATCH.NEW.TITLE').toPromise()); + } + else { + const label = BatchUtils.parentToString(data); + this.$title.next(yield this.translate.get('TRIP.SUB_BATCH.EDIT.TITLE', { label }).toPromise()); + } + }); + } + scrollToTop() { + return __awaiter(this, void 0, void 0, function* () { + return this.content.scrollToTop(); + }); + } + markForCheck() { + this.cd.markForCheck(); + } + registerSubscription(teardown) { + this._subscription.add(teardown); + } + markAsLoading() { + this.loading = true; + this.markForCheck(); + } + markAsLoaded() { + this.loading = false; + this.markForCheck(); + } + enable() { + this.form.enable(); + } + disable() { + this.form.disable(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SubBatchModal.prototype, "disabled", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SubBatchModal.prototype, "isNew", void 0); +__decorate([ + Input(), + __metadata("design:type", SubBatch) +], SubBatchModal.prototype, "data", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubBatchModal.prototype, "acquisitionLevel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubBatchModal.prototype, "programLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubBatchModal.prototype, "showParent", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubBatchModal.prototype, "showTaxonName", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubBatchModal.prototype, "showIndividualCount", void 0); +__decorate([ + Input(), + __metadata("design:type", PmfmStrategy) +], SubBatchModal.prototype, "qvPmfm", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], SubBatchModal.prototype, "availableParents", void 0); +__decorate([ + ViewChild('form', { static: true }), + __metadata("design:type", SubBatchForm) +], SubBatchModal.prototype, "form", void 0); +__decorate([ + ViewChild(IonContent), + __metadata("design:type", IonContent) +], SubBatchModal.prototype, "content", void 0); +SubBatchModal = __decorate([ + Component({ + selector: 'app-sub-batch-modal', + templateUrl: 'sub-batch.modal.html', + providers: [ + { provide: ContextService, useExisting: TripContextService }, + { provide: SubBatchValidatorService, useClass: SubBatchValidatorService }, + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + ModalController, + LocalSettingsService, + TranslateService, + ChangeDetectorRef]) +], SubBatchModal); +export { SubBatchModal }; +//# sourceMappingURL=sub-batch.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/sub/sub-batch.modal.js.map b/out-tsc/app/app/trip/batch/sub/sub-batch.modal.js.map new file mode 100644 index 000000000..db718fcb9 --- /dev/null +++ b/out-tsc/app/app/trip/batch/sub/sub-batch.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sub-batch.modal.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/sub/sub-batch.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/sub/sub-batch.model.js b/out-tsc/app/app/trip/batch/sub/sub-batch.model.js new file mode 100644 index 000000000..7560c90fc --- /dev/null +++ b/out-tsc/app/app/trip/batch/sub/sub-batch.model.js @@ -0,0 +1,133 @@ +var SubBatch_1; +import { __decorate, __metadata } from "tslib"; +import { Batch } from '../common/batch.model'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { EntityClass } from '@sumaris-net/ngx-components'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +import { MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { PmfmValueUtils } from '@app/referential/services/model/pmfm-value.model'; +let SubBatch = SubBatch_1 = class SubBatch extends Batch { + constructor() { + super(SubBatch_1.TYPENAME); + } + static fromBatch(source, parentGroup) { + if (!source || !parentGroup) + throw new Error('Missing argument \'source\' or \'parentGroup\''); + const target = new SubBatch_1(); + Object.assign(target, source); + // Find the group + target.parentGroup = parentGroup; + return target; + } + asObject(opts) { + const target = super.asObject(opts); + if (opts && opts.minify === true) { + delete target.parentGroup; + } + return target; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.parentGroup = source.parentGroup; + } +}; +SubBatch = SubBatch_1 = __decorate([ + EntityClass({ typename: 'SubBatchVO', fromObjectReuseStrategy: 'clone' }), + __metadata("design:paramtypes", []) +], SubBatch); +export { SubBatch }; +export class SubBatchUtils { + static fromBatchGroups(groups, opts) { + opts = opts || {}; + // If using QV pmfm + if (opts.groupQvPmfm) { + return groups.reduce((res, group) => res.concat((group.children || []).reduce((res, qvBatch) => { + const children = BatchUtils.getChildrenByLevel(qvBatch, AcquisitionLevelCodes.SORTING_BATCH_INDIVIDUAL); + const qvModelValue = PmfmValueUtils.toModelValue(qvBatch.measurementValues[opts.groupQvPmfm.id], opts.groupQvPmfm); + return res.concat(children + .map(child => { + const target = SubBatch.fromBatch(child, group); + target.measurementValues = Object.assign({}, target.measurementValues); + // Copy the QV value, from the parent + // /!\ Should used expected value type (form or model) + if (MeasurementValuesUtils.isMeasurementFormValues(target.measurementValues)) { + target.measurementValues[opts.groupQvPmfm.id] = PmfmValueUtils.fromModelValue(qvModelValue, opts.groupQvPmfm); + } + else { + target.measurementValues[opts.groupQvPmfm.id] = qvModelValue; + } + return target; + })); + }, [])), []); + } + // No QV pmfm + else { + return groups.reduce((res, group) => res.concat(BatchUtils.getChildrenByLevel(group, AcquisitionLevelCodes.SORTING_BATCH_INDIVIDUAL) + .map(child => SubBatch.fromBatch(child, group))), []); + } + } + /** + * Make sure each subbatch.parentGroup use a reference found inside the groups arrays + * + * @param groups + * @param subBatches + */ + static linkSubBatchesToGroup(groups, subBatches) { + if (!groups || !subBatches) + return; + subBatches.forEach(s => { + s.parentGroup = s.parentGroup && groups.find(p => Batch.equals(p, s.parentGroup)) || null; + if (!s.parentGroup) + console.warn('linkSubBatchesToGroup() - Could not found parent group, for sub-batch:', s); + }); + } + /** + * Prepare subbatches for model (set the subbatch.parent) + * + * @param batchGroups + * @param subBatches + * @param opts + */ + static linkSubBatchesToParent(batchGroups, subBatches, opts) { + opts = opts || {}; + if (opts.qvPmfm) { + const qvPmfmId = opts.qvPmfm.id; + (batchGroups || []).forEach(batchGroup => { + // Get group's sub batches + const groupSubBatches = (subBatches || []).filter(sb => sb.parentGroup && Batch.equals(batchGroup, sb.parentGroup)); + // Get group's children (that should hold a QV pmfm's value) + (batchGroup.children || []).forEach(parent => { + // Find sub batches for this QV pmfm's value + const children = groupSubBatches.filter(sb => PmfmValueUtils.equals(sb.measurementValues[qvPmfmId], parent.measurementValues[qvPmfmId])); + // If has sampling batch, use it as parent + if (parent.children && parent.children.length === 1 && BatchUtils.isSamplingBatch(parent.children[0])) { + parent = parent.children[0]; + } + // Link to parent + parent.children = children; + children.forEach(c => { + c.parentId = parent.id; + c.parent = undefined; // Not need for model serialization + }); + }); + }); + } + else { + (batchGroups || []).forEach(parent => { + // Find subbatches, from parentGroup + const children = subBatches.filter(sb => sb.parentGroup && Batch.equals(parent, sb.parentGroup)); + // If has sampling batch, use it as parent + if (parent.children && parent.children.length === 1 && BatchUtils.isSamplingBatch(parent.children[0])) { + parent = parent.children[0]; + } + parent.children = children; + children.forEach(c => { + c.parentId = parent.id; + c.parent = undefined; + }); + }); + } + return batchGroups; + } +} +//# sourceMappingURL=sub-batch.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/sub/sub-batch.model.js.map b/out-tsc/app/app/trip/batch/sub/sub-batch.model.js.map new file mode 100644 index 000000000..8a7d9e5fc --- /dev/null +++ b/out-tsc/app/app/trip/batch/sub/sub-batch.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sub-batch.model.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/sub/sub-batch.model.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,KAAK,EAA+C,MAAM,uBAAuB,CAAC;AAE3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,WAAW,EAAoB,MAAM,6BAA6B,CAAC;AAE5E,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAG3E,IAAM,QAAQ,gBAAd,MAAM,QAAS,SAAQ,KAAe;IAiB3C;QACE,KAAK,CAAC,UAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAZD,MAAM,CAAC,SAAS,CAAC,MAAa,EAAE,WAAuB;QACrD,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC/F,MAAM,MAAM,GAAG,IAAI,UAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9B,iBAAiB;QACjB,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;QAEjC,OAAO,MAAM,CAAC;IAChB,CAAC;IAMD,QAAQ,CAAC,IAA2B;QAClC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;YAChC,OAAO,MAAM,CAAC,WAAW,CAAC;SAC3B;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,MAAW,EAAE,IAA6B;QACnD,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACxC,CAAC;CACF,CAAA;AAjCY,QAAQ;IADpB,WAAW,CAAC,EAAC,QAAQ,EAAE,YAAY,EAAE,uBAAuB,EAAE,OAAO,EAAC,CAAC;;GAC3D,QAAQ,CAiCpB;SAjCY,QAAQ;AAmCrB,MAAM,OAAO,aAAa;IAExB,MAAM,CAAC,eAAe,CACpB,MAAoB,EACpB,IAEC;QAED,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAElB,mBAAmB;QACnB,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;gBAC3F,MAAM,QAAQ,GAAG,UAAU,CAAC,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,CAAC,wBAAwB,CAAC,CAAC;gBACxG,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBACnH,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ;qBACvB,GAAG,CAAC,KAAK,CAAC,EAAE;oBACX,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAEhD,MAAM,CAAC,iBAAiB,qBAAQ,MAAM,CAAC,iBAAiB,CAAE,CAAC;oBAC3D,qCAAqC;oBACrC,sDAAsD;oBACtD,IAAI,sBAAsB,CAAC,uBAAuB,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE;wBAC5E,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;qBAC/G;yBACI;wBACH,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC;qBAC9D;oBAED,OAAO,MAAM,CAAC;gBAChB,CAAC,CAAC,CAAC,CAAC;YACR,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SAChB;QAED,aAAa;aACR;YACH,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,CAAC,wBAAwB,CAAC;iBAC/H,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SAC3D;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,qBAAqB,CAAC,MAAoB,EAAE,UAAsB;QACvE,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU;YAAE,OAAO;QAEnC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACrB,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,IAAI,CAAC;YAC1F,IAAI,CAAC,CAAC,CAAC,WAAW;gBAAE,OAAO,CAAC,IAAI,CAAC,wEAAwE,EAAE,CAAC,CAAC,CAAC;QAChH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,sBAAsB,CAAC,WAAyB,EAAE,UAAsB,EAAE,IAEhF;QACC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAElB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;gBACvC,0BAA0B;gBAC1B,MAAM,eAAe,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;gBAEpH,4DAA4D;gBAC5D,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;oBAC3C,4CAA4C;oBAC5C,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAEzI,0CAA0C;oBAC1C,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;wBACrG,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;qBAC7B;oBAED,iBAAiB;oBACjB,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;oBAC3B,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBACnB,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;wBACvB,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,mCAAmC;oBAC3D,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;SACJ;aAEI;YACH,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACnC,oCAAoC;gBACpC,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;gBAEjG,0CAA0C;gBAC1C,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;oBACrG,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAe,CAAC;iBAC3C;gBAED,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBAC3B,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACnB,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;oBACvB,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC;gBACvB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;SACJ;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;CAEF"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/sub/sub-batch.validator.js b/out-tsc/app/app/trip/batch/sub/sub-batch.validator.js new file mode 100644 index 000000000..36a203f37 --- /dev/null +++ b/out-tsc/app/app/trip/batch/sub/sub-batch.validator.js @@ -0,0 +1,350 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { DateUtils, isEmptyArray, isNil, isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrBlank, isNotNilOrNaN, LocalSettingsService, SharedAsyncValidators, SharedValidators, toNumber, } from '@sumaris-net/ngx-components'; +import { Batch } from '../common/batch.model'; +import { BatchWeightValidator } from '@app/trip/batch/common/batch.validator'; +import { LocationLevelIds, MethodIds, PmfmIds, QualitativeValueIds } from '@app/referential/services/model/model.enum'; +import { DataEntityValidatorService } from '@app/data/services/validator/data-entity.validator'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { WeightLengthConversionRefService } from '@app/referential/taxon-name/weight-length-conversion/weight-length-conversion-ref.service'; +import { LocationUtils } from '@app/referential/location/location.utils'; +import moment from 'moment'; +import { BatchErrorCodes } from '@app/trip/batch/batch.errors'; +import { RoundWeightConversionRefService } from '@app/referential/taxon-group/round-weight-conversion/round-weight-conversion-ref.service'; +import { DenormalizedPmfmStrategy } from '@app/referential/services/model/pmfm-strategy.model'; +import { isLengthUnitSymbol, isWeightUnitSymbol, WeightUtils } from '@app/referential/services/model/model.utils'; +import { BatchGroupUtils } from '@app/trip/batch/group/batch-group.model'; +import { ContextService } from '@app/shared/context.service'; +import { PmfmValueUtils } from '@app/referential/services/model/pmfm-value.model'; +import { TranslateService } from '@ngx-translate/core'; +import { PositionUtils } from '@app/data/position/position.utils'; +let SubBatchValidatorService = class SubBatchValidatorService extends DataEntityValidatorService { + constructor(formBuilder, translate, settings, wlService, rwService, context) { + super(formBuilder, translate, settings); + this.wlService = wlService; + this.rwService = rwService; + this.context = context; + // DEBUG + //console.debug(`[sub-batch-validator] Creating validator (context: ${this.context?.constructor.name})`); + } + getFormGroupConfig(data, opts) { + const rankOrder = toNumber(data === null || data === void 0 ? void 0 : data.rankOrder, null); + return { + __typename: [Batch.TYPENAME], + id: [toNumber(data === null || data === void 0 ? void 0 : data.id, null)], + updateDate: [(data === null || data === void 0 ? void 0 : data.updateDate) || null], + rankOrder: !opts || opts.rankOrderRequired !== false ? [rankOrder, Validators.required] : [rankOrder], + label: [(data === null || data === void 0 ? void 0 : data.label) || null], + individualCount: [toNumber(data === null || data === void 0 ? void 0 : data.individualCount, null), Validators.compose([Validators.min(1), SharedValidators.integer])], + samplingRatio: [typeof (data === null || data === void 0 ? void 0 : data.samplingRatio) === 'object' ? null : toNumber(data === null || data === void 0 ? void 0 : data.samplingRatio, null), SharedValidators.empty], + samplingRatioText: [(data === null || data === void 0 ? void 0 : data.samplingRatioText) || null, SharedValidators.empty], + taxonGroup: [(data === null || data === void 0 ? void 0 : data.taxonGroup) || null, SharedValidators.entity], + taxonName: [(data === null || data === void 0 ? void 0 : data.taxonName) || null, SharedValidators.entity], + comments: [(data === null || data === void 0 ? void 0 : data.comments) || null], + parent: [(data === null || data === void 0 ? void 0 : data.parent) || null, SharedValidators.object], + measurementValues: this.formBuilder.group({}), + // Specific for SubBatch + parentGroup: [(data === null || data === void 0 ? void 0 : data.parentGroup) || null, Validators.compose([Validators.required, SharedValidators.object])] + }; + } + getFormGroup(data, opts) { + const form = super.getFormGroup(data, opts); + // Add weight sub form + if (opts === null || opts === void 0 ? void 0 : opts.withWeight) { + const weightPmfm = this.getWeightLengthPmfm({ required: opts === null || opts === void 0 ? void 0 : opts.weightRequired, pmfms: opts === null || opts === void 0 ? void 0 : opts.pmfms }); + form.addControl('weight', this.getWeightFormGroup(data === null || data === void 0 ? void 0 : data.weight, { + required: opts === null || opts === void 0 ? void 0 : opts.weightRequired, + pmfm: weightPmfm + })); + } + return form; + } + updateFormGroup(form, opts) { + // Add/remove weight form group, if need + if (opts === null || opts === void 0 ? void 0 : opts.withWeight) { + if (!form.controls.weight) { + const weightPmfm = this.getWeightLengthPmfm({ required: opts === null || opts === void 0 ? void 0 : opts.weightRequired, pmfms: opts === null || opts === void 0 ? void 0 : opts.pmfms }); + form.addControl('weight', this.getWeightFormGroup(null, { + required: opts === null || opts === void 0 ? void 0 : opts.weightRequired, + pmfm: weightPmfm + })); + } + } + else if (form.controls.weight) { + form.removeControl('weight'); + } + } + getWeightLengthPmfm(opts) { + opts = opts || {}; + return (opts.pmfms || []).find(p => PmfmUtils.isWeight(p) && p.methodId === MethodIds.CALCULATED_WEIGHT_LENGTH) + || DenormalizedPmfmStrategy.fromObject({ + id: PmfmIds.BATCH_CALCULATED_WEIGHT_LENGTH, + required: opts.required || false, + methodId: MethodIds.CALCULATED_WEIGHT_LENGTH, + unitLabel: 'kg', + minValue: 0, + maximumNumberDecimals: SubBatchValidators.DEFAULT_WEIGHT_LENGTH_CONVERSION_MAX_DECIMALS + }); + } + enableWeightLengthConversion(form, opts) { + var _a, _b, _c, _d, _e; + if (!this.context) { + console.warn('[sub-batch-validator] Cannot enable weight conversion. Missing data context'); + return; + } + const date = (opts === null || opts === void 0 ? void 0 : opts.date) || ((_a = this.context) === null || _a === void 0 ? void 0 : _a.getValueAsDate('date')) || moment(); + const countryId = opts.countryId || ((_c = (_b = this.context) === null || _b === void 0 ? void 0 : _b.getValue('country')) === null || _c === void 0 ? void 0 : _c.id); + const parentGroup = opts.parentGroup + || ((_d = ((opts === null || opts === void 0 ? void 0 : opts.parentGroupPath) && form.get(opts.parentGroupPath))) === null || _d === void 0 ? void 0 : _d.value) + || ((_e = this.context) === null || _e === void 0 ? void 0 : _e.getValue('parentGroup')); + const rectangleLabel = (opts === null || opts === void 0 ? void 0 : opts.rectangleLabel) || this.getContextualStatisticalRectangle(); + const qvPmfm = opts === null || opts === void 0 ? void 0 : opts.qvPmfm; + // DEBUG + // if (!rectangleLabel && !environment.production) { + // rectangleLabel = '65F1' + // console.warn('[sub-batch-validator] TODO: force rectangle label (for DEV) to ' + rectangleLabel); + // } + // Make sure to have a statistical rectangle + if (!rectangleLabel) { + console.warn('[sub-batch-validator] Cannot enable weight conversion. No statistical rectangle (in options or data context)'); + if (opts === null || opts === void 0 ? void 0 : opts.onError) + opts === null || opts === void 0 ? void 0 : opts.onError({ code: BatchErrorCodes.WEIGHT_LENGTH_CONVERSION_NO_RECTANGLE, message: 'TRIP.SUB_BATCH.ERROR.WEIGHT_LENGTH_CONVERSION_NO_RECTANGLE' }); + return null; + } + // Find the length Pmfm + const lengthPmfms = isNotNil(opts.lengthPmfmId) + ? (opts.pmfms || []).filter(p => p.id === opts.lengthPmfmId) + : (opts.pmfms || []).filter(PmfmUtils.isLength); + if (isEmptyArray(lengthPmfms)) { + console.warn('[sub-batch-validator] Cannot enable weight conversion. No length PMFMs found in list:', opts === null || opts === void 0 ? void 0 : opts.pmfms); + if (opts === null || opts === void 0 ? void 0 : opts.onError) + opts === null || opts === void 0 ? void 0 : opts.onError({ code: BatchErrorCodes.WEIGHT_LENGTH_CONVERSION_NO_LENGTH_PMFM, message: 'TRIP.SUB_BATCH.ERROR.WEIGHT_LENGTH_CONVERSION_NO_LENGTH_PMFM' }); + return null; + } + // Get the PMFM to use to store computed weight + const weightPmfm = this.getWeightLengthPmfm({ required: opts === null || opts === void 0 ? void 0 : opts.weightRequired, pmfms: opts === null || opts === void 0 ? void 0 : opts.pmfms }); + // Create weight form + let weightControl = form.get('weight'); + if (!weightControl) { + weightControl = this.getWeightFormGroup(null, { + required: opts === null || opts === void 0 ? void 0 : opts.weightRequired, + pmfm: weightPmfm + }); + form.addControl('weight', weightControl); + } + if (weightControl.enabled) + weightControl.disable({ emitEvent: false }); + // DEBUG + console.debug('[sub-batch-validator] Enable weight length conversion:', { date, rectangleLabel, countryId, lengthPmfms, weightPmfm, parentGroup, qvPmfm }); + return SharedAsyncValidators.registerAsyncValidator(form, SubBatchValidators.weightLengthConversion(this.wlService, this.rwService, Object.assign(Object.assign({}, opts), { date, rectangleLabel, countryId, + lengthPmfms, weightPmfm, parentGroup, qvPmfm })), { markForCheck: opts === null || opts === void 0 ? void 0 : opts.markForCheck, debug: true }); + } + getWeightFormGroup(data, opts) { + // DEBUG + console.debug('[sub-batch-validator] Creating weight form group...', opts); + return this.formBuilder.group(BatchWeightValidator.getFormGroupConfig(data, opts)); + } + getContextualStatisticalRectangle() { + var _a, _b; + // Read fishing Areas + const fishingAreas = (_a = this.context) === null || _a === void 0 ? void 0 : _a.getValue('fishingAreas'); + if (isNotEmptyArray(fishingAreas)) { + console.debug('[sub-batch-validator] Trying to get statistical rectangle, from fishing areas ...'); + const rectangle = (fishingAreas || []) + .map(fa => fa.location) + .filter(isNotNil) + .find(location => isNil(location.levelId) || (location.levelId === LocationLevelIds.RECTANGLE_ICES || location.levelId === LocationLevelIds.RECTANGLE_GFCM)); + if (isNotNilOrBlank(rectangle === null || rectangle === void 0 ? void 0 : rectangle.label)) { + console.debug('[sub-batch-validator] Find statistical rectangle: ' + rectangle.label); + return rectangle.label; + } + // Continue + } + // Read vessel positions + const vesselPositions = (_b = this.context) === null || _b === void 0 ? void 0 : _b.getValue('vesselPositions'); + if (isNotEmptyArray(vesselPositions)) { + console.debug('[sub-batch-validator] Trying to get statistical rectangle, from positions ...'); + const rectangleLabel = (vesselPositions || []).slice() // Copy before reverse() + .reverse() // Last position first + .filter(p => PositionUtils.isNotNilAndValid(p)) + .map(position => LocationUtils.getRectangleLabelByLatLong(position.latitude, position.longitude)) + .find(isNotNil); + if (rectangleLabel) + console.debug('[sub-batch-validator] Find statistical rectangle: ' + rectangleLabel); + return rectangleLabel; + } + } +}; +SubBatchValidatorService = __decorate([ + Injectable( + // Cannot be root, because we need to inject context dynamically + //{providedIn: 'root'} + ), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + LocalSettingsService, + WeightLengthConversionRefService, + RoundWeightConversionRefService, + ContextService]) +], SubBatchValidatorService); +export { SubBatchValidatorService }; +export class SubBatchValidators { + static weightLengthConversion(wlService, rwService, opts) { + return (control) => SubBatchValidators.computeWeightLengthConversion(control, wlService, rwService, Object.assign(Object.assign({}, opts), { emitEvent: false, onlySelf: false })); + } + /** + * Converting length into a weight + * + * @param form + * @param wlService + * @param rwService + * @param opts + */ + static computeWeightLengthConversion(form, wlService, rwService, opts) { + var _a, _b, _c, _d; + return __awaiter(this, void 0, void 0, function* () { + const taxonNamePath = opts.taxonNamePath || 'taxonName'; + const sexPmfmId = toNumber(opts.sexPmfmId, PmfmIds.SEX).toString(); + const sexPath = (opts === null || opts === void 0 ? void 0 : opts.sexPath) || `measurementValues.${sexPmfmId}`; + const individualCountPath = opts.individualCountPath || `individualCount`; + const weightPath = opts.weightPath || 'weight'; + const parentPath = opts.parentGroupPath || 'parentGroup'; + const qvPath = isNotNil((_a = opts.qvPmfm) === null || _a === void 0 ? void 0 : _a.id) && `measurementValues.${opts.qvPmfm.id}` || undefined; + const date = opts.date || DateUtils.moment(); + const month = date.month() + 1; // month() return 0 for januray + const year = date.year(); + // Find the length Pmfm with a value + let lengthPmfmIndex = 0; + const lengthControl = (opts.lengthPmfms || []) + .map(pmfm => form.get(`measurementValues.${pmfm.id}`)) + .find((control, i) => { + lengthPmfmIndex = i; + return control && isNotNil(control.value); + }); + if (!lengthControl) { + console.warn('[sub-batch-validator] Cannot apply conversion: no length found'); + return; + } + const lengthPmfm = opts.lengthPmfms[lengthPmfmIndex]; + const taxonNameControl = form.get(taxonNamePath); + const individualCountControl = form.get(individualCountPath); + const sexControl = form.get(sexPath); + const weightControl = form.get(weightPath); + const parentControl = form.get(parentPath); + const qvControl = qvPath && form.get(qvPath); + const weightMeasurementControl = (opts === null || opts === void 0 ? void 0 : opts.weightPmfm) && form.get(`measurementValues.${opts.weightPmfm.id}`); + // Check controls + if (!taxonNameControl) + throw Error(`Cannot resolve control with path: '${taxonNamePath}'`); + if (!individualCountControl) + throw Error(`Cannot resolve control with path: '${individualCountPath}'`); + if (!weightControl) + throw Error(`Cannot resolve control with path: '${weightPath}'`); + if (lengthControl.disabled) + lengthControl.enable(opts); + if (weightControl.disabled) + weightControl.enable(opts); + const length = toNumber(lengthControl.value, null); + const taxonName = taxonNameControl.value; + const referenceTaxonId = taxonName === null || taxonName === void 0 ? void 0 : taxonName.referenceTaxonId; + const individualCount = toNumber(individualCountControl === null || individualCountControl === void 0 ? void 0 : individualCountControl.value, 1); + const sex = sexControl === null || sexControl === void 0 ? void 0 : sexControl.value; + const weightUnit = isWeightUnitSymbol((_b = opts.weightPmfm) === null || _b === void 0 ? void 0 : _b.unitLabel) ? opts.weightPmfm.unitLabel : 'kg'; + const qvValue = qvControl === null || qvControl === void 0 ? void 0 : qvControl.value; + const parentGroup = opts.parentGroup || (parentControl === null || parentControl === void 0 ? void 0 : parentControl.value); + // DEBUG + console.debug('[sub-batch-validator] Start weight-length conversion: ', Object.assign(Object.assign({}, opts), { taxonName: taxonName === null || taxonName === void 0 ? void 0 : taxonName.label, sex: sex === null || sex === void 0 ? void 0 : sex.label, lengthPmfm, length })); + // Check required values + if (isNil(referenceTaxonId) || isNilOrBlank(opts.rectangleLabel) || isNil(lengthPmfm)) { + console.warn('[sub-batch-validator] Cannot apply conversion'); + return; + } + // Compute weight, using length + if (isNotNilOrNaN(length) && length > 0) { + // Find a Weight-Length conversion + const wlConversion = yield wlService.loadByFilter({ + month, year, + lengthPmfmId: lengthPmfm.id, + referenceTaxonId, + sexId: toNumber(sex === null || sex === void 0 ? void 0 : sex.id, QualitativeValueIds.SEX.UNSEXED), + rectangleLabel: opts.rectangleLabel + }); + // Compute weight + let value = wlService.computeWeight(wlConversion, length, { + individualCount, + lengthUnit: isLengthUnitSymbol(lengthPmfm.unitLabel) ? lengthPmfm.unitLabel : undefined, + lengthPrecision: lengthPmfm.precision, + weightUnit: 'kg' + }); + // DEBUG + if (value) + console.debug(`[sub-batch-validator] Alive weight = ${value}kg`); + // Convert from alive weight, into given dressing + // Parent + if (value && parentGroup) { + const taxonGroupId = (_c = parentGroup.taxonGroup) === null || _c === void 0 ? void 0 : _c.id; + const parent = qvValue && BatchGroupUtils.findChildByQvValue(parentGroup, qvValue, opts.qvPmfm) || parentGroup; + const dressingId = (parent === null || parent === void 0 ? void 0 : parent.measurementValues) && PmfmValueUtils.toModelValue(parent.measurementValues[PmfmIds.DRESSING], { type: 'qualitative_value' }); + if (isNotNil(taxonGroupId) && isNotNil(dressingId)) { + const preservingId = parent.measurementValues && PmfmValueUtils.toModelValue(parent.measurementValues[PmfmIds.PRESERVATION], { type: 'qualitative_value' }) + || QualitativeValueIds.PRESERVATION.FRESH; + // Find a round weight conversion + const rwConversion = yield rwService.loadByFilter({ + date, taxonGroupId, dressingId: +dressingId, preservingId: +preservingId, locationId: opts.countryId + }); + // Apply round weight (inverse) conversion + if (rwConversion) { + value = rwService.inverseAliveWeight(rwConversion, value); + console.debug(`[sub-batch-validator] Dressing/preservation weight = ${value}kg`); + } + } + } + // Convert to expected weight Unit + if (value && weightUnit !== 'kg') { + // FIXME check this works ! + value = WeightUtils.convert(value, 'kg', weightUnit); + } + const weight = weightControl.value; + if (isNotNilOrNaN(value)) { + // Round to HALF_UP + const maxDecimals = toNumber((_d = opts.weightPmfm) === null || _d === void 0 ? void 0 : _d.maximumNumberDecimals, SubBatchValidators.DEFAULT_WEIGHT_LENGTH_CONVERSION_MAX_DECIMALS); + const precision = Math.pow(10, maxDecimals); + const valueStr = (Math.trunc(value * precision + 0.5) / precision).toFixed(maxDecimals); + if (!weight || +weight.value !== +valueStr) { + // DEBUG + console.info(`[sub-batch-validator] Computed weight, by length conversion: ${value}${weightUnit}`); + weightControl.patchValue({ + value: +valueStr, + methodId: MethodIds.CALCULATED_WEIGHT_LENGTH, + computed: true, + estimated: false + }, opts); + } + if (weightMeasurementControl && +weightMeasurementControl.value !== +valueStr) { + weightMeasurementControl === null || weightMeasurementControl === void 0 ? void 0 : weightMeasurementControl.setValue(valueStr, opts); + } + } + else { + if (!weight || weight.computed === true && isNotNil(weight.value)) { + // DEBUG + console.debug('[sub-batch-validator] Reset previously computed weight'); + weightControl.patchValue({ + value: null, + computed: false, + estimated: false, + methodId: null + }, opts); + weightMeasurementControl === null || weightMeasurementControl === void 0 ? void 0 : weightMeasurementControl.setValue(null, opts); + } + } + } + return undefined; + }); + } +} +/** + * Default maxDecimals, for a weight calculated by a Weight-Length conversion + */ +SubBatchValidators.DEFAULT_WEIGHT_LENGTH_CONVERSION_MAX_DECIMALS = 6; +//# sourceMappingURL=sub-batch.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/sub/sub-batch.validator.js.map b/out-tsc/app/app/trip/batch/sub/sub-batch.validator.js.map new file mode 100644 index 000000000..5ebc22cad --- /dev/null +++ b/out-tsc/app/app/trip/batch/sub/sub-batch.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sub-batch.validator.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/sub/sub-batch.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/sub/sub-batches.modal.js b/out-tsc/app/app/trip/batch/sub/sub-batches.modal.js new file mode 100644 index 000000000..7e05d7825 --- /dev/null +++ b/out-tsc/app/app/trip/batch/sub/sub-batches.modal.js @@ -0,0 +1,499 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, Component, Inject, Injector, Input, ViewChild } from '@angular/core'; +import { Batch } from '../common/batch.model'; +import { Alerts, AppFormUtils, AudioProvider, firstNotNilPromise, isEmptyArray, isNil, isNotNilOrBlank, LocalSettingsService, PlatformService, toBoolean, } from '@sumaris-net/ngx-components'; +import { SubBatchForm } from './sub-batch.form'; +import { SUB_BATCH_RESERVED_END_COLUMNS, SUB_BATCHES_TABLE_OPTIONS, SubBatchesTable } from './sub-batches.table'; +import { IonContent, ModalController } from '@ionic/angular'; +import { isObservable, Subject } from 'rxjs'; +import { createAnimation } from '@ionic/core'; +import { SubBatch } from './sub-batch.model'; +import { BatchGroup } from '../group/batch-group.model'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { ContextService } from '@app/shared/context.service'; +import { TripContextService } from '@app/trip/trip-context.service'; +import { environment } from '@environments/environment'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +import { SelectionModel } from '@angular/cdk/collections'; +import { SubBatchValidatorService } from '@app/trip/batch/sub/sub-batch.validator'; +export const SUB_BATCH_MODAL_RESERVED_START_COLUMNS = ['parentGroup', 'taxonName']; +export const SUB_BATCH_MODAL_RESERVED_END_COLUMNS = SUB_BATCH_RESERVED_END_COLUMNS.filter(col => col !== 'individualCount'); +let SubBatchesModal = class SubBatchesModal extends SubBatchesTable { + constructor(injector, viewCtrl, settings, audio, platform, context, options) { + super(injector, null /*no validator = not editable*/, options); + this.injector = injector; + this.viewCtrl = viewCtrl; + this.settings = settings; + this.audio = audio; + this.platform = platform; + this.context = context; + this.$title = new Subject(); + this.animationSelection = new SelectionModel(false, []); + this.showBluetoothIcon = false; + this.inlineEdition = false; // Disable row edition (no validator) + this.confirmBeforeDelete = true; // Ask confirmation before delete + this.allowRowDetail = false; // Disable click on a row + this.defaultSortBy = 'id'; + this.defaultSortDirection = 'desc'; + this.selection = new SelectionModel(false); + // default values + this.showCommentsColumn = false; + this.showParentColumn = false; + // TODO: for DEV only --- + this.debug = !environment.production; + } + get selectedRow() { + return this.selection.selected[0] || this.editedRow; + } + set selectedRow(row) { + this.selection.clear(); + if (row) + this.selection.select(row); + this.markForCheck(); + } + get dirty() { + return super.dirty || (this.form && this.form.dirty); + } + get valid() { + return this.form && this.form.valid; + } + get invalid() { + return this.form && this.form.invalid; + } + set i18nSuffix(value) { + this.i18nColumnSuffix = value; + } + get i18nSuffix() { + return this.i18nColumnSuffix; + } + ngOnInit() { + if (this.disabled) { + this.showForm = false; + this.disable(); + } + super.ngOnInit(); + // default values + this.mobile = toBoolean(this.mobile, this.platform.mobile); + this._isOnFieldMode = this.settings.isOnFieldMode(this.usageMode); + this.showIndividualCount = !this._isOnFieldMode; // Hide individual count on mobile device + this.showParentGroup = toBoolean(this.showParentGroup, true); + this.showForm = this._enabled && this.showForm && this.form && true; + this.playSound = toBoolean(this.playSound, this.mobile); + this.showBluetoothIcon = this.showBluetoothIcon && this._enabled && this.platform.isApp(); + this.markAsReady(); + this.load(); + } + load() { + return __awaiter(this, void 0, void 0, function* () { + try { + // Wait for table pmfms + const pmfms = yield firstNotNilPromise(this.pmfms$, { stop: this.destroySubject, stopError: false }); + yield this.initForm(pmfms); + // Read data + const data = isObservable(this.data) ? yield this.data.toPromise() : this.data; + // Apply data to table + this.setValue(data); + // Compute the title + yield this.computeTitle(); + } + catch (err) { + console.error(this.logPrefix + 'Error while loading modal'); + } + }); + } + initForm(pmfms) { + return __awaiter(this, void 0, void 0, function* () { + if (!pmfms || !this.form) + return; // skip + // Configure form's properties + this.form.qvPmfm = this.qvPmfm; + yield this.form.setPmfms(pmfms); + // Mark form as ready + this.form.markAsReady(); + yield this.form.ready(); + // Reset the form, using default value + let defaultBatch; + if (this.parentGroup) { + defaultBatch = new SubBatch(); + defaultBatch.parentGroup = this.parentGroup; + } + yield this.resetForm(defaultBatch); + // Update table content when changing parent + this.registerSubscription(this.form.form.get('parentGroup').valueChanges + // Init table with existing values + //.pipe(startWith(() => this._defaultValue && this._defaultValue.parent)) + .subscribe(parent => this.onParentChanges(parent))); + }); + } + markAsReady() { + super.markAsReady(); + // Should be done inside initForm(), when pmfms has set + //this.form?.markAsReady(); + } + ready() { + var _a; + return __awaiter(this, void 0, void 0, function* () { + yield ((_a = this.form) === null || _a === void 0 ? void 0 : _a.ready()); + }); + } + setValue(data, opts) { + // DEBUG + //console.debug('[sub-batches-modal] Applying value to table...', data); + // Compute the first rankOrder to save + this._initialMaxRankOrder = (data || []).reduce((max, b) => Math.max(max, b.rankOrder || 0), 0); + super.setValue(data, opts); + } + doSubmitForm(event, row) { + const _super = Object.create(null, { + doSubmitForm: { get: () => super.doSubmitForm } + }); + return __awaiter(this, void 0, void 0, function* () { + yield this.scrollToTop(); + const done = yield _super.doSubmitForm.call(this, event, row); + // Forget the edited row + if (done) { + this.selectedRow = null; + this.markForCheck(); + } + return done; + }); + } + mapPmfms(pmfms) { + pmfms = super.mapPmfms(pmfms); + const parentTaxonGroupId = this.parentGroup && this.parentGroup.taxonGroup && this.parentGroup.taxonGroup.id; + if (isNil(parentTaxonGroupId)) + return pmfms; + // Filter using parent's taxon group + return pmfms.filter(pmfm => !PmfmUtils.isDenormalizedPmfm(pmfm) + || isEmptyArray(pmfm.taxonGroupIds) + || pmfm.taxonGroupIds.includes(parentTaxonGroupId)); + } + cancel(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.dirty) { + const saveBeforeLeave = yield Alerts.askSaveBeforeLeave(this.alertCtrl, this.translate, event); + // User cancelled + if (isNil(saveBeforeLeave) || event && event.defaultPrevented) { + return; + } + // Is user confirm: close normally + if (saveBeforeLeave === true) { + this.close(event); + return; + } + } + yield this.viewCtrl.dismiss(); + }); + } + close(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.loading) + return; // avoid many call + if (this.debug) + console.debug('[sub-batch-modal] Closing modal...'); + if (this.debug && this.form && this.form.dirty && this.form.invalid) { + AppFormUtils.logFormErrors(this.form.form, '[sub-batch-modal] '); + // Continue + } + this.markAsLoading(); + this.resetError(); + try { + // Save changes + const saved = yield this.save(); + if (!saved) + return; // Error + yield this.viewCtrl.dismiss(this.getValue()); + } + catch (err) { + console.error(err); + this.setError(err && err.message || err); + this.markAsLoaded(); + } + }); + } + isNewRow(row) { + return row.currentData.rankOrder > this._initialMaxRankOrder; + } + editRow(event, row) { + row = row || this.selectedRow; + if (!row) + throw new Error('Missing row argument, or a row selection.'); + // Confirm last edited row + const confirmed = this.confirmEditCreate(); + if (!confirmed) + return false; + // Copy the row into the form + this.form.setValue(this.toEntity(row), { emitEvent: true }); + // Then remove the row + row.startEdit(); + // Mark the row as edited + this.selectedRow = row; + return true; + } + selectRow(event, row) { + if ((event === null || event === void 0 ? void 0 : event.defaultPrevented) || !row) + return; + if (event) + event.preventDefault(); + this.selection.clear(); + this.selection.select(row); + } + /* -- protected methods -- */ + computeTitle() { + return __awaiter(this, void 0, void 0, function* () { + let titlePrefix; + if (!this.showParentGroup && this.parentGroup) { + const label = BatchUtils.parentToString(this.parentGroup); + titlePrefix = yield this.translate.get('TRIP.BATCH.EDIT.INDIVIDUAL.TITLE_PREFIX', { label }).toPromise(); + } + else { + titlePrefix = ''; + } + this.$title.next(titlePrefix + (yield this.translate.get('TRIP.BATCH.EDIT.INDIVIDUAL.TITLE').toPromise())); + }); + } + onParentChanges(parent) { + return __awaiter(this, void 0, void 0, function* () { + // Skip if same parent + if (Batch.equals(this.parentGroup, parent)) + return; + // Store the new parent, in order apply filter in onLoadData() + this.parentGroup = isNotNilOrBlank(parent) ? parent : undefined; + // If pending changes, save new rows + if (this.dirty) { + const saved = yield this.save(); + if (!saved) { + console.error('Could not save the table'); + this.form.error = 'ERROR.SAVE_DATA_ERROR'; + return; + } + } + // Call refresh on datasource, to force a data reload (will apply filter calling onLoadData()) + this.onRefresh.emit(); + // TODO BLA: refresh PMFM, with the new parent species ? + }); + } + onLoadData(data) { + // Filter by parent group + if (data && this.parentGroup) { + const showIndividualCount = this.showIndividualCount; // Read once the getter value + const hiddenData = []; + let maxRankOrder = this._previousMaxRankOrder || this._initialMaxRankOrder; + const filteredData = data.reduce((res, b) => { + maxRankOrder = Math.max(maxRankOrder, b.rankOrder || 0); + // Filter on individual count = 1 when individual count is hide + // AND same parent + if ((showIndividualCount || b.individualCount === 1) + && Batch.equals(this.parentGroup, b.parentGroup)) { + return res.concat(b); + } + hiddenData.push(b); + return res; + }, []); + this._hiddenData = hiddenData; + this._previousMaxRankOrder = maxRankOrder; + return super.onLoadData(filteredData); + } + // Not filtered + else { + this._hiddenData = []; + return super.onLoadData(data); + } + } + onSaveData(data) { + // Append hidden data to the list, then save + return data.concat(this._hiddenData || []); + } + getMaxRankOrder() { + const _super = Object.create(null, { + getMaxRankOrder: { get: () => super.getMaxRankOrder } + }); + return __awaiter(this, void 0, void 0, function* () { + const rowMaxRankOrder = yield _super.getMaxRankOrder.call(this); + this._previousMaxRankOrder = Math.max(rowMaxRankOrder, this._previousMaxRankOrder || this._initialMaxRankOrder); + return this._previousMaxRankOrder; + }); + } + addEntityToTable(newBatch) { + const _super = Object.create(null, { + addEntityToTable: { get: () => super.addEntityToTable } + }); + return __awaiter(this, void 0, void 0, function* () { + const row = yield _super.addEntityToTable.call(this, newBatch); + // Highlight the row, few seconds + if (row) + this.onRowChanged(row); + return row; + }); + } + updateEntityToTable(updatedBatch, row, opts) { + const _super = Object.create(null, { + updateEntityToTable: { get: () => super.updateEntityToTable } + }); + return __awaiter(this, void 0, void 0, function* () { + const updatedRow = yield _super.updateEntityToTable.call(this, updatedBatch, row, opts); + // Highlight the row, few seconds + if (updatedRow) + this.onRowChanged(updatedRow); + return updatedRow; + }); + } + onInvalidForm() { + const _super = Object.create(null, { + onInvalidForm: { get: () => super.onInvalidForm } + }); + return __awaiter(this, void 0, void 0, function* () { + // Play an error beep, if on field + if (this.playSound) + yield this.audio.playBeepError(); + return _super.onInvalidForm.call(this); + }); + } + /** + * When a row has been edited, play a beep and highlight the row (during few seconds) + * + * @param row + * @pram times duration of highlight + */ + onRowChanged(row) { + return __awaiter(this, void 0, void 0, function* () { + // Play a beep + if (this.playSound) + this.audio.playBeepConfirm(); + // Selection the animated row (this will apply CSS class mat-row-animated) + this.animationSelection.select(row); + this.markForCheck(); + this.cd.detectChanges(); + this.createRowAnimation(document.querySelector('.mat-row-animated')) + .duration(500) + .play() + .then(() => { + // If row is still selected: unselect it + if (this.animationSelection.isSelected(row)) { + this.animationSelection.deselect(row); + this.markForCheck(); + } + }); + }); + } + trackByFn(index, row) { + return row.currentData.rankOrder; + } + scrollToTop() { + return __awaiter(this, void 0, void 0, function* () { + return this.content.scrollToTop(); + }); + } + createRowAnimation(rowElement) { + const cellElements = rowElement && Array.from(rowElement.querySelectorAll('.mat-cell')); + if (!rowElement || isEmptyArray(cellElements)) { + return createAnimation(); + } + const rowAnimation = createAnimation() + .addElement(rowElement) + .beforeStyles({ 'transition-timing-function': 'ease-in-out', background: 'var(--ion-color-accent)' }) + .keyframes([ + { offset: 0, opacity: '0.4', transform: 'translateX(50%)', background: 'var(--ion-color-accent)' }, + { offset: 0.5, opacity: '0.9', transform: 'translateX(2%)', background: 'var(--ion-color-accent)' }, + { offset: 1, opacity: '1', transform: 'translateX(0)', background: 'var(--ion-color-base)' } + ]) + .afterStyles({ + background: 'rgba(var(--ion-color-accent-rgb), 0.8)' + }); + const cellAnimation = createAnimation() + .addElement(cellElements) + .beforeStyles({ + 'transition-timing-function': 'ease-in-out', + color: 'var(--ion-color-accent-contrast)', + 'font-weight': 'bold' + }) + .keyframes([ + { offset: 0, color: 'var(--ion-color-accent-contrast)', 'font-weight': 'bold' }, + { offset: 0.5, color: 'var(--ion-color-accent-contrast)', 'font-weight': 'bold' }, + { offset: 1, color: 'var(--ion-color-base)', 'font-weight': 'normal' } + ]) + .afterStyles({ + 'font-weight': '' + }); + return createAnimation().addAnimation([rowAnimation, cellAnimation]); + } +}; +__decorate([ + Input(), + __metadata("design:type", Function) +], SubBatchesModal.prototype, "onNewParentClick", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubBatchesModal.prototype, "data", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SubBatchesModal.prototype, "showParentGroup", void 0); +__decorate([ + Input(), + __metadata("design:type", BatchGroup) +], SubBatchesModal.prototype, "parentGroup", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], SubBatchesModal.prototype, "maxVisibleButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], SubBatchesModal.prototype, "maxItemCountForButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SubBatchesModal.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SubBatchesModal.prototype, "playSound", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubBatchesModal.prototype, "showBluetoothIcon", void 0); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], SubBatchesModal.prototype, "i18nSuffix", null); +__decorate([ + ViewChild('form', { static: true }), + __metadata("design:type", SubBatchForm) +], SubBatchesModal.prototype, "form", void 0); +__decorate([ + ViewChild('content'), + __metadata("design:type", IonContent) +], SubBatchesModal.prototype, "content", void 0); +SubBatchesModal = __decorate([ + Component({ + selector: 'app-sub-batches-modal', + styleUrls: ['sub-batches.modal.scss'], + templateUrl: 'sub-batches.modal.html', + providers: [ + { provide: ContextService, useExisting: TripContextService }, + { provide: SubBatchValidatorService, useClass: SubBatchValidatorService }, + { + provide: SUB_BATCHES_TABLE_OPTIONS, + useFactory: () => ({ + prependNewElements: true, + suppressErrors: true, + reservedStartColumns: SUB_BATCH_MODAL_RESERVED_START_COLUMNS, + reservedEndColumns: SUB_BATCH_MODAL_RESERVED_END_COLUMNS + }) + } + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __param(6, Inject(SUB_BATCHES_TABLE_OPTIONS)), + __metadata("design:paramtypes", [Injector, + ModalController, + LocalSettingsService, + AudioProvider, + PlatformService, + ContextService, Object]) +], SubBatchesModal); +export { SubBatchesModal }; +//# sourceMappingURL=sub-batches.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/sub/sub-batches.modal.js.map b/out-tsc/app/app/trip/batch/sub/sub-batches.modal.js.map new file mode 100644 index 000000000..2c323a960 --- /dev/null +++ b/out-tsc/app/app/trip/batch/sub/sub-batches.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sub-batches.modal.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/sub/sub-batches.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/sub/sub-batches.table.js b/out-tsc/app/app/trip/batch/sub/sub-batches.table.js new file mode 100644 index 000000000..2d99543fe --- /dev/null +++ b/out-tsc/app/app/trip/batch/sub/sub-batches.table.js @@ -0,0 +1,823 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, Component, Inject, InjectionToken, Injector, Input, ViewChild, } from '@angular/core'; +import { isObservable } from 'rxjs'; +import { Validators } from '@angular/forms'; +import { AppFormUtils, EntityFilter, EntityUtils, InMemoryEntitiesService, isEmptyArray, isNil, isNilOrBlank, isNotEmptyArray, isNotNil, ReferentialUtils, startsWithUpperCase, toBoolean, } from '@sumaris-net/ngx-components'; +import { BaseMeasurementsTable } from '@app/data/measurement/measurements-table.class'; +import { Batch } from '../common/batch.model'; +import { SubBatchValidatorService } from './sub-batch.validator'; +import { SubBatchForm } from './sub-batch.form'; +import { MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { SubBatchModal } from './sub-batch.modal'; +import { AcquisitionLevelCodes, MethodIds, PmfmIds, QualitativeLabels } from '@app/referential/services/model/model.enum'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { SubBatch } from './sub-batch.model'; +import { PmfmValidators } from '@app/referential/services/validator/pmfm.validators'; +import { environment } from '@environments/environment'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { ContextService } from '@app/shared/context.service'; +import { TripContextService } from '@app/trip/trip-context.service'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +export const SUB_BATCH_RESERVED_START_COLUMNS = ['parentGroup', 'taxonName']; +export const SUB_BATCH_RESERVED_END_COLUMNS = ['individualCount', 'comments']; +export const SUB_BATCHES_TABLE_OPTIONS = new InjectionToken('SubBatchesTableOptions'); +export class SubBatchFilter extends EntityFilter { + asFilterFn() { + return (data) => (isNil(this.operationId) || data.operationId === this.operationId) + && (isNil(this.parentId) || data.parentId === this.parentId); + } +} +let SubBatchesTable = class SubBatchesTable extends BaseMeasurementsTable { + constructor(injector, validatorService, options) { + super(injector, SubBatch, SubBatchFilter, new InMemoryEntitiesService(SubBatch, SubBatchFilter, { + onLoad: (data) => this.onLoadData(data), + onSave: (data) => this.onSaveData(data), + equals: Batch.equals, + sortByReplacement: { + id: 'rankOrder', + parentGroup: 'parentGroup.rankOrder', + }, + }), validatorService, Object.assign(Object.assign({}, options), { i18nColumnPrefix: 'TRIP.BATCH.TABLE.', i18nPmfmPrefix: 'TRIP.BATCH.PMFM.', mapPmfms: (pmfms) => this.mapPmfms(pmfms), onPrepareRowForm: (form) => this.onPrepareRowForm(form) })); + this._availableParents = []; + this._showTaxonNameInParentAutocomplete = true; + this._availableSortedParents = []; + this.enableWeightConversion = false; + this.showForm = false; + this.useSticky = false; + this.weightDisplayDecimals = 2; + this.compactFields = true; + this.selectInputContent = AppFormUtils.selectInputContent; + this.referentialRefService = injector.get(ReferentialRefService); + this.tabindex = 1; + this.inlineEdition = !this.mobile; + // Default value + this.acquisitionLevel = AcquisitionLevelCodes.SORTING_BATCH_INDIVIDUAL; + this.showCommentsColumn = !this.mobile; + // DEBUG + this.debug = !environment.production; + this.logPrefix = '[sub-batches-table] '; + } + set qvPmfm(value) { + if (this._qvPmfm !== value) { + this._qvPmfm = value; + // If already loaded, re apply pmfms, to be able to execute mapPmfms + if (this.loaded) + this.refreshPmfms(); + } + } + get qvPmfm() { + return this._qvPmfm; + } + set availableParents(parents) { + var _a; + if (!parents) + return; // Skip + if (isObservable(parents)) { + (_a = this._parentSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + const subscription = parents.subscribe((values) => this.setAvailableParents(values)); + this._parentSubscription = subscription; + this.registerSubscription(subscription); + subscription.add(() => { + this.unregisterSubscription(subscription); + this._parentSubscription = null; + }); + } + else if (Array.isArray(parents) && parents !== this._availableParents) { + this.setAvailableParents(parents); + } + } + get availableParents() { + return this._availableParents; + } + set value(data) { + this.setValue(data); + } + get value() { + return this.getValue(); + } + set showParentColumn(value) { + this.setShowColumn('parent', value); + } + get showParentColumn() { + return this.getShowColumn('parent'); + } + set showTaxonNameColumn(value) { + this.setShowColumn('taxonName', value); + this.updateParentAutocomplete(); + } + get showTaxonNameColumn() { + return this.getShowColumn('taxonName'); + } + set showTaxonNameInParentAutocomplete(value) { + this._showTaxonNameInParentAutocomplete = value; + this.updateParentAutocomplete(); + } + set showIndividualCount(value) { + this.setShowColumn('individualCount', value); + } + get showIndividualCount() { + return this.getShowColumn('individualCount') && this.displayedColumns.findIndex((c) => c === 'individualCount') !== -1; + } + set showWeightColumn(value) { + this.setShowColumn('weight', value); + } + get showWeightColumn() { + return this.getShowColumn('weight'); + } + set showCommentsColumn(value) { + this.setShowColumn('comments', value); + } + get showCommentsColumn() { + return this.getShowColumn('comments'); + } + ngOnInit() { + super.ngOnInit(); + // Parent combo + this.registerAutocompleteField('parentGroup', { + suggestFn: (value, options) => this.suggestParent(value, options), + showAllOnFocus: true, + mobile: this.mobile, + }); + this.updateParentAutocomplete(); + this.registerAutocompleteField('taxonName', { + suggestFn: (value, options) => this.suggestTaxonNames(value, options), + showAllOnFocus: true, + mobile: this.mobile, + }); + if (this.inlineEdition) { + // can be override by subclasses + // Create listener on column 'DISCARD_OR_LANDING' value changes + this.registerSubscription(this.registerCellValueChanges('discard', 'measurementValues.' + PmfmIds.DISCARD_OR_LANDING.toString(), true).subscribe((value) => { + if (!this.editedRow) + return; // Should never occur + const row = this.editedRow; + const controls = row.validator.controls['measurementValues'].controls; + if (ReferentialUtils.isNotEmpty(value) && value.label === QualitativeLabels.DISCARD_OR_LANDING.DISCARD) { + if (controls[PmfmIds.DISCARD_REASON]) { + if (row.validator.enabled) { + controls[PmfmIds.DISCARD_REASON].enable(); + } + controls[PmfmIds.DISCARD_REASON].setValidators(Validators.required); + controls[PmfmIds.DISCARD_REASON].updateValueAndValidity(); + } + } + else { + if (controls[PmfmIds.DISCARD_REASON]) { + controls[PmfmIds.DISCARD_REASON].disable(); + controls[PmfmIds.DISCARD_REASON].setValue(null); + controls[PmfmIds.DISCARD_REASON].setValidators(null); + } + } + })); + this.registerSubscription(this.registerCellValueChanges('parentGroup', 'parentGroup', true).subscribe((parentGroup) => { + if (!this.editedRow) + return; // Skip + const parenTaxonGroupId = parentGroup && parentGroup.taxonGroup && parentGroup.taxonGroup.id; + if (isNil(parenTaxonGroupId)) + return; // Skip + const row = this.editedRow; + const formEnabled = row.validator.enabled; + const controls = row.validator.controls['measurementValues'].controls; + (this.pmfms || []).forEach((pmfm) => { + const enable = !pmfm.isComputed && + (!PmfmUtils.isDenormalizedPmfm(pmfm) || isEmptyArray(pmfm.taxonGroupIds) || pmfm.taxonGroupIds.includes(parenTaxonGroupId)); + const control = controls[pmfm.id]; + // Update control state + if (control) { + if (enable) { + if (formEnabled) { + control.enable(); + } + control.setValidators(PmfmValidators.create(pmfm)); + } + else { + control.disable(); + control.setValidators(null); + control.setValue(null); + } + } + }); + })); + } + } + markAsLoading(opts) { + super.markAsLoading(opts); + // WARN: use to avoid data reload, when pmfms changed + if ((opts === null || opts === void 0 ? void 0 : opts.onlySelf) !== false) { + this.dataSource.markAsLoading(); + } + } + doSubmitForm(event, row) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + // Skip if loading, + // or if previous edited row not confirmed + //await this.waitIdle(); + if (this.loading) { + console.warn('Table is busy: cannot submit form'); + return false; + } + if (row !== this.editedRow && !this.confirmEditCreate()) + return false; + yield AppFormUtils.waitWhilePending(this.form); + if (this.form.invalid) { + yield this.onInvalidForm(); + return false; + } + const subBatch = this.form.form.value; + subBatch.individualCount = isNotNil(subBatch.individualCount) ? subBatch.individualCount : 1; + // Store computed weight into measurement, if any + if (this.weightPmfm && isNotNil((_a = subBatch.weight) === null || _a === void 0 ? void 0 : _a.value)) { + // Convert + subBatch.measurementValues[this.weightPmfm.id] = (_b = subBatch.weight) === null || _b === void 0 ? void 0 : _b.value; + delete subBatch.weight; + } + yield this.resetForm(subBatch, { focusFirstEmpty: true }); + // Add batch to table + if (!row) { + yield this.addEntityToTable(subBatch); + } + // Update existing row + else { + yield this.updateEntityToTable(subBatch, row); + } + return true; + }); + } + add(batches, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (toBoolean(opts && opts.linkDataToParentGroup, true)) { + this.linkDataToParentGroup(batches); + } + for (const b of batches) { + yield this.addEntityToTable(b); + } + }); + } + markAsPristine(opts) { + super.markAsPristine(); + if (this.form) + this.form.markAsPristine(opts); + } + markAsUntouched() { + super.markAsUntouched(); + if (this.form) + this.form.markAsUntouched(); + } + enable(opts) { + super.enable(opts); + if (this.showForm && this.form && this.form.disabled) { + this.form.enable(opts); + } + } + disable(opts) { + super.disable(opts); + if (this.showForm && this.form && this.form.enabled) { + this.form.disable(opts); + } + } + /** + * Allow to set value + * + * @param data + * @param opts + */ + setValue(data, opts) { + this.memoryDataService.value = data; + //this.markAsLoaded(); + } + /* -- protected methods -- */ + getValue() { + return this.memoryDataService.value; + } + prepareEntityToSave(data) { + // Override by subclasses + } + updateParentAutocomplete() { + if (!this.autocompleteFields.parentGroup) + return; // skip + const taxonGroupAttributes = this.settings.getFieldDisplayAttributes('taxonGroup'); + const taxonNameAttributes = this.settings.getFieldDisplayAttributes('taxonName'); + const parentToStringOptions = { + pmfm: this.displayParentPmfm, + taxonGroupAttributes, + taxonNameAttributes, + }; + if (this._showTaxonNameInParentAutocomplete) { + if (this.showTaxonNameColumn) { + this.autocompleteFields.parentGroup.attributes = ['rankOrder'].concat(taxonGroupAttributes.map((attr) => 'taxonGroup.' + attr)); + } + else { + this.autocompleteFields.parentGroup.attributes = ['taxonGroup.' + taxonGroupAttributes[0]].concat(taxonNameAttributes.map((attr) => 'taxonName.' + attr)); + } + } + else { + // show only taxon group + this.autocompleteFields.parentGroup.attributes = taxonGroupAttributes.map((attr) => 'taxonGroup.' + attr); + } + this.autocompleteFields.parentGroup.displayWith = (value) => BatchUtils.parentToString(value, parentToStringOptions); + } + resetForm(previousBatch, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.form) + throw new Error('Form not exists'); + yield this.ready(); + // Finish form configuration + this.form.availableParents = this._availableSortedParents; + this.form.markAsReady(); + this.form.error = null; + // Create a new batch + const newBatch = new SubBatch(); + // Reset individual count, if manual mode + if (this.form.enableIndividualCount) { + newBatch.individualCount = null; + } + else if (isNil(newBatch.individualCount)) { + newBatch.individualCount = 1; + } + // Copy QV value from previous + if (previousBatch) { + // Copy parent + newBatch.parentGroup = previousBatch.parentGroup; + // Copy QV PMFM value, if any + if (this.qvPmfm && this.form.freezeQvPmfm) { + newBatch.measurementValues[this.qvPmfm.id] = previousBatch.measurementValues[this.qvPmfm.id]; + } + // Copy taxon name (if freezed) + if (previousBatch.taxonName && this.form.freezeTaxonName) { + newBatch.taxonName = previousBatch.taxonName; + } + else { + // Set taxonName, is only one in list + const taxonNames = this.form.taxonNames; + if (taxonNames && taxonNames.length === 1) { + newBatch.taxonName = taxonNames[0]; + } + } + } + // Reset the form with the new batch + MeasurementValuesUtils.normalizeEntityToForm(newBatch, this.pmfms, this.form.form); + this.form.setValue(newBatch, { emitEvent: true, normalizeEntityToForm: false /*already done*/ }); + // If need, enable the form + if (this.form.disabled) { + this.form.enable(opts); + } + if (opts && opts.focusFirstEmpty === true) { + setTimeout(() => { + this.form.focusFirstEmptyInput(); + this.form.markAsPristine({ onlySelf: true }); + this.form.markAsUntouched({ onlySelf: true }); + }); + } + else { + this.form.markAsPristine({ onlySelf: true }); + this.form.markAsUntouched({ onlySelf: true }); + } + if (!opts || opts.emitEvent !== false) { + this.markForCheck(); + } + }); + } + suggestParent(value, options) { + return __awaiter(this, void 0, void 0, function* () { + if (EntityUtils.isNotEmpty(value, 'label')) { + return [value]; + } + value = (typeof value === 'string' && value !== '*' && value) || undefined; + if (isNil(value)) + return this._availableSortedParents; // All + if (this.debug) + console.debug(`[sub-batch-table] Searching parent {${value || '*'}}...`); + const ucValueParts = value.trim().toUpperCase().split(' ', 1); + // Search on labels (taxonGroup or taxonName) + return this._availableSortedParents.filter((p) => (p.taxonGroup && startsWithUpperCase(p.taxonGroup.label, ucValueParts[0])) || + (p.taxonName && startsWithUpperCase(p.taxonName.label, ucValueParts.length === 2 ? ucValueParts[1] : ucValueParts[0]))); + }); + } + suggestTaxonNames(value, options) { + return __awaiter(this, void 0, void 0, function* () { + const parent = this.editedRow && this.editedRow.validator.get('parentGroup').value; + if (isNilOrBlank(value) && isNil(parent)) + return { data: [] }; + return this.programRefService.suggestTaxonNames(value, { + programLabel: this.programLabel, + searchAttribute: options && options.searchAttribute, + taxonGroupId: (parent && parent.taxonGroup && parent.taxonGroup.id) || undefined, + }); + }); + } + mapPmfms(pmfms) { + var _a; + if (!pmfms || !pmfms.length) + return pmfms; // Skip (no pmfms) + this._initialPmfms = pmfms; // Copy original pmfms list + if (this._qvPmfm) { + // Make sure QV Pmfm is required (need to link with parent batch) + const index = pmfms.findIndex((pmfm) => pmfm.id === this._qvPmfm.id); + if (index !== -1) { + // Replace original pmfm by a clone, with hidden=true + const qvPmfm = this._qvPmfm.clone(); + qvPmfm.hidden = false; + qvPmfm.required = true; + pmfms[index] = qvPmfm; + } + } + // Filter on parent taxon groups + const taxonGroupIds = (this._availableParents || []).map((parent) => { var _a; return (_a = parent.taxonGroup) === null || _a === void 0 ? void 0 : _a.id; }).filter(isNotNil); + if (isNotEmptyArray(taxonGroupIds)) { + pmfms = pmfms.map((pmfm) => { + if (PmfmUtils.isDenormalizedPmfm(pmfm)) { + // Hidden PMFM that are not for existing taxon groups + if (isNotEmptyArray(pmfm.taxonGroupIds) && !pmfm.taxonGroupIds.some((id) => taxonGroupIds.includes(id))) { + pmfm = pmfm.clone(); // Keep original + pmfm.hidden = true; + pmfm.required = false; + } + } + return pmfm; + }); + } + // Check weight-length conversion is enabled + { + const index = pmfms.findIndex((p) => p.id === PmfmIds.BATCH_CALCULATED_WEIGHT_LENGTH || p.methodId === MethodIds.CALCULATED_WEIGHT_LENGTH); + if (index !== -1) { + this.weightPmfm = (_a = pmfms[index]) === null || _a === void 0 ? void 0 : _a.clone(); + //this.weightPmfm.hidden = !this.mobile; + this.weightPmfm.maximumNumberDecimals = this.weightPmfm.maximumNumberDecimals || 6; + this.weightPmfm.required = false; + this.enableWeightConversion = true; + // FIXME + /*if (this.weightDisplayedUnit) { + this.weightPmfm = PmfmUtils.setWeightUnitConversion(this.weightPmfm, this.weightDisplayedUnit); + }*/ + pmfms[index] = this.weightPmfm; + } + else { + this.enableWeightConversion = false; + } + } + return pmfms; + } + openNewRowDetail() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail) + return false; + const data = yield this.openDetailModal(); + if (data) { + yield this.addEntityToTable(data); + } + return true; + }); + } + openRow(id, row) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail) + return false; + if (this.onOpenRow.observers.length) { + this.onOpenRow.emit(row); + return true; + } + const data = this.toEntity(row, true); + // Prepare entity measurement values + this.prepareEntityToSave(data); + const updatedData = yield this.openDetailModal(data); + if (updatedData) { + yield this.updateEntityToTable(updatedData, row); + } + else { + this.editedRow = null; + } + return true; + }); + } + openDetailModal(batch) { + return __awaiter(this, void 0, void 0, function* () { + const isNew = !batch && true; + if (isNew) { + batch = new SubBatch(); + yield this.onNewEntity(batch); + } + const modal = yield this.modalCtrl.create({ + component: SubBatchModal, + componentProps: { + programLabel: this.programLabel, + acquisitionLevel: this.acquisitionLevel, + availableParents: this.availableParents, + data: batch, + isNew, + disabled: this.disabled, + qvPmfm: this.qvPmfm, + showParent: this.showParentColumn, + showTaxonGroup: false, + showTaxonName: this.showTaxonNameColumn, + showIndividualCount: this.showIndividualCount, + }, + keyboardClose: true, + }); + // Open the modal + yield modal.present(); + // Wait until closed + const { data } = yield modal.onDidDismiss(); + if (data && this.debug) + console.debug('[batches-table] Batch modal result: ', data); + return data instanceof SubBatch ? data : undefined; + }); + } + addEntityToTable(newBatch) { + const _super = Object.create(null, { + addEntityToTable: { get: () => super.addEntityToTable } + }); + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.debug('[batches-table] Adding batch to table:', newBatch); + // Make sure individual count if init + newBatch.individualCount = isNotNil(newBatch.individualCount) ? newBatch.individualCount : 1; + const pmfms = this.pmfms || []; + MeasurementValuesUtils.normalizeEntityToForm(newBatch, pmfms); + // If individual count column is shown (can be greater than 1) + if (this.showIndividualCount) { + // Try to find an identical sub-batch + const row = this.dataSource.getRows().find((r) => BatchUtils.canMergeSubBatch(newBatch, r.currentData, pmfms)); + // Already exists: increment individual count + if (row) { + if (row.validator) { + const control = row.validator.get('individualCount'); + control.setValue((control.value || 0) + newBatch.individualCount); + } + else { + row.currentData.individualCount = (row.currentData.individualCount || 0) + newBatch.individualCount; + this.markForCheck(); + } + this.markAsDirty(); + // restore as edited row + this.editedRow = row; + return row; + } + } + // The batch does not exists: add it tp the table + return yield _super.addEntityToTable.call(this, newBatch); + }); + } + setAvailableParents(parents, opts) { + return __awaiter(this, void 0, void 0, function* () { + this._availableParents = parents; + // Sort parents by Tag-ID, or rankOrder + if (this.displayParentPmfm) { + this._availableSortedParents = EntityUtils.sort(parents.slice(), 'measurementValues.' + this.displayParentPmfm.id.toString()); + } + else { + this._availableSortedParents = EntityUtils.sort(parents.slice(), 'rankOrder'); + } + yield this.ready(); + if (this.form) + this.form.availableParents = this._availableSortedParents; + // Link batches to parent, and delete orphan + if (!opts || opts.linkDataToParent !== false) { + yield this.linkDataToParentAndDeleteOrphan(); + } + if (!opts || opts.emitEvent !== false) { + yield this.refreshPmfms(); + this.markForCheck(); + } + }); + } + onNewEntity(data) { + const _super = Object.create(null, { + onNewEntity: { get: () => super.onNewEntity } + }); + return __awaiter(this, void 0, void 0, function* () { + console.debug('[sub-batch-table] Initializing new row data...'); + yield _super.onNewEntity.call(this, data); + // Generate label + data.label = this.acquisitionLevel + '#' + data.rankOrder; + if (isNil(data.id)) { + // TODO : add sequence + } + // Set individual count to 1, if column not shown + if (!this.showIndividualCount) { + data.individualCount = isNotNil(data.individualCount) ? data.individualCount : 1; + } + }); + } + onInvalidForm() { + return __awaiter(this, void 0, void 0, function* () { + this.form.markAllAsTouched({ emitEvent: true }); + if (this.debug) + AppFormUtils.logFormErrors(this.form.form, '[sub-batch-table] '); + }); + } + getI18nColumnName(columnName) { + // Replace parent by TAG_ID pmfms + columnName = columnName && columnName === 'parent' && this.displayParentPmfm ? this.displayParentPmfm.id.toString() : columnName; + return super.getI18nColumnName(columnName); + } + linkDataToParentGroup(data) { + if (!this._availableParents || !data) + return; + data.forEach((s) => { + s.parentGroup = (s.parentGroup && this._availableParents.find((p) => Batch.equals(p, s.parentGroup))) || null; + if (!s.parentGroup) + console.warn('[sub-batches-table] linkDataToParent() - Could not found parent group, for sub-batch:', s); + }); + } + /** + * Remove batches in table, if there have no more parent + */ + linkDataToParentAndDeleteOrphan() { + return __awaiter(this, void 0, void 0, function* () { + const rows = this.dataSource.getRows(); + // Check if need to delete some rows + let hasRemovedItem = false; + const data = rows + .map((row) => { + const item = row.currentData; + let parentGroup; + if (item.parentGroup) { + // Update the parent, by id + parentGroup = this._availableParents.find((p) => Batch.equals(p, item.parentGroup)); + // Not found, so try to get it by species + if (!parentGroup) { + const parentTaxonGroupId = item.parentGroup.taxonGroup && item.parentGroup.taxonGroup.id; + const parentTaxonNameId = item.parentGroup.taxonName && item.parentGroup.taxonName.id; + if (isNil(parentTaxonGroupId) && isNil(parentTaxonNameId)) { + parentGroup = undefined; // remove link to parent + } + else { + parentGroup = this._availableParents.find((p) => p && + ((!p.taxonGroup && !parentTaxonGroupId) || (p.taxonGroup && p.taxonGroup.id === parentTaxonGroupId)) && + ((!p.taxonName && !parentTaxonNameId) || (p.taxonName && p.taxonName.id === parentTaxonNameId))); + } + } + } + if (parentGroup || row.editing) { + if (item.parentGroup !== parentGroup) { + item.parentGroup = parentGroup; + // If row use a validator, force update + if (!row.editing && row.validator) + row.validator.patchValue(item, { emitEvent: false }); + } + return item; // Keep only rows with a parent (or in editing mode) + } + // Could not find the parent anymore (parent has been deleted) + hasRemovedItem = true; + return undefined; + }) + .filter(isNotNil); + if (hasRemovedItem) { + // Make sure to convert into a Sample - fix issue #371 + this.value = data.map((c) => SubBatch.fromObject(c)); + } + }); + } + onLoadData(data) { + this.linkDataToParentGroup(data); + return data; + } + onSaveData(data) { + // Can be override by subclasses + return data; + } + refreshPmfms() { + return __awaiter(this, void 0, void 0, function* () { + const pmfms = this._initialPmfms; + if (!pmfms) + return; // Not loaded + this._dataService.pmfms = this._initialPmfms; + yield this._dataService.waitIdle({ stop: this.destroySubject }); + this.updateColumns(); + }); + } + markForCheck() { + this.cd.markForCheck(); + } + onPrepareRowForm(form) { + var _a; + if (!form) + return; // Skip + console.debug('[sub-batches-table] Initializing row validator'); + this.validatorService.updateFormGroup(form, { + withWeight: this.enableWeightConversion, + pmfms: this.pmfms, + }); + // Add length -> weight conversion + (_a = this._rowValidatorSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + if (this.enableWeightConversion) { + const subscription = this.validatorService.delegate.enableWeightLengthConversion(form, { + pmfms: this.pmfms, + qvPmfm: this._qvPmfm, + onError: (err) => this.setError((err && err.message) || 'TRIP.SUB_BATCH.ERROR.WEIGHT_LENGTH_CONVERSION_FAILED'), + markForCheck: () => this.markForCheck(), + }); + if (subscription) { + this._rowValidatorSubscription = subscription; + this.registerSubscription(this._rowValidatorSubscription); + this._rowValidatorSubscription.add(() => { + this.unregisterSubscription(subscription); + this._rowValidatorSubscription = null; + }); + } + } + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], SubBatchesTable.prototype, "displayParentPmfm", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubBatchesTable.prototype, "showForm", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], SubBatchesTable.prototype, "tabindex", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubBatchesTable.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubBatchesTable.prototype, "useSticky", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubBatchesTable.prototype, "weightDisplayedUnit", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubBatchesTable.prototype, "weightDisplayDecimals", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubBatchesTable.prototype, "compactFields", void 0); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], SubBatchesTable.prototype, "qvPmfm", null); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], SubBatchesTable.prototype, "availableParents", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SubBatchesTable.prototype, "showParentColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SubBatchesTable.prototype, "showTaxonNameColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SubBatchesTable.prototype, "showTaxonNameInParentAutocomplete", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SubBatchesTable.prototype, "showIndividualCount", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SubBatchesTable.prototype, "showWeightColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SubBatchesTable.prototype, "showCommentsColumn", null); +__decorate([ + ViewChild('form', { static: true }), + __metadata("design:type", SubBatchForm) +], SubBatchesTable.prototype, "form", void 0); +SubBatchesTable = __decorate([ + Component({ + selector: 'app-sub-batches-table', + templateUrl: 'sub-batches.table.html', + styleUrls: ['sub-batches.table.scss'], + providers: [ + { provide: ContextService, useExisting: TripContextService }, + SubBatchValidatorService, + { + provide: SUB_BATCHES_TABLE_OPTIONS, + useFactory: () => ({ + prependNewElements: false, + suppressErrors: environment.production, + reservedStartColumns: SUB_BATCH_RESERVED_START_COLUMNS, + reservedEndColumns: SUB_BATCH_RESERVED_END_COLUMNS, + }), + }, + ], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __param(2, Inject(SUB_BATCHES_TABLE_OPTIONS)), + __metadata("design:paramtypes", [Injector, + SubBatchValidatorService, Object]) +], SubBatchesTable); +export { SubBatchesTable }; +//# sourceMappingURL=sub-batches.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/sub/sub-batches.table.js.map b/out-tsc/app/app/trip/batch/sub/sub-batches.table.js.map new file mode 100644 index 000000000..4b2c2bddd --- /dev/null +++ b/out-tsc/app/app/trip/batch/sub/sub-batches.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sub-batches.table.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/sub/sub-batches.table.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,uBAAuB,EAEvB,SAAS,EACT,MAAM,EACN,cAAc,EACd,QAAQ,EACR,KAAK,EAGL,SAAS,GACV,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAA4B,MAAM,MAAM,CAAC;AAE9D,OAAO,EAAoB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EAEX,uBAAuB,EAEvB,YAAY,EACZ,KAAK,EACL,YAAY,EACZ,eAAe,EACf,QAAQ,EAER,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,GAEV,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAA+B,MAAM,gDAAgD,CAAC;AACpH,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAyB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAoB,MAAM,4CAA4C,CAAC;AAC5I,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,qDAAqD,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAS,SAAS,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAEhE,MAAM,CAAC,MAAM,gCAAgC,GAAa,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;AACvF,MAAM,CAAC,MAAM,8BAA8B,GAAa,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;AAGxF,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,cAAc,CAAqC,wBAAwB,CAAC,CAAC;AAE1H,MAAM,OAAO,cAAe,SAAQ,YAAsC;IAKxE,UAAU;QACR,OAAO,CAAC,IAAI,EAAE,EAAE,CACd,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,CAAC;eAC/D,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,CAI3D;IACL,CAAC;CACF;AAqBM,IAAM,eAAe,GAArB,MAAM,eACX,SAAQ,qBAA4H;IA0HpI,YACE,QAAkB,EAClB,gBAA0C,EACP,OAA2C;QAE9E,KAAK,CACH,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,IAAI,uBAAuB,CAA2B,QAAQ,EAAE,cAAc,EAAE;YAC9E,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACvC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACvC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,iBAAiB,EAAE;gBACjB,EAAE,EAAE,WAAW;gBACf,WAAW,EAAE,uBAAuB;aACrC;SACF,CAAC,EACF,gBAAgB,kCAEX,OAAO,KACV,gBAAgB,EAAE,mBAAmB,EACrC,cAAc,EAAE,kBAAkB,EAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EACzC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAE1D,CAAC;QA/II,sBAAiB,GAAiB,EAAE,CAAC;QACrC,uCAAkC,GAAG,IAAI,CAAC;QAGxC,4BAAuB,GAAiB,EAAE,CAAC;QAK3C,2BAAsB,GAAG,KAAK,CAAC;QAKhC,aAAQ,GAAG,KAAK,CAAC;QAGjB,cAAS,GAAG,KAAK,CAAC;QAElB,0BAAqB,GAAG,CAAC,CAAC;QAC1B,kBAAa,GAAG,IAAI,CAAC;QAyuB9B,uBAAkB,GAAG,YAAY,CAAC,kBAAkB,CAAC;QA7mBnD,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAElC,gBAAgB;QAChB,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,wBAAwB,CAAC;QACvE,IAAI,CAAC,kBAAkB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAEvC,QAAQ;QACR,IAAI,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,sBAAsB,CAAC;IAC1C,CAAC;IArID,IAAa,MAAM,CAAC,KAAY;QAC9B,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;YAC1B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,oEAAoE;YACpE,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,YAAY,EAAE,CAAC;SACtC;IACH,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IACI,gBAAgB,CAAC,OAAgD;;QACnE,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,OAAO;QAC7B,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE;YACzB,MAAA,IAAI,CAAC,mBAAmB,0CAAE,WAAW,EAAE,CAAC;YACxC,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;YACrF,IAAI,CAAC,mBAAmB,GAAG,YAAY,CAAC;YACxC,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;YACxC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE;gBACpB,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;gBAC1C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAClC,CAAC,CAAC,CAAC;SACJ;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,IAAI,CAAC,iBAAiB,EAAE;YACvE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;SACnC;IACH,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,IAAI,KAAK,CAAC,IAAgB;QACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED,IACI,gBAAgB,CAAC,KAAc;QACjC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,IACI,mBAAmB,CAAC,KAAc;QACpC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAED,IACI,iCAAiC,CAAC,KAAc;QAClD,IAAI,CAAC,kCAAkC,GAAG,KAAK,CAAC;QAChD,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAED,IACI,mBAAmB,CAAC,KAAc;QACpC,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IACzH,CAAC;IAED,IACI,gBAAgB,CAAC,KAAc;QACjC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,IACI,kBAAkB,CAAC,KAAc;QACnC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IA4CD,QAAQ;QACN,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEjB,eAAe;QACf,IAAI,CAAC,yBAAyB,CAAC,aAAa,EAAE;YAC5C,SAAS,EAAE,CAAC,KAAU,EAAE,OAAa,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC;YAC5E,cAAc,EAAE,IAAI;YACpB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEhC,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE;YAC1C,SAAS,EAAE,CAAC,KAAU,EAAE,OAAa,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC;YAChF,cAAc,EAAE,IAAI;YACpB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,gCAAgC;YAEhC,+DAA+D;YAC/D,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE,oBAAoB,GAAG,OAAO,CAAC,kBAAkB,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC/H,IAAI,CAAC,IAAI,CAAC,SAAS;oBAAE,OAAO,CAAC,qBAAqB;gBAClD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,MAAM,QAAQ,GAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAsB,CAAC,QAAQ,CAAC;gBAC5F,IAAI,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,EAAE;oBACtG,IAAI,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;wBACpC,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE;4BACzB,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,CAAC;yBAC3C;wBACD,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;wBACpE,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,sBAAsB,EAAE,CAAC;qBAC3D;iBACF;qBAAM;oBACL,IAAI,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;wBACpC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,CAAC;wBAC3C,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;wBAChD,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;qBACtD;iBACF;YACH,CAAC,CAAC,CACH,CAAC;YAEF,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,wBAAwB,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE;gBAC1F,IAAI,CAAC,IAAI,CAAC,SAAS;oBAAE,OAAO,CAAC,OAAO;gBAEpC,MAAM,iBAAiB,GAAG,WAAW,IAAI,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7F,IAAI,KAAK,CAAC,iBAAiB,CAAC;oBAAE,OAAO,CAAC,OAAO;gBAE7C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;gBAE3B,MAAM,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;gBAC1C,MAAM,QAAQ,GAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAsB,CAAC,QAAQ,CAAC;gBAE5F,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBAClC,MAAM,MAAM,GACV,CAAC,IAAI,CAAC,UAAU;wBAChB,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;oBAC9H,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAElC,uBAAuB;oBACvB,IAAI,OAAO,EAAE;wBACX,IAAI,MAAM,EAAE;4BACV,IAAI,WAAW,EAAE;gCACf,OAAO,CAAC,MAAM,EAAE,CAAC;6BAClB;4BACD,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;yBACpD;6BAAM;4BACL,OAAO,CAAC,OAAO,EAAE,CAAC;4BAClB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;4BAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;yBACxB;qBACF;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CACH,CAAC;SACH;IACH,CAAC;IAED,aAAa,CAAC,IAAkD;QAC9D,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE1B,qDAAqD;QACrD,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,MAAK,KAAK,EAAE;YAC5B,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;SACjC;IACH,CAAC;IAEK,YAAY,CAAC,KAAa,EAAE,GAA4B;;;YAC5D,mBAAmB;YACnB,0CAA0C;YAE1C,wBAAwB;YACxB,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;gBAClD,OAAO,KAAK,CAAC;aACd;YAED,IAAI,GAAG,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAAE,OAAO,KAAK,CAAC;YAEtE,MAAM,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE/C,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACrB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC3B,OAAO,KAAK,CAAC;aACd;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YACtC,QAAQ,CAAC,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;YAE7F,iDAAiD;YACjD,IAAI,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,MAAA,QAAQ,CAAC,MAAM,0CAAE,KAAK,CAAC,EAAE;gBACvD,UAAU;gBAEV,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,MAAA,QAAQ,CAAC,MAAM,0CAAE,KAAK,CAAC;gBACxE,OAAO,QAAQ,CAAC,MAAM,CAAC;aACxB;YAED,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;YAE1D,qBAAqB;YACrB,IAAI,CAAC,GAAG,EAAE;gBACR,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;aACvC;YAED,sBAAsB;iBACjB;gBACH,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;aAC/C;YAED,OAAO,IAAI,CAAC;;KACb;IAEK,GAAG,CAAC,OAAmB,EAAE,IAA0C;;YACvE,IAAI,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,EAAE;gBACvD,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;aACrC;YAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;gBACvB,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;aAChC;QACH,CAAC;KAAA;IAED,cAAc,CAAC,IAA6B;QAC1C,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,eAAe;QACb,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,IAAkD;QACvD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEnB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACpD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACxB;IACH,CAAC;IAED,OAAO,CAAC,IAAkD;QACxD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEpB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACnD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACzB;IACH,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,IAAgB,EAAE,IAA8B;QACvD,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,IAAI,CAAC;QACpC,sBAAsB;IACxB,CAAC;IAED,6BAA6B;IAEnB,QAAQ;QAChB,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;IACtC,CAAC;IAES,mBAAmB,CAAC,IAAc;QAC1C,yBAAyB;IAC3B,CAAC;IAES,wBAAwB;QAChC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW;YAAE,OAAO,CAAC,OAAO;QAEzD,MAAM,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC;QACnF,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC;QAEjF,MAAM,qBAAqB,GAAG;YAC5B,IAAI,EAAE,IAAI,CAAC,iBAAiB;YAC5B,oBAAoB;YACpB,mBAAmB;SACpB,CAAC;QACF,IAAI,IAAI,CAAC,kCAAkC,EAAE;YAC3C,IAAI,IAAI,CAAC,mBAAmB,EAAE;gBAC5B,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC;aACjI;iBAAM;gBACL,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,aAAa,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAC/F,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,CACvD,CAAC;aACH;SACF;aAAM;YACL,wBAAwB;YACxB,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,UAAU,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;SAC3G;QACD,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;IACvH,CAAC;IAEY,SAAS,CAAC,aAAwB,EAAE,IAAyD;;YACxG,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAEnD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YAEnB,4BAA4B;YAC5B,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC;YAC1D,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAEvB,qBAAqB;YACrB,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;YAEhC,yCAAyC;YACzC,IAAI,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;gBACnC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC;aACjC;iBAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;gBAC1C,QAAQ,CAAC,eAAe,GAAG,CAAC,CAAC;aAC9B;YAED,8BAA8B;YAC9B,IAAI,aAAa,EAAE;gBACjB,cAAc;gBACd,QAAQ,CAAC,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC;gBAEjD,6BAA6B;gBAC7B,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;oBACzC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;iBAC9F;gBAED,+BAA+B;gBAC/B,IAAI,aAAa,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;oBACxD,QAAQ,CAAC,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;iBAC9C;qBAAM;oBACL,qCAAqC;oBACrC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;oBACxC,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;wBACzC,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;qBACpC;iBACF;aACF;YAED,oCAAoC;YACpC,sBAAsB,CAAC,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAEjG,2BAA2B;YAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aACxB;YAED,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE;gBACzC,UAAU,CAAC,GAAG,EAAE;oBACd,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBACjC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC7C,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBAChD,CAAC,CAAC,CAAC;aACJ;iBAAM;gBACL,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7C,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;aAC/C;YAED,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;gBACrC,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;QACH,CAAC;KAAA;IAEe,aAAa,CAAC,KAAU,EAAE,OAAa;;YACrD,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;gBAC1C,OAAO,CAAC,KAAK,CAAC,CAAC;aAChB;YACD,KAAK,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,SAAS,CAAC;YAC3E,IAAI,KAAK,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC,uBAAuB,CAAC,CAAC,MAAM;YAE7D,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,KAAK,CAAC,uCAAuC,KAAK,IAAI,GAAG,MAAM,CAAC,CAAC;YACzF,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAE9D,6CAA6C;YAC7C,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CACxC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,UAAU,IAAI,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1E,CAAC,CAAC,CAAC,SAAS,IAAI,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CACzH,CAAC;QACJ,CAAC;KAAA;IAEe,iBAAiB,CAAC,KAAU,EAAE,OAAa;;YACzD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC;YACnF,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;YAC9D,OAAO,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,KAAK,EAAE;gBACrD,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,eAAe,EAAE,OAAO,IAAI,OAAO,CAAC,eAAe;gBACnD,YAAY,EAAE,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,SAAS;aACjF,CAAC,CAAC;QACL,CAAC;KAAA;IAES,QAAQ,CAAC,KAAc;;QAC/B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC,CAAC,kBAAkB;QAE7D,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC,2BAA2B;QAEvD,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,iEAAiE;YACjE,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACrE,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBAChB,qDAAqD;gBACrD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACpC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;gBACtB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACvB,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;aACvB;SACF;QAED,gCAAgC;QAChC,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,WAAC,OAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,EAAE,CAAA,EAAA,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7G,IAAI,eAAe,CAAC,aAAa,CAAC,EAAE;YAClC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;oBACtC,qDAAqD;oBACrD,IAAI,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE;wBACvG,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,gBAAgB;wBACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;wBACnB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;qBACvB;iBACF;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;SACJ;QAED,4CAA4C;QAC5C;YACE,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,8BAA8B,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,wBAAwB,CAAC,CAAC;YAC3I,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBAChB,IAAI,CAAC,UAAU,GAAG,MAAA,KAAK,CAAC,KAAK,CAAC,0CAAE,KAAK,EAAE,CAAC;gBACxC,wCAAwC;gBACxC,IAAI,CAAC,UAAU,CAAC,qBAAqB,GAAG,IAAI,CAAC,UAAU,CAAC,qBAAqB,IAAI,CAAC,CAAC;gBACnF,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACjC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;gBAEnC,QAAQ;gBACR;;mBAEG;gBACH,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;aAChC;iBAAM;gBACL,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;aACrC;SACF;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEe,gBAAgB;;YAC9B,IAAI,CAAC,IAAI,CAAC,cAAc;gBAAE,OAAO,KAAK,CAAC;YAEvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1C,IAAI,IAAI,EAAE;gBACR,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;aACnC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAEe,OAAO,CAAC,EAAU,EAAE,GAA2B;;YAC7D,IAAI,CAAC,IAAI,CAAC,cAAc;gBAAE,OAAO,KAAK,CAAC;YAEvC,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE;gBACnC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzB,OAAO,IAAI,CAAC;aACb;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAEtC,oCAAoC;YACpC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAE/B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,WAAW,EAAE;gBACf,MAAM,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;aAClD;iBAAM;gBACL,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACvB;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAEK,eAAe,CAAC,KAAgB;;YACpC,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC;YAC7B,IAAI,KAAK,EAAE;gBACT,KAAK,GAAG,IAAI,QAAQ,EAAE,CAAC;gBACvB,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aAC/B;YAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBACxC,SAAS,EAAE,aAAa;gBACxB,cAAc,EAAkC;oBAC9C,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;oBACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;oBACvC,IAAI,EAAE,KAAK;oBACX,KAAK;oBACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,UAAU,EAAE,IAAI,CAAC,gBAAgB;oBACjC,cAAc,EAAE,KAAK;oBACrB,aAAa,EAAE,IAAI,CAAC,mBAAmB;oBACvC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;iBAC9C;gBACD,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;YAEH,iBAAiB;YACjB,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;YAEtB,oBAAoB;YACpB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC;YAC5C,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,IAAI,CAAC,CAAC;YACpF,OAAO,IAAI,YAAY,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACrD,CAAC;KAAA;IAEe,gBAAgB,CAAC,QAAkB;;;;;YACjD,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,QAAQ,CAAC,CAAC;YAElF,qCAAqC;YACrC,QAAQ,CAAC,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;YAE7F,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/B,sBAAsB,CAAC,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAE9D,8DAA8D;YAC9D,IAAI,IAAI,CAAC,mBAAmB,EAAE;gBAC5B,qCAAqC;gBACrC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;gBAE/G,6CAA6C;gBAC7C,IAAI,GAAG,EAAE;oBACP,IAAI,GAAG,CAAC,SAAS,EAAE;wBACjB,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;wBACrD,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;qBACnE;yBAAM;wBACL,GAAG,CAAC,WAAW,CAAC,eAAe,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC;wBACpG,IAAI,CAAC,YAAY,EAAE,CAAC;qBACrB;oBACD,IAAI,CAAC,WAAW,EAAE,CAAC;oBAEnB,wBAAwB;oBACxB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;oBAErB,OAAO,GAAG,CAAC;iBACZ;aACF;YAED,iDAAiD;YACjD,OAAO,MAAM,OAAM,gBAAgB,YAAC,QAAQ,CAAC,CAAC;QAChD,CAAC;KAAA;IAEK,mBAAmB,CAAC,OAAqB,EAAE,IAA0D;;YACzG,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;YAEjC,uCAAuC;YACvC,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBAC1B,IAAI,CAAC,uBAAuB,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,oBAAoB,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;aAC/H;iBAAM;gBACL,IAAI,CAAC,uBAAuB,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,WAAW,CAAC,CAAC;aAC/E;YAED,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YAEnB,IAAI,IAAI,CAAC,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC;YAEzE,4CAA4C;YAC5C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK,EAAE;gBAC5C,MAAM,IAAI,CAAC,+BAA+B,EAAE,CAAC;aAC9C;YAED,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;gBACrC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;QACH,CAAC;KAAA;IAEe,WAAW,CAAC,IAAc;;;;;YACxC,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAEhE,MAAM,OAAM,WAAW,YAAC,IAAI,CAAC,CAAC;YAE9B,iBAAiB;YACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;YAE1D,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBAClB,sBAAsB;aACvB;YAED,iDAAiD;YACjD,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAC7B,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;aAClF;QACH,CAAC;KAAA;IAEe,aAAa;;YAC3B,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,IAAI,IAAI,CAAC,KAAK;gBAAE,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;QACnF,CAAC;KAAA;IAES,iBAAiB,CAAC,UAAkB;QAC5C,iCAAiC;QACjC,UAAU,GAAG,UAAU,IAAI,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;QAEjI,OAAO,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAES,qBAAqB,CAAC,IAAgB;QAC9C,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI;YAAE,OAAO;QAE7C,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACjB,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YAC9G,IAAI,CAAC,CAAC,CAAC,WAAW;gBAAE,OAAO,CAAC,IAAI,CAAC,uFAAuF,EAAE,CAAC,CAAC,CAAC;QAC/H,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACa,+BAA+B;;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAEvC,oCAAoC;YACpC,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI;iBACd,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACX,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC;gBAE7B,IAAI,WAAW,CAAC;gBAChB,IAAI,IAAI,CAAC,WAAW,EAAE;oBACpB,2BAA2B;oBAC3B,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;oBAEpF,yCAAyC;oBACzC,IAAI,CAAC,WAAW,EAAE;wBAChB,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;wBACzF,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;wBACtF,IAAI,KAAK,CAAC,kBAAkB,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE;4BACzD,WAAW,GAAG,SAAS,CAAC,CAAC,wBAAwB;yBAClD;6BAAM;4BACL,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CACvC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC;gCACD,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,KAAK,kBAAkB,CAAC,CAAC;gCACpG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,iBAAiB,CAAC,CAAC,CAClG,CAAC;yBACH;qBACF;iBACF;gBAED,IAAI,WAAW,IAAI,GAAG,CAAC,OAAO,EAAE;oBAC9B,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,EAAE;wBACpC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;wBAC/B,uCAAuC;wBACvC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,SAAS;4BAAE,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;qBACzF;oBACD,OAAO,IAAI,CAAC,CAAC,oDAAoD;iBAClE;gBAED,8DAA8D;gBAC9D,cAAc,GAAG,IAAI,CAAC;gBACtB,OAAO,SAAS,CAAC;YACnB,CAAC,CAAC;iBACD,MAAM,CAAC,QAAQ,CAAC,CAAC;YAEpB,IAAI,cAAc,EAAE;gBAClB,sDAAsD;gBACtD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;aACtD;QACH,CAAC;KAAA;IAES,UAAU,CAAC,IAAgB;QACnC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAES,UAAU,CAAC,IAAgB;QACnC,gCAAgC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,YAAY;;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;YACjC,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,aAAa;YAEjC,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;YAC7C,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YAEhE,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;KAAA;IAIS,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;IAEO,gBAAgB,CAAC,IAAsB;;QAC7C,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,OAAO;QAC1B,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAEhE,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,EAAE;YAC1C,UAAU,EAAE,IAAI,CAAC,sBAAsB;YACvC,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QAEH,kCAAkC;QAClC,MAAA,IAAI,CAAC,yBAAyB,0CAAE,WAAW,EAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,4BAA4B,CAAC,IAAI,EAAE;gBACrF,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,OAAO;gBACpB,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,sDAAsD,CAAC;gBAC/G,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE;aACxC,CAAC,CAAC;YACH,IAAI,YAAY,EAAE;gBAChB,IAAI,CAAC,yBAAyB,GAAG,YAAY,CAAC;gBAC9C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBAC1D,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,EAAE;oBACtC,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;oBAC1C,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;gBACxC,CAAC,CAAC,CAAC;aACJ;SACF;IACH,CAAC;CACF,CAAA;AAlxBC;IAAC,KAAK,EAAE;;0DAA0B;AAClC;IAAC,KAAK,EAAE;;iDAAkB;AAC1B;IAAC,KAAK,EAAE;;iDAAkB;AAC1B;IAAC,KAAK,EAAE;;kDAAsB;AAC9B;IAAC,KAAK,EAAE;;kDAAmB;AAC3B;IAAC,KAAK,EAAE;;4DAAuC;AAC/C;IAAC,KAAK,EAAE;;8DAA2B;AACnC;IAAC,KAAK,EAAE;;sDAAsB;AAE9B;IAAC,KAAK,EAAE;;;6CAMP;AAMD;IAAC,KAAK,EAAE;;;uDAeP;AAcD;IAAC,KAAK,EAAE;;;uDAGP;AAMD;IAAC,KAAK,EAAE;;;0DAIP;AAMD;IAAC,KAAK,EAAE;;;wEAIP;AAED;IAAC,KAAK,EAAE;;;0DAGP;AAMD;IAAC,KAAK,EAAE;;;uDAGP;AAMD;IAAC,KAAK,EAAE;;;yDAGP;AAMD;IAAC,SAAS,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;8BAAO,YAAY;6CAAC;AAzH7C,eAAe;IAnB3B,SAAS,CAAC;QACT,QAAQ,EAAE,uBAAuB;QACjC,WAAW,EAAE,wBAAwB;QACrC,SAAS,EAAE,CAAC,wBAAwB,CAAC;QACrC,SAAS,EAAE;YACT,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,kBAAkB,EAAE;YAC5D,wBAAwB;YACxB;gBACE,OAAO,EAAE,yBAAyB;gBAClC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;oBACjB,kBAAkB,EAAE,KAAK;oBACzB,cAAc,EAAE,WAAW,CAAC,UAAU;oBACtC,oBAAoB,EAAE,gCAAgC;oBACtD,kBAAkB,EAAE,8BAA8B;iBACnD,CAAC;aACH;SACF;QACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;IA+HG,WAAA,MAAM,CAAC,yBAAyB,CAAC,CAAA;qCAFxB,QAAQ;QACA,wBAAwB;GA7HjC,eAAe,CAqyB3B;SAryBY,eAAe"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/testing/batch-data.test.js b/out-tsc/app/app/trip/batch/testing/batch-data.test.js new file mode 100644 index 000000000..5204d6b4d --- /dev/null +++ b/out-tsc/app/app/trip/batch/testing/batch-data.test.js @@ -0,0 +1,206 @@ +import { PmfmIds, QualitativeValueIds } from '@app/referential/services/model/model.enum'; +import { isNotNil } from '@sumaris-net/ngx-components'; +import { MeasurementValuesTypes } from '@app/data/measurement/measurement.model'; +function getSortingMeasValues(opts) { + const res = {}; + if (isNotNil(opts.gearPosition)) { + res[PmfmIds.BATCH_GEAR_POSITION] = '' + (opts.gearPosition === 'B' ? QualitativeValueIds.BATCH_GEAR_POSITION.PORT : QualitativeValueIds.BATCH_GEAR_POSITION.STARBOARD); // Bâbord, Tribord + } + if (isNotNil(opts.sizeCategory)) { + res[PmfmIds.TRAWL_SIZE_CAT] = '' + opts.sizeCategory; + } + if (isNotNil(opts.discardOrLanding)) { + res[PmfmIds.DISCARD_OR_LANDING] = '' + (opts.discardOrLanding === 'LAN' ? QualitativeValueIds.DISCARD_OR_LANDING.LANDING : QualitativeValueIds.DISCARD_OR_LANDING.DISCARD); + } + if (isNotNil(opts.weight)) { + res[PmfmIds.BATCH_MEASURED_WEIGHT] = '' + opts.weight; + } + res['__typename'] = MeasurementValuesTypes.MeasurementModelValues; + return res; +} +function getIndivMeasValues(opts) { + opts = Object.assign({ discardOrLanding: 'LAN' }, opts); + const res = {}; + if (isNotNil(opts.discardOrLanding)) { + res[PmfmIds.DISCARD_OR_LANDING] = '' + (opts.discardOrLanding === 'LAN' ? QualitativeValueIds.DISCARD_OR_LANDING.LANDING : QualitativeValueIds.DISCARD_OR_LANDING.DISCARD); + } + if (isNotNil(opts.length)) { + res[PmfmIds.LENGTH_TOTAL_CM] = '' + opts.length; + } + // Computed weight, by Weight/Length conversion + if (isNotNil(opts.weight)) { + res[PmfmIds.BATCH_CALCULATED_WEIGHT_LENGTH] = '' + opts.weight; + } + return res; +} +export const BATCH_TREE_EXAMPLES = ['default', 'selectivity', 'empty']; +export function getExampleTree(key, programLabel) { + const samplingRatioText = (programLabel === 'APASE') ? '1/2' : '50%'; + switch (key) { + case 'default': + return { + label: 'CATCH_BATCH', rankOrder: 1, children: [ + { + label: 'SORTING_BATCH#1', + rankOrder: 1, + taxonGroup: { id: 1122, label: 'MNZ', name: 'Baudroie nca' }, + measurementValues: undefined, + children: [ + { + label: 'SORTING_BATCH#1.LAN', rankOrder: 1, + measurementValues: getSortingMeasValues({ discardOrLanding: 'LAN', weight: 100 }), + children: [ + { + label: 'SORTING_BATCH#1.LAN.%', + rankOrder: 1, + samplingRatio: 0.5, + samplingRatioText, + children: [ + { + label: 'SORTING_BATCH_INDIVIDUAL#1', + rankOrder: 1, + taxonName: { id: 1033, label: 'MON', name: 'Lophius piscatorius' }, + measurementValues: getIndivMeasValues({ discardOrLanding: 'LAN', length: 11, weight: 0.026051 }), + individualCount: 1 + }, + { + label: 'SORTING_BATCH_INDIVIDUAL#3', + rankOrder: 3, + taxonName: { id: 1034, label: 'ANK', name: 'Lophius budegassa' }, + measurementValues: getIndivMeasValues({ discardOrLanding: 'LAN', length: 33, weight: 0.512244 }), + individualCount: 1 + } + ] + } + ] + }, + { + label: 'SORTING_BATCH#1.DIS', rankOrder: 2, + measurementValues: getSortingMeasValues({ discardOrLanding: 'DIS' }), + children: [ + { + label: 'SORTING_BATCH#1.DIS.%', + rankOrder: 1, + samplingRatio: 0.5, + samplingRatioText, + children: [ + { + label: 'SORTING_BATCH_INDIVIDUAL#2', + rankOrder: 2, + taxonName: { id: 1034, label: 'ANK', name: 'Lophius budegassa' }, + measurementValues: getIndivMeasValues({ discardOrLanding: 'DIS', length: 22, weight: 0.162100 }), + individualCount: 1 + } + ] + } + ] + } + ] + } + ] + }; + case 'selectivity': + return { + label: 'CATCH_BATCH', rankOrder: 1, comments: 'Selectivity', children: [ + { + label: 'SORTING_BATCH#B', + rankOrder: 1, + measurementValues: getSortingMeasValues({ gearPosition: 'B' }), + children: [ + { + label: 'SORTING_BATCH#B.LAN', + rankOrder: 1, + measurementValues: getSortingMeasValues({ discardOrLanding: 'LAN' }), + children: [ + { + label: 'SORTING_BATCH#B.LAN.1', + rankOrder: 1, + taxonGroup: { id: 1122, label: 'MNZ', name: 'Baudroie nca' }, + measurementValues: getSortingMeasValues({ sizeCategory: 324 /*10*/, weight: 100 }), + children: [ + { + label: 'SORTING_BATCH#B.LAN.1.%', + rankOrder: 1, + samplingRatio: 0.5, + samplingRatioText: '1/2', + children: [ + { + label: 'SORTING_BATCH_INDIVIDUAL#1', + rankOrder: 1, + taxonName: { id: 1033, label: 'MON', name: 'Lophius piscatorius' }, + measurementValues: getIndivMeasValues({ length: 11, weight: 0.026051 }), + individualCount: 1 + }, + { + label: 'SORTING_BATCH_INDIVIDUAL#3', + rankOrder: 3, + taxonName: { id: 1034, label: 'ANK', name: 'Lophius budegassa' }, + measurementValues: getIndivMeasValues({ length: 33, weight: 0.512244 }), + individualCount: 1 + } + ] + } + ] + } + ] + }, + { + label: 'SORTING_BATCH#B.DIS', + rankOrder: 2, + measurementValues: getSortingMeasValues({ discardOrLanding: 'DIS' }), + children: [ + { + label: 'SORTING_BATCH#B.DIS.VRAC', + rankOrder: 1, + measurementValues: { + [PmfmIds.BATCH_SORTING]: QualitativeValueIds.BATCH_SORTING.BULK + }, + children: [ + { + label: 'SORTING_BATCH#B.DIS.VRAC.%', + rankOrder: 1, + samplingRatio: 0.25, + samplingRatioText: '1/4', + measurementValues: { + [PmfmIds.BATCH_MEASURED_WEIGHT]: 3 + }, + children: [ + { + label: 'SORTING_BATCH#B.DIS.1', + rankOrder: 1, + taxonGroup: { id: 1122, label: 'MNZ', name: 'Baudroie nca' }, + measurementValues: getSortingMeasValues({ sizeCategory: 319 /*NA*/ }), + children: [ + { + label: 'SORTING_BATCH#B.DIS.1.%', + rankOrder: 1, + samplingRatio: 0.5, + samplingRatioText: '50%', + children: [ + { + label: 'SORTING_BATCH_INDIVIDUAL#2', + rankOrder: 2, + taxonName: { id: 1034, label: 'ANK', name: 'Lophius budegassa' }, + measurementValues: getIndivMeasValues({ length: 22, weight: 0.162100 }), + individualCount: 1 + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }; + case 'empty': + return { id: 100, label: 'CATCH_BATCH', rankOrder: 1 }; + } + throw new Error('Unknown key: ' + key); +} +//# sourceMappingURL=batch-data.test.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/testing/batch-data.test.js.map b/out-tsc/app/app/trip/batch/testing/batch-data.test.js.map new file mode 100644 index 000000000..3d2cd6de1 --- /dev/null +++ b/out-tsc/app/app/trip/batch/testing/batch-data.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch-data.test.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/testing/batch-data.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/testing/batch-tree-container.test.js b/out-tsc/app/app/trip/batch/testing/batch-tree-container.test.js new file mode 100644 index 000000000..2cec92525 --- /dev/null +++ b/out-tsc/app/app/trip/batch/testing/batch-tree-container.test.js @@ -0,0 +1,323 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Component, ViewChild } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { BehaviorSubject } from 'rxjs'; +import { Batch } from '../common/batch.model'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { filter, mergeMap } from 'rxjs/operators'; +import { EntitiesStorage, EntityUtils, firstNotNilPromise, isEmptyArray, isNil, isNotNilOrBlank, MatAutocompleteConfigHolder, SharedValidators, StatusIds, toNumber, waitFor } from '@sumaris-net/ngx-components'; +import { LocationLevels } from '@app/referential/services/model/model.enum'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { TripContextService } from '@app/trip/trip-context.service'; +import { ContextService } from '@app/shared/context.service'; +import { FishingArea } from '@app/data/fishing-area/fishing-area.model'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +import { BATCH_TREE_EXAMPLES, getExampleTree } from '@app/trip/batch/testing/batch-data.test'; +import { MatTabGroup } from '@angular/material/tabs'; +import { BatchTreeContainerComponent } from '@app/trip/batch/tree/batch-tree-container.component'; +import { ActivatedRoute } from '@angular/router'; +import { TripService } from '@app/trip/trip/trip.service'; +let BatchTreeContainerTestPage = class BatchTreeContainerTestPage { + constructor(formBuilder, referentialRefService, programRefService, entities, context, tripService, activeRoute) { + this.referentialRefService = referentialRefService; + this.programRefService = programRefService; + this.entities = entities; + this.context = context; + this.tripService = tripService; + this.activeRoute = activeRoute; + this.$programLabel = new BehaviorSubject(undefined); + this.$program = new BehaviorSubject(null); + this.$gearId = new BehaviorSubject(undefined); + this.autocomplete = new MatAutocompleteConfigHolder(); + this.selectedTabIndex = 0; // 0= mobile, 1= desktop + this.outputs = {}; + this.filterForm = formBuilder.group({ + program: [null, Validators.compose([Validators.required, SharedValidators.entity])], + gear: [null, Validators.compose([Validators.required, SharedValidators.entity])], + fishingArea: [null, Validators.compose([Validators.required, SharedValidators.entity])], + example: [null, Validators.required], + autofill: [false, Validators.required] + }); + this.selectedTabIndex = toNumber(activeRoute.snapshot.queryParamMap['tab'], this.selectedTabIndex || 0); + } + get batchTree() { + return (this.selectedTabIndex === 0) + ? this.mobileBatchTree + : this.desktopBatchTree; + } + ngOnInit() { + // Program + this.autocomplete.add('program', { + suggestFn: (value, filter) => this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { entityName: 'Program' })), + attributes: ['label', 'name'] + }); + this.filterForm.get('program').valueChanges + //.pipe(debounceTime(450)) + .subscribe(p => { + const label = p && p.label; + if (label) { + this.$programLabel.next(label); + } + }); + this.$programLabel + .pipe(filter(isNotNilOrBlank), mergeMap(programLabel => this.referentialRefService.ready() + .then(() => this.programRefService.loadByLabel(programLabel)))) + .subscribe(program => this.setProgram(program)); + // Gears (from program) + this.autocomplete.add('gear', { + items: this.$programLabel.pipe(mergeMap((programLabel) => { + if (!programLabel) + return Promise.resolve([]); + return this.programRefService.loadGears(programLabel); + })), + attributes: ['label', 'name'], + showAllOnFocus: true + }); + this.filterForm.get('gear').valueChanges + .subscribe(g => this.$gearId.next(toNumber(g && g.id, null))); + // Fishing areas + this.autocomplete.add('fishingArea', { + service: this.referentialRefService, + filter: { + entityName: 'Location', + levelIds: LocationLevels.getStatisticalRectangleLevelIds(), + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] + }, + attributes: ['label', 'name'] + }); + this.filterForm.get('fishingArea').valueChanges + .subscribe(location => { + if (location) { + this.context.setValue('fishingAreas', [FishingArea.fromObject({ + location + })]); + } + else { + this.context.resetValue('fishingAreas'); + } + }); + // Input example + this.autocomplete.add('example', { + items: BATCH_TREE_EXAMPLES.map((label, index) => ({ id: index + 1, label })), + attributes: ['label'], + showAllOnFocus: true + }); + this.filterForm.get('example').valueChanges + //.pipe(debounceTime(450)) + .subscribe(example => { + if (example && typeof example.label == 'string') { + const json = getExampleTree(example.label); + if (this.outputs.example) { + this.dumpCatchBatch(Batch.fromObject(json), 'example'); + } + } + }); + this.filterForm.patchValue({ + //program: {id: 1, label: 'SUMARiS' }, + //program: {id: 10, label: 'ADAP-MER' }, + program: { id: 70, label: 'APASE' }, + //gear: {id: 6, label: 'OTB'}, + gear: { id: 7, label: 'OTT' }, + fishingArea: { id: 110, label: '65F1' }, + example: { id: 1, label: 'selectivity' } + }); + this.applyExample(); + } + setProgram(program) { + // DEBUG + console.debug('[batch-tree-test] Applying program:', program); + this.$program.next(program); + } + // Load data into components + updateView(data) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + // Load program's taxon groups + const program = yield firstNotNilPromise(this.$program); + const availableTaxonGroups = yield this.programRefService.loadTaxonGroups(program.label); + yield waitFor(() => !!this.batchTree); + this.batchTree.availableTaxonGroups = availableTaxonGroups; + this.batchTree.program = program; + if (program.label === 'APASE' && this.batchTree.gearId === 7) { + const trip = yield this.tripService.load(70); + this.batchTree.physicalGear = (_a = trip === null || trip === void 0 ? void 0 : trip.gears) === null || _a === void 0 ? void 0 : _a[0]; // Parent gear + } + this.markAsReady(); + yield this.batchTree.setValue(data.clone()); + this.batchTree.enable(); + if (this.filterForm.get('autofill').value === true) { + yield this.batchTree.autoFill(); + } + }); + } + markAsReady() { + this.batchTree.markAsReady(); + } + markAsLoaded() { + this.batchTree.markAsLoaded(); + } + doSubmit(event) { + // Nothing to do + } + getExampleTree(key) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!key) { + const example = this.filterForm.get('example').value; + key = example && example.label || 'default'; + } + // Get program + const programLabel = (_a = this.filterForm.get('program').value) === null || _a === void 0 ? void 0 : _a.label; + // Load example + const json = getExampleTree(key, programLabel); + // Convert to array (as Pod should sent) with: + // - a local ID + // - only the parentId, and NOT the parent + const batches = EntityUtils.treeToArray(json) || []; + yield EntityUtils.fillLocalIds(batches, (_, count) => this.entities.nextValues(Batch.TYPENAME, count)); + batches.forEach(b => { + b.parentId = b.parent && b.parent.id; + delete b.parent; + }); + // Convert into Batch tree + const catchBatch = Batch.fromObjectArrayAsTree(batches); + BatchUtils.cleanTree(catchBatch); + // Compute (individual count, weight, etc) + BatchUtils.computeTree(catchBatch); + return catchBatch; + }); + } + // Load data into components + applyExample(key) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (isNil(key)) { + key = (_a = this.filterForm.get('example').value) === null || _a === void 0 ? void 0 : _a.label; + } + // Wait enumerations override + yield this.referentialRefService.ready(); + const catchBatch = yield this.getExampleTree(key); + yield this.updateView(catchBatch); + this.tabGroup.realignInkBar(); + }); + } + dumpExample(key) { + return __awaiter(this, void 0, void 0, function* () { + const catchBatch = yield this.getExampleTree(key); + this.dumpCatchBatch(catchBatch, 'example'); + }); + } + dumpBatchTree(batchTree, outputName, finalize) { + return __awaiter(this, void 0, void 0, function* () { + const catchBatch = yield this.getValue(batchTree, finalize); + // Dump + this.dumpCatchBatch(catchBatch, outputName); + if (batchTree.mobile) { + let html = '
Sub batches :
'; + const batches = catchBatch.children; + if (isEmptyArray(batches)) { + html += ' No result'; + } + else { + let html = '
    '; + batches.forEach(b => { + BatchUtils.logTree(b, { + showAll: false, + println: (m) => { + html += '
  • ' + m + '
  • '; + } + }); + }); + html += '
'; + } + // Append to result + this.outputs[outputName] += html; + } + }); + } + dumpCatchBatch(catchBatch, outputName) { + let html = ''; + if (catchBatch) { + BatchUtils.logTree(catchBatch, { + showAll: false, + println: (m) => { + html += '
' + m; + } + }); + html = html.replace(/\t/g, '  '); + this.outputs[outputName] = html; + } + else { + this.outputs[outputName] = ' No result'; + } + console.debug(html); + } + copyBatchTree(source, target) { + return __awaiter(this, void 0, void 0, function* () { + yield source.save(); + source.disable(); + target.disable(); + try { + const value = yield this.getValue(source, true); + yield target.setValue(value); + } + finally { + source.enable(); + target.enable(); + } + }); + } + save(event, batchTree, outputName) { + return __awaiter(this, void 0, void 0, function* () { + yield this.dumpBatchTree(batchTree, outputName, true); + }); + } + /* -- protected methods -- */ + getValue(batchTree, finalize) { + return __awaiter(this, void 0, void 0, function* () { + yield batchTree.save(); + const catchBatch = batchTree.value; + if (finalize) { + // Clean + BatchUtils.cleanTree(catchBatch); + // Compute (individual count, weight, etc) + BatchUtils.computeTree(catchBatch); + } + return catchBatch; + }); + } + stringify(value) { + return JSON.stringify(value); + } +}; +__decorate([ + ViewChild('mobileBatchTree'), + __metadata("design:type", BatchTreeContainerComponent) +], BatchTreeContainerTestPage.prototype, "mobileBatchTree", void 0); +__decorate([ + ViewChild('desktopBatchTree'), + __metadata("design:type", BatchTreeContainerComponent) +], BatchTreeContainerTestPage.prototype, "desktopBatchTree", void 0); +__decorate([ + ViewChild('tabGroup'), + __metadata("design:type", MatTabGroup) +], BatchTreeContainerTestPage.prototype, "tabGroup", void 0); +BatchTreeContainerTestPage = __decorate([ + Component({ + selector: 'app-batch-tree-container-test', + templateUrl: './batch-tree-container.test.html', + styleUrls: ['./batch-tree-container.test.scss'], + providers: [ + { provide: ContextService, useClass: TripContextService } + ] + }), + __metadata("design:paramtypes", [UntypedFormBuilder, + ReferentialRefService, + ProgramRefService, + EntitiesStorage, + ContextService, + TripService, + ActivatedRoute]) +], BatchTreeContainerTestPage); +export { BatchTreeContainerTestPage }; +//# sourceMappingURL=batch-tree-container.test.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/testing/batch-tree-container.test.js.map b/out-tsc/app/app/trip/batch/testing/batch-tree-container.test.js.map new file mode 100644 index 000000000..76c152dc5 --- /dev/null +++ b/out-tsc/app/app/trip/batch/testing/batch-tree-container.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch-tree-container.test.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/testing/batch-tree-container.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/testing/batch-tree.test.js b/out-tsc/app/app/trip/batch/testing/batch-tree.test.js new file mode 100644 index 000000000..2ef7aeeba --- /dev/null +++ b/out-tsc/app/app/trip/batch/testing/batch-tree.test.js @@ -0,0 +1,320 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Component, ViewChild } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { BehaviorSubject } from 'rxjs'; +import { Batch } from '../common/batch.model'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { filter, mergeMap } from 'rxjs/operators'; +import { BatchTreeComponent } from '../tree/batch-tree.component'; +import { EntitiesStorage, EntityUtils, firstNotNilPromise, isEmptyArray, isNil, isNotNilOrBlank, MatAutocompleteConfigHolder, SharedValidators, StatusIds, toNumber, waitFor } from '@sumaris-net/ngx-components'; +import { LocationLevels } from '@app/referential/services/model/model.enum'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { TripContextService } from '@app/trip/trip-context.service'; +import { ContextService } from '@app/shared/context.service'; +import { FishingArea } from '@app/data/fishing-area/fishing-area.model'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +import { BATCH_TREE_EXAMPLES, getExampleTree } from '@app/trip/batch/testing/batch-data.test'; +import { MatTabGroup } from '@angular/material/tabs'; +import { TripService } from '@app/trip/trip/trip.service'; +let BatchTreeTestPage = class BatchTreeTestPage { + constructor(formBuilder, referentialRefService, programRefService, entities, tripService, context) { + this.referentialRefService = referentialRefService; + this.programRefService = programRefService; + this.entities = entities; + this.tripService = tripService; + this.context = context; + this.$programLabel = new BehaviorSubject(undefined); + this.$program = new BehaviorSubject(null); + this.$gearId = new BehaviorSubject(undefined); + this.autocomplete = new MatAutocompleteConfigHolder(); + this.selectedTabIndex = 1; // 0 = mobile, 1 = desktop + this.outputs = {}; + this.filterForm = formBuilder.group({ + program: [null, Validators.compose([Validators.required, SharedValidators.entity])], + gear: [null, Validators.compose([Validators.required, SharedValidators.entity])], + fishingArea: [null, Validators.compose([Validators.required, SharedValidators.entity])], + example: [null, Validators.required], + autofill: [false, Validators.required] + }); + } + get batchTree() { + return (this.selectedTabIndex === 0) + ? this.mobileBatchTree + : this.desktopBatchTree; + } + ngOnInit() { + // Program + this.autocomplete.add('program', { + suggestFn: (value, filter) => this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { entityName: 'Program' })), + attributes: ['label', 'name'] + }); + this.filterForm.get('program').valueChanges + //.pipe(debounceTime(450)) + .subscribe(p => { + const label = p && p.label; + if (label) { + this.$programLabel.next(label); + } + }); + this.$programLabel + .pipe(filter(isNotNilOrBlank), mergeMap(programLabel => this.referentialRefService.ready() + .then(() => this.programRefService.loadByLabel(programLabel)))) + .subscribe(program => this.setProgram(program)); + // Gears (from program) + this.autocomplete.add('gear', { + items: this.$programLabel.pipe(mergeMap((programLabel) => { + if (!programLabel) + return Promise.resolve([]); + return this.programRefService.loadGears(programLabel); + })), + attributes: ['label', 'name'], + showAllOnFocus: true + }); + this.filterForm.get('gear').valueChanges + .subscribe(g => this.$gearId.next(toNumber(g && g.id, null))); + // Fishing areas + this.autocomplete.add('fishingArea', { + service: this.referentialRefService, + filter: { + entityName: 'Location', + levelIds: LocationLevels.getStatisticalRectangleLevelIds(), + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] + }, + attributes: ['label', 'name'] + }); + this.filterForm.get('fishingArea').valueChanges + .subscribe(location => { + if (location) { + this.context.setValue('fishingAreas', [FishingArea.fromObject({ + location + })]); + } + else { + this.context.resetValue('fishingAreas'); + } + }); + // Input example + this.autocomplete.add('example', { + items: BATCH_TREE_EXAMPLES.map((label, index) => ({ id: index + 1, label })), + attributes: ['label'], + showAllOnFocus: true + }); + this.filterForm.get('example').valueChanges + //.pipe(debounceTime(450)) + .subscribe(example => { + if (example && typeof example.label == 'string') { + const json = getExampleTree(example.label); + if (this.outputs.example) { + this.dumpCatchBatch(Batch.fromObject(json), 'example'); + } + } + }); + this.filterForm.patchValue({ + //program: {id: 1, label: 'SUMARiS' }, + program: { id: 10, label: 'ADAP-MER' }, + gear: { id: 6, label: 'OTB' }, + //program: {id: 70, label: 'APASE' }, + //gear: {id: 7, label: 'OTT'}, + fishingArea: { id: 110, label: '65F1' }, + //example: {id: 1, label: 'default'} + example: { id: 3, label: 'empty' } + }); + this.applyExample(); + } + setProgram(program) { + // DEBUG + console.debug('[batch-tree-test] Applying program:', program); + this.$program.next(program); + } + // Load data into components + updateView(data) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + // Load program's taxon groups + const program = yield firstNotNilPromise(this.$program); + const availableTaxonGroups = yield this.programRefService.loadTaxonGroups(program.label); + yield waitFor(() => !!this.batchTree, { timeout: 2000 }); + this.batchTree.availableTaxonGroups = availableTaxonGroups; + this.batchTree.program = program; + if (program.label === 'APASE' && this.batchTree.gearId === 7) { + const trip = yield this.tripService.load(70); + this.batchTree.physicalGear = (_a = trip === null || trip === void 0 ? void 0 : trip.gears) === null || _a === void 0 ? void 0 : _a[0]; // Parent gear + } + this.markAsReady(); + yield this.batchTree.setValue(data.clone()); + this.batchTree.enable(); + if (this.filterForm.get('autofill').value === true) { + yield this.batchTree.autoFill(); + } + }); + } + markAsReady() { + this.batchTree.markAsReady(); + } + markAsLoaded() { + this.batchTree.markAsLoaded(); + } + doSubmit(event) { + // Nothing to do + } + getExampleTree(key) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!key) { + const example = this.filterForm.get('example').value; + key = example && example.label || 'default'; + } + // Get program + const programLabel = (_a = this.filterForm.get('program').value) === null || _a === void 0 ? void 0 : _a.label; + // Load example + const json = getExampleTree(key, programLabel); + // Convert to array (as Pod should sent) with: + // - a local ID + // - only the parentId, and NOT the parent + const batches = EntityUtils.treeToArray(json) || []; + yield EntityUtils.fillLocalIds(batches, (_, count) => this.entities.nextValues(Batch.TYPENAME, count)); + batches.forEach(b => { + b.parentId = b.parent && b.parent.id; + delete b.parent; + }); + // Convert into Batch tree + const catchBatch = Batch.fromObjectArrayAsTree(batches); + BatchUtils.cleanTree(catchBatch); + // Compute (individual count, weight, etc) + BatchUtils.computeTree(catchBatch); + return catchBatch; + }); + } + // Load data into components + applyExample(key) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (isNil(key)) { + key = (_a = this.filterForm.get('example').value) === null || _a === void 0 ? void 0 : _a.label; + } + // Wait enumerations override + yield this.referentialRefService.ready(); + const catchBatch = yield this.getExampleTree(key); + yield this.updateView(catchBatch); + this.tabGroup.realignInkBar(); + }); + } + dumpExample(key) { + return __awaiter(this, void 0, void 0, function* () { + const catchBatch = yield this.getExampleTree(key); + this.dumpCatchBatch(catchBatch, 'example'); + }); + } + dumpBatchTree(batchTree, outputName, finalize) { + return __awaiter(this, void 0, void 0, function* () { + const catchBatch = yield this.getValue(batchTree, finalize); + // Dump + this.dumpCatchBatch(catchBatch, outputName); + if (batchTree.mobile) { + let html = '
Sub batches :
'; + const subBatches = catchBatch.children; + if (isEmptyArray(subBatches)) { + html += ' No result'; + } + else { + let html = '
    '; + subBatches.forEach(b => { + BatchUtils.logTree(b, { + showAll: false, + println: (m) => { + html += '
  • ' + m + '
  • '; + } + }); + }); + html += '
'; + } + // Append to result + this.outputs[outputName] += html; + } + }); + } + dumpCatchBatch(catchBatch, outputName) { + let html = ''; + if (catchBatch) { + BatchUtils.logTree(catchBatch, { + showAll: false, + println: (m) => { + html += '
' + m; + } + }); + html = html.replace(/\t/g, '  '); + this.outputs[outputName] = html; + } + else { + this.outputs[outputName] = ' No result'; + } + console.debug(html); + } + copyBatchTree(source, target) { + return __awaiter(this, void 0, void 0, function* () { + yield source.save(); + source.disable(); + target.disable(); + try { + const value = yield this.getValue(source, true); + yield target.setValue(value); + } + finally { + source.enable(); + target.enable(); + } + }); + } + save(event, batchTree, outputName) { + return __awaiter(this, void 0, void 0, function* () { + yield this.dumpBatchTree(batchTree, outputName, true); + }); + } + /* -- protected methods -- */ + getValue(batchTree, finalize) { + return __awaiter(this, void 0, void 0, function* () { + yield batchTree.save(); + const catchBatch = batchTree.value; + if (finalize) { + // Clean + BatchUtils.cleanTree(catchBatch); + // Compute (individual count, weight, etc) + BatchUtils.computeTree(catchBatch); + } + return catchBatch; + }); + } + stringify(value) { + return JSON.stringify(value); + } +}; +__decorate([ + ViewChild('mobileBatchTree'), + __metadata("design:type", BatchTreeComponent) +], BatchTreeTestPage.prototype, "mobileBatchTree", void 0); +__decorate([ + ViewChild('desktopBatchTree'), + __metadata("design:type", BatchTreeComponent) +], BatchTreeTestPage.prototype, "desktopBatchTree", void 0); +__decorate([ + ViewChild('tabGroup'), + __metadata("design:type", MatTabGroup) +], BatchTreeTestPage.prototype, "tabGroup", void 0); +BatchTreeTestPage = __decorate([ + Component({ + selector: 'app-batch-tree-test', + templateUrl: './batch-tree.test.html', + styleUrls: ['./batch-tree.test.scss'], + providers: [ + { provide: ContextService, useClass: TripContextService } + ] + }), + __metadata("design:paramtypes", [UntypedFormBuilder, + ReferentialRefService, + ProgramRefService, + EntitiesStorage, + TripService, + ContextService]) +], BatchTreeTestPage); +export { BatchTreeTestPage }; +//# sourceMappingURL=batch-tree.test.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/testing/batch-tree.test.js.map b/out-tsc/app/app/trip/batch/testing/batch-tree.test.js.map new file mode 100644 index 000000000..0e1cd81ec --- /dev/null +++ b/out-tsc/app/app/trip/batch/testing/batch-tree.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch-tree.test.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/testing/batch-tree.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/tree/batch-model-tree.component.js b/out-tsc/app/app/trip/batch/tree/batch-model-tree.component.js new file mode 100644 index 000000000..47bc53342 --- /dev/null +++ b/out-tsc/app/app/trip/batch/tree/batch-model-tree.component.js @@ -0,0 +1,106 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core'; +import { NestedTreeControl } from '@angular/cdk/tree'; +import { MatTreeNestedDataSource } from '@angular/material/tree'; +import { BatchModel } from '@app/trip/batch/tree/batch-tree.model'; +import { BehaviorSubject } from 'rxjs'; +let BatchModelTreeComponent = class BatchModelTreeComponent { + constructor(cd) { + this.cd = cd; + this.selectionSubject = new BehaviorSubject(null); + this.treeDataSource = new MatTreeNestedDataSource(); + this.treeControl = new NestedTreeControl((node) => node.children); + this.debug = false; + this.mobile = false; + this.selectedBatchStatus = undefined; + this.itemClick = new EventEmitter(); + this.hasChild = (_, model) => !model.isLeaf; + } + set data(value) { + this.treeDataSource.data = value; + this.expandAll(); + } + get data() { + return this.treeDataSource.data; + } + set selected(value) { + this.setSelection(value); + } + get selected() { + return this.selectionSubject.value; + } + get model() { + var _a; + return (_a = this.treeDataSource.data) === null || _a === void 0 ? void 0 : _a[0]; + } + expandAll() { + (this.data || []).forEach((node) => this.expandDescendants(node)); + this.markForCheck(); + } + setSelection(node) { + if (node !== this.selectionSubject.value) { + this.selectionSubject.next(node); + this.markForCheck(); + } + } + click(event, node) { + event === null || event === void 0 ? void 0 : event.stopImmediatePropagation(); + this.itemClick.emit(node); + } + toggle(event, node) { + event === null || event === void 0 ? void 0 : event.stopImmediatePropagation(); + this.treeControl.toggle(node); + } + markForCheck() { + this.cd.markForCheck(); + } + expandDescendants(model) { + model = model || this.model; + if (!model) + return; // Skip + if (model instanceof BatchModel) { + this.treeControl.expand(model); + (model.children || []).filter((node) => this.hasChildrenBatchModel(node)).forEach((node) => this.expandDescendants(node)); + } + } + hasChildrenBatchModel(node) { + return node.children && node.children.some((c) => c instanceof BatchModel); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchModelTreeComponent.prototype, "debug", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchModelTreeComponent.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], BatchModelTreeComponent.prototype, "data", null); +__decorate([ + Input(), + __metadata("design:type", BatchModel), + __metadata("design:paramtypes", [BatchModel]) +], BatchModelTreeComponent.prototype, "selected", null); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchModelTreeComponent.prototype, "selectedBatchStatus", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], BatchModelTreeComponent.prototype, "itemClick", void 0); +BatchModelTreeComponent = __decorate([ + Component({ + selector: 'app-batch-model-tree', + templateUrl: './batch-model-tree.component.html', + styleUrls: ['./batch-model-tree.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [ChangeDetectorRef]) +], BatchModelTreeComponent); +export { BatchModelTreeComponent }; +//# sourceMappingURL=batch-model-tree.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/tree/batch-model-tree.component.js.map b/out-tsc/app/app/trip/batch/tree/batch-model-tree.component.js.map new file mode 100644 index 000000000..150fc3b3d --- /dev/null +++ b/out-tsc/app/app/trip/batch/tree/batch-model-tree.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch-model-tree.component.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/tree/batch-model-tree.component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/tree/batch-model.validator.js b/out-tsc/app/app/trip/batch/tree/batch-model.validator.js new file mode 100644 index 000000000..4f581e05b --- /dev/null +++ b/out-tsc/app/app/trip/batch/tree/batch-model.validator.js @@ -0,0 +1,314 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, UntypedFormControl } from '@angular/forms'; +import { AppFormArray, AppFormUtils, isEmptyArray, isNil, isNotEmptyArray, isNotNil, LocalSettingsService, ReferentialRef, removeDuplicatesFromArray, TreeItemEntityUtils, } from '@sumaris-net/ngx-components'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { Batch } from '@app/trip/batch/common/batch.model'; +import { BatchValidatorService } from '@app/trip/batch/common/batch.validator'; +import { TranslateService } from '@ngx-translate/core'; +import { BatchModel, BatchModelFilter, BatchModelUtils } from '@app/trip/batch/tree/batch-tree.model'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +import { environment } from '@environments/environment'; +import { PmfmIds, QualitativeValueIds } from '@app/referential/services/model/model.enum'; +import { Rule } from '@app/referential/services/model/rule.model'; +import { PmfmValueUtils } from '@app/referential/services/model/pmfm-value.model'; +import { BatchRules } from '@app/trip/batch/tree/batch-tree.rules'; +let BatchModelValidatorService = class BatchModelValidatorService extends BatchValidatorService { + constructor(formBuilder, translate, measurementsValidatorService, batchRules, settings) { + super(formBuilder, translate, settings, measurementsValidatorService); + this.batchRules = batchRules; + this.debug = !environment.production; + } + createModel(data, opts) { + // Map sorting pmfms + opts.sortingPmfms = (opts.sortingPmfms || []).map(p => { + var _a; + // Fill CHILD_GEAR qualitative values, with the given opts.physicalGear + if (((_a = opts === null || opts === void 0 ? void 0 : opts.physicalGear) === null || _a === void 0 ? void 0 : _a.children) && p.id === PmfmIds.CHILD_GEAR) { + // Convert to referential item + p = p.clone(); + p.type = 'qualitative_value'; + p.qualitativeValues = (opts.physicalGear.children || []).map(pg => ReferentialRef.fromObject({ + id: pg.rankOrder, + label: pg.rankOrder, + name: pg.measurementValues[PmfmIds.GEAR_LABEL] || pg.gear.name + })); + if (isEmptyArray(p.qualitativeValues)) { + console.warn(`[batch-model-validator] Unable to fill items for Pmfm#${p.id} (${p.label})`); + } + else { + // DEBUG + console.debug(`[batch-tree-container] Fill CHILD_GEAR PMFM, with:`, p.qualitativeValues); + } + } + return p; + }).filter(isNotNil); + // Create rules + const allowDiscard = opts.allowDiscard !== false; + let rules = (opts.rules || []); + if (allowDiscard) { + rules = [ + ...rules, + // Landing rules + Rule.fromObject({ + precondition: true, + filter: ({ model }) => PmfmValueUtils.equals(model.originalData.measurementValues[PmfmIds.DISCARD_OR_LANDING], QualitativeValueIds.DISCARD_OR_LANDING.LANDING), + // Avoid discard pmfms + children: this.batchRules.getNotDiscardPmfms('pmfm.') + }), + // Discard rules + Rule.fromObject({ + precondition: true, + filter: ({ model }) => { + var _a; + return PmfmValueUtils.equals(model.originalData.measurementValues[PmfmIds.DISCARD_OR_LANDING], QualitativeValueIds.DISCARD_OR_LANDING.DISCARD) + || PmfmValueUtils.equals((_a = model.parent) === null || _a === void 0 ? void 0 : _a.originalData.measurementValues[PmfmIds.DISCARD_OR_LANDING], QualitativeValueIds.DISCARD_OR_LANDING.DISCARD); + }, + // Avoid landing pmfms + children: this.batchRules.getNotLandingPmfms('pmfm.') + }) + ]; + } + else { + rules = [...rules, + // No discard pmfms + ...this.batchRules.getNotDiscardPmfms('pmfm.') + ]; + } + // Create a batch model + const model = BatchModelUtils.createModel(data, Object.assign(Object.assign({}, opts), { rules })); + if (!model) + return; + // Special case for discard batches + { + if (allowDiscard) { + // Disable the discard batch, if not a leaf + TreeItemEntityUtils.findByFilter(model, BatchModelFilter.fromObject({ + measurementValues: { + [PmfmIds.DISCARD_OR_LANDING]: QualitativeValueIds.DISCARD_OR_LANDING.DISCARD + }, + hidden: false, + isLeaf: false + })) + .forEach(batch => { + var _a; + batch.pmfms = []; + batch.state = Object.assign(Object.assign({}, batch.state), { requiredWeight: false }); + batch.hidden = true; + // Add 'discard' into the children name + (_a = batch.children) === null || _a === void 0 ? void 0 : _a.forEach(child => { + child.name = [batch.name, child.name].join(', '); + }); + }); + // Enable sampling batch, in VRAC batches + TreeItemEntityUtils.findByFilter(model, BatchModelFilter.fromObject({ + parent: { + measurementValues: { + [PmfmIds.DISCARD_OR_LANDING]: QualitativeValueIds.DISCARD_OR_LANDING.DISCARD + } + }, + hidden: false, + measurementValues: { + [PmfmIds.BATCH_SORTING]: QualitativeValueIds.BATCH_SORTING.BULK + } + })) + .forEach(batch => { + const weightPmfms = (batch.childrenPmfms || []).filter(PmfmUtils.isWeight).map(p => p.clone()); + if (isNotEmptyArray(weightPmfms)) { + // Add weights PMFM (if not found) + const pmfms = removeDuplicatesFromArray([ + ...batch.pmfms, + ...weightPmfms + ], 'id'); + // Update the state, to enable weight (and sampling weight) + batch.state = Object.assign(Object.assign({}, batch.state), { pmfms, showWeight: true, requiredWeight: true, showSamplingBatch: true, showSampleWeight: true, requiredSampleWeight: true, samplingBatchEnabled: true }); + } + }); + // Enable weight in HORS-VRAC batches + TreeItemEntityUtils.findByFilter(model, BatchModelFilter.fromObject({ + parent: { + measurementValues: { + [PmfmIds.DISCARD_OR_LANDING]: QualitativeValueIds.DISCARD_OR_LANDING.DISCARD + } + }, + hidden: false, + measurementValues: { + [PmfmIds.BATCH_SORTING]: QualitativeValueIds.BATCH_SORTING.NON_BULK + } + })) + .forEach(batch => { + const weightPmfms = (batch.childrenPmfms || []).filter(PmfmUtils.isWeight).map(p => p.clone()); + if (isNotEmptyArray(weightPmfms)) { + // Add weights PMFM (if not found) + const pmfms = removeDuplicatesFromArray([ + ...batch.pmfms, + ...weightPmfms + ], 'id'); + // Update the state, to enable weight + batch.state = Object.assign(Object.assign({}, batch.state), { pmfms, showWeight: true, requiredWeight: true, showSamplingBatch: false, samplingBatchEnabled: false, showExhaustiveInventory: false }); + batch.originalData.exhaustiveInventory = true; + } + }); + // Activer le champ "Inventaire exhaustif des espèces ?" + TreeItemEntityUtils.findByFilter(model, BatchModelFilter.fromObject({ + hidden: false, + isLeaf: true + })) + .forEach(leafBatch => { + if (isNil(leafBatch.state.showExhaustiveInventory)) { + leafBatch.state = Object.assign(Object.assign({}, leafBatch.state), { showExhaustiveInventory: true }); + } + }); + } + else { + const discardFilter = BatchModelFilter.fromObject({ + measurementValues: { + [PmfmIds.DISCARD_OR_LANDING]: QualitativeValueIds.DISCARD_OR_LANDING.DISCARD + } + }); + TreeItemEntityUtils.deleteByFilter(model, discardFilter); + } + } + // Translate the root name + if (!model.parent && model.name) { + model.name = this.translate.instant(model.name); + } + if (this.debug) + BatchModelUtils.logTree(model); + return model; + } + createFormGroupByModel(model, opts) { + var _a, _b; + if (!model) + throw new Error('Missing required argument \'model\''); + if (!opts) + throw new Error('Missing required argument \'opts\''); + // DEBUG + console.debug(`- ${(_a = model.originalData) === null || _a === void 0 ? void 0 : _a.label} ${model.path}`); + const weightPmfms = model.weightPmfms; + const withWeight = isNotEmptyArray(weightPmfms); + // Init weight object + if (withWeight) { + model.originalData.weight = BatchUtils.getWeight(model.originalData, model.weightPmfms); + } + if (model.isLeaf && isNotEmptyArray(model.originalData.children)) { + const childrenWeightPmfms = (model.childrenPmfms || []).filter(PmfmUtils.isWeight); + if (isNotEmptyArray(childrenWeightPmfms)) { + model.originalData.children.forEach(batch => { + batch.weight = BatchUtils.getWeight(batch, childrenWeightPmfms); + const samplingBatch = BatchUtils.getSamplingChild(batch); + if (samplingBatch) + samplingBatch.weight = BatchUtils.getWeight(samplingBatch, childrenWeightPmfms); + }); + } + } + const form = this.getFormGroup(model.originalData, { + pmfms: model.pmfms, + withMeasurements: true, + withMeasurementTypename: true, + withWeight, + weightRequired: opts.isOnFieldMode === false && withWeight, + withChildren: model.isLeaf, + childrenPmfms: model.isLeaf && model.childrenPmfms, + allowSpeciesSampling: opts.allowSpeciesSampling, + isOnFieldMode: opts.isOnFieldMode, + updateOn: opts.updateOn + }); + // Update model valid marker (check this BEFORE to add the children form array) + model.valid = form.valid; + if (form.invalid) { + AppFormUtils.logFormErrors(form, '[batch-model-validator] ' + model.name + ' > '); + } + // Recursive call, on each children model + if (!model.isLeaf) { + const childrenFormArray = new AppFormArray((m) => this.createFormGroupByModel(m, opts), BatchModel.equals, BatchModel.isEmpty, { + allowReuseControls: false, + allowEmptyArray: true, + updateOn: opts === null || opts === void 0 ? void 0 : opts.updateOn + }); + if ((_b = model.state) === null || _b === void 0 ? void 0 : _b.showSamplingBatch) { + const samplingForm = super.getFormGroup(null); + samplingForm.setControl('children', childrenFormArray, { emitEvent: false }); + form.setControl('children', this.formBuilder.array([samplingForm]), { emitEvent: false }); + childrenFormArray.patchValue(model.children || []); + } + else { + form.setControl('children', childrenFormArray, { emitEvent: false }); + childrenFormArray.patchValue(model.children || []); + } + } + else { + const childrenFormArray = new AppFormArray((value) => new UntypedFormControl(value), Batch.equals, BatchUtils.isEmpty, { + allowReuseControls: false, + allowEmptyArray: true, + updateOn: opts === null || opts === void 0 ? void 0 : opts.updateOn + }); + form.setControl('children', childrenFormArray, { emitEvent: false }); + childrenFormArray.patchValue(model.originalData.children || []); + } + model.validator = form; + return form; + } + getFormGroup(data, opts) { + return super.getFormGroup(data, Object.assign(Object.assign({}, opts), { qvPmfm: null })); + } + getFormGroupConfig(data, opts) { + const config = super.getFormGroupConfig(data, Object.assign(Object.assign({}, opts), { withChildren: false, withMeasurements: false })); + delete config.parent; + delete config.children; + delete config.measurementValues; + // Children array: + if (opts === null || opts === void 0 ? void 0 : opts.withChildren) { + if (isNotEmptyArray(opts.childrenPmfms)) { + // DEBUG + //console.debug(`[batch-model-validator] ${data?.label} Creating children form array, with pmfms: `, opts.childrenPmfms); + config['children'] = this.getChildrenFormArray(data === null || data === void 0 ? void 0 : data.children, Object.assign(Object.assign({ withWeight: true, withMeasurements: true }, opts), { allowSamplingBatch: undefined, withChildren: opts.allowSpeciesSampling, withChildrenWeight: true, pmfms: opts.childrenPmfms || null, childrenPmfms: null })); + } + // E.g. individual measures + else { + config['children'] = this.formBuilder.array([]); + // TODO add individual measures pmfms + /*config['children'] = this.getChildrenFormArray(data?.children, { + withWeight: false, + withMeasurements: true, + ...opts, + allowSamplingBatch: undefined, + withChildren: false, + pmfms: opts.individualPmfms || null, + });*/ + } + } + // Add measurement values + if (opts === null || opts === void 0 ? void 0 : opts.withMeasurements) { + if (isNotEmptyArray(opts.pmfms)) { + config['measurementValues'] = this.getMeasurementValuesForm(data === null || data === void 0 ? void 0 : data.measurementValues, { + pmfms: opts.pmfms, + forceOptional: false, + withTypename: opts.withMeasurementTypename, + updateOn: opts === null || opts === void 0 ? void 0 : opts.updateOn + }); + } + else { + // WARN: we need to keep existing measurement (e.g. for individual sub-batch) + // => create a simple control, without PMFMs validation. This should be done in sub-batch form/modal + config['measurementValues'] = this.formBuilder.control((data === null || data === void 0 ? void 0 : data.measurementValues) || null); + } + } + return config; + } + fillDefaultOptions(opts) { + opts = super.fillDefaultOptions(opts); + return opts; + } +}; +BatchModelValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + MeasurementsValidatorService, + BatchRules, + LocalSettingsService]) +], BatchModelValidatorService); +export { BatchModelValidatorService }; +//# sourceMappingURL=batch-model.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/tree/batch-model.validator.js.map b/out-tsc/app/app/trip/batch/tree/batch-model.validator.js.map new file mode 100644 index 000000000..4a0295202 --- /dev/null +++ b/out-tsc/app/app/trip/batch/tree/batch-model.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch-model.validator.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/tree/batch-model.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/tree/batch-tree-container.component.js b/out-tsc/app/app/trip/batch/tree/batch-tree-container.component.js new file mode 100644 index 000000000..a9b2ff129 --- /dev/null +++ b/out-tsc/app/app/trip/batch/tree/batch-tree-container.component.js @@ -0,0 +1,1107 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Injector, Input, Optional, ViewChild } from '@angular/core'; +import { APP_LOGGING_SERVICE, AppEditor, AppFormUtils, changeCaseToUnderscore, equals, fadeInOutAnimation, filterFalse, filterTrue, firstNotNilPromise, getPropertyByPath, isEmptyArray, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, LocalSettingsService, toBoolean, toNumber, TreeItemEntityUtils, waitFor, waitForTrue, } from '@sumaris-net/ngx-components'; +import { AlertController, IonModal, NavController } from '@ionic/angular'; +import { BatchTreeComponent } from '@app/trip/batch/tree/batch-tree.component'; +import { Batch } from '@app/trip/batch/common/batch.model'; +import { Program } from '@app/referential/services/model/program.model'; +import { ActivatedRoute, Router } from '@angular/router'; +import { TranslateService } from '@ngx-translate/core'; +import { combineLatestWith, Observable, Subject, Subscription } from 'rxjs'; +import { debounceTime, distinctUntilChanged, filter, map, mergeMap, switchMap } from 'rxjs/operators'; +import { environment } from '@environments/environment'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { BatchFilter } from '@app/trip/batch/common/batch.filter'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { BatchModel } from '@app/trip/batch/tree/batch-tree.model'; +import { BatchModelValidatorService } from '@app/trip/batch/tree/batch-model.validator'; +import { PmfmNamePipe } from '@app/referential/pipes/pmfms.pipe'; +import { PhysicalGear } from '@app/trip/physicalgear/physical-gear.model'; +import { PhysicalGearService } from '@app/trip/physicalgear/physicalgear.service'; +import { TripContextService } from '@app/trip/trip-context.service'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +import { RxState } from '@rx-angular/state'; +import { BatchModelTreeComponent } from '@app/trip/batch/tree/batch-model-tree.component'; +import { MatSidenav } from '@angular/material/sidenav'; +import { MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { ContextService } from '@app/shared/context.service'; +import { MatTab, MatTabGroup } from '@angular/material/tabs'; +export const BatchTreeContainerSettingsEnum = { + PAGE_ID: 'batch-tree-container', + TREE_PANEL_FLOATING_KEY: 'treePanelFloating' +}; +let BatchTreeContainerComponent = class BatchTreeContainerComponent extends AppEditor { + constructor(injector, route, router, alertCtrl, translate, programRefService, batchModelValidatorService, pmfmNamePipe, physicalGearService, context, _state, cd, settings, loggingService) { + super(route, router, injector.get(NavController), alertCtrl, translate); + this.programRefService = programRefService; + this.batchModelValidatorService = batchModelValidatorService; + this.pmfmNamePipe = pmfmNamePipe; + this.physicalGearService = physicalGearService; + this.context = context; + this._state = _state; + this.cd = cd; + this.settings = settings; + this._listenProgramChanges = true; + this._logPrefix = '[batch-tree-container] '; + this.allowSamplingBatches$ = this._state.select('allowSpeciesSampling'); + this.allowSubBatches$ = this._state.select('allowSubBatches'); + this.programLabel$ = this._state.select('programLabel'); + this.program$ = this._state.select('program'); + this.requiredGear$ = this._state.select('requiredGear'); + this.gearId$ = this._state.select('gearId'); + this.form$ = this._state.select('form'); + this.editingBatch$ = this._state.select('editingBatch'); + this.currentBadge$ = this._state.select('currentBadge'); + this.treePanelFloating$ = this._state.select('treePanelFloating'); + this.model$ = this._state.select('model'); + this.batchTreeStatus$ = this._state.select('batchTreeStatus'); + this.samplingRatioFormat = ProgramProperties.TRIP_BATCH_SAMPLING_RATIO_FORMAT.defaultValue; + this.i18nPmfmPrefix = 'TRIP.BATCH.PMFM.'; + this.useSticky = true; + this.style = 'menu'; + this.showToolbar = true; + this.useModal = false; + this.rxStrategy = 'userBlocking'; + // Defaults + this.mobile = injector.get(LocalSettingsService).mobile; + this.i18nContext = { + prefix: '', + suffix: '' + }; + this.errorTranslatorOptions = { separator: '
', controlPathTranslator: this }; + this._state.set({ + treePanelFloating: this.settings.getPageSettings(BatchTreeContainerSettingsEnum.PAGE_ID, BatchTreeContainerSettingsEnum.TREE_PANEL_FLOATING_KEY) || this.mobile, // On desktop, panel is pinned by default + }); + // Watch program, to configure tables from program properties + this._state.connect('program', this.programLabel$ + .pipe(filter(() => this._listenProgramChanges), // Avoid to watch program, if was already set + filter(isNotNilOrBlank), distinctUntilChanged(), switchMap(programLabel => this.programRefService.watchByLabel(programLabel)))); + this._state.hold(filterTrue(this.readySubject) + .pipe(switchMap(() => this._state.select(['program', 'gearId'], s => s)), debounceTime(100), distinctUntilChanged(equals)), ({ program, gearId }) => __awaiter(this, void 0, void 0, function* () { + yield this.setProgram(program); + yield this.loadPmfms(program, gearId); + })); + this._state.connect('model', this._state.select(['data', 'physicalGear', 'allowDiscard', 'catchPmfms', 'sortingPmfms'], s => s, { + data: (d1, d2) => d1 === d2, + physicalGear: PhysicalGear.equals, + allowDiscard: (a1, a2) => a1 === a2, + catchPmfms: equals, + sortingPmfms: equals + }) + .pipe(filter(({ data, physicalGear, allowDiscard, sortingPmfms, catchPmfms }) => sortingPmfms && catchPmfms && physicalGear && true), mergeMap(({ data, physicalGear, allowDiscard, sortingPmfms, catchPmfms }) => __awaiter(this, void 0, void 0, function* () { + var _a; + // Load physical gear's children (if not already done) + if (physicalGear && isEmptyArray(physicalGear.children)) { + const tripId = (_a = this.context.trip) === null || _a === void 0 ? void 0 : _a.id; + physicalGear.children = yield this.physicalGearService.loadAllByParentId({ tripId, parentGearId: physicalGear.id }); + } + // Create the model + return this.batchModelValidatorService.createModel(data, { allowDiscard, sortingPmfms, catchPmfms, physicalGear }); + })))); + this._state.connect('form', this._state.select(['model', 'allowSpeciesSampling'], s => s) + .pipe(filter(({ model, allowSpeciesSampling }) => !!model), map(({ model, allowSpeciesSampling }) => { + const form = this.batchModelValidatorService.createFormGroupByModel(model, { + allowSpeciesSampling, + isOnFieldMode: this.isOnFieldMode + }); + form.disable(); + return form; + }))); + // Reload data, when form (or model) changed + this._state.hold(this.form$ + .pipe(filter(form => !this.loading && !!form)), (_) => this.updateView(this.data, { markAsPristine: false /*keep dirty state*/ })); + this._state.hold(filterTrue(this.readySubject) + .pipe(switchMap(() => this.batchTree.dirtySubject), filter(dirty => dirty === true && this.enabled && this.loaded)), () => this.markAsDirty()); + // If now allowed sampling batches: remove it from data + this._state.hold(filterFalse(this.allowSamplingBatches$), () => this.resetSamplingBatches()); + this._state.connect('batchTreeStatus', this.watchBatchTreeStatus()); + this._state.connect('currentBadge', this.batchTreeStatus$, (state, status) => { + if (!status.valid) { + return { + text: '!', + hidden: false, + color: 'accent' + }; + } + else if (status.rowCount) { + return { + text: status.rowCount.toString(), + hidden: false, + color: 'primary' + }; + } + return { + text: '', + hidden: true, + color: 'primary' + }; + }); + // Workaround need by the sidenav, when included inside a MatTabGroup + const parentTabGroup = injector.get(MatTabGroup); + if (parentTabGroup) { + const parentTab = injector.get(MatTab); + this._state.hold(parentTabGroup.animationDone, (event) => { + // Visible + if (parentTab.isActive) { + if (!this.treePanelFloating || !this.editingBatch) { + this.openTreePanel(); + } + } + else { + this.closeTreePanel(); + } + }); + } + // DEBUG + this._logger = loggingService.getLogger('batch-tree-container'); + this.debug = !environment.production; + } + get model() { + return this._state.get('model'); + } + set editingBatch(value) { + this._state.set('editingBatch', _ => value); + } + get editingBatch() { + return this._state.get('editingBatch'); + } + get catchPmfms() { + return this._state.get('catchPmfms'); + } + get sortingPmfms() { + return this._state.get('sortingPmfms'); + } + set data(value) { + this._state.set('data', (_) => value); + } + get data() { + return this._state.get('data'); + } + set allowSpeciesSampling(value) { + this._state.set('allowSpeciesSampling', (_) => value); + } + get allowSpeciesSampling() { + return this._state.get('allowSpeciesSampling'); + } + set allowSubBatches(value) { + this._state.set('allowSubBatches', (_) => value); + } + get allowSubBatches() { + return this._state.get('allowSubBatches'); + } + set programLabel(value) { + this._state.set('programLabel', (_) => value); + } + get programLabel() { + var _a; + return this._state.get('programLabel') || ((_a = this.program) === null || _a === void 0 ? void 0 : _a.label); + } + set program(value) { + // Disable watchByLabel, when changing programLabel + // Avoid to watch program changes, when program is given by parent component + this._listenProgramChanges = false; + this._state.set('program', (_) => value); + } + get program() { + return this._state.get('program'); + } + set requiredGear(value) { + this._state.set('requiredGear', (_) => value); + } + get requiredGear() { + return this._state.get('requiredGear'); + } + set gearId(value) { + this._state.set('gearId', (_) => value); + } + get gearId() { + return this._state.get('gearId'); + } + set physicalGear(value) { + var _a; + if (this.physicalGear && (value === null || value === void 0 ? void 0 : value.id) !== this.physicalGear.id) { + // Reset pmfms, to force a reload + this.resetRootForm(); + } + // Apply change + this._state.set({ + physicalGear: value, + gearId: toNumber((_a = value === null || value === void 0 ? void 0 : value.gear) === null || _a === void 0 ? void 0 : _a.id, null) + }); + } + get physicalGear() { + return this._state.get('physicalGear'); + } + set showCatchForm(value) { + this._state.set('showCatchForm', (_) => value); + } + get showCatchForm() { + return this._state.get('showCatchForm') || false; + } + set showBatchTables(value) { + this._state.set('showBatchTables', (_) => value); + } + get showBatchTables() { + return this._state.get('showBatchTables') || false; + } + set allowDiscard(value) { + this._state.set('allowDiscard', _ => value); + } + get allowDiscard() { + return this._state.get('allowDiscard'); + } + get programAllowMeasure() { + return this._state.get('programAllowMeasure'); + } + set programAllowMeasure(value) { + this._state.set('programAllowMeasure', _ => value); + } + get touched() { + var _a; + return ((_a = this.form) === null || _a === void 0 ? void 0 : _a.touched) || super.touched; + } + get invalid() { + return !this.valid; + } + get valid() { + return !this.model || this.model.valid; + } + get loading() { + // Should NOT use batchTree loading state, because it is load later (when gearId is known) + return this.model && this.loadingSubject.value; + } + get isNewData() { + var _a; + return isNil((_a = this.data) === null || _a === void 0 ? void 0 : _a.id); + } + set value(value) { + this.setValue(value); + } + get value() { + return this.data; + } + get form() { + return this._state.get('form'); + } + get highlightForwardButton() { + var _a, _b; + return ((_a = this.editingBatch) === null || _a === void 0 ? void 0 : _a.valid) && (!((_b = this.batchTree) === null || _b === void 0 ? void 0 : _b.showBatchTables) + || this.visibleRowCount > 0); + } + get visibleRowCount() { + var _a; + return ((_a = this.batchTree) === null || _a === void 0 ? void 0 : _a.showBatchTables) + ? this.batchTree.batchGroupsTable.visibleRowCount + : 0; + } + get isOnFieldMode() { + return this.usageMode === 'FIELD'; + } + set treePanelFloating(value) { + this._state.set('treePanelFloating', _ => value); + } + get treePanelFloating() { + return this._state.get('treePanelFloating'); + } + ngOnInit() { + super.ngOnInit(); + this.showCatchForm = toBoolean(this._state.get('showCatchForm'), true); + this.showBatchTables = toBoolean(this._state.get('showBatchTables'), true); + this.programAllowMeasure = toBoolean(this._state.get('programAllowMeasure'), this.showBatchTables); + this.allowSubBatches = toBoolean(this._state.get('allowSubBatches'), this.programAllowMeasure); + this.allowSpeciesSampling = toBoolean(this._state.get('allowSpeciesSampling'), this.programAllowMeasure); + this.allowDiscard = toBoolean(this.allowDiscard, true); + this.treePanelFloating = toBoolean(this.treePanelFloating, true); + } + // Change visibility to public + setError(error, opts) { + if (!error || typeof error === 'string') { + super.setError(error, opts); + } + else { + console.log('TODO: apply error to rows ?', error); + } + } + // Change visibility to public + resetError(opts) { + super.resetError(opts); + } + translateControlPath(path) { + var _a, _b, _c, _d, _e; + if (path.startsWith('measurementValues.')) { + const parts = path.split('.'); + const pmfmId = parseInt(parts[parts.length - 1]); + const pmfm = (this.catchPmfms || []).find(p => p.id === pmfmId) + || (this.sortingPmfms || []).find(p => p.id === pmfmId); + if (pmfm) + return this.pmfmNamePipe.transform(pmfm, { i18nPrefix: this.i18nPmfmPrefix, i18nContext: (_a = this.i18nContext) === null || _a === void 0 ? void 0 : _a.suffix }); + } + else if (path.includes('.measurementValues.')) { + const parts = path.split('.'); + const pmfmId = parseInt(parts[parts.length - 1]); + const pmfm = (this.sortingPmfms || []).find(p => p.id === pmfmId); + if (pmfm) { + const nodePath = parts.slice(0, parts.length - 2).join('.'); + const node = this.getBatchModelByPath(nodePath); + return `${(node === null || node === void 0 ? void 0 : node.fullName) || path} > ${this.pmfmNamePipe.transform(pmfm, { i18nPrefix: this.i18nPmfmPrefix, i18nContext: (_b = this.i18nContext) === null || _b === void 0 ? void 0 : _b.suffix })}`; + } + } + if (path.startsWith('children.')) { + const parts = path.split('.'); + const fieldName = parts[parts.length - 1]; + const nodePath = parts.slice(0, parts.length - 1).join('.'); + let nodeName = (_c = this.getBatchModelByPath(nodePath)) === null || _c === void 0 ? void 0 : _c.fullName; + if (!nodeName) { + const nodeForm = (_d = this.form) === null || _d === void 0 ? void 0 : _d.get(nodePath); + nodeName = (_e = nodeForm === null || nodeForm === void 0 ? void 0 : nodeForm.value) === null || _e === void 0 ? void 0 : _e.label; + } + const i18nKey = (this.batchTree.i18nContext.prefix || 'TRIP.BATCH.EDIT.') + changeCaseToUnderscore(fieldName).toUpperCase(); + return `${nodeName || path} > ${this.translate.instant(i18nKey)}`; + } + return path; + } + markAllAsTouched(opts) { + var _a; + (_a = this.form) === null || _a === void 0 ? void 0 : _a.markAllAsTouched(); + // Mark children component as touched also + if (!opts || opts.withChildren !== false) { + super.markAllAsTouched(opts); + } + // Mark as touched the component itself, but NOT the child batch tree + else { + if (this.touchedSubject.value !== true) { + this.touchedSubject.next(true); + } + if (!this.loading && (!opts || opts.emitEvent !== false)) + this.markForCheck(); + } + } + markAsPristine(opts) { + var _a; + (_a = this.form) === null || _a === void 0 ? void 0 : _a.markAsPristine(opts); + super.markAsPristine(opts); + } + autoFill(opts) { + return __awaiter(this, void 0, void 0, function* () { + yield this.ready(); + console.warn(this._logPrefix + 'autoFill() not implemented yet!'); + }); + } + toggleFloatingPanel(event) { + var _a; + if ((_a = this.sidenav) === null || _a === void 0 ? void 0 : _a.opened) + this.sidenav.close(); + } + toggleTreePanelFloating() { + var _a; + const previousFloating = this.treePanelFloating; + this.treePanelFloating = !previousFloating; + this.settings.savePageSetting(BatchTreeContainerSettingsEnum.PAGE_ID, this.treePanelFloating, BatchTreeContainerSettingsEnum.TREE_PANEL_FLOATING_KEY); + if (!previousFloating) + (_a = this.sidenav) === null || _a === void 0 ? void 0 : _a.close(); + } + openTreePanel(event, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if ((event === null || event === void 0 ? void 0 : event.defaultPrevented) || this.useModal) + return; // Cancelled + // First, expand model tree + if (!opts || opts.expandAll !== false) { + if (!this.batchModelTree) + this.cd.detectChanges(); + (_a = this.batchModelTree) === null || _a === void 0 ? void 0 : _a.expandAll(); + } + // Wait side nav to be created + if (!this.sidenav) + yield waitFor(() => !!this.sidenav, { stop: this.destroySubject }); + // open it, if need + if (!this.sidenav.opened) + yield this.sidenav.open(); + this.markForCheck(); + }); + } + closeTreePanel() { + var _a; + (_a = this.sidenav) === null || _a === void 0 ? void 0 : _a.close(); + this.markForCheck(); + } + toggleTreePanel() { + var _a; + (_a = this.sidenav) === null || _a === void 0 ? void 0 : _a.toggle(); + this.markForCheck(); + } + addRow(event) { + var _a; + if ((_a = this.editingBatch) === null || _a === void 0 ? void 0 : _a.isLeaf) { + this.batchTree.addRow(event); + } + } + unload(opts) { + return __awaiter(this, void 0, void 0, function* () { + this.resetRootForm(); + this.data = null; + this.markAsPristine(); + this.markAsLoading(); + }); + } + getFirstInvalidTabIndex() { + return 0; + } + setValue(data, opts) { + return __awaiter(this, void 0, void 0, function* () { + data = data || Batch.fromObject({ + rankOrder: 1, + label: AcquisitionLevelCodes.CATCH_BATCH + }); + const dataChanged = (this.data !== data); + if (dataChanged) { + this.data = data; + // By default, select the root batch in tree + if (!this._lastEditingBatchPath && !this.useModal) { + this._lastEditingBatchPath = ''; + } + } + // Mark as loading + if (!opts || opts.emitEvent !== false) + this.markAsLoading(); + try { + // Wait component is ready + yield this.ready(); + // Update the view + if (data === this.data) { + yield this.updateView(data, { dataChanged }); + if (!opts || opts.emitEvent !== false) { + this.markAsLoaded(); + } + } + } + catch (err) { + console.error(err && err.message || err); + throw err; + } + }); + } + getValue() { + return this.data; + } + save(event, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + try { + const now = Date.now(); + console.debug(this._logPrefix + `Saving tree...`); + if (this.dirty && this.loaded) { + // Save editing batch + const confirmed = yield this.confirmEditingBatch(Object.assign({ keepEditingBatch: true }, opts)); + if (!confirmed) + return false; // Not confirmed = cannot save + // Get value (using getRawValue(), because some controls are disabled) + const json = this.form.getRawValue(); + // Update data + this.data = this.data || new Batch(); + this.data.fromObject(json, { withChildren: true }); + console.debug(this._logPrefix + `Saving tree [OK] in ${Date.now() - now}ms`, this.data); + } + return true; + } + catch (err) { + (_a = this._logger) === null || _a === void 0 ? void 0 : _a.error('save', `Error while saving batch tree: ${(err === null || err === void 0 ? void 0 : err.message) || err}`); + throw err; + } + finally { + this.markAllAsTouched(); + if (!this.submitted) { + this.submitted = true; + this.markForCheck(); + } + } + }); + } + setModalOption(key, value) { + this.modalOptions = this.modalOptions || {}; + this.modalOptions[key] = value; + } + setSelectedTabIndex(value) { + var _a; + (_a = this.batchTree) === null || _a === void 0 ? void 0 : _a.setSelectedTabIndex(value); + } + realignInkBar() { + var _a; + (_a = this.batchTree) === null || _a === void 0 ? void 0 : _a.realignInkBar(); + } + ready(opts) { + const _super = Object.create(null, { + ready: { get: () => super.ready } + }); + return __awaiter(this, void 0, void 0, function* () { + // DO NOT wait children ready() + //await Promise.all(this.childTrees.map(c => c.ready())); + yield _super.ready.call(this, opts); + // Wait form + if (this.loading && this.gearId) { + yield waitForTrue(this._state.select(['form', 'model'], _ => true), opts); + } + else { + yield firstNotNilPromise(this.program$, opts); + } + }); + } + // Unused + load(id, options) { + return Promise.resolve(undefined); + } + // Unused + reload() { + return this.setValue(this.data); + } + /* -- protected function -- */ + setProgram(program, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.debug(this._logPrefix + `Program ${program.label} loaded, with properties: `, program.properties); + let i18nSuffix = program.getProperty(ProgramProperties.I18N_SUFFIX); + i18nSuffix = i18nSuffix !== 'legacy' ? i18nSuffix : ''; + this.i18nContext.suffix = i18nSuffix; + const programAllowMeasure = program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_MEASURE_ENABLE); + this.programAllowMeasure = programAllowMeasure; + this.allowSpeciesSampling = this.allowSpeciesSampling && programAllowMeasure; + this.allowSubBatches = this.allowSubBatches && programAllowMeasure; + this.showTaxonGroup = program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_TAXON_GROUP_ENABLE); + this.showTaxonName = program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_TAXON_NAME_ENABLE); + this.samplingRatioFormat = program.getProperty(ProgramProperties.TRIP_BATCH_SAMPLING_RATIO_FORMAT); + // Propagate to children components, if need + if (!opts || opts.emitEvent !== false) { + // This should be need when program$ has been set by parent, and not from the programLabel$ observable + if (this.programLabel !== program.label) { + this.programLabel = program.label; + } + } + // Propagate to state, if need + if (this.program !== program) { + this.program = program; + } + this.markForCheck(); + }); + } + loadPmfms(program, gearId) { + return __awaiter(this, void 0, void 0, function* () { + if (!program || isNil(gearId)) + return; // Skip + console.info(this._logPrefix + 'Loading pmfms...'); + // Remember component state + const enabled = this.enabled; + const touched = this.touched; + const dirty = this.dirty; + try { + // Save data if dirty and enabled (do not save when disabled, e.g. when reload) + if (dirty && enabled) { + console.info('[batch-tree-container] Save batches... (before to reset tabs)'); + try { + yield this.save(); + } + catch (err) { + // Log then continue + console.error(err && err.message || err); + } + } + // Load pmfms for batches + const [catchPmfms, sortingPmfms] = yield Promise.all([ + this.programRefService.loadProgramPmfms(program.label, { + acquisitionLevel: AcquisitionLevelCodes.CATCH_BATCH, + gearId + }), + this.programRefService.loadProgramPmfms(program.label, { + acquisitionLevel: AcquisitionLevelCodes.SORTING_BATCH, + gearId + }) + ]); + // Update the state + this._state.set((state) => (Object.assign(Object.assign({}, state), { catchPmfms, sortingPmfms }))); + } + catch (err) { + const error = (err === null || err === void 0 ? void 0 : err.message) || err; + this.setError(error); + } + finally { + // Restore component state + if (enabled) + this.enable(); + if (dirty) + this.markAsDirty(); + if (touched) + this.markAllAsTouched(); + } + }); + } + updateView(data, opts) { + return __awaiter(this, void 0, void 0, function* () { + const model = this.model; + if (!model) + return; // Skip if missing model, or if data changed + // Set the tree value - only once if data changed, to avoid a tree refresh (e.g. after a save()) + if (!opts || opts.dataChanged !== false) { + this.batchModelTree.data = [model]; + } + else { + // Update the form (e.g. after a save()) + model.validator.reset(data.asObject(), { emitEvent: false }); + } + // Keep the editing batch + const editingBatch = isNotNil(this._lastEditingBatchPath) ? model.get(this._lastEditingBatchPath) : undefined; + if (!(editingBatch === null || editingBatch === void 0 ? void 0 : editingBatch.hidden)) { + // Force a reload to update the batch id (e.g. after a save(), to force batch id to be applied) + if (this.editingBatch === editingBatch) + yield this.stopEditBatch(); + yield this.startEditBatch(null, editingBatch); + } + else { + // Stop editing batch (not found) + yield this.stopEditBatch(); + } + if (!opts || opts.markAsPristine !== false) { + this.markAsPristine(); + } + }); + } + startEditBatch(event, model) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + if (!model || !(model instanceof BatchModel)) + throw new Error('Missing required \'model\' argument'); + event === null || event === void 0 ? void 0 : event.stopImmediatePropagation(); + if (this.editingBatch === model) { + if (this.treePanelFloating) + this.closeTreePanel(); + if (this.useModal) + (_a = this.modal) === null || _a === void 0 ? void 0 : _a.present(); + return; // Skip + } + // Save current state + yield this.ready(); + const dirty = this.dirty; + const touched = this.touched; + const enabled = this.enabled; + try { + // Save previous changes + const confirmed = yield this.confirmEditingBatch({ keepEditingBatch: true }); + if (!confirmed) + return; // Not confirmed = Cannot change + console.info(this._logPrefix + `Start editing '${model === null || model === void 0 ? void 0 : model.name}'...`); + if (this.treePanelFloating) + this.closeTreePanel(); + model.editing = true; + if (this.modal && !this.modal.isOpen) { + if (!this.batchTree) { + yield this.modal.present(); + this.cd.detectChanges(); + } + else { + this.modal.present(); + } + } + // Remember last editing batch, to be able to restore it later (e.g. see setValue()) + this._lastEditingBatchPath = model.path; + this.batchTree.markAsNotReady(); + const rootAcquisitionLevel = !model.parent ? AcquisitionLevelCodes.CATCH_BATCH : AcquisitionLevelCodes.SORTING_BATCH; + const program = this.program; + const programLabel = (program === null || program === void 0 ? void 0 : program.label) || this.programLabel; + // do NOT pass the programLabel here, to avoid a pmfms reload (pmfms will be pass using 'model.state' - see bellow) + //this.batchTree.programLabel = programLabel; + if (program !== this.batchTree.program) { + yield this.batchTree.setProgram(program, { emitEvent: false /*avoid pmfms reload*/ }); + } + // Configure batch tree + this.batchTree.gearId = this.gearId; + this.batchTree.physicalGear = this.physicalGear; + this.batchTree.i18nContext = this.i18nContext; + this.batchTree.showBatchTables = this.showBatchTables && model.childrenPmfms && isNotEmptyArray(PmfmUtils.filterPmfms(model.childrenPmfms, { excludeHidden: true })); + this.batchTree.allowSpeciesSampling = this.allowSpeciesSampling; + this.batchTree.allowSubBatches = this.allowSubBatches; + this.batchTree.batchGroupsTable.showTaxonGroupColumn = this.showTaxonGroup; + this.batchTree.batchGroupsTable.showTaxonNameColumn = this.showTaxonName; + this.batchTree.batchGroupsTable.samplingRatioFormat = this.samplingRatioFormat; + this.batchTree.rootAcquisitionLevel = rootAcquisitionLevel; + this.batchTree.setSubBatchesModalOption('programLabel', programLabel); + this.batchTree.batchGroupsTable.pmfms = model.childrenPmfms || []; + // Configure catch form state + this.batchTree.catchBatchForm.applyState(Object.assign({ acquisitionLevel: rootAcquisitionLevel, + // defaults + showSamplingBatch: false, samplingBatchEnabled: false, samplingRatioFormat: this.samplingRatioFormat }, model.state)); + this.batchTree.markAsReady(); + const jobs = [this.batchTree.catchBatchForm.ready(), this.batchTree.batchGroupsTable.ready()]; + if (this.batchTree.subBatchesTable) { + // TODO: pass sub batches pmfms. For now there are recomputed + this.batchTree.subBatchesTable.programLabel = programLabel; + jobs.push(this.batchTree.subBatchesTable.ready()); + } + // Prepare data to set + let data; + if ((_b = model.state) === null || _b === void 0 ? void 0 : _b.showSamplingBatch) { + const source = model.currentData; + data = Batch.fromObject(source, { withChildren: false }); + const samplingSource = BatchUtils.getOrCreateSamplingChild(source); + data.children = [Batch.fromObject(samplingSource, { withChildren: model.isLeaf })]; + } + else { + data = Batch.fromObject(model.currentData, { withChildren: model.isLeaf }); + } + // Waiting end of init jobs + yield Promise.all(jobs); + // Apply data + yield this.batchTree.setValue(data); + this.editingBatch = model; + } + finally { + // Restore previous state + if (dirty) + this.markAsDirty(); + if (touched) + this.markAllAsTouched({ withChildren: false }); + if (enabled && !this.batchTree.enabled) + this.batchTree.enable(); + } + }); + } + stopEditBatch(event, source) { + return __awaiter(this, void 0, void 0, function* () { + source = source || this.editingBatch; + if (!source) + return; + this.editingBatch = null; + source.editing = false; + // Forget the last editing batch + this._lastEditingBatchPath = null; + }); + } + resetRootForm() { + // Reset pmfms, form and model + this._state.set({ + sortingPmfms: null, + catchPmfms: null, + form: null, + model: null + }); + this._lastEditingBatchPath = null; + } + resetSamplingBatches() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.loaded) + return; + const dirty = this.dirty; + // Save if need + if (dirty) { + const saved = yield this.save(); + if (!saved) + return; // Skip + } + try { + // Delete sampling batches in data + const deletedSamplingBatches = BatchUtils.deleteByFilterInTree(this.data, { isSamplingBatch: true }); + // Some batches have been deleted + if (isNotEmptyArray(deletedSamplingBatches)) { + // Reapply data + yield this.setValue(this.data, { emitEvent: false }); + } + } + finally { + // Restore dirty state + if (dirty) + this.markAsDirty(); + } + }); + } + /** + * Save editing batch + */ + confirmEditingBatch(opts) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const model = this.editingBatch; + if (!model) + return true; // No editing batch: ok (not need to save) + // Save current state + const dirty = this.dirty; + // Save if need + if (this.batchTree.dirty) { + console.info(this._logPrefix + `Saving ${model.originalData.label} ...`); + const saved = yield this.batchTree.save(); + if (!saved) { + model.valid = this.batchTree.valid; + return false; + } + } + // Get saved data + const batch = (_a = this.batchTree.value) === null || _a === void 0 ? void 0 : _a.clone(); + if (batch.label !== model.originalData.label) + throw new Error(`Invalid saved batch label. Expected: ${model.originalData.label} Actual: ${batch.label}`); + // Update model value (batch first) + const json = batch.asObject(); + if (isNotEmptyArray(model.pmfms)) { + MeasurementValuesUtils.normalizeEntityToForm(json, model.pmfms, model.validator, { keepOtherExistingPmfms: true }); + } + // Update batch weight (need by validator) + if (model.state.showWeight) { + json.weight = BatchUtils.getWeight(json, model.weightPmfms); + } + if (model.state.showSampleWeight) { + const samplingJson = BatchUtils.getSamplingChild(json); + samplingJson.weight = BatchUtils.getWeight(samplingJson, model.weightPmfms); + } + model.validator.patchValue(json); + // Wait validation finished + if (!model.validator.valid) { + yield AppFormUtils.waitWhilePending(model.validator); + // Log invalid + if (this.debug && model.validator.invalid) { + AppFormUtils.logFormErrors(model.validator, '[batch-tree-container] '); + } + } + // Update model validity + model.valid = model.validator.valid; + // Update rowCount + if (model.isLeaf) { + model.rowCount = this.batchTree.batchGroupsTable.visibleRowCount; + } + if (!opts || opts.keepEditingBatch !== true) { + this.editingBatch = null; + model.editing = false; + (_b = this.modal) === null || _b === void 0 ? void 0 : _b.dismiss(); + } + // Reset dirty state + this.batchTree.markAsPristine(); + // Restore the previous dirty state + if (dirty) + this.markAsDirty(); + return true; + }); + } + markForCheck() { + this.cd.markForCheck(); + } + getBatchModelByPath(path) { + return getPropertyByPath(this.model, path); + } + forward(event, model) { + return __awaiter(this, void 0, void 0, function* () { + console.debug(this._logPrefix + 'Go forward'); + event === null || event === void 0 ? void 0 : event.stopImmediatePropagation(); + model = model || this.editingBatch; + if (!model) + return; + const nextVisible = TreeItemEntityUtils.forward(model, c => !c.hidden); + if (nextVisible) { + yield this.startEditBatch(null, nextVisible); + this.setSelectedTabIndex(0); + } + }); + } + backward(event, model) { + return __awaiter(this, void 0, void 0, function* () { + console.debug(this._logPrefix + 'Go backward'); + event === null || event === void 0 ? void 0 : event.stopImmediatePropagation(); + model = model || this.editingBatch; + if (!model) + return; + const previousVisible = TreeItemEntityUtils.backward(model, c => !c.hidden); + if (previousVisible) { + yield this.startEditBatch(null, previousVisible); + this.setSelectedTabIndex(0); + } + }); + } + watchBatchTreeStatus() { + const stopSubject = new Subject(); + return new Observable((subscriber) => { + const subscription = new Subscription(); + subscription.add(() => stopSubject.next()); + waitFor(() => !!this.batchTree, { stop: stopSubject }) + .then(() => { + subscription.add(this.batchTree.statusChanges + .pipe(combineLatestWith(this.batchTree.batchGroupsTable.dataSource.rowsSubject), map(([status, rows]) => { + return { + valid: status !== 'INVALID', + rowCount: this.batchTree.showBatchTables + ? ((rows === null || rows === void 0 ? void 0 : rows.length) || 0) + : undefined + }; + })) + .subscribe(state => subscriber.next(state))); + }); + return subscription; + }); + } +}; +__decorate([ + ViewChild('batchTree'), + __metadata("design:type", BatchTreeComponent) +], BatchTreeContainerComponent.prototype, "batchTree", void 0); +__decorate([ + ViewChild('batchModelTree'), + __metadata("design:type", BatchModelTreeComponent) +], BatchTreeContainerComponent.prototype, "batchModelTree", void 0); +__decorate([ + ViewChild('sidenav'), + __metadata("design:type", MatSidenav) +], BatchTreeContainerComponent.prototype, "sidenav", void 0); +__decorate([ + ViewChild('modal'), + __metadata("design:type", IonModal) +], BatchTreeContainerComponent.prototype, "modal", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchTreeContainerComponent.prototype, "queryTabIndexParamName", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchTreeContainerComponent.prototype, "modalOptions", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchTreeContainerComponent.prototype, "defaultHasSubBatches", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], BatchTreeContainerComponent.prototype, "availableTaxonGroups", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchTreeContainerComponent.prototype, "showTaxonName", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchTreeContainerComponent.prototype, "showTaxonGroup", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchTreeContainerComponent.prototype, "showAutoFillButton", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchTreeContainerComponent.prototype, "samplingRatioFormat", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], BatchTreeContainerComponent.prototype, "selectedTabIndex", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchTreeContainerComponent.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchTreeContainerComponent.prototype, "i18nPmfmPrefix", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchTreeContainerComponent.prototype, "useSticky", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchTreeContainerComponent.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchTreeContainerComponent.prototype, "debug", void 0); +__decorate([ + Input(), + __metadata("design:type", BatchFilter) +], BatchTreeContainerComponent.prototype, "filter", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchTreeContainerComponent.prototype, "style", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchTreeContainerComponent.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchTreeContainerComponent.prototype, "useModal", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchTreeContainerComponent.prototype, "rxStrategy", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchTreeContainerComponent.prototype, "allowSpeciesSampling", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchTreeContainerComponent.prototype, "allowSubBatches", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], BatchTreeContainerComponent.prototype, "programLabel", null); +__decorate([ + Input(), + __metadata("design:type", Program), + __metadata("design:paramtypes", [Program]) +], BatchTreeContainerComponent.prototype, "program", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchTreeContainerComponent.prototype, "requiredGear", null); +__decorate([ + Input(), + __metadata("design:type", Number), + __metadata("design:paramtypes", [Number]) +], BatchTreeContainerComponent.prototype, "gearId", null); +__decorate([ + Input(), + __metadata("design:type", PhysicalGear), + __metadata("design:paramtypes", [PhysicalGear]) +], BatchTreeContainerComponent.prototype, "physicalGear", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchTreeContainerComponent.prototype, "showCatchForm", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchTreeContainerComponent.prototype, "showBatchTables", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchTreeContainerComponent.prototype, "allowDiscard", null); +BatchTreeContainerComponent = __decorate([ + Component({ + selector: 'app-batch-tree-container', + templateUrl: './batch-tree-container.component.html', + styleUrls: ['./batch-tree-container.component.scss'], + providers: [ + { provide: ContextService, useExisting: TripContextService }, + RxState + ], + animations: [fadeInOutAnimation], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __param(13, Optional()), + __param(13, Inject(APP_LOGGING_SERVICE)), + __metadata("design:paramtypes", [Injector, + ActivatedRoute, + Router, + AlertController, + TranslateService, + ProgramRefService, + BatchModelValidatorService, + PmfmNamePipe, + PhysicalGearService, + TripContextService, + RxState, + ChangeDetectorRef, + LocalSettingsService, Object]) +], BatchTreeContainerComponent); +export { BatchTreeContainerComponent }; +//# sourceMappingURL=batch-tree-container.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/tree/batch-tree-container.component.js.map b/out-tsc/app/app/trip/batch/tree/batch-tree-container.component.js.map new file mode 100644 index 000000000..06b91808c --- /dev/null +++ b/out-tsc/app/app/trip/batch/tree/batch-tree-container.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch-tree-container.component.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/tree/batch-tree-container.component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/tree/batch-tree.component.js b/out-tsc/app/app/trip/batch/tree/batch-tree.component.js new file mode 100644 index 000000000..5fb051929 --- /dev/null +++ b/out-tsc/app/app/trip/batch/tree/batch-tree.component.js @@ -0,0 +1,835 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, ViewChild } from '@angular/core'; +import { AppFormUtils, AppTabEditor, InMemoryEntitiesService, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, LocalSettingsService, ReferentialRef, toBoolean, toNumber, } from '@sumaris-net/ngx-components'; +import { AlertController, NavController } from '@ionic/angular'; +import { combineLatest, defer, of } from 'rxjs'; +import { debounceTime, distinctUntilChanged, filter, map, startWith, switchMap, tap } from 'rxjs/operators'; +import { Batch } from '../common/batch.model'; +import { BatchGroupUtils } from '../group/batch-group.model'; +import { BatchGroupsTable } from '../group/batch-groups.table'; +import { SubBatchesTable, SubBatchFilter } from '../sub/sub-batches.table'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { ActivatedRoute, Router } from '@angular/router'; +import { TranslateService } from '@ngx-translate/core'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { SubBatch, SubBatchUtils } from '../sub/sub-batch.model'; +import { Program } from '@app/referential/services/model/program.model'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { ContextService } from '@app/shared/context.service'; +import { TripContextService } from '@app/trip/trip-context.service'; +import { BatchFilter } from '@app/trip/batch/common/batch.filter'; +import { AppSharedFormUtils } from '@app/shared/forms.utils'; +import { PhysicalGear } from '@app/trip/physicalgear/physical-gear.model'; +import { CatchBatchForm } from '@app/trip/batch/catch/catch.form'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +import { RxState } from '@rx-angular/state'; +import { environment } from '@environments/environment'; +import { qualityFlagInvalid } from '@app/data/services/model/model.utils'; +let BatchTreeComponent = class BatchTreeComponent extends AppTabEditor { + constructor(route, router, navController, alertCtrl, translate, programRefService, settings, context, _state, cd) { + super(route, router, navController, alertCtrl, translate, { + tabCount: settings.mobile ? 1 : 2, + }); + this.route = route; + this.router = router; + this.navController = navController; + this.alertCtrl = alertCtrl; + this.translate = translate; + this.programRefService = programRefService; + this.settings = settings; + this.context = context; + this._state = _state; + this.cd = cd; + this._listenProgramChanges = true; + this._logPrefix = '[batch-tree] '; + this.programLabel$ = this._state.select('programLabel'); + this.program$ = this._state.select('program'); + this.showSamplingBatchColumns$ = this._state.select(['allowSpeciesSampling', 'programAllowMeasure'], ({ allowSpeciesSampling, programAllowMeasure }) => allowSpeciesSampling && programAllowMeasure); + this.showCatchForm$ = this._state.select('showCatchForm'); + this.showBatchTables$ = this._state.select('showBatchTables'); + this.allowSubBatches$ = this._state.select('allowSubBatches'); + this.requiredGear$ = this._state.select('requiredGear'); + this.gearId$ = this._state.select('gearId'); + this.rootAcquisitionLevel = AcquisitionLevelCodes.CATCH_BATCH; + this.useSticky = false; + this.rxStrategy = 'normal'; + this.showAutoFillButton = true; + this.debug = false; + // Defaults + this.mobile = settings.mobile; + this.i18nContext = { + prefix: '', + suffix: '', + }; + // FOR DEV ONLY ---- + this.debug = !environment.production; + } + set showSubBatchesTable(value) { + this._state.set('showSubBatchesTable', (_) => value); + } + get showSubBatchesTable() { + return this._state.get('showSubBatchesTable'); + } + set physicalGear(value) { + var _a; + this._state.set({ + physicalGear: value, + gearId: toNumber((_a = value === null || value === void 0 ? void 0 : value.gear) === null || _a === void 0 ? void 0 : _a.id, null), + }); + } + get physicalGear() { + return this._state.get('physicalGear'); + } + set samplingRatioFormat(value) { + this._state.set('samplingRatioFormat', (_) => value); + } + get samplingRatioFormat() { + return this._state.get('samplingRatioFormat'); + } + set showCatchForm(value) { + this._state.set('showCatchForm', (_) => value); + } + get showCatchForm() { + return this._state.get('showCatchForm'); + } + set showBatchTables(value) { + this._state.set('showBatchTables', (_) => value); + } + get showBatchTables() { + return this._state.get('showBatchTables'); + } + set disabled(value) { + if (value && this._enabled) { + this.disable(); + } + else if (!value && !this._enabled) { + this.enable(); + } + } + get disabled() { + return !super.enabled; + } + get touched() { + var _a; + return (_a = this.form) === null || _a === void 0 ? void 0 : _a.touched; + } + get programAllowMeasure() { + return this._state.get('programAllowMeasure') || false; + } + set programAllowMeasure(value) { + this._state.set('programAllowMeasure', (_) => value); + } + set allowSpeciesSampling(value) { + this._state.set('allowSpeciesSampling', (_) => value); + } + get allowSpeciesSampling() { + return this._state.get('allowSpeciesSampling'); + } + set allowSubBatches(value) { + this._state.set('allowSubBatches', (_) => value); + } + get allowSubBatches() { + return this._state.get('allowSubBatches'); + } + get isNewData() { + var _a; + return isNil((_a = this.data) === null || _a === void 0 ? void 0 : _a.id); + } + set value(catchBatch) { + this.setValue(catchBatch); + } + get value() { + return this.getValue(); + } + set programLabel(value) { + this._state.set('programLabel', (_) => value); + } + get programLabel() { + return this._state.get('programLabel'); + } + set program(value) { + this._listenProgramChanges = false; // Avoid to watch program changes, when program is given by parent component + this._state.set('program', (_) => value); + } + get program() { + return this._state.get('program'); + } + set requiredGear(value) { + this._state.set('requiredGear', (_) => value); + } + get requiredGear() { + return this._state.get('requiredGear'); + } + set gearId(value) { + this._state.set('gearId', (_) => value); + } + get gearId() { + return this._state.get('gearId'); + } + set availableTaxonGroups(value) { + this.batchGroupsTable.availableTaxonGroups = value; + } + get availableTaxonGroups() { + return this.batchGroupsTable.availableTaxonGroups; + } + set defaultHasSubBatches(value) { + this.batchGroupsTable.defaultHasSubBatches = value; + } + get defaultHasSubBatches() { + return this.batchGroupsTable.defaultHasSubBatches; + } + set filter(value) { + this.setFilter(value); + } + get filter() { + var _a; + return (_a = this.catchBatchForm) === null || _a === void 0 ? void 0 : _a.filter; + } + get dirty() { + var _a; + return super.dirty || ((_a = this._subBatchesService) === null || _a === void 0 ? void 0 : _a.dirty) || false; + } + set modalOptions(modalOptions) { + this.batchGroupsTable.modalOptions = modalOptions; + } + get modalOptions() { + return this.batchGroupsTable.modalOptions; + } + get subBatchesCount() { + var _a; + return this._subBatchesService ? this._subBatchesService.count + this._subBatchesService.hiddenCount : ((_a = this.subBatchesTable) === null || _a === void 0 ? void 0 : _a.totalRowCount) || 0; + } + get statusChanges() { + const delegates = [ + // Listen on forms + ...(this.forms || []).filter(c => c.form).map((c) => c.form.statusChanges + .pipe(startWith(c.form.invalid ? 'INVALID' : 'VALID'))), + // Listen on tables + ...(this.tables || []).map((t) => t.onStartEditingRow + .pipe( + //map(_ => t.editedRow), + switchMap(row => { + var _a, _b; + return row.validator ? row.validator.statusChanges + .pipe(startWith(qualityFlagInvalid((_a = row.currentData) === null || _a === void 0 ? void 0 : _a.qualityFlagId) ? 'INVALID' : 'VALID')) + : + of(qualityFlagInvalid((_b = row.currentData) === null || _b === void 0 ? void 0 : _b.qualityFlagId) ? 'INVALID' : 'VALID'); + }))), + ]; + // Warn if empty + if (this.debug && !delegates.length) + console.warn(this._logPrefix + 'No child allow to observe the status'); + return combineLatest(delegates).pipe(startWith(['VALID']), debounceTime(450), map((_) => { + // DEBUG + //if (this.debug) console.debug(this._logPrefix + 'Computing tree status...', _); + if (this.loading) + return 'PENDING'; + if (this.disabled) + return 'DISABLED'; + if (this.valid) + return 'VALID'; + return this.pending ? 'PENDING' : 'INVALID'; + }), distinctUntilChanged()); + } + ngOnInit() { + // Set defaults + this.tabCount = this.mobile ? 1 : 2; + this.showCatchForm = toBoolean(this.showCatchForm, true); + this.showBatchTables = toBoolean(this.showBatchTables, true); + this.allowSpeciesSampling = toBoolean(this.allowSpeciesSampling, true); + this.allowSubBatches = toBoolean(this.allowSubBatches, true); + this._subBatchesService = this.mobile + ? new InMemoryEntitiesService(SubBatch, SubBatchFilter, { + equals: Batch.equals, + sortByReplacement: { id: 'rankOrder' }, + }) + : null; + super.ngOnInit(); + // Register forms + this.registerForms(); + this._state.connect('showCatchForm', combineLatest([this.catchBatchForm.hasContent$, this.catchBatchForm.ready$]).pipe(filter(([_, ready]) => ready), map(([hasContent, _]) => hasContent), tap((showCatchForm) => { + if (this._enabled) { + if (showCatchForm && !this.catchBatchForm.enabled) { + this.catchBatchForm.enable(); + } + else if (!showCatchForm && this.catchBatchForm.enabled) { + this.catchBatchForm.disable(); + } + } + }))); + this._state.connect('showSubBatchesTable', this._state.select(['allowSubBatches', 'programAllowMeasure'], ({ allowSubBatches, programAllowMeasure }) => allowSubBatches && programAllowMeasure)); + this._state.hold(this._state.select('showSubBatchesTable'), (showSubBatchesTable) => { + // If disabled + if (!showSubBatchesTable) { + // Reset existing sub batches + if (!this.loading) + this.resetSubBatches(); + // Select the first tab + this.setSelectedTabIndex(0); + } + if (!this.loading) + this.markForCheck(); + }); + } + ngAfterViewInit() { + // Get available sub-batches only when subscribe (for performance reason) + this.batchGroupsTable.availableSubBatches = defer(() => this.getSubBatches()); + // Watch program, to configure tables from program properties + this._state.connect('program', this.programLabel$.pipe(filter(() => this._listenProgramChanges), // Avoid to watch program, if was already set + filter(isNotNilOrBlank), distinctUntilChanged(), switchMap((programLabel) => this.programRefService.watchByLabel(programLabel)))); + // Apply program + this._state.hold(this.program$, (program) => this.setProgram(program)); + if (this.subBatchesTable) { + // Enable sub batches table, only when table pmfms ready + this._state.connect('showSubBatchesTable', combineLatest([ + this.subBatchesTable.hasPmfms$, + this.subBatchesTable.readySubject, + this.batchGroupsTable.dataSource.rowsSubject.pipe(map(isNotEmptyArray)), + this.allowSubBatches$, + ]).pipe(map(([hasPmfms, ready, howBatchGroupRows, allowSubBatches]) => (hasPmfms && ready && howBatchGroupRows && allowSubBatches) || false))); + // Update available parent on individual batch table, when batch group changes + this._state.hold(this.batchGroupsTable.dataSource.rowsSubject.pipe(filter((rows) => !this.loading && this.allowSubBatches && isNotEmptyArray(rows)), debounceTime(400), map((_) => this.batchGroupsTable.dataSource.getData())), (parents) => (this.subBatchesTable.availableParents = parents)); + } + } + ngOnDestroy() { + var _a; + super.ngOnDestroy(); + (_a = this._subBatchesService) === null || _a === void 0 ? void 0 : _a.stop(); + } + // Change visibility to public + setError(error, opts) { + if (!error || typeof error === 'string') { + super.setError(error, opts); + } + else { + console.log('TODO: apply error to rows ?', error); + } + } + // Change visibility to public + resetError(opts) { + super.resetError(opts); + } + setModalOption(key, value) { + this.batchGroupsTable.setModalOption(key, value); + } + setSubBatchesModalOption(key, value) { + this.batchGroupsTable.setSubBatchesModalOption(key, value); + } + disable(opts) { + super.disable(opts); + } + enable(opts) { + super.enable(opts); + } + save(event, options) { + return __awaiter(this, void 0, void 0, function* () { + // Create (or fill) the catch form entity + const source = this.catchBatchForm.value; // Get the JSON (/!\ measurementValues should be Form ready) + const target = this.data || new Batch(); + target.fromObject(source, { withChildren: false /*will be set after*/ }); + const samplingSource = BatchUtils.getSamplingChild(source); + const samplingTarget = samplingSource && Batch.fromObject(samplingSource, { withChildren: false /*will be set after*/ }); + // Save batch groups and sub batches + const [batchGroups, subBatches] = yield Promise.all([this.getBatchGroups(true), this.getSubBatches()]); + // Prepare subBatches for model (set parent) + if (isNotEmptyArray(subBatches)) { + SubBatchUtils.linkSubBatchesToParent(batchGroups, subBatches, { + qvPmfm: this.batchGroupsTable.qvPmfm, + }); + } + if (samplingTarget) { + target.children = [samplingTarget]; + samplingTarget.children = batchGroups; + } + else { + target.children = batchGroups; + } + // DEBUG + //if (this.debug) BatchUtils.logTree(target); + this.data = target; + return true; + }); + } + getJsonValueToSave() { + // Get only the catch form + return this.form.value; + } + getValue() { + return this.data; + } + load(id, options) { + // Unused + return Promise.resolve(undefined); + } + reload() { + // Unused + return Promise.resolve(undefined); + } + setValue(source, opts) { + return __awaiter(this, void 0, void 0, function* () { + source = + source || + Batch.fromObject({ + rankOrder: 1, + label: this.rootAcquisitionLevel, + }); + // If catch batch (=no parent nor parentId) and rootAcquisitionLevel = CATCH_BATCH + if (!source.parent && isNil(source.parentId) && this.rootAcquisitionLevel === AcquisitionLevelCodes.CATCH_BATCH) { + // Check expected label + if (source.label !== AcquisitionLevelCodes.CATCH_BATCH) { + throw new Error(`[batch-tree] Invalid catch batch label. Expected: ${AcquisitionLevelCodes.CATCH_BATCH} - Actual: ${source.label}`); + } + } + // Check root batch has the expected label (should start with the rootAcquisitionLevel) + else if (source.label && !source.label.startsWith(this.rootAcquisitionLevel)) { + console.warn(`[batch-tree] Invalid root batch label. Expected: ${this.rootAcquisitionLevel} - Actual: ${source.label}`); + } + // DEBUG + //console.debug(this._logPrefix + 'setValue()', source); + this.markAsLoading({ emitEvent: false }); + this.markAsNotReady({ emitEvent: false }); + try { + this.data = source; + let childrenLabelPrefix = this.rootAcquisitionLevel === AcquisitionLevelCodes.CATCH_BATCH ? AcquisitionLevelCodes.SORTING_BATCH + '#' : `${source.label}.`; + // Set catch batch + const samplingSource = BatchUtils.getSamplingChild(source); + { + const target = source.clone({ withChildren: false }); + if (samplingSource) { + target.children = [samplingSource.clone({ withChildren: false })]; + childrenLabelPrefix = `${samplingSource.label}.`; + } + this.catchBatchForm.gearId = this.gearId; + this.catchBatchForm.markAsReady(); + yield this.catchBatchForm.setValue(target); + } + if (this.batchGroupsTable) { + // Retrieve batch group (make sure label start with acquisition level) + // Then convert into batch group entities + const batchGroups = BatchGroupUtils.fromBatchTree(samplingSource || source); + // Apply to table + this.batchGroupsTable.gearId = this.gearId; + this.batchGroupsTable.labelPrefix = childrenLabelPrefix; + this.batchGroupsTable.markAsReady(); + this.batchGroupsTable.value = batchGroups; + yield this.batchGroupsTable.ready(); // Wait loaded (need to be sure the QV pmfm is set) + const groupQvPmfm = this.batchGroupsTable.qvPmfm; + const subBatches = SubBatchUtils.fromBatchGroups(batchGroups, { + groupQvPmfm, + }); + if (this.subBatchesTable) { + this.subBatchesTable.qvPmfm = groupQvPmfm; + this.subBatchesTable.value = subBatches; + const ready = this.subBatchesTable.setAvailableParents(batchGroups, { + emitEvent: true, + linkDataToParent: false, // Not need (will be done later, in value setter) + }); + this.subBatchesTable.markAsReady(); + yield ready; + } + else { + this._subBatchesService.value = subBatches; + } + } + } + finally { + this.markAsPristine(); + this.markAsUntouched(); + this.markAsLoaded({ emitEvent: false }); + } + // DEBUG the dirty state + //this.catchBatchForm.form.valueChanges.subscribe(value => { + // if (this.loaded) console.error('TODO value change', new Error()); + //}) + }); + } + /* -- protected method -- */ + get form() { + return this.catchBatchForm.form; + } + registerForms() { + this.addChildForms([this.catchBatchForm, this.batchGroupsTable, () => this.subBatchesTable]); + } + /** + * + * @param program + * @param opts allow to avoid program propagation (e.g. see batch tree container) + * @protected + */ + setProgram(program, opts = { emitEvent: true }) { + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.debug(`[batch-tree] Program ${program.label} loaded, with properties: `, program.properties); + this.markAsLoading({ emitEvent: false }); + let i18nSuffix = program.getProperty(ProgramProperties.I18N_SUFFIX); + i18nSuffix = i18nSuffix !== 'legacy' ? i18nSuffix : ''; + this.i18nContext.suffix = i18nSuffix; + const programAllowMeasure = program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_MEASURE_ENABLE); + this.programAllowMeasure = programAllowMeasure; + this.allowSpeciesSampling = this.allowSpeciesSampling && programAllowMeasure; + this.allowSubBatches = this.allowSubBatches && programAllowMeasure; + this.enableWeightLengthConversion = program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_LENGTH_WEIGHT_CONVERSION_ENABLE); + const samplingRatioFormat = program.getProperty(ProgramProperties.TRIP_BATCH_SAMPLING_RATIO_FORMAT); + this.samplingRatioFormat = samplingRatioFormat; + this.catchBatchForm.samplingRatioFormat = samplingRatioFormat; + this.batchGroupsTable.showWeightColumns = program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_WEIGHT_ENABLE); + this.batchGroupsTable.showTaxonGroupColumn = program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_TAXON_GROUP_ENABLE); + this.batchGroupsTable.showTaxonNameColumn = program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_TAXON_NAME_ENABLE); + this.batchGroupsTable.samplingRatioFormat = samplingRatioFormat; + this.batchGroupsTable.enableWeightLengthConversion = this.enableWeightLengthConversion; + this.batchGroupsTable.setModalOption('maxVisibleButtons', program.getPropertyAsInt(ProgramProperties.MEASUREMENTS_MAX_VISIBLE_BUTTONS)); + this.batchGroupsTable.setModalOption('maxItemCountForButtons', program.getPropertyAsInt(ProgramProperties.MEASUREMENTS_MAX_ITEM_COUNT_FOR_BUTTONS)); + this.batchGroupsTable.setModalOption('enableBulkMode', !program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_AUTO_FILL)); // Disable bulk mode when auto fill is on + this.batchGroupsTable.i18nColumnSuffix = i18nSuffix; + // Some specific taxon groups have no weight collected + const taxonGroupsNoWeight = program.getPropertyAsStrings(ProgramProperties.TRIP_BATCH_TAXON_GROUPS_NO_WEIGHT); + this.batchGroupsTable.taxonGroupsNoWeight = (taxonGroupsNoWeight || []).map((label) => label.trim().toUpperCase()).filter(isNotNilOrBlank); + // Some specific taxon groups are never landing + const taxonGroupsNoLanding = program.getPropertyAsStrings(ProgramProperties.TRIP_BATCH_TAXON_GROUPS_NO_LANDING); + this.batchGroupsTable.taxonGroupsNoLanding = (taxonGroupsNoLanding || []).map((label) => label.trim().toUpperCase()).filter(isNotNilOrBlank); + // Store country to context (to be used in sub batches modal) + const countryId = program.getPropertyAsInt(ProgramProperties.TRIP_BATCH_ROUND_WEIGHT_CONVERSION_COUNTRY_ID); + if (isNotNil(countryId) && isNil(this.context.getValue('country'))) { + this.context.setValue('country', ReferentialRef.fromObject({ id: countryId })); + } + else { + if (this.enableWeightLengthConversion) { + console.error(`Missing country location id, for round weight conversion! Please define program property '${ProgramProperties.TRIP_BATCH_ROUND_WEIGHT_CONVERSION_COUNTRY_ID.key}' for ${program.label}`); + } + this.context.resetValue('country'); + } + // Force taxon name in sub batches, if not filled in root batch + const subBatchesTaxonName = !this.batchGroupsTable.showTaxonNameColumn && program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_MEASURE_INDIVIDUAL_TAXON_NAME_ENABLE); + this.batchGroupsTable.setSubBatchesModalOption('showTaxonNameColumn', subBatchesTaxonName); + this.batchGroupsTable.setSubBatchesModalOption('showBluetoothIcon', program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_MEASURE_ICHTHYOMETER_ENABLE)); + if (this.subBatchesTable) { + this.subBatchesTable.showTaxonNameColumn = subBatchesTaxonName; + this.subBatchesTable.showTaxonNameInParentAutocomplete = !subBatchesTaxonName && this.batchGroupsTable.showTaxonNameColumn; + this.subBatchesTable.showIndividualCount = program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_MEASURE_INDIVIDUAL_COUNT_ENABLE); + this.subBatchesTable.weightDisplayedUnit = program.getProperty(ProgramProperties.TRIP_BATCH_MEASURE_INDIVIDUAL_WEIGHT_DISPLAYED_UNIT); + this.subBatchesTable.i18nColumnSuffix = i18nSuffix; + } + // Propagate to children components, if need + if (!opts || opts.emitEvent !== false) { + // This should be need when program$ has been set by parent, and not from the programLabel$ observable + if (this.programLabel !== program.label) { + this.programLabel = program.label; + } + } + }); + } + markAsLoaded(opts) { + super.markAsLoaded(opts); + } + markAsLoading(opts) { + if (!this.loadingSubject.value) { + this.loadingSubject.next(true); + // Emit to children + if (!opts || opts.onlySelf !== true) { + this.children.filter(c => c.loading) + .forEach(c => c.markAsLoading(opts)); + } + if (!opts || opts.emitEvent !== false) + this.markForCheck(); + } + } + markAsNotReady(opts) { + var _a; + if (this.readySubject.value) { + this.readySubject.next(false); + // Emit to children + if (!opts || opts.onlySelf !== true) { + (_a = this.children) === null || _a === void 0 ? void 0 : _a.map((c) => c['readySubject']).filter(isNotNil).filter((readySubject) => readySubject.value !== false).forEach((readySubject) => readySubject.next(false)); + } + if (!opts || opts.emitEvent !== false) + this.markForCheck(); + } + } + onSubBatchesChanges(subbatches) { + return __awaiter(this, void 0, void 0, function* () { + if (isNil(subbatches)) + return; // user cancelled + try { + if (this.subBatchesTable) { + this.subBatchesTable.value = subbatches; + // Wait table not busy + yield this.subBatchesTable.waitIdle({ stop: this.destroySubject, stopError: false }); + this.subBatchesTable.markAsDirty(); + } + else { + yield this._subBatchesService.saveAll(subbatches); + } + } + catch (err) { + console.error(this._logPrefix + 'Error while updating sub batches', err); + } + }); + } + onTabChange(event, queryTabIndexParamName) { + const result = super.onTabChange(event, queryTabIndexParamName); + if (!this.loading) { + // On each tables, confirm the current editing row + if (this.showBatchTables && this.batchGroupsTable) + this.batchGroupsTable.confirmEditCreate(); + if (this.allowSubBatches && this.subBatchesTable) + this.subBatchesTable.confirmEditCreate(); + } + return result; + } + autoFill(opts = { skipIfDisabled: true, skipIfNotEmpty: false }) { + return __awaiter(this, void 0, void 0, function* () { + const dirty = this.dirty; + yield this.batchGroupsTable.autoFillTable(opts); + // Propagate dirty state + if (!dirty && this.batchGroupsTable.dirty) { + this.markAsDirty(); + } + }); + } + setSelectedTabIndex(value, opts) { + super.setSelectedTabIndex(value, Object.assign({ realignInkBar: !this.mobile }, opts)); + } + addRow(event) { + switch (this.selectedTabIndex) { + case 0: + this.batchGroupsTable.addRow(event); + break; + case 1: + this.subBatchesTable.addRow(event); + break; + } + } + getFirstInvalidTabIndex() { + var _a; + if (this.showCatchForm && this.catchBatchForm.invalid) + return 0; + if (this.showBatchTables && this.batchGroupsTable.invalid) + return 0; + if (this.allowSubBatches && ((_a = this.subBatchesTable) === null || _a === void 0 ? void 0 : _a.invalid)) + return 1; + return -1; + } + waitIdle() { + return AppFormUtils.waitIdle(this); + } + setFilter(dataFilter) { + this.catchBatchForm.filter = dataFilter; + this.batchGroupsTable.setFilter(dataFilter); + } + /* -- protected methods -- */ + getBatchGroups(forceSave) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.showBatchTables) + return undefined; + return this.getTableValue(this.batchGroupsTable, forceSave); + }); + } + getSubBatches() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.showBatchTables) + return undefined; + if (this.subBatchesTable) { + return this.getTableValue(this.subBatchesTable); + } + else { + return ((this._subBatchesService.value || []) + // make sure to convert into model + .map((source) => SubBatch.fromObject(source))); + } + }); + } + resetSubBatches() { + console.warn(this._logPrefix + 'Resetting sub batches !!'); + if (this.subBatchesTable) + this.subBatchesTable.value = []; + if (this._subBatchesService) + this._subBatchesService.setValue([]); + } + saveDirtyChildren() { + return super.saveDirtyChildren(); + } + getTableValue(table, forceSave) { + return __awaiter(this, void 0, void 0, function* () { + const dirty = table.dirty; + if (dirty || forceSave) { + try { + yield table.save(); + } + catch (err) { + if (!forceSave) + this.setError((err && err.message) || err); + throw err; + } + // Remember dirty state + if (dirty) + this.markAsDirty({ emitEvent: false }); + } + return table.value; + }); + } + markForCheck() { + this.cd.markForCheck(); + } + dumpDebugData(type) { + switch (type) { + case 'catchForm': + this._debugData = AppSharedFormUtils.dumpForm(this.catchBatchForm.form); + break; + case 'rowValidator': + this._debugData = AppSharedFormUtils.dumpForm(this.batchGroupsTable.getDebugData(type)); + break; + default: + throw new Error('Unknown type: ' + type); + } + this.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchTreeComponent.prototype, "rootAcquisitionLevel", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchTreeComponent.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchTreeComponent.prototype, "useSticky", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchTreeComponent.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], BatchTreeComponent.prototype, "enableWeightLengthConversion", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchTreeComponent.prototype, "i18nPmfmPrefix", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], BatchTreeComponent.prototype, "rxStrategy", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchTreeComponent.prototype, "showAutoFillButton", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], BatchTreeComponent.prototype, "debug", void 0); +__decorate([ + Input(), + __metadata("design:type", PhysicalGear), + __metadata("design:paramtypes", [PhysicalGear]) +], BatchTreeComponent.prototype, "physicalGear", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], BatchTreeComponent.prototype, "samplingRatioFormat", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchTreeComponent.prototype, "showCatchForm", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchTreeComponent.prototype, "showBatchTables", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchTreeComponent.prototype, "disabled", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchTreeComponent.prototype, "allowSpeciesSampling", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchTreeComponent.prototype, "allowSubBatches", null); +__decorate([ + Input(), + __metadata("design:type", Batch), + __metadata("design:paramtypes", [Batch]) +], BatchTreeComponent.prototype, "value", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], BatchTreeComponent.prototype, "programLabel", null); +__decorate([ + Input(), + __metadata("design:type", Program), + __metadata("design:paramtypes", [Program]) +], BatchTreeComponent.prototype, "program", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchTreeComponent.prototype, "requiredGear", null); +__decorate([ + Input(), + __metadata("design:type", Number), + __metadata("design:paramtypes", [Number]) +], BatchTreeComponent.prototype, "gearId", null); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], BatchTreeComponent.prototype, "availableTaxonGroups", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], BatchTreeComponent.prototype, "defaultHasSubBatches", null); +__decorate([ + Input(), + __metadata("design:type", BatchFilter), + __metadata("design:paramtypes", [BatchFilter]) +], BatchTreeComponent.prototype, "filter", null); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], BatchTreeComponent.prototype, "modalOptions", null); +__decorate([ + ViewChild('catchBatchForm', { static: true }), + __metadata("design:type", CatchBatchForm) +], BatchTreeComponent.prototype, "catchBatchForm", void 0); +__decorate([ + ViewChild('batchGroupsTable', { static: true }), + __metadata("design:type", BatchGroupsTable) +], BatchTreeComponent.prototype, "batchGroupsTable", void 0); +__decorate([ + ViewChild('subBatchesTable', { static: false }), + __metadata("design:type", SubBatchesTable) +], BatchTreeComponent.prototype, "subBatchesTable", void 0); +BatchTreeComponent = __decorate([ + Component({ + selector: 'app-batch-tree', + templateUrl: './batch-tree.component.html', + styleUrls: ['./batch-tree.component.scss'], + providers: [{ provide: ContextService, useExisting: TripContextService }, RxState], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [ActivatedRoute, + Router, + NavController, + AlertController, + TranslateService, + ProgramRefService, + LocalSettingsService, + ContextService, + RxState, + ChangeDetectorRef]) +], BatchTreeComponent); +export { BatchTreeComponent }; +//# sourceMappingURL=batch-tree.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/tree/batch-tree.component.js.map b/out-tsc/app/app/trip/batch/tree/batch-tree.component.js.map new file mode 100644 index 000000000..3ce0a37cd --- /dev/null +++ b/out-tsc/app/app/trip/batch/tree/batch-tree.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch-tree.component.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/tree/batch-tree.component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/tree/batch-tree.model.js b/out-tsc/app/app/trip/batch/tree/batch-tree.model.js new file mode 100644 index 000000000..a89437006 --- /dev/null +++ b/out-tsc/app/app/trip/batch/tree/batch-tree.model.js @@ -0,0 +1,423 @@ +var BatchModel_1, BatchModelFilter_1; +import { __awaiter, __decorate, __metadata } from "tslib"; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { arrayDistinct, Entity, EntityClass, EntityFilter, getPropertyByPath, isEmptyArray, isNil, isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrBlank, TreeItemEntityUtils, waitWhilePending, } from '@sumaris-net/ngx-components'; +import { Batch } from '@app/trip/batch/common/batch.model'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +import { AcquisitionLevelCodes, PmfmIds } from '@app/referential/services/model/model.enum'; +import { PmfmValueUtils } from '@app/referential/services/model/pmfm-value.model'; +import { FormArray } from '@angular/forms'; +import { MeasurementUtils, MeasurementValuesTypes, MeasurementValuesUtils, } from '@app/data/measurement/measurement.model'; +import { RuleUtils } from '@app/referential/services/model/rule.model'; +let BatchModel = BatchModel_1 = class BatchModel extends Entity { + constructor(init) { + super(); + this.parentId = null; + this.parent = null; + this.children = null; + this.validator = init === null || init === void 0 ? void 0 : init.validator; + if (init) + Object.assign(this, init); + this.state = {}; + this.childrenState = {}; + } + static fromBatch(batch, pmfms, rules, + // Internal arguments (used by recursive call) + maxTreeDepth = 4, treeDepth = 0, parent = null, path = '') { + pmfms = pmfms || []; + // Make sure the first batch is a catch batch + const isCatchBatch = treeDepth === 0 || BatchUtils.isCatchBatch(batch); + if (isCatchBatch && !batch) { + batch = Batch.fromObject({ label: AcquisitionLevelCodes.CATCH_BATCH, rankOrder: 1 }); + } + const model = new BatchModel_1({ + parent, + path, + originalData: batch + }); + // Apply rule on childrenPmfms + if (rules === null || rules === void 0 ? void 0 : rules.length) { + // Build rules + RuleUtils.build(rules, false /*keep previous compilation*/); + pmfms = pmfms.filter(pmfm => RuleUtils.valid({ model, pmfm }, rules)); + } + // Find the first QV pmfm + const qvPmfm = PmfmUtils.getFirstQualitativePmfm(pmfms, { + excludeHidden: true, + minQvCount: 2, + maxQvCount: 3, + excludePmfmIds: [PmfmIds.CHILD_GEAR], // Avoid child gear be a qvPmfm + //filterFn: pmfm => RuleUtils.valid({model, pmfm: pmfm}, rules) + }); + if (qvPmfm) { + const qvPmfmIndex = pmfms.indexOf(qvPmfm); + if (qvPmfmIndex > 0) { + model.state.pmfms = pmfms.slice(0, qvPmfmIndex); + } + // Prepare next iteration + pmfms = pmfms.slice(qvPmfmIndex + 1); + treeDepth++; + if (treeDepth < maxTreeDepth && isNotEmptyArray(pmfms)) { + const samplingBatch = BatchUtils.getSamplingChild(batch); + const childLabelPrefix = isCatchBatch ? + `${AcquisitionLevelCodes.SORTING_BATCH}#` : `${(samplingBatch === null || samplingBatch === void 0 ? void 0 : samplingBatch.label) || batch.label}.`; + const childrenPath = isCatchBatch ? 'children' : + (samplingBatch + ? `${path}.children.0.children` + : `${path}.children`); + // Create children batches + model.children = qvPmfm.qualitativeValues.map((qv, index) => { + const childQvPmfm = qvPmfm.clone(); + childQvPmfm.hidden = true; + childQvPmfm.defaultValue = qv.id; + const childBatch = ((samplingBatch === null || samplingBatch === void 0 ? void 0 : samplingBatch.children) || batch.children || []).find(c => { var _a; return PmfmValueUtils.equals((_a = c.measurementValues) === null || _a === void 0 ? void 0 : _a[childQvPmfm.id], qv); }) + || Batch.fromObject({ + measurementValues: { + __typename: MeasurementValuesTypes.MeasurementModelValues, + [childQvPmfm.id]: qv.id.toString() + } + }); + childBatch.measurementValues.__typename = childBatch.measurementValues.__typename || MeasurementValuesTypes.MeasurementModelValues; + childBatch.label = `${childLabelPrefix}${qv.label}`; + childBatch.rankOrder = index + 1; + // Recursive call + const childModel = BatchModel_1.fromBatch(childBatch, pmfms, rules, maxTreeDepth, treeDepth, model, `${childrenPath}.${index}`); + childModel.pmfms = [ + childQvPmfm, + ...(childModel.pmfms || []) + ]; + // Set name + childModel.name = qv.name; + return childModel; + }); + } + else { + model.childrenPmfms = [ + qvPmfm, + ...pmfms + ]; + } + } + else { + // No QV pmfm found + model.pmfms = []; + model.childrenPmfms = pmfms; + } + // Disabled root node, if no visible pmfms (e.g. when catch batch has no pmfm) + model.disabled = !(model.pmfms || []).some(p => !p.hidden) + && !model.isLeaf + && !model.parent; + // if is disabled and no parent + model.hidden = model.disabled && !model.parent; + // Leaf = leaf in the batch model tree, NOT in the final batch tree + model.isLeaf = isEmptyArray(model.children) || isNotEmptyArray(model.childrenPmfms); + model.pmfms = model.pmfms || []; + model.childrenPmfms = model.childrenPmfms || []; + model.state.showExhaustiveInventory = false; + return model; + } + static equals(b1, b2) { + return b1 && b2 && ((isNotNil(b1.id) && b1.id === b2.id) + // Or by functional attributes + // Same path + || (b1.path === b2.path)); + } + static isEmpty(b1) { + return !b1 || (!b1.originalData && !b1.validator); + } + fromObject(source, opts) { + var _a, _b; + super.fromObject(source); + this.name = source.name; + this.icon = source.icon; + this.originalData = source.originalData; + this.state = source.rootState && { + pmfms: source.state.pmfms || [] + } || {}; + this.childrenState = source.childrenState && { + pmfms: source.childrenState.pmfms || [] + } || {}; + this.disabled = source.disabled || false; + this.hidden = source.hidden || false; + this.isLeaf = source.isLeaf || (((_b = (_a = this.childrenState) === null || _a === void 0 ? void 0 : _a.pmfms) === null || _b === void 0 ? void 0 : _b.length) > 0); + this.path = source.path || null; + this.parent = source.parent || null; + this.children = source.children || source.children.map(BatchModel_1.fromObject) || null; + this.rowCount = source.rowCount; + } + get fullName() { + if (this.parent && this.parent.hidden !== true) + return [this.parent.fullName, this.name].join(' > '); + return this.name; + } + get invalid() { + return !this.valid; + } + get valid() { + if (isNil(this._valid) && this.editing) { + this._valid = this.validator.valid; + } + if (!this._valid) + return false; + return true; + //return !this.children || !this.children.some(c => !c.valid); + } + set valid(value) { + this._valid = value; + } + get rowCount() { + var _a; + if (isNil(this._rowCount) && this.isLeaf) { + const data = this.validator.value; + const samplingBatch = BatchUtils.getSamplingChild(data) || data; + this._rowCount = ((_a = samplingBatch === null || samplingBatch === void 0 ? void 0 : samplingBatch.children) === null || _a === void 0 ? void 0 : _a.length) || 0; + } + return this._rowCount || 0; + } + set rowCount(value) { + this._rowCount = value; + } + get childrenValid() { + return !this.children || !this.children.some(c => !c.valid); + } + get childrenInvalid() { + return !this.childrenValid; + } + get dirty() { + var _a; + return ((_a = this.validator) === null || _a === void 0 ? void 0 : _a.dirty) || false; + } + get touched() { + return this.validator.touched; + } + get untouched() { + return this.validator.untouched; + } + get editing() { + var _a; + return ((_a = this.validator) === null || _a === void 0 ? void 0 : _a.enabled) || false; + } + set editing(enable) { + var _a, _b; + if (enable) { + this.validator.enable({ onlySelf: true }); + let childrenForm = this.validator.get('children'); + if (((_a = this.state) === null || _a === void 0 ? void 0 : _a.showSamplingBatch) && childrenForm instanceof FormArray) { + childrenForm = (_b = childrenForm.at(0)) === null || _b === void 0 ? void 0 : _b.get('children'); + } + childrenForm === null || childrenForm === void 0 ? void 0 : childrenForm.disable({ onlySelf: true }); + } + else { + if (this.validator.enabled) { + // Save the valid state + this._valid = this.validator.valid; + } + this.validator.disable(); + } + } + get isExpanded() { + return !this.isLeaf; + } + isValid() { + var _a, _b, _c, _d; + return __awaiter(this, void 0, void 0, function* () { + // Enable temporarily the validator to get the valid status + const disabled = (_a = this.validator) === null || _a === void 0 ? void 0 : _a.disabled; + if (disabled) { + this.validator.enable({ emitEvent: false, onlySelf: true }); + } + try { + if (!((_b = this.validator) === null || _b === void 0 ? void 0 : _b.valid)) { + // Wait end of async validation + if ((_c = this.validator) === null || _c === void 0 ? void 0 : _c.pending) { + yield waitWhilePending(this.validator); + } + // Quit if really invalid + if ((_d = this.validator) === null || _d === void 0 ? void 0 : _d.invalid) { + return false; + } + } + return true; + } + finally { + // Re-disabled, if need + if (disabled) { + this.validator.disable({ emitEvent: false, onlySelf: true }); + } + } + }); + } + set currentData(value) { + this.validator.patchValue(value); + } + get currentData() { + var _a; + return (_a = this.validator) === null || _a === void 0 ? void 0 : _a.getRawValue(); + } + get(path) { + if (isNilOrBlank(path)) + return this; + return getPropertyByPath(this, path); + } + get pmfms() { + var _a; + return (_a = this.state) === null || _a === void 0 ? void 0 : _a.pmfms; + } + set pmfms(pmfms) { + this.state = Object.assign(Object.assign({}, this.state), { pmfms }); + this._weightPmfms = null; // Reset cache + } + get childrenPmfms() { + var _a; + return (_a = this.childrenState) === null || _a === void 0 ? void 0 : _a.pmfms; + } + set childrenPmfms(pmfms) { + this.childrenState = Object.assign(Object.assign({}, this.childrenState), { pmfms }); + } + get weightPmfms() { + var _a; + if (isNil(this._weightPmfms)) { + this._weightPmfms = ((_a = this.pmfms) === null || _a === void 0 ? void 0 : _a.filter(PmfmUtils.isWeight)) || []; + } + return this._weightPmfms; + } +}; +BatchModel = BatchModel_1 = __decorate([ + EntityClass({ typename: 'BatchModelVO' }), + __metadata("design:paramtypes", [Object]) +], BatchModel); +export { BatchModel }; +let BatchModelFilter = BatchModelFilter_1 = class BatchModelFilter extends EntityFilter { + constructor() { + super(...arguments); + this.measurementValues = null; + this.pmfmIds = null; + this.isLeaf = null; + this.hidden = null; + this.parentFilter = null; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.measurementValues = source.measurementValues && Object.assign({}, source.measurementValues) || MeasurementUtils.toMeasurementValues(source.measurements); + this.pmfmIds = source.pmfmIds; + this.isLeaf = source.isLeaf; + this.hidden = source.hidden; + this.parentFilter = source.parentFilter && BatchModelFilter_1.fromObject(source.parentFilter); + } + asObject(opts) { + const target = super.asObject(opts); + target.measurementValues = MeasurementValuesUtils.asObject(this.measurementValues, opts); + target.pmfmIds = this.pmfmIds; + target.isLeaf = this.isLeaf; + target.hidden = this.hidden; + target.parentFilter = this.parentFilter && this.parentFilter.asObject(opts); + return target; + } + buildFilter() { + const filterFns = super.buildFilter(); + if (isNotNil(this.measurementValues)) { + Object.keys(this.measurementValues).forEach(pmfmId => { + const pmfmValue = this.measurementValues[pmfmId]; + if (isNotNil(pmfmValue)) { + filterFns.push(b => { + const measurementValues = (b.currentData || b.originalData).measurementValues; + return measurementValues && isNotNil(measurementValues[pmfmId]) && PmfmValueUtils.equals(measurementValues[pmfmId], pmfmValue); + }); + } + }); + } + // Check all expected pmfms has value + if (isNotEmptyArray(this.pmfmIds)) { + const pmfmIds = [...this.pmfmIds]; + filterFns.push(b => { + const measurementValues = (b.currentData || b.originalData).measurementValues; + return pmfmIds.every(pmfmId => PmfmValueUtils.isNotEmpty(measurementValues[pmfmId])); + }); + } + // Hidden + if (isNotNil(this.hidden)) { + const hidden = this.hidden; + filterFns.push(b => b.hidden === hidden); + } + // is leaf + if (isNotNil(this.isLeaf)) { + const isLeaf = this.isLeaf; + filterFns.push(b => b.isLeaf === isLeaf); + } + // Parent filter + const parentFilter = BatchModelFilter_1.fromObject(this.parentFilter); + if (parentFilter && !parentFilter.isEmpty()) { + const parentFilterFn = parentFilter.asFilterFn(); + filterFns.push(b => b.parent && parentFilterFn(b.parent)); + } + return filterFns; + } +}; +BatchModelFilter = BatchModelFilter_1 = __decorate([ + EntityClass({ typename: 'BatchModelFilterVO' }) +], BatchModelFilter); +export { BatchModelFilter }; +export class BatchModelUtils { + static createModel(data, opts) { + if (isEmptyArray(opts === null || opts === void 0 ? void 0 : opts.sortingPmfms)) + throw new Error('Missing required argument \'opts.sortingPmfms\''); + // Create a batch model + const model = BatchModel.fromBatch(data, opts.sortingPmfms, opts.rules); + if (!model) + return; + // Add catch batches pmfms + model.state.pmfms = arrayDistinct([ + ...(opts.catchPmfms || []), + ...(model.state.pmfms || []) + ], 'id'); + // Disabled root node, if no visible pmfms (e.g. when catch batch has no pmfm) + model.disabled = !(model.pmfms || []).some(p => !p.hidden) + && !model.isLeaf + && !model.parent; + // Set default catch batch name + if (!model.parent && !model.name) { + model.name = 'TRIP.BATCH.EDIT.CATCH_BATCH'; + } + return model; + } + /** + * Find matches batches (recursively) + * + * @param batch + * @param filter + */ + static findByFilterInTree(model, filter) { + return TreeItemEntityUtils.findByFilter(model, BatchModelFilter.fromObject(filter)); + } + /** + * Delete matches batches (recursively) + * + * @param batch + * @param filter + */ + static deleteByFilterInTree(model, filter) { + return TreeItemEntityUtils.deleteByFilter(model, BatchModelFilter.fromObject(filter)); + } + static logTree(model, treeDepth = 0, treeIndent = '', result = []) { + const isCatchBatch = treeDepth === 0; + // Append current batch to result array + let name = isCatchBatch ? 'Catch' : (model.name || model.originalData.label); + const pmfmLabelsStr = (model.pmfms || []).map(p => p.label).join(', '); + if (isNotNilOrBlank(pmfmLabelsStr)) + name += `: ${pmfmLabelsStr}`; + if (model.hidden) + name += ' (hidden)'; + result.push(`${treeIndent} - ${name}`); + // Recursive call, for each children + if (isNotEmptyArray(model.children)) { + treeDepth++; + treeIndent = `${treeIndent}\t`; + model.children.forEach(child => this.logTree(child, treeDepth, treeIndent, result)); + } + // Display result, if root + if (isCatchBatch && isNotEmptyArray(result)) { + console.debug(`[batch-tree-container] Batch model:\n${result.join('\n')}`); + } + } +} +//# sourceMappingURL=batch-tree.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/tree/batch-tree.model.js.map b/out-tsc/app/app/trip/batch/tree/batch-tree.model.js.map new file mode 100644 index 000000000..8505f0245 --- /dev/null +++ b/out-tsc/app/app/trip/batch/tree/batch-tree.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch-tree.model.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/tree/batch-tree.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/tree/batch-tree.rules.js b/out-tsc/app/app/trip/batch/tree/batch-tree.rules.js new file mode 100644 index 000000000..a2999c06b --- /dev/null +++ b/out-tsc/app/app/trip/batch/tree/batch-tree.rules.js @@ -0,0 +1,67 @@ +import { __decorate, __metadata } from "tslib"; +import { Rule } from '@app/referential/services/model/rule.model'; +import { PmfmIds } from '@app/referential/services/model/model.enum'; +import { Injectable } from '@angular/core'; +import { ConfigService } from '@sumaris-net/ngx-components'; +let BatchRules = class BatchRules { + constructor(configService) { + this._cache = new Map(); + // Clean cache when config change (PmfmIds can changes) + configService.config.subscribe(_ => this.resetCache()); + } + getNotLandingPmfms(pmfmPath = '') { + const cacheKey = 'noLandingPmfms#' + pmfmPath; + this._cache[cacheKey] = this._cache[cacheKey] || this.createNotLandingPmfms(pmfmPath); + return this._cache[cacheKey]; + } + getNotDiscardPmfms(pmfmPath = '') { + const cacheKey = 'noDiscardPmfms#' + pmfmPath; + this._cache[cacheKey] = this._cache[cacheKey] || this.createNotDiscardPmfms(pmfmPath); + return this._cache[cacheKey]; + } + resetCache() { + this._cache.clear(); + } + createNotLandingPmfms(pmfmPath = '') { + return [ + Rule.fromObject({ + label: 'no-size-category-pmfm', + controlledAttribute: `${pmfmPath}id`, + operator: '!=', + value: PmfmIds.SIZE_CATEGORY.toString(), + message: 'Size category not allowed', + }), + Rule.fromObject({ + label: 'no-batch-sorting-pmfm', + controlledAttribute: `${pmfmPath}id`, + operator: '!=', + value: PmfmIds.TRAWL_SIZE_CAT.toString(), + message: 'Trawl size category not allowed' + }) + ]; + } + createNotDiscardPmfms(pmfmPath = '') { + return [ + Rule.fromObject({ + label: 'no-batch-sorting-pmfm', + controlledAttribute: `${pmfmPath}id`, + operator: '!=', + value: PmfmIds.BATCH_SORTING.toString(), + message: 'Discard sorting pmfm not allowed' + }), + Rule.fromObject({ + label: 'no-discard-weight-pmfm', + controlledAttribute: `${pmfmPath}id`, + operator: '!=', + value: PmfmIds.DISCARD_WEIGHT.toString(), + message: 'Discard weight pmfm not allowed' + }) + ]; + } +}; +BatchRules = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [ConfigService]) +], BatchRules); +export { BatchRules }; +//# sourceMappingURL=batch-tree.rules.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/batch/tree/batch-tree.rules.js.map b/out-tsc/app/app/trip/batch/tree/batch-tree.rules.js.map new file mode 100644 index 000000000..0e97bae36 --- /dev/null +++ b/out-tsc/app/app/trip/batch/tree/batch-tree.rules.js.map @@ -0,0 +1 @@ +{"version":3,"file":"batch-tree.rules.js","sourceRoot":"","sources":["../../../../../../src/app/trip/batch/tree/batch-tree.rules.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,4CAA4C,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,4CAA4C,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGrD,IAAM,UAAU,GAAhB,MAAM,UAAU;IAIrB,YAAY,aAA4B;QAFhC,WAAM,GAAG,IAAI,GAAG,EAAgB,CAAC;QAGvC,uDAAuD;QACvD,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,kBAAkB,CAAI,QAAQ,GAAG,EAAE;QACjC,MAAM,QAAQ,GAAG,iBAAiB,GAAG,QAAQ,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACtF,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,kBAAkB,CAAI,QAAQ,GAAG,EAAE;QACjC,MAAM,QAAQ,GAAG,iBAAiB,GAAG,QAAQ,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACtF,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,UAAU;QACR,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAEO,qBAAqB,CAAI,QAAQ,GAAG,EAAE;QAC5C,OAAO;YACL,IAAI,CAAC,UAAU,CAAgB;gBAC3B,KAAK,EAAE,uBAAuB;gBAC9B,mBAAmB,EAAE,GAAG,QAAQ,IAAI;gBACpC,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE;gBACvC,OAAO,EAAE,2BAA2B;aACrC,CAAC;YACF,IAAI,CAAC,UAAU,CAAgB;gBAC7B,KAAK,EAAE,uBAAuB;gBAC9B,mBAAmB,EAAE,GAAG,QAAQ,IAAI;gBACpC,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE;gBACxC,OAAO,EAAE,iCAAiC;aAC3C,CAAC;SACL,CAAC;IACJ,CAAC;IAEO,qBAAqB,CAAI,WAAmB,EAAE;QACpD,OAAO;YACL,IAAI,CAAC,UAAU,CAAgB;gBAC7B,KAAK,EAAE,uBAAuB;gBAC9B,mBAAmB,EAAE,GAAG,QAAQ,IAAI;gBACpC,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE;gBACvC,OAAO,EAAE,kCAAkC;aAC5C,CAAC;YACF,IAAI,CAAC,UAAU,CAAgB;gBAC7B,KAAK,EAAE,wBAAwB;gBAC/B,mBAAmB,EAAE,GAAG,QAAQ,IAAI;gBACpC,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE;gBACxC,OAAO,EAAE,iCAAiC;aAC3C,CAAC;SACH,CAAC;IACJ,CAAC;CACF,CAAA;AA9DY,UAAU;IADtB,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAKJ,aAAa;GAJ7B,UAAU,CA8DtB;SA9DY,UAAU"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/common/data.fragments.js b/out-tsc/app/app/trip/common/data.fragments.js new file mode 100644 index 000000000..dbda00d34 --- /dev/null +++ b/out-tsc/app/app/trip/common/data.fragments.js @@ -0,0 +1,345 @@ +import { ReferentialFragments } from '@app/referential/services/referential.fragments'; +import { gql } from '@apollo/client/core'; +import { ImageAttachmentFragments } from '@app/data/image/image-attachment.service'; +export const DataCommonFragments = { + referential: ReferentialFragments.lightReferential, + department: ReferentialFragments.department, + lightDepartment: ReferentialFragments.lightDepartment, + location: ReferentialFragments.location, + metier: ReferentialFragments.metier, + lightMetier: ReferentialFragments.lightMetier, + lightPerson: gql `fragment LightPersonFragment on PersonVO { + id + firstName + lastName + avatar + department { + id + label + name + __typename + } + __typename + }`, + position: gql `fragment PositionFragment on VesselPositionVO { + id + dateTime + latitude + longitude + updateDate + qualityFlagId + recorderDepartment { + id + label + name + __typename + } + __typename + }`, + measurement: gql `fragment MeasurementFragment on MeasurementVO { + id + pmfmId + alphanumericalValue + numericalValue + rankOrder + qualitativeValue { + id + label + name + entityName + __typename + } + digitCount + qualityFlagId + creationDate + updateDate + recorderDepartment { + id + label + name + __typename + } + entityName + __typename + }`, + packetComposition: gql `fragment PacketCompositionFragment on PacketCompositionVO { + id + rankOrder + taxonGroup { + id + label + name + entityName + __typename + } + ratios + __typename + }` +}; +export const DataFragments = { + sample: gql `fragment SampleFragment on SampleVO { + id + label + rankOrder + parentId + sampleDate + individualCount + size + sizeUnit + comments + updateDate + creationDate + matrix { + ...LightReferentialFragment + } + taxonGroup { + ...LightReferentialFragment + } + taxonName { + ...TaxonNameFragment + } + measurementValues + images { + ...LightImageAttachmentFragment + } + qualityFlagId + operationId + landingId + __typename + } + ${DataCommonFragments.referential} + ${ReferentialFragments.taxonName} + ${ImageAttachmentFragments.light} + `, + batch: gql `fragment BatchFragment on BatchVO { + id + label + rankOrder + parentId + exhaustiveInventory + samplingRatio + samplingRatioText + individualCount + comments + updateDate + taxonGroup { + ...LightReferentialFragment + } + taxonName { + ...TaxonNameFragment + } + measurementValues + controlDate + qualificationDate + qualificationComments + qualityFlagId + __typename + } + ${DataCommonFragments.referential} + ${ReferentialFragments.taxonName}`, + packet: gql `fragment PacketFragment on PacketVO { + id + rankOrder + comments + updateDate + qualityFlagId + number + weight + sampledWeights + composition { + ...PacketCompositionFragment + } + operationId + __typename + } + ${DataCommonFragments.packetComposition}`, + product: gql `fragment ProductFragment on ProductVO { + id + label + rankOrder + individualCount + subgroupCount + weight + weightCalculated + comments + updateDate + taxonGroup { + ...LightReferentialFragment + } + saleType { + ...LightReferentialFragment + } + measurementValues + qualityFlagId + operationId + saleId + landingId + batchId + __typename + } + ${DataCommonFragments.referential} + `, + fishingArea: gql `fragment FishingAreaFragment on FishingAreaVO { + id +# qualificationDate +# qualificationComments + qualityFlagId + location { + ...LocationFragment + } + distanceToCoastGradient { + ...LightReferentialFragment + } + depthGradient { + ...LightReferentialFragment + } + nearbySpecificArea { + ...LightReferentialFragment + } + operationId + __typename + } + ${DataCommonFragments.location} + ${DataCommonFragments.referential} + ` +}; +export const PhysicalGearFragments = { + physicalGear: gql `fragment PhysicalGearFragment on PhysicalGearVO { + id + rankOrder + parentId + tripId + updateDate + creationDate + comments + gear { + ...LightReferentialFragment + } + recorderDepartment { + ...LightDepartmentFragment + } + measurementValues + }` +}; +export const OperationGroupFragment = { + operationGroup: gql `fragment OperationGroupFragment on OperationGroupVO { + id + rankOrderOnPeriod + physicalGearId + tripId + comments + hasCatch + updateDate + metier { + ...MetierFragment + } + recorderDepartment { + ...LightDepartmentFragment + } + measurements { + ...MeasurementFragment + } + gearMeasurements { + ...MeasurementFragment + } + packets { + ...PacketFragment + } + products { + ...ProductFragment + } + samples { + ...SampleFragment + } + fishingAreas { + ...FishingAreaFragment + } + } + ${ReferentialFragments.lightDepartment} + ${ReferentialFragments.metier} + ${DataFragments.packet} + ${DataFragments.product} + ${DataFragments.sample} + ${DataFragments.fishingArea} + ${DataCommonFragments.measurement} + ` +}; +export const SaleFragments = { + lightSale: gql `fragment LightSaleFragment on SaleVO { + id + startDateTime + creationDate + updateDate + comments + saleType { + ...LightReferentialFragment + } + saleLocation { + ...LocationFragment + } + } + ${DataCommonFragments.referential} + ${DataCommonFragments.location} + `, + sale: gql `fragment SaleFragment on SaleVO { + id + startDateTime + creationDate + updateDate + comments + saleType { + ...LightReferentialFragment + } + saleLocation { + ...LocationFragment + } + measurements { + ...MeasurementFragment + } + products { + ...ProductFragment + } + } + ${DataCommonFragments.referential} + ${DataCommonFragments.location} + ${DataCommonFragments.measurement} + ${DataFragments.product} + ` +}; +export const ExpectedSaleFragments = { + lightExpectedSale: gql `fragment LightExpectedSaleFragment on ExpectedSaleVO { + id + saleDate + saleType { + ...LightReferentialFragment + } + saleLocation { + ...LocationFragment + } + } + ${DataCommonFragments.referential} + ${DataCommonFragments.location} + `, + expectedSale: gql `fragment ExpectedSaleFragment on ExpectedSaleVO { + id + saleDate + saleType { + ...LightReferentialFragment + } + saleLocation { + ...LocationFragment + } + measurements { + ...MeasurementFragment + } + products { + ...ProductFragment + } + } + ${DataCommonFragments.referential} + ${DataCommonFragments.location} + ${DataCommonFragments.measurement} + ${DataFragments.product} + ` +}; +//# sourceMappingURL=data.fragments.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/common/data.fragments.js.map b/out-tsc/app/app/trip/common/data.fragments.js.map new file mode 100644 index 000000000..a1d05ef69 --- /dev/null +++ b/out-tsc/app/app/trip/common/data.fragments.js.map @@ -0,0 +1 @@ +{"version":3,"file":"data.fragments.js","sourceRoot":"","sources":["../../../../../src/app/trip/common/data.fragments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AACvF,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAEpF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,WAAW,EAAE,oBAAoB,CAAC,gBAAgB;IAClD,UAAU,EAAE,oBAAoB,CAAC,UAAU;IAC3C,eAAe,EAAE,oBAAoB,CAAC,eAAe;IACrD,QAAQ,EAAE,oBAAoB,CAAC,QAAQ;IACvC,MAAM,EAAE,oBAAoB,CAAC,MAAM;IACnC,WAAW,EAAE,oBAAoB,CAAC,WAAW;IAC7C,WAAW,EAAE,GAAG,CAAA;;;;;;;;;;;;IAYd;IACF,QAAQ,EAAE,GAAG,CAAA;;;;;;;;;;;;;;IAcX;IACF,WAAW,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;IAyBd;IACF,iBAAiB,EAAE,GAAG,CAAA;;;;;;;;;;;;IAYpB;CACH,CAAC;AACF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8BT,mBAAmB,CAAC,WAAW;IAC/B,oBAAoB,CAAC,SAAS;IAC9B,wBAAwB,CAAC,KAAK;GAC/B;IACD,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;IAwBR,mBAAmB,CAAC,WAAW;IAC/B,oBAAoB,CAAC,SAAS,EAAE;IAClC,MAAM,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;IAeT,mBAAmB,CAAC,iBAAiB,EAAE;IACzC,OAAO,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;IAwBV,mBAAmB,CAAC,WAAW;GAChC;IACD,WAAW,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;IAoBd,mBAAmB,CAAC,QAAQ;IAC5B,mBAAmB,CAAC,WAAW;GAChC;CACF,CAAC;AACF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,YAAY,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;IAef;CACH,CAAC;AACF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,cAAc,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiCjB,oBAAoB,CAAC,eAAe;IACpC,oBAAoB,CAAC,MAAM;IAC3B,aAAa,CAAC,MAAM;IACpB,aAAa,CAAC,OAAO;IACrB,aAAa,CAAC,MAAM;IACpB,aAAa,CAAC,WAAW;IACzB,mBAAmB,CAAC,WAAW;GAChC;CACF,CAAC;AACF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,SAAS,EAAE,GAAG,CAAA;;;;;;;;;;;;;IAaZ,mBAAmB,CAAC,WAAW;IAC/B,mBAAmB,CAAC,QAAQ;GAC7B;IACD,IAAI,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;IAmBP,mBAAmB,CAAC,WAAW;IAC/B,mBAAmB,CAAC,QAAQ;IAC5B,mBAAmB,CAAC,WAAW;IAC/B,aAAa,CAAC,OAAO;GACtB;CACF,CAAC;AACF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,iBAAiB,EAAE,GAAG,CAAA;;;;;;;;;;IAUpB,mBAAmB,CAAC,WAAW;IAC/B,mBAAmB,CAAC,QAAQ;GAC7B;IACD,YAAY,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;IAgBf,mBAAmB,CAAC,WAAW;IAC/B,mBAAmB,CAAC,QAAQ;IAC5B,mBAAmB,CAAC,WAAW;IAC/B,aAAa,CAAC,OAAO;GACtB;CACF,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/expense/expense.form.js b/out-tsc/app/app/trip/expense/expense.form.js new file mode 100644 index 000000000..0f25d36db --- /dev/null +++ b/out-tsc/app/app/trip/expense/expense.form.js @@ -0,0 +1,510 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, EventEmitter, Injector, Input, Output, QueryList, ViewChild, ViewChildren, } from '@angular/core'; +import { UntypedFormBuilder } from '@angular/forms'; +import { firstNotNilPromise, FormArrayHelper, isNil, isNotEmptyArray, isNotNilOrNaN, remove, removeAll, round, } from '@sumaris-net/ngx-components'; +import { MeasurementsForm } from '@app/data/measurement/measurements.form.component'; +import { BehaviorSubject } from 'rxjs'; +import { debounceTime, filter, mergeMap } from 'rxjs/operators'; +import { MeasurementUtils } from '@app/data/measurement/measurement.model'; +import { ExpenseValidatorService } from './expense.validator'; +import { getMaxRankOrder } from '@app/data/services/model/model.utils'; +import { TypedExpenseForm } from './typed-expense.form'; +import { MatTabGroup } from '@angular/material/tabs'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +class TupleValue { +} +let ExpenseForm = class ExpenseForm extends MeasurementsForm { + constructor(injector, validatorService, formBuilder, programRefService) { + super(injector, validatorService, formBuilder, programRefService); + this.validatorService = validatorService; + this.formBuilder = formBuilder; + this.programRefService = programRefService; + this.$estimatedTotalPmfm = new BehaviorSubject(undefined); + this.$fuelTypePmfm = new BehaviorSubject(undefined); + this.$fuelPmfms = new BehaviorSubject(undefined); + this.fuelTuple = undefined; + this.$engineOilPmfms = new BehaviorSubject(undefined); + this.engineOilTuple = undefined; + this.$hydraulicOilPmfms = new BehaviorSubject(undefined); + this.hydraulicOilTuple = undefined; + this.$miscPmfms = new BehaviorSubject(undefined); + this.calculating = false; + this.baitEditedIndex = -1; + this.applyingBaitMeasurements = false; + this.addingNewBait = false; + this.removingBait = false; + this.baitsFocusIndex = -1; + /** The index of the active tab. */ + this._selectedTabIndex = 0; + this.selectedTabChange = new EventEmitter(); + this.mobile = this.settings.mobile; + this.keepRankOrder = true; + this.tabindex = 0; + } + get selectedTabIndex() { + return this._selectedTabIndex; + } + set selectedTabIndex(value) { + if (value !== this._selectedTabIndex) { + this._selectedTabIndex = value; + this.markForCheck(); + } + } + get baitsFormArray() { + // 'baits' FormArray is just a array of number of fake rankOrder + return this.form.get('baits'); + } + get dirty() { + return super.dirty || (this.iceForm && !!this.iceForm.dirty) || (this.baitForms && !!this.baitForms.find(form => form.dirty)); + } + get valid() { + // Important: Should be not invalid AND not pending, so use '!valid' (and NOT 'invalid') + return super.valid && (!this.iceForm || !this.iceForm.valid) && (!this.baitForms || !this.baitForms.some(form => !form.valid)); + } + get invalid() { + return super.invalid || (this.iceForm && this.iceForm.invalid) || (this.baitForms && this.baitForms.some(form => form.invalid)); + } + get pending() { + return super.pending || (this.iceForm && !!this.iceForm.pending) || (this.baitForms && this.baitForms.some(form => form.pending)); + } + markAsReady(opts) { + var _a, _b; + super.markAsReady(opts); + (_a = this.iceForm) === null || _a === void 0 ? void 0 : _a.markAsReady(opts); + (_b = this.baitForms) === null || _b === void 0 ? void 0 : _b.forEach(form => form.markAsReady(opts)); + } + ready(opts) { + const _super = Object.create(null, { + ready: { get: () => super.ready } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.ready.call(this, opts); + if (this.iceForm) + yield this.iceForm.ready(opts); + }); + } + ngOnInit() { + super.ngOnInit(); + this.initBaitHelper(); + this.registerSubscription(this.pmfms$ + // Wait form controls ready + .pipe(mergeMap((pmfms) => this.ready().then(_ => pmfms))) + .subscribe(pmfms => { + const expensePmfms = pmfms.slice(); + // dispatch pmfms + this.$estimatedTotalPmfm.next(remove(expensePmfms, this.isEstimatedTotalPmfm)); + this.$fuelTypePmfm.next(remove(expensePmfms, this.isFuelTypePmfm)); + this.$fuelPmfms.next(removeAll(expensePmfms, this.isFuelPmfm)); + this.fuelTuple = this.getValidTuple(this.$fuelPmfms.getValue()); + this.$engineOilPmfms.next(removeAll(expensePmfms, this.isEngineOilPmfm)); + this.engineOilTuple = this.getValidTuple(this.$engineOilPmfms.getValue()); + this.$hydraulicOilPmfms.next(removeAll(expensePmfms, this.isHydraulicPmfm)); + this.hydraulicOilTuple = this.getValidTuple(this.$hydraulicOilPmfms.getValue()); + // remaining pmfms go to miscellaneous part + this.$miscPmfms.next(expensePmfms); + // register total pmfms for calculated total + this.registerTotalSubscription(pmfms.filter(pmfm => this.isTotalPmfm(pmfm) && !this.isEstimatedTotalPmfm(pmfm))); + })); + } + ngAfterViewInit() { + // listen to bait forms children view changes + this.registerSubscription(this.baitForms.changes.subscribe(() => this.refreshBaitForms())); + // add totalValueChange subscription on iceForm + this.registerSubscription(this.iceForm.totalValueChanges.subscribe(() => this.calculateTotal())); + } + realignInkBar() { + if (this.tabGroup) + this.tabGroup.realignInkBar(); + } + initBaitHelper() { + this.baitsHelper = new FormArrayHelper(FormArrayHelper.getOrCreateArray(this.formBuilder, this.form, 'baits'), (data) => this.validatorService.getBaitControl(data), (v1, v2) => v1 === v2, value => isNil(value), { + allowEmptyArray: false + }); + if (this.baitsHelper.size() === 0) { + // add at least one bait + this.baitsHelper.resize(1); + } + this.markForCheck(); + } + getValue() { + const values = super.getValue(); + // reset computed values from tuples + this.resetComputedTupleValues(values, this.fuelTuple); + this.resetComputedTupleValues(values, this.engineOilTuple); + this.resetComputedTupleValues(values, this.hydraulicOilTuple); + // add ice values + values.push(...(this.iceForm.value || [])); + // add bait values + this.baitForms + .map(form => form.value) + .filter(isNotEmptyArray) + .forEach(value => values.push(...value)); + this.allData = values; + return values; + } + applyValue(data, opts) { + const _super = Object.create(null, { + applyValue: { get: () => super.applyValue } + }); + return __awaiter(this, void 0, void 0, function* () { + // Make a copy of data to keep ice and bait measurements + this.allData = this.allData || data.slice(); + yield _super.applyValue.call(this, data, opts); + try { + // set ice value + yield this.setIceValue(this.allData); + // set bait values + yield this.setBaitValue(this.allData); + // initial calculation of tuples + this.calculateInitialTupleValues(this.fuelTuple); + this.calculateInitialTupleValues(this.engineOilTuple); + this.calculateInitialTupleValues(this.hydraulicOilTuple); + this.registerTupleSubscription(this.fuelTuple); + this.registerTupleSubscription(this.engineOilTuple); + this.registerTupleSubscription(this.hydraulicOilTuple); + // compute total + this.calculateTotal(); + } + catch (err) { + if (this.destroyed) + return; // Skip if component destroyed + console.error('[expense-form] Cannot load ice pmfms', err); + } + }); + } + setIceValue(data) { + return __awaiter(this, void 0, void 0, function* () { + try { + const icePmfms = yield firstNotNilPromise(this.iceForm.pmfms$, { stop: this.destroySubject, timeout: 10000 }); + // filter data before set to ice form + this.iceForm.value = MeasurementUtils.filter(data, icePmfms); + } + catch (err) { + if (this.destroyed) + return; // Skip if component destroyed + console.error('[expense-form] Cannot load ice pmfms', err); + throw new Error('Cannot load ice pmfms'); + } + }); + } + setBaitValue(data) { + return __awaiter(this, void 0, void 0, function* () { + try { + const baitPmfms = yield firstNotNilPromise(this.baitForms.first.pmfms$, { stop: this.destroySubject, timeout: 10000 }); + // filter data before set to each bait form + this.baitMeasurements = MeasurementUtils.filter(data, baitPmfms); + // get max rankOrder (should be = nbBaits) + const nbBait = getMaxRankOrder(this.baitMeasurements); + const baits = [...Array(nbBait).keys()]; + this.applyingBaitMeasurements = true; + // resize 'baits' FormArray and patch main form to adjust number of bait children forms + this.baitsHelper.resize(Math.max(1, nbBait)); + this.form.patchValue({ baits }); + this.refreshBaitForms(); + } + catch (err) { + if (this.destroyed) + return; // Skip if component destroyed + console.error('[expense-form] Cannot load bait pmfms', err); + throw new Error('Cannot load bait pmfms'); + } + }); + } + refreshBaitForms() { + this.cd.detectChanges(); + // on applying bait measurements, set them after forms are ready + if (this.applyingBaitMeasurements) { + this.applyingBaitMeasurements = false; + this.applyBaitMeasurements(); + // set all as enabled + this.baitForms.forEach(baitForm => { + baitForm.markAsReady(); + if (this._enable) + baitForm.enable(); + }); + } + // on adding a new bait, prepare the new form + if (this.addingNewBait) { + this.addingNewBait = false; + this.baitForms.last.value = []; + this.baitForms.last.markAsReady(); + if (this._enable) + this.baitForms.last.enable(); + } + // on removing bait, total has to be recalculate + if (this.removingBait) { + this.removingBait = false; + this.calculateTotal(); + } + // check all bait children forms having totalValueChange registered, + this.baitForms.forEach(baitForm => { + // add it if missing + if (baitForm.totalValueChanges.observers.length === 0) { + this.registerSubscription(baitForm.totalValueChanges.subscribe(() => this.calculateTotal())); + } + }); + } + applyBaitMeasurements() { + // set filtered bait measurements to each form, which will also filter with its rankOrder + this.baitForms.forEach(baitForm => { + baitForm.value = this.baitMeasurements; + }); + } + addBait() { + // just add a new fake rankOrder value in 'baits' array, the real rankOrder is driven by template index + this.addingNewBait = true; + this.baitsHelper.add(getMaxRankOrder(this.baitsFormArray.value) + 1); + if (!this.mobile) { + this.baitsFocusIndex = this.baitsHelper.size() - 1; + } + } + removeBait(index) { + this.removingBait = true; + if (!this.baitsHelper.allowEmptyArray && this.baitsHelper.size() === 1) { + this.baitForms.first.value = []; + } + this.baitsHelper.removeAt(index); + } + registerTupleSubscription(tuple) { + if (!tuple) + return; // Skip + Object.keys(tuple).forEach(pmfmId => { + this.registerSubscription(this.form.get(pmfmId).valueChanges + .pipe(filter(() => !this.applyingValue && !this.calculating), debounceTime(250)) + .subscribe(value => this.calculateTupleValues(tuple, pmfmId, value))); + }); + } + calculateTupleValues(tuple, sourcePmfmId, value) { + if (this.calculating) + return; + try { + if (this.debug) { + console.debug('[expenseForm] calculateTupleValues:', JSON.stringify(tuple), sourcePmfmId, value); + } + this.calculating = true; + // get current values (not computed) + const values = { quantity: undefined, unitPrice: undefined, total: undefined }; + Object.keys(tuple).forEach(pmfmId => { + if (!tuple[pmfmId].computed) { + values[tuple[pmfmId].type] = this.form.get(pmfmId).value || undefined; + } + }); + // choose which part is to calculate + let targetType; + switch (tuple[sourcePmfmId].type) { + case 'quantity': + if (values.unitPrice) { + targetType = 'total'; + values.total = value && round(value * values.unitPrice) || undefined; + } + else if (values.total) { + targetType = 'unitPrice'; + values.unitPrice = value && value > 0 && round(values.total / value) || undefined; + } + break; + case 'unitPrice': + if (values.quantity) { + targetType = 'total'; + values.total = value && round(value * values.quantity) || undefined; + } + else if (values.total) { + targetType = 'quantity'; + values.quantity = value && value > 0 && round(values.total / value) || undefined; + } + break; + case 'total': + if (values.quantity) { + targetType = 'unitPrice'; + values.unitPrice = value && values.quantity > 0 && round(value / values.quantity) || undefined; + } + else if (values.unitPrice) { + targetType = 'quantity'; + values.quantity = value && values.unitPrice > 0 && round(value / values.unitPrice) || undefined; + } + break; + } + if (targetType) { + // set values and tuple computed state + const patch = {}; + Object.keys(tuple).forEach(targetPmfmId => { + if (targetPmfmId === sourcePmfmId) { + tuple[targetPmfmId].computed = false; + } + if (tuple[targetPmfmId].type === targetType) { + tuple[targetPmfmId].computed = true; + patch[targetPmfmId] = values[targetType]; + } + }); + this.form.patchValue(patch); + Object.keys(patch).forEach(pmfmId => this.form.get(pmfmId).markAsPristine()); + } + } + finally { + this.calculating = false; + } + } + calculateInitialTupleValues(tuple) { + if (tuple) { + const pmfmIdWithValue = Object.keys(tuple).find(pmfmId => !tuple[pmfmId].computed && isNotNilOrNaN(this.form.get(pmfmId).value)); + if (pmfmIdWithValue) { + this.calculateTupleValues(tuple, pmfmIdWithValue, this.form.get(pmfmIdWithValue).value); + } + } + } + resetComputedTupleValues(values, tuples) { + if (tuples && values && values.length) { + values.forEach(value => { + const tuple = tuples[value.pmfmId.toString()]; + if (tuple && tuple.computed) { + value.numericalValue = undefined; + } + }); + } + } + registerTotalSubscription(totalPmfms) { + if (isNotEmptyArray(totalPmfms)) { + this.totalPmfms = totalPmfms; + totalPmfms.forEach(totalPmfm => { + this.registerSubscription(this.form.get(totalPmfm.id.toString()).valueChanges + .pipe(filter(() => !this.applyingValue), debounceTime(250)) + .subscribe(() => this.calculateTotal())); + }); + } + } + calculateTotal() { + let total = 0; + // sum each total field from main form + (this.totalPmfms || []).forEach(totalPmfm => { + total += this.form.get(totalPmfm.id.toString()).value; + }); + // add total from ice form + total += this.iceForm.total; + // add total from each bait form + this.baitForms.forEach(baitForm => { + total += baitForm.total; + }); + this.form.patchValue({ calculatedTotal: round(total) }); + } + getValidTuple(pmfms) { + if (pmfms) { + const quantityPmfm = pmfms.find(this.isQuantityPmfm); + const unitPricePmfm = pmfms.find(this.isUnitPricePmfm); + const totalPmfm = pmfms.find(this.isTotalPmfm); + if (quantityPmfm && unitPricePmfm && totalPmfm) { + const tuple = {}; + tuple[quantityPmfm.id.toString()] = { computed: false, type: 'quantity' }; + tuple[unitPricePmfm.id.toString()] = { computed: false, type: 'unitPrice' }; + tuple[totalPmfm.id.toString()] = { computed: false, type: 'total' }; + return tuple; + } + } + return {}; + } + isEstimatedTotalPmfm(pmfm) { + return pmfm.label === 'TOTAL_COST'; // todo use PmfmIds with config + } + isFuelTypePmfm(pmfm) { + return pmfm.label === 'FUEL_TYPE'; + } + isFuelPmfm(pmfm) { + return pmfm.label.startsWith('FUEL_'); + } + isEngineOilPmfm(pmfm) { + return pmfm.label.startsWith('ENGINE_OIL_'); + } + isHydraulicPmfm(pmfm) { + return pmfm.label.startsWith('HYDRAULIC_OIL_'); + } + isQuantityPmfm(pmfm) { + return pmfm.label.endsWith('VOLUME'); + } + isUnitPricePmfm(pmfm) { + return pmfm.label.endsWith('UNIT_PRICE'); + } + isTotalPmfm(pmfm) { + return pmfm.label.endsWith('COST'); + } + enable(opts) { + this.calculating = true; + super.enable(opts); + if (this.iceForm) + this.iceForm.enable(opts); + if (this.baitForms) + this.baitForms.forEach(form => form.enable(opts)); + this.calculating = false; + } + disable(opts) { + this.calculating = true; + super.disable(opts); + if (this.iceForm) + this.iceForm.disable(opts); + if (this.baitForms) + this.baitForms.forEach(form => form.disable(opts)); + this.calculating = false; + } + markAsPristine(opts) { + super.markAsPristine(opts); + if (this.iceForm) + this.iceForm.markAsPristine(opts); + if (this.baitForms) + this.baitForms.forEach(form => form.markAsPristine(opts)); + } + markAsUntouched(opts) { + super.markAsUntouched(opts); + if (this.iceForm) + this.iceForm.markAsUntouched(opts); + if (this.baitForms) + this.baitForms.forEach(form => form.markAsUntouched()); + } + markAsTouched(opts) { + var _a, _b; + super.markAsTouched(opts); + (_a = this.iceForm) === null || _a === void 0 ? void 0 : _a.markAsTouched(opts); + (_b = this.baitForms) === null || _b === void 0 ? void 0 : _b.forEach(form => form.markAsTouched(opts)); + } + markAllAsTouched(opts) { + super.markAllAsTouched(opts); + if (this.iceForm) + this.iceForm.markAllAsTouched(opts); + if (this.baitForms) + this.baitForms.forEach(form => form.markAllAsTouched(opts)); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Number), + __metadata("design:paramtypes", [Number]) +], ExpenseForm.prototype, "selectedTabIndex", null); +__decorate([ + Output(), + __metadata("design:type", Object) +], ExpenseForm.prototype, "selectedTabChange", void 0); +__decorate([ + ViewChild('iceExpenseForm'), + __metadata("design:type", TypedExpenseForm) +], ExpenseForm.prototype, "iceForm", void 0); +__decorate([ + ViewChildren('baitExpenseForm'), + __metadata("design:type", QueryList) +], ExpenseForm.prototype, "baitForms", void 0); +__decorate([ + ViewChild('tabGroup', { static: true }), + __metadata("design:type", MatTabGroup) +], ExpenseForm.prototype, "tabGroup", void 0); +ExpenseForm = __decorate([ + Component({ + selector: 'app-expense-form', + templateUrl: './expense.form.html', + styleUrls: ['./expense.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + ExpenseValidatorService, + UntypedFormBuilder, + ProgramRefService]) +], ExpenseForm); +export { ExpenseForm }; +//# sourceMappingURL=expense.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/expense/expense.form.js.map b/out-tsc/app/app/trip/expense/expense.form.js.map new file mode 100644 index 000000000..cae70b0aa --- /dev/null +++ b/out-tsc/app/app/trip/expense/expense.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"expense.form.js","sourceRoot":"","sources":["../../../../../src/app/trip/expense/expense.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/expense/expense.module.js b/out-tsc/app/app/trip/expense/expense.module.js new file mode 100644 index 000000000..083f05e67 --- /dev/null +++ b/out-tsc/app/app/trip/expense/expense.module.js @@ -0,0 +1,36 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { ExpenseForm } from './expense.form'; +import { TypedExpenseForm } from './typed-expense.form'; +import { TranslateModule } from '@ngx-translate/core'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppMeasurementModule } from '@app/data/measurement/measurement.module'; +import { AppReferentialModule } from '@app/referential/referential.module'; +let AppExpenseModule = class AppExpenseModule { + constructor() { + console.debug('[expense] Creating module...'); + } +}; +AppExpenseModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + TranslateModule.forChild(), + // Functional modules + AppReferentialModule, + AppMeasurementModule, + ], + declarations: [ + ExpenseForm, + TypedExpenseForm + ], + exports: [ + // Components + ExpenseForm, + TypedExpenseForm, + ] + }), + __metadata("design:paramtypes", []) +], AppExpenseModule); +export { AppExpenseModule }; +//# sourceMappingURL=expense.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/expense/expense.module.js.map b/out-tsc/app/app/trip/expense/expense.module.js.map new file mode 100644 index 000000000..f3233fe51 --- /dev/null +++ b/out-tsc/app/app/trip/expense/expense.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"expense.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/expense/expense.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAsBpE,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAE3B;QACE,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAChD,CAAC;CACF,CAAA;AALY,gBAAgB;IAnB5B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAE1B,qBAAqB;YACrB,oBAAoB;YACpB,oBAAoB;SACrB;QACD,YAAY,EAAE;YACZ,WAAW;YACX,gBAAgB;SACjB;QACD,OAAO,EAAE;YACP,aAAa;YACb,WAAW;YACX,gBAAgB;SACjB;KACF,CAAC;;GACW,gBAAgB,CAK5B;SALY,gBAAgB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/expense/expense.validator.js b/out-tsc/app/app/trip/expense/expense.validator.js new file mode 100644 index 000000000..d88cda0f8 --- /dev/null +++ b/out-tsc/app/app/trip/expense/expense.validator.js @@ -0,0 +1,39 @@ +import { __decorate, __metadata } from "tslib"; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder } from '@angular/forms'; +import { LocalSettingsService } from '@sumaris-net/ngx-components'; +import { TranslateService } from '@ngx-translate/core'; +let ExpenseValidatorService = class ExpenseValidatorService extends MeasurementsValidatorService { + constructor(formBuilder, translate, settings) { + super(formBuilder, translate, settings); + } + getFormGroupConfig(data, opts) { + return Object.assign(super.getFormGroupConfig(data, opts), { + calculatedTotal: [null], + baits: this.getBaitsFormArray() + }); + } + fillDefaultOptions(opts) { + opts = super.fillDefaultOptions(opts); + // add expense fields as protected attributes + opts.protectedAttributes.push('calculatedTotal', 'baits'); + return opts; + } + getBaitsFormArray() { + return this.formBuilder.array([this.getBaitControl()]); + } + getBaitControl(data) { + return this.formBuilder.group({ + rankOrder: [data || 1] + }); + } +}; +ExpenseValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + LocalSettingsService]) +], ExpenseValidatorService); +export { ExpenseValidatorService }; +//# sourceMappingURL=expense.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/expense/expense.validator.js.map b/out-tsc/app/app/trip/expense/expense.validator.js.map new file mode 100644 index 000000000..e304a64ae --- /dev/null +++ b/out-tsc/app/app/trip/expense/expense.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"expense.validator.js","sourceRoot":"","sources":["../../../../../src/app/trip/expense/expense.validator.ts"],"names":[],"mappings":";AAAA,OAAO,EAA+B,4BAA4B,EAAC,MAAM,6CAA6C,CAAC;AACvH,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,kBAAkB,EAAmB,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAAC,oBAAoB,EAAC,MAAO,6BAA6B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGhD,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,4BAA4B;IAEvE,YACE,WAA+B,EAC/B,SAA2B,EAC3B,QAA8B;QAE9B,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,kBAAkB,CAAC,IAAmB,EAAE,IAAmC;QACzE,OAAO,MAAM,CAAC,MAAM,CAClB,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,EACpC;YACE,eAAe,EAAE,CAAC,IAAI,CAAC;YACvB,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE;SAChC,CACF,CAAC;IACJ,CAAC;IAEW,kBAAkB,CAAC,IAAmC;QAChE,IAAI,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAEtC,6CAA6C;QAC7C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAE1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,cAAc,CAAC,IAAa;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAC5B,SAAS,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;SACvB,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAtCY,uBAAuB;IADnC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAIhB,kBAAkB;QACpB,gBAAgB;QACjB,oBAAoB;GALrB,uBAAuB,CAsCnC;SAtCY,uBAAuB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/expense/typed-expense.form.js b/out-tsc/app/app/trip/expense/typed-expense.form.js new file mode 100644 index 000000000..8534703a9 --- /dev/null +++ b/out-tsc/app/app/trip/expense/typed-expense.form.js @@ -0,0 +1,159 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { MeasurementsForm } from '@app/data/measurement/measurements.form.component'; +import { ChangeDetectionStrategy, Component, EventEmitter, Injector, Input, Output } from '@angular/core'; +import { UntypedFormBuilder } from '@angular/forms'; +import { filterNotNil, firstTruePromise, isNotEmptyArray, isNotNilOrNaN, remove, removeAll, } from '@sumaris-net/ngx-components'; +import { TypedExpenseValidatorService } from './typed-expense.validator'; +import { BehaviorSubject } from 'rxjs'; +import { debounceTime, filter, mergeMap } from 'rxjs/operators'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +let TypedExpenseForm = class TypedExpenseForm extends MeasurementsForm { + constructor(injector, validatorService, formBuilder, programRefService) { + super(injector, validatorService, formBuilder, programRefService); + this.validatorService = validatorService; + this.formBuilder = formBuilder; + this.programRefService = programRefService; + this.$pmfmReady = new BehaviorSubject(false); + this.$typePmfm = new BehaviorSubject(undefined); + this.$totalPmfm = new BehaviorSubject(undefined); + this.$packagingPmfms = new BehaviorSubject(undefined); + this.expenseType = 'UNKNOWN'; + this.totalValueChanges = new EventEmitter(); + this.mobile = this.settings.mobile; + this.keepRankOrder = true; + } + get total() { + const totalPmfm = this.$totalPmfm.getValue(); + return (totalPmfm && this.form.get(totalPmfm.id.toString()).value) || 0; + } + ngOnInit() { + super.ngOnInit(); + this.amountDefinition = { + key: 'amount', + label: `EXPENSE.${this.expenseType}.AMOUNT`, + type: 'double', + minValue: 0, + maximumNumberDecimals: 2, + }; + this.registerSubscription(this.pmfms$ + // Wait form controls ready + .pipe(mergeMap((pmfms) => this.ready().then((_) => pmfms))) + .subscribe((pmfms) => this.parsePmfms(pmfms))); + this.registerSubscription(filterNotNil(this.$totalPmfm).subscribe((totalPmfm) => { + this.form + .get(totalPmfm.id.toString()) + .valueChanges.pipe(filter(() => this.totalValueChanges.observers.length > 0), debounceTime(250)) + .subscribe(() => this.totalValueChanges.emit(this.form.get(totalPmfm.id.toString()).value)); + })); + // type + this.registerAutocompleteField('packaging', { + showAllOnFocus: true, + items: this.$packagingPmfms, + attributes: ['unitLabel'], + columnNames: ['REFERENTIAL.PMFM.UNIT'], + mobile: this.mobile, + }); + } + getValue() { + const values = super.getValue(); + // parse values + const packagingPmfms = this.$packagingPmfms.getValue() || []; + if (values && packagingPmfms.length) { + packagingPmfms.forEach((packagingPmfm) => { + const value = values.find((v) => v.pmfmId === packagingPmfm.id); + if (value) { + if (this.form.value.packaging && this.form.value.packaging.pmfmId === value.pmfmId) { + value.numericalValue = this.form.value.amount; + } + else { + value.numericalValue = undefined; + } + } + }); + } + // set rank order if provided + if (this.rankOrder) { + (values || []).forEach((value) => (value.rankOrder = this.rankOrder)); + } + return values; + } + updateView(data, opts) { + const _super = Object.create(null, { + updateView: { get: () => super.updateView } + }); + return __awaiter(this, void 0, void 0, function* () { + // filter measurements on rank order if provided + if (this.rankOrder) { + data = (data || []).filter((value) => value.rankOrder === this.rankOrder); + } + yield _super.updateView.call(this, data, opts); + yield this.readyPmfms({ stop: this.destroySubject }); + // set packaging and amount value + const packaging = (this.$packagingPmfms.getValue() || []).find((pmfm) => this.form.get(pmfm.id.toString()) && isNotNilOrNaN(this.form.get(pmfm.id.toString()).value)); + const amount = (packaging && this.form.get(packaging.id.toString()).value) || undefined; + this.form.patchValue({ amount, packaging }); + }); + } + readyPmfms(opts) { + return firstTruePromise(this.$pmfmReady, opts); + } + parsePmfms(pmfms) { + if (isNotEmptyArray(pmfms)) { + const remainingPmfms = pmfms.slice(); + this.$typePmfm.next(remove(remainingPmfms, this.isTypePmfm)); + this.$totalPmfm.next(remove(remainingPmfms, this.isTotalPmfm)); + this.$packagingPmfms.next(removeAll(remainingPmfms, this.isPackagingPmfm)); + if (remainingPmfms.length) { + console.warn('[typed-expense] some pmfms have not been parsed', remainingPmfms); + } + // must update controls + this.validatorService.updateFormGroup(this.form, { + pmfms, + typePmfm: this.$typePmfm.getValue(), + totalPmfm: this.$totalPmfm.getValue(), + }); + this.$pmfmReady.next(true); + } + } + isTypePmfm(pmfm) { + return pmfm.label.endsWith('TYPE'); + } + isPackagingPmfm(pmfm) { + return pmfm.label.endsWith('WEIGHT') || pmfm.label.endsWith('COUNT'); + } + isTotalPmfm(pmfm) { + return pmfm.label.endsWith('COST'); + } + markForCheck() { + if (this.cd) + this.cd.markForCheck(); + else + console.warn('[typed-expense-form] ChangeDetectorRef is undefined'); + } +}; +__decorate([ + Input(), + __metadata("design:type", Number) +], TypedExpenseForm.prototype, "rankOrder", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], TypedExpenseForm.prototype, "expenseType", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], TypedExpenseForm.prototype, "totalValueChanges", void 0); +TypedExpenseForm = __decorate([ + Component({ + selector: 'app-typed-expense-form', + templateUrl: './typed-expense.form.html', + styleUrls: ['./typed-expense.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + TypedExpenseValidatorService, + UntypedFormBuilder, + ProgramRefService]) +], TypedExpenseForm); +export { TypedExpenseForm }; +//# sourceMappingURL=typed-expense.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/expense/typed-expense.form.js.map b/out-tsc/app/app/trip/expense/typed-expense.form.js.map new file mode 100644 index 000000000..f3fcbfcca --- /dev/null +++ b/out-tsc/app/app/trip/expense/typed-expense.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"typed-expense.form.js","sourceRoot":"","sources":["../../../../../src/app/trip/expense/typed-expense.form.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAU,MAAM,EAAE,MAAM,eAAe,CAAC;AAClH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,YAAY,EACZ,gBAAgB,EAEhB,eAAe,EACf,aAAa,EACb,MAAM,EACN,SAAS,GAEV,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAS3E,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,gBAAgB;IAkBpD,YACE,QAAkB,EACR,gBAA8C,EAC9C,WAA+B,EAC/B,iBAAoC;QAE9C,KAAK,CAAC,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAJxD,qBAAgB,GAAhB,gBAAgB,CAA8B;QAC9C,gBAAW,GAAX,WAAW,CAAoB;QAC/B,sBAAiB,GAAjB,iBAAiB,CAAmB;QApBhD,eAAU,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;QACjD,cAAS,GAAG,IAAI,eAAe,CAAQ,SAAS,CAAC,CAAC;QAClD,eAAU,GAAG,IAAI,eAAe,CAAQ,SAAS,CAAC,CAAC;QACnD,oBAAe,GAAG,IAAI,eAAe,CAAU,SAAS,CAAC,CAAC;QAIjD,gBAAW,GAAG,SAAS,CAAC;QAEvB,sBAAiB,GAAG,IAAI,YAAY,EAAO,CAAC;QAcpD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;IAdD,IAAI,KAAK;QACP,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC7C,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAaD,QAAQ;QACN,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEjB,IAAI,CAAC,gBAAgB,GAAG;YACtB,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE,WAAW,IAAI,CAAC,WAAW,SAAS;YAC3C,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC;YACX,qBAAqB,EAAE,CAAC;SACzB,CAAC;QAEF,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,MAAM;YACT,2BAA2B;aAC1B,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;aAC1D,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAChD,CAAC;QAEF,IAAI,CAAC,oBAAoB,CACvB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE;YACpD,IAAI,CAAC,IAAI;iBACN,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;iBAC5B,YAAY,CAAC,IAAI,CAChB,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,EACzD,YAAY,CAAC,GAAG,CAAC,CAClB;iBACA,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAChG,CAAC,CAAC,CACH,CAAC;QAEF,OAAO;QACP,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE;YAC1C,cAAc,EAAE,IAAI;YACpB,KAAK,EAAE,IAAI,CAAC,eAAe;YAC3B,UAAU,EAAE,CAAC,WAAW,CAAC;YACzB,WAAW,EAAE,CAAC,uBAAuB,CAAC;YACtC,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IAES,QAAQ;QAChB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEhC,eAAe;QACf,MAAM,cAAc,GAAY,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;QACtE,IAAI,MAAM,IAAI,cAAc,CAAC,MAAM,EAAE;YACnC,cAAc,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE;gBACvC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,EAAE,CAAC,CAAC;gBAChE,IAAI,KAAK,EAAE;oBACT,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;wBAClF,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;qBAC/C;yBAAM;wBACL,KAAK,CAAC,cAAc,GAAG,SAAS,CAAC;qBAClC;iBACF;YACH,CAAC,CAAC,CAAC;SACJ;QAED,6BAA6B;QAC7B,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;SACvE;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEe,UAAU,CAAC,IAAmB,EAAE,IAAkD;;;;;YAChG,gDAAgD;YAChD,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;aAC3E;YAED,MAAM,OAAM,UAAU,YAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACnC,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YAErD,iCAAiC;YACjC,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAC5D,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CACtG,CAAC;YACF,MAAM,MAAM,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC;YACxF,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9C,CAAC;KAAA;IAED,UAAU,CAAC,IAAoB;QAC7B,OAAO,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,UAAU,CAAC,KAAc;QACvB,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE;YAC1B,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAC/D,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;YAC3E,IAAI,cAAc,CAAC,MAAM,EAAE;gBACzB,OAAO,CAAC,IAAI,CAAC,iDAAiD,EAAE,cAAc,CAAC,CAAC;aACjF;YAED,uBAAuB;YACvB,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE;gBAC/C,KAAK;gBACL,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;gBACnC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;aACtC,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC5B;IACH,CAAC;IAED,UAAU,CAAC,IAAW;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,eAAe,CAAC,IAAW;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACvE,CAAC;IAED,WAAW,CAAC,IAAW;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAES,YAAY;QACpB,IAAI,IAAI,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;;YAC/B,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IAC3E,CAAC;CACF,CAAA;AAjJC;IAAC,KAAK,EAAE;;mDAAmB;AAC3B;IAAC,KAAK,EAAE;;qDAAyB;AAEjC;IAAC,MAAM,EAAE;;2DAA6C;AAX3C,gBAAgB;IAN5B,SAAS,CAAC;QACT,QAAQ,EAAE,wBAAwB;QAClC,WAAW,EAAE,2BAA2B;QACxC,SAAS,EAAE,CAAC,2BAA2B,CAAC;QACxC,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAoBY,QAAQ;QACU,4BAA4B;QACjC,kBAAkB;QACZ,iBAAiB;GAtBrC,gBAAgB,CAyJ5B;SAzJY,gBAAgB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/expense/typed-expense.validator.js b/out-tsc/app/app/trip/expense/typed-expense.validator.js new file mode 100644 index 000000000..d9310887e --- /dev/null +++ b/out-tsc/app/app/trip/expense/typed-expense.validator.js @@ -0,0 +1,49 @@ +import { __decorate } from "tslib"; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { Injectable } from '@angular/core'; +import { Validators } from '@angular/forms'; +import { SharedFormGroupValidators, SharedValidators } from '@sumaris-net/ngx-components'; +let TypedExpenseValidatorService = class TypedExpenseValidatorService extends MeasurementsValidatorService { + getFormGroupConfig(data, opts) { + return Object.assign(super.getFormGroupConfig(data, opts), { + amount: [null, Validators.compose([SharedValidators.decimal({ maxDecimals: 2 }), Validators.min(0)])], + packaging: [null, SharedValidators.entity] + }); + } + getFormGroupOptions(data, opts) { + return { + validators: this.getDefaultValidators() + }; + } + getDefaultValidators() { + return [ + SharedFormGroupValidators.requiredIf('packaging', 'amount'), + SharedFormGroupValidators.requiredIf('amount', 'packaging'), + ]; + } + updateFormGroup(form, opts) { + super.updateFormGroup(form, opts); + // add formGroup validator for type requirement + const additionalValidators = []; + if (opts.typePmfm) { + additionalValidators.push(SharedFormGroupValidators.requiredIf(opts.typePmfm.id.toString(), 'amount')); + if (opts.totalPmfm) { + additionalValidators.push(SharedFormGroupValidators.requiredIf(opts.typePmfm.id.toString(), opts.totalPmfm.id.toString())); + } + } + if (additionalValidators.length) { + form.setValidators(this.getDefaultValidators().concat(...additionalValidators)); + } + } + fillDefaultOptions(opts) { + opts = super.fillDefaultOptions(opts); + // add expense fields as protected attributes + opts.protectedAttributes.push('amount', 'packaging'); + return opts; + } +}; +TypedExpenseValidatorService = __decorate([ + Injectable({ providedIn: 'root' }) +], TypedExpenseValidatorService); +export { TypedExpenseValidatorService }; +//# sourceMappingURL=typed-expense.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/expense/typed-expense.validator.js.map b/out-tsc/app/app/trip/expense/typed-expense.validator.js.map new file mode 100644 index 000000000..cb2cab161 --- /dev/null +++ b/out-tsc/app/app/trip/expense/typed-expense.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"typed-expense.validator.js","sourceRoot":"","sources":["../../../../../src/app/trip/expense/typed-expense.validator.ts"],"names":[],"mappings":";AAAA,OAAO,EAA+B,4BAA4B,EAAC,MAAM,6CAA6C,CAAC;AACvH,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAwD,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAEjG,OAAO,EAAC,yBAAyB,EAAE,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AASjF,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,4BAAuE;IAEvH,kBAAkB,CAAC,IAAmB,EAAE,IAAmC;QACzE,OAAO,MAAM,CAAC,MAAM,CAClB,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,EACpC;YACE,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAC,WAAW,EAAE,CAAC,EAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnG,SAAS,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC;SAC3C,CACF,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,IAAoB,EAAE,IAAmC;QAC3E,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,oBAAoB,EAAE;SACxC,CAAC;IACJ,CAAC;IAED,oBAAoB;QAClB,OAAO;YACL,yBAAyB,CAAC,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC;YAC3D,yBAAyB,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC;SAC5D,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,IAAsB,EAAE,IAAmC;QACzE,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAElC,+CAA+C;QAC/C,MAAM,oBAAoB,GAAkB,EAAE,CAAC;QAC/C,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,oBAAoB,CAAC,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;YACvG,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,oBAAoB,CAAC,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;aAC5H;SACF;QACD,IAAI,oBAAoB,CAAC,MAAM,EAAE;YAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC;SACjF;IACH,CAAC;IAES,kBAAkB,CAAC,IAAmC;QAC9D,IAAI,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAEtC,6CAA6C;QAC7C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAErD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAjDY,4BAA4B;IADxC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;GACpB,4BAA4B,CAiDxC;SAjDY,4BAA4B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landedtrip/landed-trip.module.js b/out-tsc/app/app/trip/landedtrip/landed-trip.module.js new file mode 100644 index 000000000..78d9bde56 --- /dev/null +++ b/out-tsc/app/app/trip/landedtrip/landed-trip.module.js @@ -0,0 +1,47 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { TranslateModule } from '@ngx-translate/core'; +import { LandedTripPage } from '@app/trip/landedtrip/landed-trip.page'; +import { AppDataModule } from '@app/data/data.module'; +import { AppFishingAreaModule } from '@app/data/fishing-area/fishing-area.module'; +import { AppSaleModule } from '@app/trip/sale/sale.module'; +import { AppExpenseModule } from '@app/trip/expense/expense.module'; +import { AppOperationGroupModule } from '@app/trip/operationgroup/operation-group.module'; +import { AppProductModule } from '@app/trip/product/product.module'; +import { AppPacketModule } from '@app/trip/packet/packet.module'; +import { AppTripModule } from '@app/trip/trip/trip.module'; +import { AppMeasurementModule } from '@app/data/measurement/measurement.module'; +import { AppCoreModule } from '@app/core/core.module'; +let AppLandedTripModule = class AppLandedTripModule { + constructor() { + console.debug('[landing-trip] Creating module...'); + } +}; +AppLandedTripModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + AppDataModule, + TranslateModule.forChild(), + // Functional modules + AppTripModule, + AppMeasurementModule, + AppFishingAreaModule, + AppExpenseModule, + AppSaleModule, + AppOperationGroupModule, + AppProductModule, + AppPacketModule + ], + declarations: [ + LandedTripPage + ], + exports: [ + // Components + LandedTripPage + ] + }), + __metadata("design:paramtypes", []) +], AppLandedTripModule); +export { AppLandedTripModule }; +//# sourceMappingURL=landed-trip.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landedtrip/landed-trip.module.js.map b/out-tsc/app/app/trip/landedtrip/landed-trip.module.js.map new file mode 100644 index 000000000..06fde39f0 --- /dev/null +++ b/out-tsc/app/app/trip/landedtrip/landed-trip.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"landed-trip.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/landedtrip/landed-trip.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AA2B/C,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAE9B;QACE,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACrD,CAAC;CACF,CAAA;AALY,mBAAmB;IAxB/B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAE1B,qBAAqB;YACrB,aAAa;YACb,oBAAoB;YACpB,oBAAoB;YACpB,gBAAgB;YAChB,aAAa;YACb,uBAAuB;YACvB,gBAAgB;YAChB,eAAe;SAChB;QACD,YAAY,EAAE;YACZ,cAAc;SACf;QACD,OAAO,EAAE;YACP,aAAa;YACb,cAAc;SACf;KACF,CAAC;;GACW,mBAAmB,CAK/B;SALY,mBAAmB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landedtrip/landed-trip.page.js b/out-tsc/app/app/trip/landedtrip/landed-trip.page.js new file mode 100644 index 000000000..889ad50ad --- /dev/null +++ b/out-tsc/app/app/trip/landedtrip/landed-trip.page.js @@ -0,0 +1,672 @@ +var LandedTripPage_1; +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, ViewChild } from '@angular/core'; +import { MeasurementsForm } from '@app/data/measurement/measurements.form.component'; +import { AcquisitionLevelCodes, SaleTypeIds } from '@app/referential/services/model/model.enum'; +import { AppRootDataEntityEditor } from '@app/data/form/root-data-editor.class'; +import { UntypedFormBuilder } from '@angular/forms'; +import { AccountService, DateUtils, EntitiesStorage, fadeInOutAnimation, isEmptyArray, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, NetworkService, } from '@sumaris-net/ngx-components'; +import { TripForm } from '../trip/trip.form'; +import { BehaviorSubject, firstValueFrom } from 'rxjs'; +import { ObservedLocationService } from '../observedlocation/observed-location.service'; +import { VesselSnapshotService } from '@app/referential/services/vessel-snapshot.service'; +import { OperationGroupTable } from '../operationgroup/operation-groups.table'; +import { MatTabGroup } from '@angular/material/tabs'; +import { ProductsTable } from '../product/products.table'; +import { ProductFilter, ProductUtils } from '../product/product.model'; +import { PacketsTable } from '../packet/packets.table'; +import { PacketFilter } from '../packet/packet.model'; +import { Trip } from '../trip/trip.model'; +import { fillRankOrder, isRankOrderValid } from '@app/data/services/model/model.utils'; +import { SaleProductUtils } from '../sale/sale-product.model'; +import { debounceTime, filter, first } from 'rxjs/operators'; +import { ExpenseForm } from '../expense/expense.form'; +import { FishingAreaForm } from '@app/data/fishing-area/fishing-area.form'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { Landing } from '../landing/landing.model'; +import { environment } from '@environments/environment'; +import { ExpectedSaleForm } from '@app/trip/sale/expected-sale.form'; +import { LandingService } from '@app/trip/landing/landing.service'; +import { LandedTripService } from '@app/trip/landedtrip/landed-trip.service'; +import moment from 'moment'; +import { APP_DATA_ENTITY_EDITOR } from '@app/data/form/data-editor.utils'; +let LandedTripPage = LandedTripPage_1 = class LandedTripPage extends AppRootDataEntityEditor { + constructor(injector, entities, dataService, observedLocationService, vesselService, landingService, accountService, network, // Used for DEV (to debug OFFLINE mode) + formBuilder) { + super(injector, Trip, dataService, { + pathIdAttribute: 'tripId', + tabCount: 5, + enableListenChanges: true, + }); + this.entities = entities; + this.dataService = dataService; + this.observedLocationService = observedLocationService; + this.vesselService = vesselService; + this.landingService = landingService; + this.accountService = accountService; + this.network = network; + this.formBuilder = formBuilder; + this.showOperationGroupTab = false; + this.showCatchTab = false; + this.showSaleTab = false; + this.showExpenseTab = false; + this.showCatchFilter = false; + // List of trip's metier, used to populate operation group's metier combobox + this.$metiers = new BehaviorSubject(null); + // List of trip's operation groups, use to populate product filter + this.$operationGroups = new BehaviorSubject(null); + this.$productFilter = new BehaviorSubject(undefined); + this.$packetFilter = new BehaviorSubject(undefined); + this.operationGroupAttributes = ['rankOrderOnPeriod', 'metier.label', 'metier.name']; + this.acquisitionLevel = AcquisitionLevelCodes.TRIP; + this.showCatchFilter = !this.mobile; + // FOR DEV ONLY ---- + this.debug = !environment.production; + } + ngOnInit() { + super.ngOnInit(); + this.catchFilterForm = this.formBuilder.group({ + operationGroup: [null], + }); + this.registerSubscription(this.catchFilterForm.valueChanges.subscribe(() => { + this.$productFilter.next(ProductFilter.fromParent(this.catchFilterForm.value.operationGroup)); + this.$packetFilter.next(PacketFilter.fromParent(this.catchFilterForm.value.operationGroup)); + })); + // Init operationGroupFilter combobox + this.tripForm.registerAutocompleteField('operationGroupFilter', { + showAllOnFocus: true, + items: this.$operationGroups, + attributes: this.operationGroupAttributes, + columnNames: ['REFERENTIAL.LABEL', 'REFERENTIAL.NAME'], + mobile: this.mobile, + }); + // Update available operation groups for catches forms + this.registerSubscription(this.operationGroupTable.dataSource.datasourceSubject + .pipe(debounceTime(400), filter(() => !this.loading)) + .subscribe((operationGroups) => this.$operationGroups.next(operationGroups))); + // Cascade refresh to operation tables + this.registerSubscription(this.onUpdateView.subscribe(() => { + this.operationGroupTable.onRefresh.emit(); + this.productsTable.onRefresh.emit(); + this.packetsTable.onRefresh.emit(); + this.expectedSaleForm.productsTable.onRefresh.emit(); + })); + // Read the selected tab index, from path query params + this.registerSubscription(this.route.queryParams.pipe(first()).subscribe((queryParams) => { + const tabIndex = (queryParams['tab'] && parseInt(queryParams['tab'])) || 0; + const subTabIndex = (queryParams['subtab'] && parseInt(queryParams['subtab'])) || 0; + // Update catch tab index + if (this.catchTabGroup && tabIndex === 2) { + this.catchTabGroup.selectedIndex = subTabIndex; + this.catchTabGroup.realignInkBar(); + } + // Update expenses tab group index + if (this.expenseForm && tabIndex === 4) { + this.expenseForm.selectedTabIndex = subTabIndex; + this.expenseForm.realignInkBar(); + } + })); + } + ngOnDestroy() { + super.ngOnDestroy(); + this.$metiers.unsubscribe(); + this.$operationGroups.unsubscribe(); + this.$productFilter.unsubscribe(); + this.$packetFilter.unsubscribe(); + } + onTabChange(event, queryParamName) { + var _a, _b, _c; + const changed = super.onTabChange(event, queryParamName); + if (changed) { + // Force sub-tabgroup realign + switch (this.selectedTabIndex) { + case LandedTripPage_1.TABS.CATCH: + (_a = this.catchTabGroup) === null || _a === void 0 ? void 0 : _a.realignInkBar(); + break; + case LandedTripPage_1.TABS.EXPENSE: + (_b = this.expenseForm) === null || _b === void 0 ? void 0 : _b.realignInkBar(); + break; + } + // - Force row confirmation, and force sub-tabgroup realign + if ((_c = this.operationGroupTable) === null || _c === void 0 ? void 0 : _c.dirty) + this.operationGroupTable.save(); + this.markForCheck(); + } + return changed; + } + registerForms() { + this.addChildForms([ + this.tripForm, + this.measurementsForm, + this.fishingAreaForm, + this.expenseForm, + this.expectedSaleForm, + this.operationGroupTable, + this.productsTable, + this.packetsTable, + ]); + } + setProgram(program) { + return __awaiter(this, void 0, void 0, function* () { + if (!program) + return; // Skip + if (this.debug) + console.debug(`[landedTrip] Program ${program.label} loaded, with properties: `, program.properties); + // Configure trip form + this.tripForm.showObservers = program.getPropertyAsBoolean(ProgramProperties.TRIP_OBSERVERS_ENABLE); + if (!this.tripForm.showObservers) { + // make sure to reset data observers, if any + if (this.data) + this.data.observers = []; + } + this.tripForm.showMetiers = program.getPropertyAsBoolean(ProgramProperties.TRIP_METIERS_ENABLE); + if (!this.tripForm.showMetiers) { + // make sure to reset data metiers, if any + if (this.data) + this.data.metiers = []; + } + else { + this.tripForm.metiersForm.valueChanges.subscribe((value) => { + const metiers = (value || []).filter((metier) => isNotNilOrBlank(metier)); + if (JSON.stringify(metiers) !== JSON.stringify(this.$metiers.value || [])) { + if (this.debug) + console.debug('[landedTrip-page] metiers array has changed', metiers); + this.$metiers.next(metiers); + } + }); + } + // Configure fishing area form + this.fishingAreaForm.locationLevelIds = program.getPropertyAsNumbers(ProgramProperties.LANDED_TRIP_FISHING_AREA_LOCATION_LEVEL_IDS); + this.markAsReady(); + }); + } + load(id, options) { + const _super = Object.create(null, { + load: { get: () => super.load } + }); + return __awaiter(this, void 0, void 0, function* () { + this.observedLocationId = (options && options.observedLocationId) || this.observedLocationId; + this.defaultBackHref = `/observations/${this.observedLocationId}?tab=1`; + return _super.load.call(this, id, Object.assign({ isLandedTrip: true }, options)); + }); + } + onNewEntity(data, options) { + return __awaiter(this, void 0, void 0, function* () { + // DEBUG + //console.debug(options); + // Read options and query params + if (options && options.observedLocationId) { + console.debug('[landedTrip-page] New entity: settings defaults...'); + this.observedLocationId = parseInt(options.observedLocationId); + const observedLocation = yield this.getObservedLocationById(this.observedLocationId); + // Fill default values + if (observedLocation) { + data.observedLocationId = observedLocation.id; + // program + data.program = observedLocation.program; + this.programLabel = data.program.label; + // location + const location = observedLocation.location; + data.departureLocation = location; + data.returnLocation = location; + // observers + if (!isEmptyArray(observedLocation.observers)) { + data.observers = observedLocation.observers; + } + // Synchronization status + if (observedLocation.synchronizationStatus && observedLocation.synchronizationStatus !== 'SYNC') { + data.synchronizationStatus = 'DIRTY'; + } + } + } + else { + throw new Error('[landedTrip-page] the observedLocationId must be present'); + } + const queryParams = this.route.snapshot.queryParams; + // Load the vessel, if any + if (isNotNil(queryParams['vessel'])) { + const vesselId = +queryParams['vessel']; + console.debug(`[landedTrip-page] Loading vessel {${vesselId}}...`); + data.vesselSnapshot = yield this.vesselService.load(vesselId, { fetchPolicy: 'cache-first' }); + } + // Get the landing id + if (isNotNil(queryParams['landing'])) { + const landingId = +queryParams['landing']; + console.debug(`[landedTrip-page] Get landing id {${landingId}}...`); + if (data.landing) { + data.landing.id = landingId; + } + else { + data.landing = Landing.fromObject({ id: landingId }); + } + } + // Get the landing rankOrder + if (isNotNil(queryParams['rankOrder'])) { + const landingRankOrder = +queryParams['rankOrder']; + console.debug(`[landedTrip-page] Get landing rank order {${landingRankOrder}}...`); + if (data.landing) { + data.landing.rankOrderOnVessel = landingRankOrder; + } + else { + data.landing = Landing.fromObject({ rankOrder: landingRankOrder }); + } + } + if (this.isOnFieldMode) { + // Default start date to 00:00 (locale) - otherwise + data.departureDateTime = DateUtils.markNoTime(DateUtils.resetTime(moment())); + // Default end date to now + data.returnDateTime = moment(); + if (isEmptyArray(data.observers)) { + const user = this.accountService.account.asPerson(); + data.observers.push(user); + } + } + }); + } + onEntityLoaded(data, options) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + // program + const programLabel = (_a = data.program) === null || _a === void 0 ? void 0 : _a.label; + if (programLabel) + this.programLabel = programLabel; + this.$metiers.next(data.metiers); + this.productSalePmfms = yield this.programRefService.loadProgramPmfms(data.program.label, { + acquisitionLevel: AcquisitionLevelCodes.PRODUCT_SALE, + }); + }); + } + getObservedLocationById(observedLocationId) { + return __awaiter(this, void 0, void 0, function* () { + // Load parent observed location + if (isNotNil(observedLocationId)) { + console.debug(`[landedTrip-page] Loading parent observed location ${observedLocationId}...`); + return this.observedLocationService.load(observedLocationId, { fetchPolicy: 'cache-first' }); + } + else { + throw new Error('No parent found in path. landed trip without parent not implemented yet !'); + } + }); + } + updateViewState(data) { + super.updateViewState(data); + if (this.isNewData) { + this.hideTabs(); + } + else { + this.showTabs(); + } + } + showTabs() { + this.showOperationGroupTab = true; + this.showCatchTab = true; + this.showSaleTab = true; + this.showExpenseTab = true; + } + hideTabs() { + this.showOperationGroupTab = false; + this.showCatchTab = false; + this.showSaleTab = false; + this.showExpenseTab = false; + } + setValue(data) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + // Set data to form + const formPromise = this.tripForm.setValue(data, { emitEvent: true }); + // Fishing area + this.fishingAreaForm.value = ((_a = data.fishingAreas) === null || _a === void 0 ? void 0 : _a[0]) || {}; + // Trip measurements todo filter ???????? + const tripMeasurements = data.measurements || []; + this.measurementsForm.value = tripMeasurements; + // Expenses + this.expenseForm.markAsReady(); + this.expenseForm.value = tripMeasurements; + yield this.expenseForm.ready(); + // Operations table + const operationGroups = data.operationGroups || []; + let allProducts = []; + let allPackets = []; + // Iterate over operation groups to collect products, samples and packets + operationGroups.forEach((operationGroup) => { + // gather gear measurements + const gear = (data.gears || []).find((g) => g.id === operationGroup.physicalGearId); + if (gear) { + operationGroup.measurementValues = Object.assign(Object.assign({}, gear.measurementValues), operationGroup.measurementValues); + } + // collect all operation group's samples and dispatch to products + const products = operationGroup.products || []; + if (isNotEmptyArray(operationGroup.samples)) { + products.forEach((product) => { + product.samples = operationGroup.samples.filter((sample) => ProductUtils.isSampleOfProduct(product, sample)); + }); + } + // collect all operation group's products (with related samples) + allProducts = allProducts.concat(products); + // collect all operation group's packets + allPackets = allPackets.concat(operationGroup.packets); + }); + // Fix products and packets rank orders (reset if rank order are invalid, ie. from SIH) + if (!isRankOrderValid(allProducts)) + fillRankOrder(allProducts); + if (!isRankOrderValid(allPackets)) + fillRankOrder(allPackets); + // Send Expected Sale to the expected sale form + this.expectedSaleForm.markAsReady(); + this.expectedSaleForm.value = data.expectedSale; + yield this.expectedSaleForm.ready(); + // Dispatch product and packet sales + if (this.productSalePmfms && isNotEmptyArray((_b = data.expectedSale) === null || _b === void 0 ? void 0 : _b.products)) { + // First, reset products and packets sales + allProducts.forEach((product) => (product.saleProducts = [])); + allPackets.forEach((packet) => (packet.saleProducts = [])); + data.expectedSale.products.forEach((saleProduct) => { + if (isNil(saleProduct.batchId)) { + // = product + const productFound = allProducts.find((product) => SaleProductUtils.isSaleOfProduct(product, saleProduct, this.productSalePmfms)); + if (productFound) { + productFound.saleProducts.push(saleProduct); + } + } + else { + // = packet + const packetFound = allPackets.find((packet) => SaleProductUtils.isSaleOfPacket(packet, saleProduct)); + if (packetFound) { + packetFound.saleProducts.push(saleProduct); + } + } + }); + // need fill products.saleProducts.rankOrder + allProducts.forEach((p) => fillRankOrder(p.saleProducts)); + } + this.operationGroupTable.value = operationGroups; + this.$operationGroups.next(operationGroups); + // Products table + this.productsTable.value = allProducts; + // Packets table + this.packetsTable.value = allPackets; + yield formPromise; + }); + } + onEntitySaved(data) { + return __awaiter(this, void 0, void 0, function* () { + if (data.landing && data.id < 0) { + yield this.landingService.save(data.landing); + } + }); + } + enable(opts) { + const enabled = super.enable(opts); + // Leave program & vessel controls disabled + this.form.get('program').disable(opts); + this.form.get('vesselSnapshot').disable(opts); + return enabled; + } + devToggleOfflineMode() { + if (this.network.offline) { + this.network.setForceOffline(false); + } + else { + this.network.setForceOffline(); + } + } + copyLocally() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.data) + return; + // Copy the trip + yield this.dataService.copyLocallyById(this.data.id, { isLandedTrip: true, withOperationGroup: true, displaySuccessToast: true }); + }); + } + canUserWrite(data, opts) { + // TODO: check observedLocation validationDate ? + return super.canUserWrite(data, opts); + } + /* -- protected methods -- */ + get form() { + return this.tripForm.form; + } + computeUsageMode(data) { + return this.settings.isUsageMode('FIELD') || data.synchronizationStatus === 'DIRTY' ? 'FIELD' : 'DESK'; + } + /** + * Compute the title + * + * @param data + */ + computeTitle(data) { + return __awaiter(this, void 0, void 0, function* () { + // new data + if (!data || isNil(data.id)) { + return yield firstValueFrom(this.translate.get('TRIP.NEW.TITLE')); + } + // Existing data + return yield firstValueFrom(this.translate.get('TRIP.EDIT.TITLE', { + vessel: data.vesselSnapshot && (data.vesselSnapshot.exteriorMarking || data.vesselSnapshot.name), + departureDateTime: data.departureDateTime && this.dateFormat.transform(data.departureDateTime), + })); + }); + } + computePageHistory(title) { + const _super = Object.create(null, { + computePageHistory: { get: () => super.computePageHistory } + }); + return __awaiter(this, void 0, void 0, function* () { + return Object.assign(Object.assign({}, (yield _super.computePageHistory.call(this, title))), { icon: 'boat' }); + }); + } + /** + * Called by super.save() + */ + getJsonValueToSave() { + const _super = Object.create(null, { + getJsonValueToSave: { get: () => super.getJsonValueToSave } + }); + var _a, _b, _c; + return __awaiter(this, void 0, void 0, function* () { + const json = yield _super.getJsonValueToSave.call(this); + // parent link + json.landing = + (this.data && this.data.landing && { id: this.data.landing.id, rankOrderOnVessel: this.data.landing.rankOrderOnVessel }) || undefined; + json.observedLocationId = this.data && this.data.observedLocationId; + // recopy vesselSnapshot (disabled control) + json.vesselSnapshot = this.data && this.data.vesselSnapshot; + // Concat trip and expense measurements + json.measurements = (this.measurementsForm.value || []).concat(this.expenseForm.value); + // FishingArea (only if not empty AND with a location) + const fishingAreaJson = this.fishingAreaForm.value; + json.fishingAreas = fishingAreaJson ? [fishingAreaJson] : []; + const operationGroups = this.operationGroupTable.value || []; + // Get products and packets + const products = this.productsTable.value || []; + const packets = this.packetsTable.value || []; + // Restore expectedSale + json.expectedSale = (_a = this.expectedSaleForm.value) === null || _a === void 0 ? void 0 : _a.asObject(); + if (!json.expectedSale || !json.expectedSale.saleType) { + // Create a expectedSale object if any sale product or measurement found + if (products.find((product) => isNotEmptyArray(product.saleProducts)) || + packets.find((packet) => isNotEmptyArray(packet.saleProducts)) || + ((_c = (_b = json.expectedSale) === null || _b === void 0 ? void 0 : _b.measurements) === null || _c === void 0 ? void 0 : _c.length)) { + json.expectedSale = { + saleType: { id: SaleTypeIds.OTHER }, + }; + } + } + if (json.expectedSale) { + // Update sale date + json.expectedSale.saleDate = json.returnDateTime; + // Gather all sale products + const saleProducts = []; + products.forEach((product) => isNotEmptyArray(product.saleProducts) && saleProducts.push(...product.saleProducts)); + packets.forEach((packet) => { + if (isNotEmptyArray(packet.saleProducts)) { + packet.saleProducts.forEach((saleProduct) => { + // Affect batchId (= packet.id) + saleProduct.batchId = packet.id; + }); + saleProducts.push(...packet.saleProducts); + } + }); + json.expectedSale.products = saleProducts; + } + // Affect in each operation group : products, samples and packets + operationGroups.forEach((operationGroup) => { + operationGroup.products = products.filter((product) => operationGroup.equals(product.parent)); + let samples = []; + (operationGroup.products || []).forEach((product) => (samples = samples.concat(product.samples || []))); + operationGroup.samples = samples; + operationGroup.packets = packets.filter((packet) => operationGroup.equals(packet.parent)); + }); + json.operationGroups = operationGroups; + json.gears = operationGroups.map((operationGroup) => { + if (operationGroup.physicalGearId) { + // find and update trip's gear + const gear = this.data.gears.find((value) => value.id === operationGroup.physicalGearId); + if (!gear) { + throw new Error(`Can't find trip's gear with id=${operationGroup.physicalGearId}`); + } + return Object.assign(Object.assign({}, gear), { rankOrder: operationGroup.rankOrderOnPeriod }); + } + else { + // create new + return { + id: operationGroup.physicalGearId, + rankOrder: operationGroup.rankOrderOnPeriod, + gear: operationGroup.metier.gear, + }; + } + }); + return json; + }); + } + save(event, options) { + const _super = Object.create(null, { + save: { get: () => super.save } + }); + return __awaiter(this, void 0, void 0, function* () { + const saveOptions = { + withLanding: true, // indicate service to reload with LandedTrip query + }; + // Save children in-memory datasources + if (this.productsTable.dirty) { + yield this.productsTable.save(); + this.operationGroupTable.markAsDirty(); + } + if (this.packetsTable.dirty) { + yield this.packetsTable.save(); + this.operationGroupTable.markAsDirty(); + } + if (this.operationGroupTable.dirty) { + yield this.operationGroupTable.save(); + this.operationGroupTable.markAsDirty(); + saveOptions.withOperationGroup = true; + } + // Wait end of save + yield this.waitIdle({ timeout: 2000 }); + // todo same for other tables + return _super.save.call(this, event, Object.assign(Object.assign({}, options), saveOptions)); + }); + } + onNewFabButtonClick(event) { + if (this.showOperationGroupTab && this.selectedTabIndex === 1) { + this.operationGroupTable.addRow(event); + } + else if (this.showCatchTab && this.selectedTabIndex === 2) { + switch (this.catchTabGroup.selectedIndex) { + case 0: + this.productsTable.addRow(event); + break; + case 1: + this.packetsTable.addRow(event); + break; + } + } + } + /** + * Get the first invalid tab + */ + getFirstInvalidTabIndex() { + const invalidTabs = [ + this.tripForm.invalid || this.measurementsForm.invalid, + this.operationGroupTable.invalid, + this.productsTable.invalid || this.packetsTable.invalid, + this.expectedSaleForm.invalid, + this.expenseForm.invalid, + ]; + return invalidTabs.indexOf(true); + } + computePageUrl(id) { + const parentUrl = this.getParentPageUrl(); + return `${parentUrl}/trip/${id}`; + } + markForCheck() { + this.cd.markForCheck(); + } + filter($event) { + console.debug('[landed-trip.page] filter : ', $event); + } +}; +LandedTripPage.TABS = { + GENERAL: 0, + OPERATION_GROUP: 1, + CATCH: 2, + SALE: 3, + EXPENSE: 4, +}; +__decorate([ + ViewChild('tripForm', { static: true }), + __metadata("design:type", TripForm) +], LandedTripPage.prototype, "tripForm", void 0); +__decorate([ + ViewChild('measurementsForm', { static: true }), + __metadata("design:type", MeasurementsForm) +], LandedTripPage.prototype, "measurementsForm", void 0); +__decorate([ + ViewChild('fishingAreaForm', { static: true }), + __metadata("design:type", FishingAreaForm) +], LandedTripPage.prototype, "fishingAreaForm", void 0); +__decorate([ + ViewChild('operationGroupTable', { static: true }), + __metadata("design:type", OperationGroupTable) +], LandedTripPage.prototype, "operationGroupTable", void 0); +__decorate([ + ViewChild('productsTable', { static: true }), + __metadata("design:type", ProductsTable) +], LandedTripPage.prototype, "productsTable", void 0); +__decorate([ + ViewChild('packetsTable', { static: true }), + __metadata("design:type", PacketsTable) +], LandedTripPage.prototype, "packetsTable", void 0); +__decorate([ + ViewChild('expectedSaleForm', { static: true }), + __metadata("design:type", ExpectedSaleForm) +], LandedTripPage.prototype, "expectedSaleForm", void 0); +__decorate([ + ViewChild('expenseForm', { static: true }), + __metadata("design:type", ExpenseForm) +], LandedTripPage.prototype, "expenseForm", void 0); +__decorate([ + ViewChild('catchTabGroup', { static: true }), + __metadata("design:type", MatTabGroup) +], LandedTripPage.prototype, "catchTabGroup", void 0); +LandedTripPage = LandedTripPage_1 = __decorate([ + Component({ + selector: 'app-landed-trip-page', + templateUrl: './landed-trip.page.html', + styleUrls: ['./landed-trip.page.scss'], + animations: [fadeInOutAnimation], + providers: [{ provide: APP_DATA_ENTITY_EDITOR, useExisting: LandedTripPage_1 }], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + EntitiesStorage, + LandedTripService, + ObservedLocationService, + VesselSnapshotService, + LandingService, + AccountService, + NetworkService, + UntypedFormBuilder]) +], LandedTripPage); +export { LandedTripPage }; +//# sourceMappingURL=landed-trip.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landedtrip/landed-trip.page.js.map b/out-tsc/app/app/trip/landedtrip/landed-trip.page.js.map new file mode 100644 index 000000000..0bddbcabc --- /dev/null +++ b/out-tsc/app/app/trip/landedtrip/landed-trip.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"landed-trip.page.js","sourceRoot":"","sources":["../../../../../src/app/trip/landedtrip/landed-trip.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landedtrip/landed-trip.service.js b/out-tsc/app/app/trip/landedtrip/landed-trip.service.js new file mode 100644 index 000000000..93c598413 --- /dev/null +++ b/out-tsc/app/app/trip/landedtrip/landed-trip.service.js @@ -0,0 +1,56 @@ +import { __decorate, __metadata, __param } from "tslib"; +import { Injectable, Injector, Optional } from '@angular/core'; +import { EntitiesStorage, FormErrorTranslator, GraphqlService, LocalSettingsService, NetworkService, PersonService } from '@sumaris-net/ngx-components'; +import { OperationService } from '../operation/operation.service'; +import { VesselSnapshotService } from '@app/referential/services/vessel-snapshot.service'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { TripValidatorService } from '../trip/trip.validator'; +import { TranslateService } from '@ngx-translate/core'; +import { ToastController } from '@ionic/angular'; +import { TrashRemoteService } from '@app/core/services/trash-remote.service'; +import { PhysicalGearService } from '@app/trip/physicalgear/physicalgear.service'; +import { TripService } from '@app/trip/trip/trip.service'; +import { UserEventService } from '@app/social/user-event/user-event.service'; +let LandedTripService = class LandedTripService extends TripService { + constructor(injector, graphql, network, referentialRefService, vesselSnapshotService, personService, entities, operationService, physicalGearService, settings, validatorService, trashRemoteService, formErrorTranslator, userEventService, translate, toastController) { + super(injector, graphql, network, referentialRefService, vesselSnapshotService, personService, entities, operationService, physicalGearService, settings, validatorService, trashRemoteService, formErrorTranslator, userEventService, translate, toastController); + this.graphql = graphql; + this.network = network; + this.referentialRefService = referentialRefService; + this.vesselSnapshotService = vesselSnapshotService; + this.personService = personService; + this.entities = entities; + this.operationService = operationService; + this.physicalGearService = physicalGearService; + this.settings = settings; + this.validatorService = validatorService; + this.trashRemoteService = trashRemoteService; + this.formErrorTranslator = formErrorTranslator; + this.userEventService = userEventService; + this.translate = translate; + this.toastController = toastController; + } +}; +LandedTripService = __decorate([ + Injectable({ providedIn: 'root' }), + __param(14, Optional()), + __param(15, Optional()), + __metadata("design:paramtypes", [Injector, + GraphqlService, + NetworkService, + ReferentialRefService, + VesselSnapshotService, + PersonService, + EntitiesStorage, + OperationService, + PhysicalGearService, + LocalSettingsService, + TripValidatorService, + TrashRemoteService, + FormErrorTranslator, + UserEventService, + TranslateService, + ToastController]) +], LandedTripService); +export { LandedTripService }; +//# sourceMappingURL=landed-trip.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landedtrip/landed-trip.service.js.map b/out-tsc/app/app/trip/landedtrip/landed-trip.service.js.map new file mode 100644 index 000000000..0ad67bc51 --- /dev/null +++ b/out-tsc/app/app/trip/landedtrip/landed-trip.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"landed-trip.service.js","sourceRoot":"","sources":["../../../../../src/app/trip/landedtrip/landed-trip.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAc,mBAAmB,EAAE,cAAc,EAAE,oBAAoB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACpK,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAwB,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAGtE,IAAM,iBAAiB,GAAvB,MAAM,iBACX,SAAQ,WAAW;IAGnB,YACE,QAAkB,EACR,OAAuB,EACvB,OAAuB,EACvB,qBAA4C,EAC5C,qBAA4C,EAC5C,aAA4B,EAC5B,QAAyB,EACzB,gBAAkC,EAClC,mBAAwC,EACxC,QAA8B,EAC9B,gBAAsC,EACtC,kBAAsC,EACtC,mBAAwC,EACxC,gBAAkC,EACtB,SAA2B,EAC3B,eAAgC;QAEtD,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,aAAa,EAC3F,QAAQ,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,EAC3E,kBAAkB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QAlB/E,YAAO,GAAP,OAAO,CAAgB;QACvB,YAAO,GAAP,OAAO,CAAgB;QACvB,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,kBAAa,GAAb,aAAa,CAAe;QAC5B,aAAQ,GAAR,QAAQ,CAAiB;QACzB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,wBAAmB,GAAnB,mBAAmB,CAAqB;QACxC,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,qBAAgB,GAAhB,gBAAgB,CAAsB;QACtC,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,wBAAmB,GAAnB,mBAAmB,CAAqB;QACxC,qBAAgB,GAAhB,gBAAgB,CAAkB;QACtB,cAAS,GAAT,SAAS,CAAkB;QAC3B,oBAAe,GAAf,eAAe,CAAiB;IAKxD,CAAC;CACF,CAAA;AA1BY,iBAAiB;IAD7B,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;IAoB5B,YAAA,QAAQ,EAAE,CAAA;IACV,YAAA,QAAQ,EAAE,CAAA;qCAfD,QAAQ;QACC,cAAc;QACd,cAAc;QACA,qBAAqB;QACrB,qBAAqB;QAC7B,aAAa;QAClB,eAAe;QACP,gBAAgB;QACb,mBAAmB;QAC9B,oBAAoB;QACZ,oBAAoB;QAClB,kBAAkB;QACjB,mBAAmB;QACtB,gBAAgB;QACX,gBAAgB;QACV,eAAe;GApB7C,iBAAiB,CA0B7B;SA1BY,iBAAiB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/auction-control/auction-control-routing.module.js b/out-tsc/app/app/trip/landing/auction-control/auction-control-routing.module.js new file mode 100644 index 000000000..b5404b80d --- /dev/null +++ b/out-tsc/app/app/trip/landing/auction-control/auction-control-routing.module.js @@ -0,0 +1,47 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { AppAuctionControlModule } from './auction-control.module'; +import { AuctionControlPage } from './auction-control.page'; +import { ComponentDirtyGuard } from '@sumaris-net/ngx-components'; +const routes = [ + { + path: ':controlId', + data: { + profile: 'USER', + pathIdParam: 'controlId' + }, + children: [ + { + path: '', + pathMatch: 'full', + runGuardsAndResolvers: 'pathParamsChange', + component: AuctionControlPage, + canDeactivate: [ComponentDirtyGuard], + data: { + profile: 'USER', + pathIdParam: 'controlId' + } + }, + { + path: 'report', + loadChildren: () => import('./report/auction-control-report-routing.module').then(m => m.AuctionControlReportRoutingModule) + } + ] + } +]; +let AppAuctionControlRoutingModule = class AppAuctionControlRoutingModule { +}; +AppAuctionControlRoutingModule = __decorate([ + NgModule({ + imports: [ + RouterModule.forChild(routes), + AppAuctionControlModule + ], + exports: [ + RouterModule + ] + }) +], AppAuctionControlRoutingModule); +export { AppAuctionControlRoutingModule }; +//# sourceMappingURL=auction-control-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/auction-control/auction-control-routing.module.js.map b/out-tsc/app/app/trip/landing/auction-control/auction-control-routing.module.js.map new file mode 100644 index 000000000..9b15f1c61 --- /dev/null +++ b/out-tsc/app/app/trip/landing/auction-control/auction-control-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"auction-control-routing.module.js","sourceRoot":"","sources":["../../../../../../src/app/trip/landing/auction-control/auction-control-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,WAAW;SACzB;QACD,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,EAAE;gBACR,SAAS,EAAE,MAAM;gBACjB,qBAAqB,EAAE,kBAAkB;gBACzC,SAAS,EAAE,kBAAkB;gBAC7B,aAAa,EAAE,CAAC,mBAAmB,CAAC;gBACpC,IAAI,EAAE;oBACJ,OAAO,EAAE,MAAM;oBACf,WAAW,EAAE,WAAW;iBACzB;aACF;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iCAAiC,CAAC;aAC5H;SACF;KACF;CACF,CAAC;AAYK,IAAM,8BAA8B,GAApC,MAAM,8BAA8B;CAC1C,CAAA;AADY,8BAA8B;IAT1C,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,uBAAuB;SACxB;QACD,OAAO,EAAE;YACP,YAAY;SACb;KACF,CAAC;GACW,8BAA8B,CAC1C;SADY,8BAA8B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/auction-control/auction-control.module.js b/out-tsc/app/app/trip/landing/auction-control/auction-control.module.js new file mode 100644 index 000000000..983790cf7 --- /dev/null +++ b/out-tsc/app/app/trip/landing/auction-control/auction-control.module.js @@ -0,0 +1,41 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { AuctionControlPage } from './auction-control.page'; +import { AppDataModule } from '@app/data/data.module'; +import { TranslateModule } from '@ngx-translate/core'; +import { VesselModule } from '@app/vessel/vessel.module'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppMeasurementModule } from '@app/data/measurement/measurement.module'; +import { AppSampleModule } from '@app/trip/sample/sample.module'; +import { AppLandingModule } from '@app/trip/landing/landing.module'; +let AppAuctionControlModule = class AppAuctionControlModule { + constructor() { + console.debug('[auction-control] Creating module...'); + } +}; +AppAuctionControlModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + AppDataModule, + TranslateModule.forChild(), + // Functional modules + VesselModule, + AppReferentialModule, + AppMeasurementModule, + AppSampleModule, + AppLandingModule, + ], + declarations: [ + AuctionControlPage, + ], + exports: [ + // Components + AuctionControlPage, + ] + }), + __metadata("design:paramtypes", []) +], AppAuctionControlModule); +export { AppAuctionControlModule }; +//# sourceMappingURL=auction-control.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/auction-control/auction-control.module.js.map b/out-tsc/app/app/trip/landing/auction-control/auction-control.module.js.map new file mode 100644 index 000000000..24635ad8c --- /dev/null +++ b/out-tsc/app/app/trip/landing/auction-control/auction-control.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"auction-control.module.js","sourceRoot":"","sources":["../../../../../../src/app/trip/landing/auction-control/auction-control.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAwB7D,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAElC;QACE,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACxD,CAAC;CACF,CAAA;AALY,uBAAuB;IArBnC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAE1B,qBAAqB;YACrB,YAAY;YACZ,oBAAoB;YACpB,oBAAoB;YACpB,eAAe;YACf,gBAAgB;SACjB;QACD,YAAY,EAAE;YACZ,kBAAkB;SACnB;QACD,OAAO,EAAE;YACP,aAAa;YACb,kBAAkB;SACnB;KACF,CAAC;;GACW,uBAAuB,CAKnC;SALY,uBAAuB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/auction-control/auction-control.page.js b/out-tsc/app/app/trip/landing/auction-control/auction-control.page.js new file mode 100644 index 000000000..f0feb4a2e --- /dev/null +++ b/out-tsc/app/app/trip/landing/auction-control/auction-control.page.js @@ -0,0 +1,383 @@ +var AuctionControlPage_1; +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector } from '@angular/core'; +import { AcquisitionLevelCodes, LocationLevelIds, PmfmIds } from '@app/referential/services/model/model.enum'; +import { LandingPage } from '../landing.page'; +import { debounceTime, distinctUntilChanged, filter, map, mergeMap, startWith, switchMap, tap } from 'rxjs/operators'; +import { BehaviorSubject, firstValueFrom } from 'rxjs'; +import { Landing } from '../landing.model'; +import { AuctionControlValidators } from './auction-control.validators'; +import { ModalController } from '@ionic/angular'; +import { AppHelpModal, EntityUtils, fadeInOutAnimation, filterNotNil, firstNotNilPromise, isNil, isNotEmptyArray, isNotNil, isNumber, LocalSettingsService, ReferentialUtils, SharedValidators, toBoolean, toNumber, } from '@sumaris-net/ngx-components'; +import { ObservedLocation } from '../../observedlocation/observed-location.model'; +import { UntypedFormBuilder } from '@angular/forms'; +import { TaxonGroupLabels } from '@app/referential/services/model/taxon-group.model'; +import { PMFM_ID_REGEXP } from '@app/referential/services/model/pmfm.model'; +import { APP_DATA_ENTITY_EDITOR } from '@app/data/form/data-editor.utils'; +let AuctionControlPage = AuctionControlPage_1 = class AuctionControlPage extends LandingPage { + constructor(injector, settings, formBuilder, modalCtrl) { + super(injector, { + pathIdAttribute: 'controlId', + tabGroupAnimationDuration: '0s', + i18nPrefix: 'AUCTION_CONTROL.EDIT.', + }); + this.settings = settings; + this.formBuilder = formBuilder; + this.modalCtrl = modalCtrl; + this.$taxonGroupTypeId = new BehaviorSubject(null); + this.showOtherTaxonGroup = false; + this.$taxonGroupPmfm = new BehaviorSubject(null); + this.$taxonGroups = new BehaviorSubject(null); + this.showSamplesTable = false; + this.taxonGroupControl = this.formBuilder.control(null, [SharedValidators.entity]); + this.errorTranslatorOptions = { separator: '
', controlPathTranslator: this }; + } + ngOnInit() { + super.ngOnInit(); + // Default location levels ids + this.landingForm.locationLevelIds = [LocationLevelIds.AUCTION]; + // Configure sample table + this.samplesTable.inlineEdition = !this.mobile; + const taxonGroupAttributes = this.settings.getFieldDisplayAttributes('taxonGroup'); + this.landingForm.registerAutocompleteField('taxonGroup', { + suggestFn: (value, options) => this.suggestTaxonGroups(value, options), + columnSizes: taxonGroupAttributes.map((attr) => (attr === 'label' ? 3 : undefined)), + mobile: this.mobile, + }); + } + ngAfterViewInit() { + super.ngAfterViewInit(); + // Get program taxon groups + this.registerSubscription(this.programLabel$ + .pipe(filter(isNotNil), mergeMap((programLabel) => this.programRefService.loadTaxonGroups(programLabel))) + .subscribe((taxonGroups) => { + console.debug('[control] Program taxonGroups: ', taxonGroups); + this.$taxonGroups.next(taxonGroups); + })); + this._state.connect('pmfms', filterNotNil(this.$taxonGroups).pipe(switchMap(() => this.landingForm.pmfms$), filter(isNotNil), map((pmfms) => pmfms.map((pmfm) => { + // Controlled species PMFM + if (pmfm.id === PmfmIds.CONTROLLED_SPECIES || pmfm.label === 'TAXON_GROUP') { + console.debug(`[control] Replacing pmfm ${pmfm.label} qualitative values`); + this.controlledSpeciesPmfmId = pmfm.id; + const taxonGroups = this.$taxonGroups.getValue(); + if (isNotEmptyArray(taxonGroups) && isNotEmptyArray(pmfm.qualitativeValues)) { + pmfm = pmfm.clone(); // Clone (to keep unchanged the original pmfm) + // Replace QV.name + pmfm.qualitativeValues = pmfm.qualitativeValues.reduce((res, qv) => { + const taxonGroup = taxonGroups.find((tg) => tg.label === qv.label); + // If not found in strategy's taxonGroups: ignore + if (!taxonGroup) { + console.warn(`Ignore invalid QualitativeValue {label: ${qv.label}} (not found in taxon groups of the program ${this.landingForm.programLabel})`); + return res; + } + // Replace the QV name, using the taxon group name + qv.name = taxonGroup.name; + qv.entityName = taxonGroup.entityName || 'QualitativeValue'; + return res.concat(qv); + }, []); + } + else { + console.debug(`[control] No qualitative values to replace, or no taxon groups in the strategy`); + } + this.$taxonGroupPmfm.next(pmfm); + } + // Force other Pmfm to optional (if in on field) + else if (this.isOnFieldMode) { + pmfm = pmfm.clone(); // Skip original pmfm safe + pmfm.required = false; + } + return pmfm; + })))); + // Get the taxon group control + this.selectedTaxonGroup$ = this.$taxonGroupPmfm + .pipe(map((pmfm) => pmfm && this.form.get(`measurementValues.${pmfm.id}`)), filter(isNotNil), distinctUntilChanged(), switchMap((control) => control.valueChanges.pipe(startWith(control.value), debounceTime(250)))) + .pipe( + // Update the help content + tap((qv) => { + this.helpContent = (qv && qv.description) || null; + this.markForCheck(); + }), map((qv) => (ReferentialUtils.isNotEmpty(qv) && this.$taxonGroups.value.find((tg) => tg.label === qv.label)) || undefined)); + // Load pmfms + this.registerSubscription(this.selectedTaxonGroup$ + .pipe(filter(isNotNil), distinctUntilChanged((tg1, tg2) => EntityUtils.equals(tg1, tg2, 'id')), mergeMap((taxonGroup) => this.programRefService.watchProgramPmfms(this.programLabel, { + acquisitionLevel: AcquisitionLevelCodes.SAMPLE, + taxonGroupId: toNumber(taxonGroup && taxonGroup.id, undefined), + }))) + .subscribe((pmfms) => __awaiter(this, void 0, void 0, function* () { + // Save existing samples + if (this.samplesTable.dirty && !this.saving) { + yield this.samplesTable.save(); + } + // Applying new PMFMs + console.debug('[control] Applying taxon group PMFMs:', pmfms); + this.samplesTable.pmfms = pmfms; + }))); + // Update sample tables + this.registerSubscription(this.selectedTaxonGroup$.subscribe((taxonGroup) => { + if (taxonGroup && taxonGroup.label === TaxonGroupLabels.FISH) { + this.showOtherTaxonGroup = true; + const samples = this.samplesTable.value; + let sameTaxonGroup = (isNotEmptyArray(samples) && samples[0].taxonGroup) || null; + sameTaxonGroup = + (sameTaxonGroup && samples.findIndex((s) => !ReferentialUtils.equals(sameTaxonGroup, s.taxonGroup)) === -1 && sameTaxonGroup) || null; + this.taxonGroupControl.setValue(sameTaxonGroup); + this.showSamplesTable = true; + } + else { + this.showOtherTaxonGroup = false; + this.taxonGroupControl.setValue(taxonGroup); + } + })); + this.registerSubscription(this.taxonGroupControl.valueChanges.pipe(distinctUntilChanged(ReferentialUtils.equals)).subscribe((taxonGroup) => { + const hasTaxonGroup = ReferentialUtils.isNotEmpty(taxonGroup); + console.debug('[control] Selected taxon group:', taxonGroup); + this.samplesTable.defaultTaxonGroup = taxonGroup; + this.samplesTable.showTaxonGroupColumn = !hasTaxonGroup; + this.showSamplesTable = this.showSamplesTable || hasTaxonGroup; + this.markForCheck(); + })); + } + setProgram(program) { + const _super = Object.create(null, { + setProgram: { get: () => super.setProgram } + }); + return __awaiter(this, void 0, void 0, function* () { + if (!program) + return; // Skip + yield _super.setProgram.call(this, program); + // Configure landing form + this.landingForm.showLocation = false; + this.landingForm.showDateTime = false; + this.landingForm.showObservers = false; + this.$taxonGroupTypeId.next(program && program.taxonGroupType ? program.taxonGroupType.id : null); + }); + } + onEntityLoaded(data, options) { + const _super = Object.create(null, { + onEntityLoaded: { get: () => super.onEntityLoaded } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.onEntityLoaded.call(this, data, options); + // Send landing date time to sample tables, but leave empty if FIELD mode (= will use current date) + this.samplesTable.defaultSampleDate = this.isOnFieldMode ? undefined : data.dateTime; + // Always open the second tab, when existing entity + this.selectedTabIndex = 1; + this.tabGroup.realignInkBar(); + this.markForCheck(); + }); + } + updateView(data, opts) { + const _super = Object.create(null, { + updateView: { get: () => super.updateView } + }); + return __awaiter(this, void 0, void 0, function* () { + // if vessel given in query params + if (this.isNewData && this.route.snapshot.queryParams['vessel']) { + // Open the second tab + opts = Object.assign(Object.assign({}, opts), { openTabIndex: 1 }); + } + yield _super.updateView.call(this, data, opts); + }); + } + save(event, options) { + const _super = Object.create(null, { + save: { get: () => super.save } + }); + return __awaiter(this, void 0, void 0, function* () { + return _super.save.call(this, event, options); + }); + } + openHelpModal(event) { + return __awaiter(this, void 0, void 0, function* () { + event === null || event === void 0 ? void 0 : event.preventDefault(); + event === null || event === void 0 ? void 0 : event.stopPropagation(); + const modal = yield this.modalCtrl.create({ + component: AppHelpModal, + componentProps: { + title: this.translate.instant('COMMON.HELP.TITLE'), + markdownContent: this.helpContent, + }, + keyboardClose: true, + cssClass: 'modal-large', + }); + // Open the modal + yield modal.present(); + // Wait until closed + yield modal.onDidDismiss(); + }); + } + suggestTaxonGroups(value, options) { + return __awaiter(this, void 0, void 0, function* () { + let levelId = this.$taxonGroupTypeId.getValue(); + if (isNil(levelId)) { + console.debug('Waiting program taxon group type ids...'); + levelId = yield firstNotNilPromise(this.$taxonGroupTypeId, { stop: this.destroySubject }); + } + return this.referentialRefService.suggest(value, { + entityName: 'TaxonGroup', + levelId, + searchAttribute: options && options.searchAttribute, + excludedIds: (this.$taxonGroups.getValue() || []).map((tg) => tg && tg.id).filter(isNotNil), + }); + }); + } + getPmfmValueColor(pmfmValue, pmfm, data) { + var _a; + switch (pmfm.id) { + case PmfmIds.OUT_OF_SIZE_PCT: + if (isNotNil(pmfmValue)) { + if (+pmfmValue >= 15) + return 'danger'; + if (+pmfmValue >= 10) + return 'warning900'; + if (+pmfmValue >= 5) + return 'warning'; + return 'success'; + } + break; + case PmfmIds.COMPLIANT_PRODUCT: + if (toBoolean(pmfmValue) === false) { + return 'danger'; + } + else { + return 'success'; + } + case PmfmIds.INDIVIDUALS_DENSITY_PER_KG: + const auctionDensityCategory = (_a = data.measurementValues[PmfmIds.AUCTION_DENSITY_CATEGORY]) === null || _a === void 0 ? void 0 : _a.label; + if (isNotNil(pmfmValue) && auctionDensityCategory) { + const [min, max] = auctionDensityCategory.split(/[\\/|-]/, 2); + if (isNumber(min) && isNumber(max)) { + // Must be greater than the min and strictly lesser than the max + if (pmfmValue < min || pmfmValue >= max) { + return 'danger'; + } + else { + return 'success'; + } + } + } + break; + } + return null; + } + translateControlPath(controlPath) { + // Redirect pmfm control path, to the landing form + if (PMFM_ID_REGEXP.test(controlPath)) { + controlPath = `measurementValues.${controlPath}`; + } + return this.landingForm.translateControlPath(controlPath); + } + /* -- protected method -- */ + setValue(data) { + const _super = Object.create(null, { + setValue: { get: () => super.setValue } + }); + return __awaiter(this, void 0, void 0, function* () { + // Clean invalid sample label + (data.samples || []).forEach((sample) => { + var _a; + if ((_a = sample.label) === null || _a === void 0 ? void 0 : _a.startsWith('#')) + sample.label = ''; + }); + // Fill form and table + yield _super.setValue.call(this, data); + if (isNotEmptyArray(data.samples)) { + let taxonGroup = (isNotEmptyArray(data.samples) && data.samples[0].taxonGroup) || null; + taxonGroup = (taxonGroup && data.samples.findIndex((s) => !ReferentialUtils.equals(taxonGroup, s.taxonGroup)) === -1 && taxonGroup) || null; + this.taxonGroupControl.setValue(taxonGroup); + } + }); + } + getValue() { + const _super = Object.create(null, { + getValue: { get: () => super.getValue } + }); + return __awaiter(this, void 0, void 0, function* () { + let data = yield _super.getValue.call(this); + // Convert into entity + data = Landing.fromObject(data); + if (this.showSamplesTable && data.samples) { + const taxonGroup = this.taxonGroupControl.value; + // Apply the selected taxon group, if any + if (ReferentialUtils.isNotEmpty(taxonGroup)) { + (data.samples || []).forEach((sample) => (sample.taxonGroup = taxonGroup)); + } + // CLean invalid sample label + (data.samples || []).forEach((sample) => { + var _a; + if (((_a = sample.label) === null || _a === void 0 ? void 0 : _a.startsWith('#')) || isNil(sample.label)) + sample.label = ''; + }); + } + // Reset samples, if no taxon group + else { + data.samples = []; + } + if (data.trip) { + // Force trip to be undefined (unused) + data.trip = undefined; + } + return data; + }); + } + computeTitle(data) { + return __awaiter(this, void 0, void 0, function* () { + const titlePrefix = (this.parent && + this.parent instanceof ObservedLocation && + (yield firstValueFrom(this.translate.get('AUCTION_CONTROL.TITLE_PREFIX', { + location: this.parent.location && (this.parent.location.name || this.parent.location.label), + date: (this.parent.startDateTime && this.dateFormat.transform(this.parent.startDateTime)) || '', + })))) || + ''; + // new data + if (!data || (isNil(data.id) && ReferentialUtils.isEmpty(data.vesselSnapshot))) { + return titlePrefix + this.translate.instant('AUCTION_CONTROL.NEW.TITLE'); + } + // Existing data + return (titlePrefix + + this.translate.instant('AUCTION_CONTROL.EDIT.TITLE', { + vessel: data.vesselSnapshot && (`${data.vesselSnapshot.exteriorMarking} - ${data.vesselSnapshot.name}` || data.vesselSnapshot.name), + })); + }); + } + computePageHistory(title) { + const _super = Object.create(null, { + computePageHistory: { get: () => super.computePageHistory } + }); + return __awaiter(this, void 0, void 0, function* () { + return Object.assign(Object.assign({}, (yield _super.computePageHistory.call(this, title))), { icon: 'flag' }); + }); + } + computePageUrl(id) { + const parentUrl = this.getParentPageUrl(); + return `${parentUrl}/control/${id}`; + } + registerSampleRowValidator(form, pmfms) { + // DEBUG + // console.debug('[auction-control-page] Adding row validator'); + return AuctionControlValidators.addSampleValidators(form, pmfms, { markForCheck: () => this.markForCheck() }); + } + getFirstInvalidTabIndex() { + return this.landingForm.invalid && !this.landingForm.measurementValuesForm.invalid + ? 0 + : this.samplesTable.invalid || this.landingForm.measurementValuesForm.invalid + ? 1 + : -1; + } +}; +AuctionControlPage = AuctionControlPage_1 = __decorate([ + Component({ + selector: 'app-auction-control', + styleUrls: ['auction-control.page.scss'], + templateUrl: './auction-control.page.html', + animations: [fadeInOutAnimation], + providers: [{ provide: APP_DATA_ENTITY_EDITOR, useExisting: AuctionControlPage_1 }], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + LocalSettingsService, + UntypedFormBuilder, + ModalController]) +], AuctionControlPage); +export { AuctionControlPage }; +//# sourceMappingURL=auction-control.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/auction-control/auction-control.page.js.map b/out-tsc/app/app/trip/landing/auction-control/auction-control.page.js.map new file mode 100644 index 000000000..b0b525a15 --- /dev/null +++ b/out-tsc/app/app/trip/landing/auction-control/auction-control.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"auction-control.page.js","sourceRoot":"","sources":["../../../../../../src/app/trip/landing/auction-control/auction-control.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/auction-control/auction-control.validators.js b/out-tsc/app/app/trip/landing/auction-control/auction-control.validators.js new file mode 100644 index 000000000..1e114f667 --- /dev/null +++ b/out-tsc/app/app/trip/landing/auction-control/auction-control.validators.js @@ -0,0 +1,222 @@ +import { Validators } from '@angular/forms'; +import { Subject } from 'rxjs'; +import { debounceTime, filter, map, startWith, tap } from 'rxjs/operators'; +import { PmfmIds } from '@app/referential/services/model/model.enum'; +import { AppFormUtils, isNil, isNotNilOrBlank, SharedValidators } from '@sumaris-net/ngx-components'; +import { PmfmValueUtils } from '@app/referential/services/model/pmfm-value.model'; +export class AuctionControlValidators { + static addSampleValidators(form, pmfms, opts) { + if (!form) { + console.warn("Argument 'form' required"); + return null; + } + // DEBUG + //console.debug('AuctionControlValidators.addSampleValidators()', form); + // Label: + // - remove 'required' + // - add pattern + form.get('label').setValidators(Validators.pattern(/^[0-9]*$/)); + form.get('label').updateValueAndValidity({ onlySelf: true, emitEvent: false }); + // Disable computed pmfms + AppFormUtils.disableControls(form, pmfms.filter((p) => p.isComputed).map((p) => `measurementValues.${p.id}`), { onlySelf: true, emitEvent: false }); + const $errors = new Subject(); + form.setAsyncValidators((control) => $errors); + let computing = false; + const subscription = form.valueChanges + .pipe(startWith(form.value), filter(() => !computing), + // Protected against loop + tap(() => (computing = true)), debounceTime(250), map(() => AuctionControlValidators.computeAndValidate(form, pmfms, Object.assign(Object.assign({}, opts), { emitEvent: false, onlySelf: false }))), tap((errors) => { + computing = false; + $errors.next(errors); + if (opts.markForCheck) + opts.markForCheck(); + })) + .subscribe(); + // When unsubscribe, remove async validator + subscription.add(() => { + $errors.next(null); + $errors.complete(); + form.clearAsyncValidators(); + if (opts.markForCheck) + opts.markForCheck(); + }); + return subscription; + } + /** + * Validate and compute + * + * @param form + * @param pmfms + * @param opts + */ + static computeAndValidate(form, pmfms, opts) { + var _a, _b; + console.debug('[auction-control-validator] Starting computation and validation...'); + let errors; + // Read pmfms + const weightPmfm = pmfms.find((p) => p.label.endsWith('_WEIGHT')); + const indivCountPmfm = pmfms.find((p) => p.id === PmfmIds.SAMPLE_INDIV_COUNT); + // Get controls + const measFormGroup = form.controls['measurementValues']; + const outOfSizeWeightControl = measFormGroup.controls[PmfmIds.OUT_OF_SIZE_WEIGHT]; + const outOfSizeCountControl = measFormGroup.controls[PmfmIds.OUT_OF_SIZE_INDIV_COUNT]; + const outOfSizePctControl = measFormGroup.controls[PmfmIds.OUT_OF_SIZE_PCT]; + const parasitizedCountControl = measFormGroup.controls[PmfmIds.PARASITIZED_INDIV_COUNT]; + const dirtyCountControl = measFormGroup.controls[PmfmIds.DIRTY_INDIV_COUNT]; + // Get PMFM values + const weight = weightPmfm ? +measFormGroup.controls[weightPmfm.id].value : undefined; + const indivCount = indivCountPmfm ? +measFormGroup.controls[indivCountPmfm.id].value : undefined; + const outOfSizeWeight = outOfSizeWeightControl ? +outOfSizeWeightControl.value : undefined; + const outOfSizeCount = outOfSizeCountControl ? +outOfSizeCountControl.value : undefined; + // Out of size: compute percentage + if (outOfSizePctControl) { + // From a weight ratio + if (isNotNilOrBlank(weight) && isNotNilOrBlank(outOfSizeWeight) && outOfSizeWeight <= weight) { + const pct = Math.trunc((10000 * outOfSizeWeight) / weight) / 100; + outOfSizePctControl.setValue(pct, opts); + SharedValidators.clearError(outOfSizeWeightControl, 'max'); + outOfSizeWeightControl.updateValueAndValidity({ onlySelf: true }); + } + // Or a individual count ratio + else if (isNotNilOrBlank(indivCount) && isNotNilOrBlank(outOfSizeCount) && outOfSizeCount <= indivCount) { + const pct = Math.trunc((10000 * outOfSizeCount) / indivCount) / 100; + outOfSizePctControl.setValue(pct, opts); + SharedValidators.clearError(outOfSizeCountControl, 'max'); + } + else { + outOfSizePctControl.setValue(null, opts); // Reset + } + } + // Out of size: check max + if (outOfSizeWeightControl) { + if (isNotNilOrBlank(outOfSizeWeight) && isNotNilOrBlank(weight) && outOfSizeWeight > weight) { + const error = { max: { actual: outOfSizeWeight, max: weight } }; + outOfSizeWeightControl.markAsPending(opts); + outOfSizeWeightControl.setErrors(error); + errors = Object.assign(Object.assign({}, errors), error); + } + else { + SharedValidators.clearError(outOfSizeWeightControl, 'max'); + } + } + if (outOfSizeCountControl) { + if (isNotNilOrBlank(outOfSizeCount) && isNotNilOrBlank(indivCount) && outOfSizeCount > indivCount) { + const error = { max: { actual: outOfSizeCount, max: indivCount } }; + outOfSizeCountControl.setErrors(error, opts); + errors = Object.assign(Object.assign({}, errors), error); + } + else { + SharedValidators.clearError(outOfSizeCountControl, 'max'); + } + } + // Parasitized: compute percentile + const parasitizedCount = parasitizedCountControl ? +parasitizedCountControl.value : undefined; + const parasitizedPctControl = measFormGroup.controls[PmfmIds.PARASITIZED_INDIV_PCT]; + // Compute out of size percentage + if (parasitizedPctControl) { + if (isNotNilOrBlank(indivCount) && isNotNilOrBlank(parasitizedCount) && parasitizedCount <= indivCount) { + const pct = Math.trunc((10000 * parasitizedCount) / indivCount) / 100; + parasitizedPctControl.setValue(pct, opts); + SharedValidators.clearError(parasitizedCountControl, 'max'); + } + else { + parasitizedPctControl.setValue(null, opts); // Reset + } + } + // Parasitized: check max + if (parasitizedCountControl) { + if (isNotNilOrBlank(parasitizedCount) && isNotNilOrBlank(indivCount) && parasitizedCount > indivCount) { + const error = { max: { actual: parasitizedCount, max: indivCount } }; + parasitizedCountControl.setErrors(error, opts); + errors = Object.assign(Object.assign({}, errors), error); + } + else { + SharedValidators.clearError(parasitizedCountControl, 'max'); + } + } + // Dirty: compute percentile + const dirtyCount = dirtyCountControl ? +dirtyCountControl.value : undefined; + const dirtyPctControl = measFormGroup.controls[PmfmIds.DIRTY_INDIV_PCT]; + if (dirtyPctControl) { + if (isNotNilOrBlank(indivCount) && isNotNilOrBlank(parasitizedCount) && dirtyCount <= indivCount) { + const pct = Math.trunc((10000 * dirtyCount) / indivCount) / 100; + dirtyPctControl.setValue(pct, opts); + SharedValidators.clearError(dirtyCountControl, 'max'); + } + else { + dirtyPctControl.setValue(null, opts); // Reset + } + } + // Dirty: check max + if (dirtyCountControl) { + if (isNotNilOrBlank(dirtyCount) && isNotNilOrBlank(indivCount) && dirtyCount > indivCount) { + const error = { max: { actual: dirtyCount, max: indivCount } }; + dirtyCountControl.setErrors(error, opts); + errors = Object.assign(Object.assign({}, errors), error); + } + else { + SharedValidators.clearError(dirtyCountControl, 'max'); + } + } + // Density per kg (indiv/kg) + const numberDensityPerKgControl = measFormGroup.controls[PmfmIds.INDIVIDUALS_DENSITY_PER_KG]; + if (numberDensityPerKgControl) { + if (isNotNilOrBlank(indivCount) && isNotNilOrBlank(weight) && indivCount !== 0 && weight !== 0) { + // compute (truncate the value to the hundredth) + const numberDensityPerKgValue = Math.trunc((indivCount / PmfmValueUtils.toModelValueAsNumber(weight, weightPmfm)) * 100) / 100; + numberDensityPerKgControl.setValue(numberDensityPerKgValue, opts); + } + else { + numberDensityPerKgControl.setValue(null, opts); // Reset + } + } + // Compliant: disable some pmfms if compliant, and manage some default value + const compliantProductControl = measFormGroup.controls[PmfmIds.COMPLIANT_PRODUCT]; + if (compliantProductControl) { + const controlCorrectiveActionPmfm = pmfms.find((pmfm) => pmfm.id === PmfmIds.CONTROL_CORRECTIVE_ACTION); + const controlCorrectiveActionControl = controlCorrectiveActionPmfm && measFormGroup.controls[PmfmIds.CONTROL_CORRECTIVE_ACTION]; + if (controlCorrectiveActionControl) { + const defaultValue = PmfmValueUtils.fromModelValue(controlCorrectiveActionPmfm.defaultValue, controlCorrectiveActionPmfm) || + ((_a = controlCorrectiveActionPmfm.qualitativeValues) === null || _a === void 0 ? void 0 : _a.find((qv) => qv.label === 'NSP')); + if (compliantProductControl.value) { + controlCorrectiveActionControl.setValue(null); + controlCorrectiveActionControl.disable(); + controlCorrectiveActionControl.setValidators(null); + } + else { + if (compliantProductControl.value === false && isNil(controlCorrectiveActionControl.value)) + controlCorrectiveActionControl.setValue(defaultValue); + if (controlCorrectiveActionPmfm.required) { + controlCorrectiveActionControl.setValidators(Validators.required); + } + controlCorrectiveActionControl.enable(); + } + } + const productDestinationPmfm = pmfms.find((pmfm) => pmfm.id === PmfmIds.PRODUCT_DESTINATION); + const productDestinationControl = productDestinationPmfm && measFormGroup.controls[PmfmIds.PRODUCT_DESTINATION]; + if (productDestinationControl) { + const defaultValue = PmfmValueUtils.fromModelValue(productDestinationPmfm.defaultValue, productDestinationPmfm) || + ((_b = productDestinationPmfm.qualitativeValues) === null || _b === void 0 ? void 0 : _b.find((qv) => qv.label === 'NSP')); + if (compliantProductControl.value) { + productDestinationControl.setValue(null); + productDestinationControl.disable(); + productDestinationControl.setValidators(null); + } + else { + if (compliantProductControl.value === false && isNil(productDestinationControl.value)) + productDestinationControl.setValue(defaultValue); + productDestinationControl.enable(); + if (productDestinationPmfm.required) { + productDestinationControl.setValidators(Validators.required); + } + } + } + } + if (opts && opts.markForCheck) { + //console.debug("[auction-control-validator] calling MarkForCheck..."); + opts.markForCheck(); + } + return errors; + } +} +//# sourceMappingURL=auction-control.validators.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/auction-control/auction-control.validators.js.map b/out-tsc/app/app/trip/landing/auction-control/auction-control.validators.js.map new file mode 100644 index 000000000..5cf45d065 --- /dev/null +++ b/out-tsc/app/app/trip/landing/auction-control/auction-control.validators.js.map @@ -0,0 +1 @@ +{"version":3,"file":"auction-control.validators.js","sourceRoot":"","sources":["../../../../../../src/app/trip/landing/auction-control/auction-control.validators.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/auction-control/report/auction-control-report-routing.module.js b/out-tsc/app/app/trip/landing/auction-control/report/auction-control-report-routing.module.js new file mode 100644 index 000000000..f86669f13 --- /dev/null +++ b/out-tsc/app/app/trip/landing/auction-control/report/auction-control-report-routing.module.js @@ -0,0 +1,25 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { AuctionControlReport } from './auction-control.report'; +import { AuctionControlReportModule } from './auction-control.report.module'; +const routes = [ + { + path: '', + pathMatch: 'full', + component: AuctionControlReport, + } +]; +let AuctionControlReportRoutingModule = class AuctionControlReportRoutingModule { +}; +AuctionControlReportRoutingModule = __decorate([ + NgModule({ + imports: [ + RouterModule.forChild(routes), + AuctionControlReportModule, + ], + exports: [RouterModule] + }) +], AuctionControlReportRoutingModule); +export { AuctionControlReportRoutingModule }; +//# sourceMappingURL=auction-control-report-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/auction-control/report/auction-control-report-routing.module.js.map b/out-tsc/app/app/trip/landing/auction-control/report/auction-control-report-routing.module.js.map new file mode 100644 index 000000000..a4f4c590f --- /dev/null +++ b/out-tsc/app/app/trip/landing/auction-control/report/auction-control-report-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"auction-control-report-routing.module.js","sourceRoot":"","sources":["../../../../../../../src/app/trip/landing/auction-control/report/auction-control-report-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,oBAAoB;KAChC;CACF,CAAC;AASK,IAAM,iCAAiC,GAAvC,MAAM,iCAAiC;CAAG,CAAA;AAApC,iCAAiC;IAP7C,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,0BAA0B;SAC3B;QACD,OAAO,EAAE,CAAC,YAAY,CAAC;KACxB,CAAC;GACW,iCAAiC,CAAG;SAApC,iCAAiC"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/auction-control/report/auction-control.report.js b/out-tsc/app/app/trip/landing/auction-control/report/auction-control.report.js new file mode 100644 index 000000000..d4d86e099 --- /dev/null +++ b/out-tsc/app/app/trip/landing/auction-control/report/auction-control.report.js @@ -0,0 +1,45 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector } from '@angular/core'; +import { environment } from '@environments/environment'; +import { BaseLandingReport, LandingStats } from '@app/trip/landing/report/base-landing-report.class'; +import { firstValueFrom } from 'rxjs'; +let AuctionControlReport = class AuctionControlReport extends BaseLandingReport { + constructor(injector) { + super(injector, LandingStats, { + pathIdAttribute: 'controlId' + }); + } + /* -- protected function -- */ + computeTitle(data, stats) { + return firstValueFrom(this.translate.get('AUCTION_CONTROL.REPORT.TITLE', { + vessel: data.vesselSnapshot.name, + date: this.dateFormat.transform(data.dateTime), + })); + } + computeDefaultBackHref(data, stats) { + return `/observations/${this.data.observedLocationId}/control/${data.id}?tab=1`; + } + computeShareBasePath() { + return 'observations/report/control'; + } + addFakeSamplesForDev(data, count = 40) { + if (environment.production) + return; // Skip + super.addFakeSamplesForDev(data, count); + data.samples.forEach((s, index) => s.label = `${index + 1}`); + } +}; +AuctionControlReport = __decorate([ + Component({ + selector: 'app-auction-control-report', + styleUrls: [ + '../../report/landing.report.scss', + '../../../../data/report/base-report.scss', + ], + templateUrl: './auction-control.report.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector]) +], AuctionControlReport); +export { AuctionControlReport }; +//# sourceMappingURL=auction-control.report.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/auction-control/report/auction-control.report.js.map b/out-tsc/app/app/trip/landing/auction-control/report/auction-control.report.js.map new file mode 100644 index 000000000..44e901b87 --- /dev/null +++ b/out-tsc/app/app/trip/landing/auction-control/report/auction-control.report.js.map @@ -0,0 +1 @@ +{"version":3,"file":"auction-control.report.js","sourceRoot":"","sources":["../../../../../../../src/app/trip/landing/auction-control/report/auction-control.report.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAC,iBAAiB,EAAE,YAAY,EAAC,MAAM,oDAAoD,CAAC;AAEnG,OAAO,EAAC,cAAc,EAAC,MAAM,MAAM,CAAC;AAW7B,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,iBAAiB;IAEzD,YACE,QAAkB;QAElB,KAAK,CACH,QAAQ,EACR,YAAY,EACZ;YACE,eAAe,EAAE,WAAW;SAC7B,CACF,CAAC;IACJ,CAAC;IAED,8BAA8B;IAEpB,YAAY,CAAC,IAAa,EAAE,KAAmB;QACvD,OAAO,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,8BAA8B,EAAE;YACvE,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;YAChC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;SAC/C,CAAC,CAAC,CAAC;IACN,CAAC;IAES,sBAAsB,CAAC,IAAa,EAAE,KAAmB;QACjE,OAAO,iBAAiB,IAAI,CAAC,IAAI,CAAC,kBAAkB,YAAY,IAAI,CAAC,EAAE,QAAQ,CAAC;IAClF,CAAC;IAES,oBAAoB;QAC5B,OAAO,6BAA6B,CAAC;IACvC,CAAC;IAES,oBAAoB,CAAC,IAAa,EAAE,KAAK,GAAG,EAAE;QACtD,IAAI,WAAW,CAAC,UAAU;YAAE,OAAO,CAAC,OAAO;QAC3C,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,KAAK,GAAC,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;CAEF,CAAA;AArCY,oBAAoB;IAThC,SAAS,CAAC;QACT,QAAQ,EAAE,4BAA4B;QACtC,SAAS,EAAE;YACT,kCAAkC;YAClC,0CAA0C;SAC3C;QACD,WAAW,EAAE,+BAA+B;QAC5C,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAIY,QAAQ;GAHT,oBAAoB,CAqChC;SArCY,oBAAoB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/auction-control/report/auction-control.report.module.js b/out-tsc/app/app/trip/landing/auction-control/report/auction-control.report.module.js new file mode 100644 index 000000000..feb2b7251 --- /dev/null +++ b/out-tsc/app/app/trip/landing/auction-control/report/auction-control.report.module.js @@ -0,0 +1,29 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { AuctionControlReport } from './auction-control.report'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppDataModule } from '@app/data/data.module'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { TranslateModule } from '@ngx-translate/core'; +import { AppSharedReportModule } from '@app/shared/report/report.module'; +let AuctionControlReportModule = class AuctionControlReportModule { +}; +AuctionControlReportModule = __decorate([ + NgModule({ + declarations: [ + AuctionControlReport, + ], + imports: [ + AppCoreModule, + AppDataModule, + TranslateModule.forChild(), + AppSharedReportModule, + AppReferentialModule, + ], + exports: [ + AuctionControlReport, + ] + }) +], AuctionControlReportModule); +export { AuctionControlReportModule }; +//# sourceMappingURL=auction-control.report.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/auction-control/report/auction-control.report.module.js.map b/out-tsc/app/app/trip/landing/auction-control/report/auction-control.report.module.js.map new file mode 100644 index 000000000..1cd2fd1d8 --- /dev/null +++ b/out-tsc/app/app/trip/landing/auction-control/report/auction-control.report.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"auction-control.report.module.js","sourceRoot":"","sources":["../../../../../../../src/app/trip/landing/auction-control/report/auction-control.report.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAmBlE,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;CAAG,CAAA;AAA7B,0BAA0B;IAftC,QAAQ,CAAC;QACR,YAAY,EAAE;YACZ,oBAAoB;SACrB;QACD,OAAO,EAAE;YACP,aAAa;YACb,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAC1B,qBAAqB;YACrB,oBAAoB;SACrB;QACD,OAAO,EAAE;YACP,oBAAoB;SACrB;KACF,CAAC;GACW,0BAA0B,CAAG;SAA7B,0BAA0B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landing-routing.module.js b/out-tsc/app/app/trip/landing/landing-routing.module.js new file mode 100644 index 000000000..fb09ae2ce --- /dev/null +++ b/out-tsc/app/app/trip/landing/landing-routing.module.js @@ -0,0 +1,47 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { LandingPage } from './landing.page'; +import { AppLandingModule } from './landing.module'; +import { ComponentDirtyGuard } from '@sumaris-net/ngx-components'; +const routes = [ + { + path: ':landingId', + data: { + profile: 'USER', + pathIdParam: 'landingId', + }, + children: [ + { + path: '', + pathMatch: 'full', + runGuardsAndResolvers: 'pathParamsChange', + component: LandingPage, + canDeactivate: [ComponentDirtyGuard], + data: { + profile: 'USER', + pathIdParam: 'landingId', + }, + }, + { + path: 'report', + loadChildren: () => import('./report/landing-report-routing.module').then((m) => m.LandingReportRoutingModule), + }, + ], + }, +]; +let AppLandingRoutingModule = class AppLandingRoutingModule { +}; +AppLandingRoutingModule = __decorate([ + NgModule({ + imports: [ + RouterModule.forChild(routes), + AppLandingModule, + ], + exports: [ + RouterModule + ] + }) +], AppLandingRoutingModule); +export { AppLandingRoutingModule }; +//# sourceMappingURL=landing-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landing-routing.module.js.map b/out-tsc/app/app/trip/landing/landing-routing.module.js.map new file mode 100644 index 000000000..cc7c479ce --- /dev/null +++ b/out-tsc/app/app/trip/landing/landing-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"landing-routing.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/landing/landing-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,WAAW;SACzB;QACD,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,EAAE;gBACR,SAAS,EAAE,MAAM;gBACjB,qBAAqB,EAAE,kBAAkB;gBACzC,SAAS,EAAE,WAAW;gBACtB,aAAa,EAAE,CAAC,mBAAmB,CAAC;gBACpC,IAAI,EAAE;oBACJ,OAAO,EAAE,MAAM;oBACf,WAAW,EAAE,WAAW;iBACzB;aACF;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,0BAA0B,CAAC;aAC/G;SACF;KACF;CACF,CAAC;AAYK,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;CACnC,CAAA;AADY,uBAAuB;IATnC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,gBAAgB;SACjB;QACD,OAAO,EAAE;YACP,YAAY;SACb;KACF,CAAC;GACW,uBAAuB,CACnC;SADY,uBAAuB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landing.filter.js b/out-tsc/app/app/trip/landing/landing.filter.js new file mode 100644 index 000000000..8bba92ae2 --- /dev/null +++ b/out-tsc/app/app/trip/landing/landing.filter.js @@ -0,0 +1,100 @@ +import { __decorate } from "tslib"; +import { RootDataEntityFilter } from '@app/data/services/model/root-data-filter.model'; +import { EntityClass, isNotEmptyArray, isNotNil, isNotNilOrBlank, Person, ReferentialRef, toNumber } from '@sumaris-net/ngx-components'; +import { VesselSnapshot } from '@app/referential/services/model/vessel-snapshot.model'; +let LandingFilter = class LandingFilter extends RootDataEntityFilter { + constructor() { + super(...arguments); + this.vesselSnapshot = null; + this.location = null; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.vesselId = toNumber(source.vesselId); + this.vesselSnapshot = source.vesselSnapshot && VesselSnapshot.fromObject(source.vesselSnapshot); + this.excludeVesselIds = source.excludeVesselIds; + this.groupByVessel = source.groupByVessel; + this.locationId = toNumber(source.locationId); + this.locationIds = source.locationIds; + this.location = ReferentialRef.fromObject(source.location); + this.observers = source.observers && source.observers.map(Person.fromObject).filter(isNotNil) || []; + this.sampleLabel = source.sampleLabel; + this.sampleTagId = source.sampleTagId; + this.observedLocationId = toNumber(source.observedLocationId); + this.tripId = toNumber(source.tripId); + } + asObject(opts) { + const target = super.asObject(opts); + if (opts && opts.minify) { + // Vessel + target.vesselId = isNotNil(this.vesselId) ? this.vesselId : (this.vesselSnapshot && isNotNil(this.vesselSnapshot.id) ? this.vesselSnapshot.id : undefined); + delete target.vesselSnapshot; + // Location + target.locationId = this.location && this.location.id || undefined; + delete target.location; + // Observers + target.observerPersonIds = isNotEmptyArray(this.observers) && this.observers.map(o => o && o.id).filter(isNotNil) || undefined; + delete target.observers; + // Not exists in pod + delete target.groupByVessel; + // Sample + target.sampleLabels = isNotNilOrBlank(this.sampleLabel) ? this.sampleLabel.split(/[,\s]+/) : undefined; + delete target.sampleLabel; + target.sampleTagIds = isNotNilOrBlank(this.sampleTagId) ? this.sampleTagId.split(/[,\s]+/) : undefined; + delete target.sampleTagId; + } + else { + target.vesselSnapshot = this.vesselSnapshot && this.vesselSnapshot.asObject(opts) || undefined; + target.location = this.location && this.location.asObject(opts) || undefined; + target.observers = this.observers && this.observers.map(o => o && o.asObject(opts)).filter(isNotNil) || []; + } + return target; + } + buildFilter() { + var _a; + const filterFns = super.buildFilter(); + // observedLocationId + if (isNotNil(this.observedLocationId)) { + filterFns.push((entity) => entity.observedLocationId === this.observedLocationId); + } + // tripId + if (isNotNil(this.tripId)) { + filterFns.push((entity) => entity.tripId === this.tripId); + } + // Vessel + if (isNotNil(this.vesselId)) { + filterFns.push((entity) => entity.vesselSnapshot && entity.vesselSnapshot.id === this.vesselId); + } + // Vessel exclude + if (isNotEmptyArray(this.excludeVesselIds)) { + filterFns.push((entity) => entity.vesselSnapshot && !this.excludeVesselIds.includes(entity.vesselSnapshot.id)); + } + // Location + if (isNotNil(this.locationId)) { + filterFns.push((entity) => { var _a; return ((_a = entity.location) === null || _a === void 0 ? void 0 : _a.id) === this.locationId; }); + } + if (isNotEmptyArray(this.locationIds)) { + filterFns.push((entity) => entity.location && this.locationIds.includes(entity.location.id)); + } + // Start/end period + if (this.startDate) { + const startDate = this.startDate.clone(); + filterFns.push(t => t.dateTime && startDate.isSameOrBefore(t.dateTime)); + } + if (this.endDate) { + const endDate = this.endDate.clone().add(1, 'day').startOf('day'); + filterFns.push(t => t.dateTime && endDate.isAfter(t.dateTime)); + } + // Observers + const observerIds = (_a = this.observers) === null || _a === void 0 ? void 0 : _a.map(o => o.id).filter(isNotNil); + if (isNotEmptyArray(observerIds)) { + filterFns.push(t => { var _a; return (_a = t.observers) === null || _a === void 0 ? void 0 : _a.some(o => o && observerIds.includes(o.id)); }); + } + return filterFns; + } +}; +LandingFilter = __decorate([ + EntityClass({ typename: 'LandingFilterVO' }) +], LandingFilter); +export { LandingFilter }; +//# sourceMappingURL=landing.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landing.filter.js.map b/out-tsc/app/app/trip/landing/landing.filter.js.map new file mode 100644 index 000000000..bdb8a787d --- /dev/null +++ b/out-tsc/app/app/trip/landing/landing.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"landing.filter.js","sourceRoot":"","sources":["../../../../../src/app/trip/landing/landing.filter.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAEvF,OAAO,EAAyB,WAAW,EAA0B,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvL,OAAO,EAAE,cAAc,EAAE,MAAM,uDAAuD,CAAC;AAGhF,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,oBAA4C;IAAxE;;QAKL,mBAAc,GAAmB,IAAI,CAAC;QAMtC,aAAQ,GAAmB,IAAI,CAAC;IAiHlC,CAAC;IArGC,UAAU,CAAC,MAAW,EAAE,IAAU;QAChC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAChG,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAChD,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAE1C,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE3D,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEpG,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAEtC,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,QAAQ,CAAC,IAA4B;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YACvB,SAAS;YACT,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,IAAI,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC3J,OAAO,MAAM,CAAC,cAAc,CAAC;YAE7B,WAAW;YACX,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,SAAS,CAAC;YACnE,OAAO,MAAM,CAAC,QAAQ,CAAC;YAEvB,YAAY;YACZ,MAAM,CAAC,iBAAiB,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;YAC/H,OAAO,MAAM,CAAC,SAAS,CAAC;YAExB,oBAAoB;YACpB,OAAO,MAAM,CAAC,aAAa,CAAC;YAE5B,SAAS;YACT,MAAM,CAAC,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACvG,OAAO,MAAM,CAAC,WAAW,CAAC;YAC1B,MAAM,CAAC,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACvG,OAAO,MAAM,CAAC,WAAW,CAAC;SAC3B;aACI;YACH,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;YAC/F,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;YAC7E,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SAC5G;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW;;QACT,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtC,qBAAqB;QACrB,IAAI,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;YACrC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,kBAAkB,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC;SACnF;QAED,SAAS;QACT,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACzB,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;SAC3D;QAED,SAAS;QACT,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YAC3B,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;SACjG;QAED,iBAAiB;QACjB,IAAI,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;YAC1C,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;SAChH;QAED,WAAW;QACX,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YAC7B,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,EAAE,MAAK,IAAI,CAAC,UAAU,CAAA,EAAA,CAAC,CAAC;SACrE;QACD,IAAI,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACrC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;SAC9F;QAED,mBAAmB;QACnB,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACzC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;SACzE;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAClE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;SAChE;QAED,YAAY;QACZ,MAAM,WAAW,GAAG,MAAA,IAAI,CAAC,SAAS,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpE,IAAI,eAAe,CAAC,WAAW,CAAC,EAAE;YAChC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,SAAS,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,EAAA,CAAC,CAAC;SAC9E;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAA;AA5HY,aAAa;IADzB,WAAW,CAAC,EAAC,QAAQ,EAAE,iBAAiB,EAAC,CAAC;GAC9B,aAAa,CA4HzB;SA5HY,aAAa"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landing.form.js b/out-tsc/app/app/trip/landing/landing.form.js new file mode 100644 index 000000000..03e3a15d3 --- /dev/null +++ b/out-tsc/app/app/trip/landing/landing.form.js @@ -0,0 +1,888 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, EventEmitter, Injector, Input, Output, QueryList, ViewChildren } from '@angular/core'; +import { debounceTime, distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators'; +import { AcquisitionLevelCodes, LocationLevelGroups, LocationLevelIds, PmfmIds, } from '@app/referential/services/model/model.enum'; +import { LandingValidatorService } from './landing.validator'; +import { MeasurementValuesForm } from '@app/data/measurement/measurement-values.form.class'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { ModalController } from '@ionic/angular'; +import { ConfigService, DateUtils, EntityUtils, FormArrayHelper, getPropertyByPath, isNil, isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrBlank, NetworkService, PersonService, PersonUtils, ReferentialRef, ReferentialUtils, SharedValidators, StatusIds, suggestFromArray, toBoolean, toDateISOString, } from '@sumaris-net/ngx-components'; +import { VesselSnapshotService } from '@app/referential/services/vessel-snapshot.service'; +import { Landing } from './landing.model'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { VesselSnapshot } from '@app/referential/services/model/vessel-snapshot.model'; +import { VesselModal } from '@app/vessel/modal/vessel-modal'; +import { DenormalizedPmfmStrategy } from '@app/referential/services/model/pmfm-strategy.model'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { TranslateService } from '@ngx-translate/core'; +import { FishingAreaValidatorService } from '@app/data/fishing-area/fishing-area.validator'; +import { Trip } from '@app/trip/trip/trip.model'; +import { TripValidatorService } from '@app/trip/trip/trip.validator'; +import { ObservedLocation } from '@app/trip/observedlocation/observed-location.model'; +import { ObservedLocationFilter } from '@app/trip/observedlocation/observed-location.filter'; +import { DateAdapter } from '@angular/material/core'; +import { SelectObservedLocationsModal, } from '@app/trip/observedlocation/select-modal/select-observed-locations.modal'; +import { StrategyService } from '@app/referential/services/strategy.service'; +const TRIP_FORM_EXCLUDED_FIELD_NAMES = ['program', 'vesselSnapshot', 'departureDateTime', 'departureLocation', 'returnDateTime', 'returnLocation']; +let LandingForm = class LandingForm extends MeasurementValuesForm { + constructor(injector, measurementsValidatorService, formBuilder, programRefService, validatorService, referentialRefService, personService, vesselSnapshotService, configService, translate, modalCtrl, tripValidatorService, fishingAreaValidatorService, networkService, strategyService, dateAdapter) { + super(injector, measurementsValidatorService, formBuilder, programRefService, validatorService.getFormGroup(), { + mapPmfms: (pmfms) => this.mapPmfms(pmfms), + }); + this.measurementsValidatorService = measurementsValidatorService; + this.formBuilder = formBuilder; + this.programRefService = programRefService; + this.validatorService = validatorService; + this.referentialRefService = referentialRefService; + this.personService = personService; + this.vesselSnapshotService = vesselSnapshotService; + this.configService = configService; + this.translate = translate; + this.modalCtrl = modalCtrl; + this.tripValidatorService = tripValidatorService; + this.fishingAreaValidatorService = fishingAreaValidatorService; + this.networkService = networkService; + this.strategyService = strategyService; + this.dateAdapter = dateAdapter; + this.observerFocusIndex = -1; + this.metierFocusIndex = -1; + this.fishingAreaFocusIndex = -1; + this.strategyControl$ = this._state.select('strategyControl'); + this.observedLocationLabel$ = this._state.select('observedLocationLabel'); + this.observedLocationControl$ = this._state.select('observedLocationControl'); + this.autocompleteFilters = { + fishingArea: false, + }; + this.required = true; + this.showProgram = false; + this.showVessel = true; + this.showDateTime = false; // Default value of program option LANDING_DATE_TIME_ENABLE + this.showLocation = false; // Default value of program option LANDING_LOCATION_ENABLE + this.showComment = true; + this.showMeasurements = true; + this.showError = true; + this.showButtons = true; + this.showMetier = false; + this.showFishingArea = false; + this.showTripDepartureDateTime = false; + this.allowManyMetiers = null; + this.filteredFishingAreaLocations = null; + this.fishingAreaLocationLevelIds = null; + this.disabledParent = null; + this.observedLocationChanges = new EventEmitter(); + this.openObservedLocation = new EventEmitter(); + this.strategyChanges = new EventEmitter(); + this._enable = false; + this.mobile = this.settings.mobile; + // Set default acquisition level + this.acquisitionLevel = AcquisitionLevelCodes.LANDING; + this.errorTranslatorOptions = { separator: '
', controlPathTranslator: this }; + } + get empty() { + const value = this.value; + return ReferentialUtils.isEmpty(value.location) && !value.dateTime && (!value.comments || !value.comments.length); + } + get valid() { + return this.form && (this.required ? this.form.valid : this.form.valid || this.empty); + } + get observersForm() { + return this.form.controls.observers; + } + get tripForm() { + return this.form.controls.trip; + } + get observedLocationControl() { + return this._state.get('observedLocationControl'); + } + get strategyControl() { + return this._state.get('strategyControl'); + } + get metiersForm() { + var _a; + return (_a = this.tripForm) === null || _a === void 0 ? void 0 : _a.controls.metiers; + } + get fishingAreasForm() { + var _a; + return (_a = this.tripForm) === null || _a === void 0 ? void 0 : _a.controls.fishingAreas; + } + get showTrip() { + return this.showMetier || this.showFishingArea; + } + set showStrategy(value) { + this._state.set('showStrategy', (_) => value); + } + get showStrategy() { + return this._state.get('showStrategy'); + } + set enableFishingAreaFilter(value) { + var _a; + this.setFieldFilterEnable('fishingArea', value); + (_a = this.fishingAreaFields) === null || _a === void 0 ? void 0 : _a.forEach((fishingArea) => { + this.setFieldFilterEnable('fishingArea', value, fishingArea, true); + }); + } + set canEditStrategy(value) { + this._state.set('canEditStrategy', (_) => value); + } + get canEditStrategy() { + return this._state.get('canEditStrategy'); + } + set showObservers(value) { + if (this._showObservers !== value) { + this._showObservers = value; + this.initObserversHelper(); + this.markForCheck(); + } + } + get showObservers() { + return this._showObservers; + } + set showParent(value) { + this._state.set('showParent', (_) => value); + } + get showParent() { + return this._state.get('showParent') || false; + } + set parentAcquisitionLevel(value) { + this._state.set('parentAcquisitionLevel', (_) => value); + } + get parentAcquisitionLevel() { + return this._state.get('parentAcquisitionLevel'); + } + ngOnInit() { + super.ngOnInit(); + // Default values + this.showStrategy = toBoolean(this.showStrategy, false); // Will init the strategy control, if need + this.showObservers = toBoolean(this.showObservers, false); // Will init the observers helper, if need + this.tabindex = isNotNil(this.tabindex) ? this.tabindex : 1; + if (isNil(this.locationLevelIds) && this.showLocation) { + this.locationLevelIds = [LocationLevelIds.PORT]; + console.debug('[landing-form] Location level ids:', this.locationLevelIds); + } + if (isNil(this.fishingAreaLocationLevelIds) && this.showFishingArea) { + this.fishingAreaLocationLevelIds = LocationLevelGroups.FISHING_AREA; + console.debug('[landing-form] Fishing area location level ids:', this.fishingAreaLocationLevelIds); + } + // Combo: programs + this.registerAutocompleteField('program', { + service: this.programRefService, + filter: { + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], + acquisitionLevelLabels: [AcquisitionLevelCodes.LANDING], + }, + mobile: this.mobile, + }); + // Combo: strategy + this.registerAutocompleteField('strategy', { + suggestFn: (value, filter) => this.suggestStrategy(value, filter), + filter: { + entityName: 'Strategy', + searchAttribute: 'label', + }, + attributes: ['label'], + columnSizes: [12], + showAllOnFocus: true, + mobile: this.mobile, + }); + // Combo: vessels + this.vesselSnapshotService.getAutocompleteFieldOptions().then((opts) => this.registerAutocompleteField('vesselSnapshot', opts)); + // Combo location + this.registerAutocompleteField('location', { + suggestFn: (value, filter) => this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { levelIds: this.locationLevelIds })), + filter: { + entityName: 'Location', + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE], + }, + mobile: this.mobile, + }); + // Combo: observers + this.registerAutocompleteField('person', { + // Important, to get the current (focused) control value, in suggestObservers() function (otherwise it will received '*'). + showAllOnFocus: false, + suggestFn: (value, filter) => this.suggestObservers(value, filter), + // Default filter. An excludedIds will be add dynamically + filter: { + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE], + userProfiles: ['SUPERVISOR', 'USER', 'GUEST'], + }, + attributes: ['lastName', 'firstName', 'department.name'], + displayWith: PersonUtils.personToString, + mobile: this.mobile, + }); + // Combo: metier + const metierAttributes = this.settings.getFieldDisplayAttributes('qualitativeValue'); + this.registerAutocompleteField('metier', { + showAllOnFocus: false, + suggestFn: (value, filter) => this.suggestMetiers(value, filter), + // Default filter. A excludedIds will be add dynamically + filter: { + entityName: 'Metier', + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE], + }, + attributes: metierAttributes, + mobile: this.mobile, + }); + // Combo: fishingAreas + const fishingAreaAttributes = this.settings.getFieldDisplayAttributes('fishingAreaLocation', ['label']); + this.registerAutocompleteField('fishingAreaLocation', { + showAllOnFocus: false, + suggestFn: (value, filter) => this.suggestFishingAreaLocations(value, Object.assign(Object.assign({}, filter), { levelIds: this.fishingAreaLocationLevelIds })), + // Default filter. An excludedIds will be add dynamically + filter: { + entityName: 'Location', + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE], + }, + attributes: fishingAreaAttributes, + mobile: this.mobile, + }); + // Propagate program + this.registerSubscription(this.form + .get('program') + .valueChanges.pipe(debounceTime(250), map((value) => (value && typeof value === 'string' ? value : (value && value.label) || undefined))) + .subscribe((programLabel) => (this.programLabel = programLabel))); + // Update the strategy filter (if autocomplete field exists. If not, program will set later in ngOnInit()) + this._state.hold(this.programLabel$, (programLabel) => { + if (this.autocompleteFields.strategy) { + this.autocompleteFields.strategy.filter.levelLabel = programLabel; + } + }); + this._state.hold(this.strategyLabel$, (strategyLabel) => __awaiter(this, void 0, void 0, function* () { + var _a, _b; + // Wait loaded + yield this.waitIdle({ stop: this.destroySubject }); + // Get control to store strategy label, in measurements form + const measControl = this.form.get('measurementValues.' + PmfmIds.STRATEGY_LABEL); + if (measControl && measControl.value !== strategyLabel) { + // DEBUG + console.debug(`[landing-form] Setting measurementValues.${PmfmIds.STRATEGY_LABEL}=${strategyLabel}`); + measControl.setValue(strategyLabel); + } + // Update strategy control + if (this.showStrategy && this.strategyControl && ((_a = this.strategyControl.value) === null || _a === void 0 ? void 0 : _a.label) !== strategyLabel) { + console.debug('[landing-form] Updating strategy control, with value', { label: strategyLabel }); + this.strategyControl.setValue({ label: strategyLabel }, { emitEvent: false }); + this.markForCheck(); + } + // Refresh fishing areas autocomplete + (_b = this.fishingAreaFields) === null || _b === void 0 ? void 0 : _b.forEach((fishingArea) => fishingArea.reloadItems()); + })); + // Init trip form (if enable) + if (this.showTrip) { + const tripForm = this.initTripForm(); + if (this.showMetier) + this.initMetiersHelper(tripForm); + if (this.showFishingArea) + this.initFishingAreas(tripForm); + } + // Add strategy control + this._state.connect('strategyControl', this._state.select('showStrategy'), (_, show) => this.initStrategyControl(show)); + this._state.hold(this._state.select('canEditStrategy'), (canEditStrategy) => { + var _a, _b; + if (canEditStrategy && ((_a = this.strategyControl) === null || _a === void 0 ? void 0 : _a.disabled)) { + this.strategyControl.enable(); + } + else if (!canEditStrategy && ((_b = this.strategyControl) === null || _b === void 0 ? void 0 : _b.enabled)) { + this.strategyControl.disable(); + } + }); + // Add observed location control + this._state.connect('showObservedLocation', this._state.select(['showParent', 'parentAcquisitionLevel'], (s) => s), ({ showParent, parentAcquisitionLevel }) => showParent && parentAcquisitionLevel === AcquisitionLevelCodes.OBSERVED_LOCATION); + this._state.connect('observedLocationControl', this._state.select('showObservedLocation'), (_, show) => this.initObservedLocationControl(show)); + this._state.connect('observedLocationLabel', this.observedLocationChanges.pipe(filter((parent) => !parent || parent instanceof ObservedLocation), distinctUntilChanged(EntityUtils.equals)), (_, parent) => this.displayObservedLocation(parent)); + this._state.hold(this.strategyControl$.pipe(switchMap((control) => control.valueChanges), distinctUntilChanged(EntityUtils.equals)), (strategy) => this.strategyChanges.emit(strategy)); + } + registerAutocompleteField(fieldName, opts) { + return super.registerAutocompleteField(fieldName, opts); + } + toggleFilter(fieldName, field) { + this.setFieldFilterEnable(fieldName, !this.isFieldFilterEnable(fieldName), field); + } + onApplyingEntity(data, opts) { + super.onApplyingEntity(data, opts); + if (!data) + return; // Skip + // Propagate the strategy + const strategyLabel = data.measurementValues && data.measurementValues[PmfmIds.STRATEGY_LABEL]; + if (strategyLabel) { + this.strategyControl.patchValue(ReferentialRef.fromObject({ label: strategyLabel })); + } + } + updateView(data, opts) { + const _super = Object.create(null, { + updateView: { get: () => super.updateView } + }); + var _a, _b, _c; + return __awaiter(this, void 0, void 0, function* () { + if (!data) + return; + // Reapplied changed data + if (this.isNewData && this.form.touched) { + console.warn('[landing-form] Merging form value and input data, before updating view'); + // Make sure to keep existing touched field's value + const json = this.form.value; + Object.keys(json).forEach((key) => { + var _a; + if (isNil(json[key]) && ((_a = this.form.get(key)) === null || _a === void 0 ? void 0 : _a.untouched)) + delete json[key]; + }); + data = Landing.fromObject(Object.assign(Object.assign({}, data.asObject()), json)); + } + // Resize observers array + if (this._showObservers) { + // Make sure to have (at least) one observer + data.observers = isNotEmptyArray(data.observers) ? data.observers : [null]; + this.observersHelper.resize(Math.max(1, data.observers.length)); + } + else { + data.observers = []; + (_a = this.observersHelper) === null || _a === void 0 ? void 0 : _a.resize(0); + } + // Trip + let trip = data.trip; + this.showMetier = this.showMetier || isNotEmptyArray(trip === null || trip === void 0 ? void 0 : trip.metiers); + this.showFishingArea = this.showFishingArea || isNotEmptyArray(trip === null || trip === void 0 ? void 0 : trip.fishingAreas); + if (!trip && (this.showMetier || this.showFishingArea)) { + trip = new Trip(); + data.trip = trip; + } + let tripForm = this.tripForm; + if (this.showTrip && !tripForm) { + tripForm = this.initTripForm(); + if (this.showMetier) + this.initMetiersHelper(tripForm); + if (this.showFishingArea) + this.initFishingAreas(tripForm); + } + // Resize metiers array + if (this.showMetier) { + trip.metiers = isNotEmptyArray(trip.metiers) ? trip.metiers : [null]; + this.metiersHelper.resize(Math.max(1, trip.metiers.length)); + } + else { + (_b = this.metiersHelper) === null || _b === void 0 ? void 0 : _b.removeAllEmpty(); + } + // Resize fishing areas array + if (this.showFishingArea) { + trip.fishingAreas = isNotEmptyArray(trip.fishingAreas) ? trip.fishingAreas : [null]; + this.fishingAreasHelper.resize(Math.max(1, trip.fishingAreas.length)); + } + else { + (_c = this.fishingAreasHelper) === null || _c === void 0 ? void 0 : _c.removeAllEmpty(); + } + // DEBUG + //console.debug('[landing-form] updateView', data); + yield _super.updateView.call(this, data, opts); + }); + } + getValue() { + // DEBUG + //console.debug('[landing-form] get value'); + const data = super.getValue(); + if (!data) + return; + // Re add the strategy label + if (this.showStrategy) { + const strategyValue = this.strategyControl.value; + const strategyLabel = EntityUtils.isNotEmpty(strategyValue, 'label') ? strategyValue.label : strategyValue; + data.measurementValues = data.measurementValues || {}; + data.measurementValues[PmfmIds.STRATEGY_LABEL.toString()] = strategyLabel; + } + if (this.showTrip) { + const trip = Trip.fromObject(Object.assign(Object.assign({}, data.trip), { + // Override some editable properties + program: data.program, vesselSnapshot: data.vesselSnapshot, returnDateTime: toDateISOString(data.dateTime), departureLocation: data.location, returnLocation: data.location })); + // INFO CLT : trip departure date time is stored in database for imagine + trip.departureDateTime = trip.departureDateTime || data.dateTime; + data.trip = trip; + } + // DEBUG + //console.debug('[landing-form] getValue() result:', data); + return data; + } + addObserver() { + this.observersHelper.add(); + if (!this.mobile) { + this.observerFocusIndex = this.observersHelper.size() - 1; + } + } + addMetier() { + this.metiersHelper.add(); + if (!this.mobile) { + this.metierFocusIndex = this.metiersHelper.size() - 1; + } + } + addFishingArea() { + this.fishingAreasHelper.add(); + if (!this.mobile) { + this.fishingAreaFocusIndex = this.fishingAreasHelper.size() - 1; + } + } + enable(opts) { + var _a, _b; + super.enable(opts); + // Leave program disable once data has been saved + if (!this.isNewData && !this.form.get('program').enabled) { + this.form.controls['program'].disable({ emitEvent: false }); + this.markForCheck(); + } + if (this.canEditStrategy && ((_a = this.strategyControl) === null || _a === void 0 ? void 0 : _a.disabled)) { + this.strategyControl.enable(opts); + } + else if (!this.canEditStrategy && ((_b = this.strategyControl) === null || _b === void 0 ? void 0 : _b.enabled)) { + this.strategyControl.disable({ emitEvent: false }); + } + } + addVesselModal() { + return __awaiter(this, void 0, void 0, function* () { + const modal = yield this.modalCtrl.create({ component: VesselModal }); + modal.onDidDismiss().then((res) => { + // if new vessel added, use it + if (res && res.data instanceof VesselSnapshot) { + console.debug('[landing-form] New vessel added : updating form...', res.data); + this.form.get('vesselSnapshot').setValue(res.data); + this.markForCheck(); + } + else { + console.debug('[landing-form] No vessel added (user cancelled)'); + } + }); + return modal.present(); + }); + } + /* -- protected method -- */ + isFieldFilterEnable(fieldName) { + return this.autocompleteFilters[fieldName]; + } + setFieldFilterEnable(fieldName, value, field, forceReload) { + if (this.autocompleteFilters[fieldName] !== value || forceReload) { + this.autocompleteFilters[fieldName] = value; + this.markForCheck(); + if (field) + field.reloadItems(); + } + } + suggestStrategy(value, filter) { + return __awaiter(this, void 0, void 0, function* () { + // Avoid to reload, when value is already a valid strategy + if (ReferentialUtils.isNotEmpty(value)) + return { data: [value] }; + filter = Object.assign(Object.assign({}, filter), { levelLabel: this.programLabel }); + if (isNilOrBlank(filter.levelLabel)) + return undefined; // Program no loaded yet + // Force network, if possible - fix IMAGINE 302 + const fetchPolicy = (this.networkService.online && 'network-only') || undefined; /*default*/ + return this.referentialRefService.suggest(value, filter, undefined, undefined, { fetchPolicy }); + }); + } + openSelectObservedLocationModal(event) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (event) + event.preventDefault(); + const control = this.observedLocationControl; + if (!control || control.disabled) + return; + try { + control.disable({ emitEvent: false }); + const program = yield this.programRefService.loadByLabel(this.programLabel); + const defaultData = ObservedLocation.fromObject({ + program, + }); + const filter = ObservedLocationFilter.fromObject({ + program, + }); + if (this.showStrategy) { + const strategy = this.strategyControl.value; + const period = strategy && (yield this.strategyService.getDateRangeByLabel(this.strategyControl.value.label)); + filter.startDate = (strategy && period.startDate) || DateUtils.moment().startOf('year'); + filter.endDate = (strategy && period.endDate) || DateUtils.moment().endOf('year'); + } + const modal = yield this.modalCtrl.create({ + component: SelectObservedLocationsModal, + componentProps: { + allowMultipleSelection: false, + showFilterProgram: false, + allowNewObservedLocation: true, + defaultNewObservedLocation: defaultData, + selectedId: (_a = control.value) === null || _a === void 0 ? void 0 : _a.id, + filter, + }, + keyboardClose: true, + backdropDismiss: true, + cssClass: 'modal-large', + }); + yield modal.present(); + const { data } = yield modal.onDidDismiss(); + const value = data === null || data === void 0 ? void 0 : data[0]; + if (!value) + return; // User cancelled + console.debug('[landing-form] Selected observed location: ', value); + control.setValue(value); + control.markAsTouched(); + } + finally { + control.enable(); + } + }); + } + suggestObservers(value, filter) { + const currentControlValue = ReferentialUtils.isNotEmpty(value) ? value : null; + const newValue = currentControlValue ? '*' : value; + // Excluded existing observers, BUT keep the current control value + const excludedIds = (this.observersForm.value || []) + .filter(ReferentialUtils.isNotEmpty) + .filter((person) => !currentControlValue || currentControlValue !== person) + .map((person) => parseInt(person.id)); + return this.personService.suggest(newValue, Object.assign(Object.assign({}, filter), { excludedIds })); + } + suggestMetiers(value, filter) { + const currentControlValue = ReferentialUtils.isNotEmpty(value) ? value : null; + // Excluded existing observers, BUT keep the current control value + const excludedIds = (this.metiersForm.value || []) + .filter(ReferentialUtils.isNotEmpty) + .filter((item) => !currentControlValue || currentControlValue !== item) + .map((item) => parseInt(item.id)); + return this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { excludedIds })); + } + suggestFishingAreaLocations(value, filter) { + return __awaiter(this, void 0, void 0, function* () { + const currentControlValue = ReferentialUtils.isNotEmpty(value) ? value : null; + // Excluded existing locations, BUT keep the current control value + const excludedIds = (this.fishingAreasForm.value || []) + .map((fa) => fa.location) + .filter(ReferentialUtils.isNotEmpty) + .filter((item) => !currentControlValue || currentControlValue !== item) + .map((item) => parseInt(item.id)); + if (this.autocompleteFilters.fishingArea && isNotNil(this.filteredFishingAreaLocations)) { + return suggestFromArray(this.filteredFishingAreaLocations, value, Object.assign(Object.assign({}, filter), { excludedIds })); + } + else { + return this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { excludedIds })); + } + }); + } + initObserversHelper() { + if (isNil(this._showObservers)) + return; // skip if not loading yet + // Create helper, if need + if (!this.observersHelper) { + this.observersHelper = new FormArrayHelper(FormArrayHelper.getOrCreateArray(this.formBuilder, this.form, 'observers'), (person) => this.validatorService.getObserverControl(person), ReferentialUtils.equals, ReferentialUtils.isEmpty, { allowEmptyArray: !this._showObservers }); + } + // Helper exists: update options + else { + this.observersHelper.allowEmptyArray = !this._showObservers; + } + if (this._showObservers) { + // Create at least one observer + if (this.observersHelper.size() === 0) { + this.observersHelper.resize(1); + } + } + else if (this.observersHelper.size() > 0) { + this.observersHelper.resize(0); + } + } + initTripForm() { + let tripForm = this.tripForm; + if (!tripForm) { + // DEBUG + //console.debug('[landing-form] Creating trip form'); + const tripFormConfig = this.tripValidatorService.getFormGroupConfig(null, { + withMetiers: this.showMetier, + withFishingAreas: this.showFishingArea, + withSale: false, + withObservers: false, + withMeasurements: false, + departureDateTimeRequired: false, + }); + // Excluded some trip's fields + TRIP_FORM_EXCLUDED_FIELD_NAMES.filter((key) => { + if (!this.showTripDepartureDateTime || key !== 'departureDateTime') { + delete tripFormConfig[key]; + } + }); + tripForm = this.formBuilder.group(tripFormConfig); + this.form.addControl('trip', tripForm); + } + return tripForm; + } + initStrategyControl(showStrategy) { + var _a; + if (showStrategy) { + let control = this.strategyControl; + if (!control) { + const strategyLabel = this.strategyLabel; + control = this.formBuilder.control((strategyLabel && { label: strategyLabel }) || null, Validators.required); + this.form.setControl('strategy', control); + // Propagate strategy changes + const subscription = control.valueChanges + .pipe(filter((value) => EntityUtils.isNotEmpty(value, 'label')), map((value) => value.label), distinctUntilChanged()) + .subscribe((value) => (this.strategyLabel = value)); + subscription.add(() => { + this.unregisterSubscription(subscription); + this._strategySubscription = null; + }); + this.registerSubscription(subscription); + this._strategySubscription = subscription; + } + return control; + } + else { + (_a = this._strategySubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + this.form.removeControl('strategy'); + return null; + } + } + initObservedLocationControl(showObservedLocation) { + var _a, _b; + if (showObservedLocation) { + let control = this.observedLocationControl; + if (!control) { + // Create control + control = this.formBuilder.control(((_a = this.data) === null || _a === void 0 ? void 0 : _a.observedLocation) || null, [Validators.required, SharedValidators.entity]); + this.form.addControl('observedLocation', control); + // Subscribe to changes, and redirect it to the parent event emitter + const subscription = control.valueChanges.subscribe((ol) => this.observedLocationChanges.emit(ol)); + subscription.add(() => { + this.unregisterSubscription(subscription); + this._parentSubscription = null; + }); + this.registerSubscription(subscription); + this._parentSubscription = subscription; + } + return control; + } + else { + (_b = this._parentSubscription) === null || _b === void 0 ? void 0 : _b.unsubscribe(); + this.form.removeControl('observedLocation'); + return null; + } + } + initMetiersHelper(form) { + if (!this.metiersHelper) { + this.metiersHelper = new FormArrayHelper(FormArrayHelper.getOrCreateArray(this.formBuilder, form, 'metiers'), (metier) => this.tripValidatorService.getMetierControl(metier), ReferentialUtils.equals, ReferentialUtils.isEmpty, { allowEmptyArray: !this.showMetier }); + } + else { + this.metiersHelper.allowEmptyArray = !this.showMetier; + } + if (this.showMetier) { + if (this.metiersHelper.size() === 0) { + this.metiersHelper.resize(1); + } + } + else if (this.metiersHelper.size() > 0) { + this.metiersHelper.resize(0); + } + } + initFishingAreas(form) { + if (!this.fishingAreasHelper) { + this.fishingAreasHelper = new FormArrayHelper(FormArrayHelper.getOrCreateArray(this.formBuilder, form, 'fishingAreas'), (fishingArea) => this.fishingAreaValidatorService.getFormGroup(fishingArea, { required: true }), (o1, o2) => (isNil(o1) && isNil(o2)) || (o1 && o1.equals(o2)), (fishingArea) => !fishingArea || ReferentialUtils.isEmpty(fishingArea.location), { allowEmptyArray: !this.showFishingArea }); + } + else { + this.fishingAreasHelper.allowEmptyArray = !this.showFishingArea; + } + if (this.showFishingArea) { + if (this.fishingAreasHelper.size() === 0) { + this.fishingAreasHelper.resize(1); + } + } + else if (this.fishingAreasHelper.size() > 0) { + this.fishingAreasHelper.resize(0); + } + } + /** + * Make sure a pmfmStrategy exists to store the Strategy.label + */ + mapPmfms(pmfms) { + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.debug(`${this._logPrefix} calling mapPmfms()`); + // Create the missing Pmfm, to hold strategy (if need) + if (this.showStrategy) { + const existingIndex = (pmfms || []).findIndex((pmfm) => pmfm.id === PmfmIds.STRATEGY_LABEL); + let strategyPmfm; + if (existingIndex !== -1) { + // Remove existing, then copy it (to leave original unchanged) + strategyPmfm = pmfms.splice(existingIndex, 1)[0].clone(); + } + else { + strategyPmfm = DenormalizedPmfmStrategy.fromObject({ + id: PmfmIds.STRATEGY_LABEL, + type: 'string', + }); + } + strategyPmfm.hidden = true; // Do not display it in measurement + strategyPmfm.required = false; // Not need to be required, because of strategyControl validator + // Prepend to list + pmfms = [strategyPmfm, ...pmfms]; + } + return pmfms; + }); + } + markForCheck() { + this.cd.markForCheck(); + } + displayObservedLocation(ol) { + if (!ol) + return null; + const locationAttributes = this.settings.getFieldDisplayAttributes('location'); + const dateTimePattern = this.translate.instant('COMMON.DATE_TIME_PATTERN'); + return locationAttributes + .map((attr) => getPropertyByPath(ol, `location.${attr}`)) + .concat([this.dateAdapter.format(ol.startDateTime, dateTimePattern)]) + .filter(isNotNilOrBlank) + .join(' - '); + } + notHiddenPmfm(pmfm) { + return !pmfm.hidden; + } +}; +__decorate([ + ViewChildren('fishingAreaField'), + __metadata("design:type", QueryList) +], LandingForm.prototype, "fishingAreaFields", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], LandingForm.prototype, "i18nSuffix", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingForm.prototype, "required", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingForm.prototype, "showProgram", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingForm.prototype, "showVessel", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingForm.prototype, "showDateTime", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingForm.prototype, "showLocation", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingForm.prototype, "showComment", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingForm.prototype, "showMeasurements", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingForm.prototype, "showButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingForm.prototype, "showMetier", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingForm.prototype, "showFishingArea", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingForm.prototype, "showTripDepartureDateTime", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], LandingForm.prototype, "locationLevelIds", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], LandingForm.prototype, "allowAddNewVessel", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], LandingForm.prototype, "allowManyMetiers", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], LandingForm.prototype, "filteredFishingAreaLocations", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], LandingForm.prototype, "fishingAreaLocationLevelIds", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], LandingForm.prototype, "disabledParent", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingForm.prototype, "showStrategy", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingForm.prototype, "enableFishingAreaFilter", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingForm.prototype, "canEditStrategy", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingForm.prototype, "showObservers", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingForm.prototype, "showParent", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], LandingForm.prototype, "parentAcquisitionLevel", null); +__decorate([ + Output(), + __metadata("design:type", Object) +], LandingForm.prototype, "observedLocationChanges", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], LandingForm.prototype, "openObservedLocation", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], LandingForm.prototype, "strategyChanges", void 0); +LandingForm = __decorate([ + Component({ + selector: 'app-landing-form', + templateUrl: './landing.form.html', + styleUrls: ['./landing.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + MeasurementsValidatorService, + UntypedFormBuilder, + ProgramRefService, + LandingValidatorService, + ReferentialRefService, + PersonService, + VesselSnapshotService, + ConfigService, + TranslateService, + ModalController, + TripValidatorService, + FishingAreaValidatorService, + NetworkService, + StrategyService, + DateAdapter]) +], LandingForm); +export { LandingForm }; +//# sourceMappingURL=landing.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landing.form.js.map b/out-tsc/app/app/trip/landing/landing.form.js.map new file mode 100644 index 000000000..77308e4c1 --- /dev/null +++ b/out-tsc/app/app/trip/landing/landing.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"landing.form.js","sourceRoot":"","sources":["../../../../../src/app/trip/landing/landing.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landing.model.js b/out-tsc/app/app/trip/landing/landing.model.js new file mode 100644 index 000000000..61afb0eb9 --- /dev/null +++ b/out-tsc/app/app/trip/landing/landing.model.js @@ -0,0 +1,114 @@ +var Landing_1; +import { __decorate, __metadata } from "tslib"; +import { MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { Sample } from '../sample/sample.model'; +import { DataRootVesselEntity } from '@app/data/services/model/root-vessel-entity.model'; +import { fillRankOrder } from '@app/data/services/model/model.utils'; +import { DateUtils, EntityClass, EntityClasses, fromDateISOString, isNotNil, isNotNilOrBlank, Person, ReferentialRef, ReferentialUtils, toDateISOString, toNumber } from '@sumaris-net/ngx-components'; +import { PmfmIds } from '@app/referential/services/model/model.enum'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +import { Strategy } from '@app/referential/services/model/strategy.model'; +/** + * Landing entity + */ +let Landing = Landing_1 = class Landing extends DataRootVesselEntity { + constructor() { + super(Landing_1.TYPENAME); + this.strategy = null; + this.dateTime = null; + this.location = null; + this.rankOrder = null; + this.rankOrderOnVessel = null; + this.measurementValues = null; + // Parent entity + this.tripId = null; + this.trip = null; + this.observedLocationId = null; + this.observedLocation = null; + this.observers = null; + this.samples = null; + this.samplesCount = null; + } + asObject(opts) { + var _a, _b, _c, _d, _e; + const target = super.asObject(opts); + target.dateTime = toDateISOString(this.dateTime); + target.location = + (this.location && this.location.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS /*keep for list*/))) || undefined; + target.observers = (this.observers && this.observers.map((p) => p && p.asObject(opts))) || undefined; + target.measurementValues = MeasurementValuesUtils.asObject(this.measurementValues, opts); + target.rankOrder = this.rankOrderOnVessel; // this.rankOrder is not persisted + // Parent + target.tripId = this.tripId; + target.trip = ((_a = this.trip) === null || _a === void 0 ? void 0 : _a.asObject(opts)) || undefined; + target.observedLocationId = this.observedLocationId; + target.observedLocation = ((_b = this.observedLocation) === null || _b === void 0 ? void 0 : _b.asObject(opts)) || undefined; + // Samples + target.samples = (this.samples && this.samples.map((s) => s.asObject(opts))) || undefined; + target.samplesCount = + (this.samples && this.samples.filter((s) => s.measurementValues && isNotNilOrBlank(s.measurementValues[PmfmIds.TAG_ID])).length) || undefined; + // Strategy + target.strategy = (_c = this.strategy) === null || _c === void 0 ? void 0 : _c.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS /*keep for field*/)); + if (opts && opts.minify) { + delete target.rankOrderOnVessel; + target.observedLocationId = toNumber(target.observedLocationId, (_d = target.observedLocation) === null || _d === void 0 ? void 0 : _d.id); + delete target.observedLocation; + if (((_e = target.strategy) === null || _e === void 0 ? void 0 : _e.label) && PmfmIds.STRATEGY_LABEL !== -1) { + target.measurementValues[PmfmIds.STRATEGY_LABEL] = target.strategy.label; + } + delete target.strategy; + } + return target; + } + fromObject(source) { + var _a, _b; + super.fromObject(source); + this.dateTime = fromDateISOString(source.dateTime); + this.location = source.location && ReferentialRef.fromObject(source.location); + this.rankOrder = source.rankOrder; + this.rankOrderOnVessel = source.rankOrder; // Landing.rankOrder is stored in rankOrderOnVessel, this.rankOrder is computed by LandingService + this.observers = (source.observers && source.observers.map(Person.fromObject)) || []; + this.measurementValues = Object.assign({}, source.measurementValues); // Copy values + // Parent + this.tripId = source.tripId; + this.trip = (source.trip && EntityClasses.fromObject(source.trip, { entityName: 'Trip' })) || undefined; + this.observedLocationId = source.observedLocationId; + this.observedLocation = + (source.observedLocation && EntityClasses.fromObject(source.observedLocation, { entityName: 'ObservedLocation' })) || undefined; + // Samples + this.samples = (source.samples && source.samples.map(Sample.fromObject)) || undefined; + this.samplesCount = toNumber(source.samplesCount, (_a = this.samples) === null || _a === void 0 ? void 0 : _a.filter((s) => s.measurementValues && isNotNilOrBlank(s.measurementValues[PmfmIds.TAG_ID])).length); + // Strategy + this.strategy = + ReferentialRef.fromObject(source.strategy) || + (((_b = source.measurementValues) === null || _b === void 0 ? void 0 : _b[PmfmIds.STRATEGY_LABEL]) && Strategy.fromObject({ label: source.measurementValues[PmfmIds.STRATEGY_LABEL] })) || + undefined; + // Fill rankOrder (workaround - fix an issue in IMAGINE) + // FIXME: remove when SAMPLE.RANK_ORDER will always be filled by IMAGINE + fillRankOrder(this.samples); + } + equals(other) { + return ((super.equals(other) && isNotNil(this.id)) || + // Same vessel + (this.vesselSnapshot && + other.vesselSnapshot && + this.vesselSnapshot.id === other.vesselSnapshot.id && + // Same rank order on vessel + this.rankOrderOnVessel && + other.rankOrderOnVessel && + this.rankOrderOnVessel === other.rankOrderOnVessel && + // Same date + DateUtils.equals(this.dateTime, other.dateTime) && + // Same location + ReferentialUtils.equals(this.location, other.location))); + } + getStrategyDateTime() { + return this.dateTime; + } +}; +Landing = Landing_1 = __decorate([ + EntityClass({ typename: 'LandingVO' }), + __metadata("design:paramtypes", []) +], Landing); +export { Landing }; +//# sourceMappingURL=landing.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landing.model.js.map b/out-tsc/app/app/trip/landing/landing.model.js.map new file mode 100644 index 000000000..6f7e4a7f6 --- /dev/null +++ b/out-tsc/app/app/trip/landing/landing.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"landing.model.js","sourceRoot":"","sources":["../../../../../src/app/trip/landing/landing.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landing.module.js b/out-tsc/app/app/trip/landing/landing.module.js new file mode 100644 index 000000000..2246769c7 --- /dev/null +++ b/out-tsc/app/app/trip/landing/landing.module.js @@ -0,0 +1,55 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { LandingsTable } from './landings.table'; +import { LandingPage } from './landing.page'; +import { LandingForm } from './landing.form'; +import { SelectLandingsModal } from './select-landings.modal'; +import { AppDataModule } from '@app/data/data.module'; +import { TranslateModule } from '@ngx-translate/core'; +import { VesselModule } from '../../vessel/vessel.module'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppMeasurementModule } from '@app/data/measurement/measurement.module'; +import { AppSampleModule } from '@app/trip/sample/sample.module'; +import { LandingsPage } from '@app/trip/landing/landings.page'; +import { AppObservedLocationOfflineModule } from '@app/trip/observedlocation/offline/observed-location-offline.module'; +import { AppSelectObservedLocationsModalModule } from '@app/trip/observedlocation/select-modal/select-observed-locations.module'; +let AppLandingModule = class AppLandingModule { + constructor() { + console.debug('[landing] Creating module...'); + } +}; +AppLandingModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + AppDataModule, + VesselModule, + AppReferentialModule, + TranslateModule.forChild(), + // Functional modules + AppMeasurementModule, + AppSampleModule, + AppObservedLocationOfflineModule, + AppSelectObservedLocationsModalModule + ], + declarations: [ + LandingsTable, + LandingForm, + LandingPage, + SelectLandingsModal, + LandingsPage + ], + exports: [ + // Components + LandingsTable, + LandingForm, + LandingPage, + SelectLandingsModal, + LandingsPage + ] + }), + __metadata("design:paramtypes", []) +], AppLandingModule); +export { AppLandingModule }; +//# sourceMappingURL=landing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landing.module.js.map b/out-tsc/app/app/trip/landing/landing.module.js.map new file mode 100644 index 000000000..44332fe68 --- /dev/null +++ b/out-tsc/app/app/trip/landing/landing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"landing.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/landing/landing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,gCAAgC,EAAE,MAAM,qEAAqE,CAAC;AACvH,OAAO,EAAE,qCAAqC,EAAE,MAAM,0EAA0E,CAAC;AAiC1H,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAE3B;QACE,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAChD,CAAC;CACF,CAAA;AALY,gBAAgB;IA9B5B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,aAAa;YACb,YAAY;YACZ,oBAAoB;YACpB,eAAe,CAAC,QAAQ,EAAE;YAE1B,qBAAqB;YACrB,oBAAoB;YACpB,eAAe;YACf,gCAAgC;YAChC,qCAAqC;SACtC;QACD,YAAY,EAAE;YACZ,aAAa;YACb,WAAW;YACX,WAAW;YACX,mBAAmB;YACnB,YAAY;SACb;QACD,OAAO,EAAE;YACP,aAAa;YACb,aAAa;YACb,WAAW;YACX,WAAW;YACX,mBAAmB;YACnB,YAAY;SACb;KACF,CAAC;;GACW,gBAAgB,CAK5B;SALY,gBAAgB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landing.page.js b/out-tsc/app/app/trip/landing/landing.page.js new file mode 100644 index 000000000..a82a0992d --- /dev/null +++ b/out-tsc/app/app/trip/landing/landing.page.js @@ -0,0 +1,694 @@ +var LandingPage_1; +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, Optional, ViewChild } from '@angular/core'; +import { AppEditorOptions, EntityUtils, equals, fadeInOutAnimation, firstArrayValue, firstNotNilPromise, firstTruePromise, fromDateISOString, isEmptyArray, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, NetworkService, ReferentialRef, ReferentialUtils, removeDuplicatesFromArray, ServerErrorCodes, } from '@sumaris-net/ngx-components'; +import { LandingForm } from './landing.form'; +import { SAMPLE_TABLE_DEFAULT_I18N_PREFIX, SamplesTable } from '../sample/samples.table'; +import { LandingService } from './landing.service'; +import { AppRootDataEntityEditor, RootDataEditorOptions } from '@app/data/form/root-data-editor.class'; +import { ObservedLocationService } from '../observedlocation/observed-location.service'; +import { TripService } from '../trip/trip.service'; +import { debounceTime, filter, map, tap, throttleTime } from 'rxjs/operators'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { VesselSnapshotService } from '@app/referential/services/vessel-snapshot.service'; +import { Landing } from './landing.model'; +import { Trip } from '../trip/trip.model'; +import { ObservedLocation } from '../observedlocation/observed-location.model'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { environment } from '@environments/environment'; +import { STRATEGY_SUMMARY_DEFAULT_I18N_PREFIX, StrategySummaryCardComponent } from '@app/data/strategy/strategy-summary-card.component'; +import { merge } from 'rxjs'; +import { Strategy } from '@app/referential/services/model/strategy.model'; +import { AcquisitionLevelCodes, PmfmIds } from '@app/referential/services/model/model.enum'; +import { ContextService } from '@app/shared/context.service'; +import { DenormalizedPmfmStrategy } from '@app/referential/services/model/pmfm-strategy.model'; +import moment from 'moment'; +import { TRIP_LOCAL_SETTINGS_OPTIONS } from '@app/trip/trip.config'; +import { LandingsPageSettingsEnum } from '@app/trip/landing/landings.page'; +import { MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { APP_DATA_ENTITY_EDITOR, DataStrategyResolutions } from '@app/data/form/data-editor.utils'; +export class LandingEditorOptions extends RootDataEditorOptions { +} +let LandingPage = LandingPage_1 = class LandingPage extends AppRootDataEntityEditor { + constructor(injector, options) { + super(injector, Landing, injector.get(LandingService), Object.assign({ tabCount: 2, i18nPrefix: 'LANDING.EDIT.', enableListenChanges: true, acquisitionLevel: AcquisitionLevelCodes.LANDING }, options)); + this.showParent = false; + this.showEntityMetadata = false; + this.showQualityForm = false; + this.showSamplesTable = false; + this.enableReport = false; + this.observedLocationService = injector.get(ObservedLocationService); + this.tripService = injector.get(TripService); + this.referentialRefService = injector.get(ReferentialRefService); + this.vesselService = injector.get(VesselSnapshotService); + this.context = injector.get(ContextService); + this.network = injector.get(NetworkService); + this.parentAcquisitionLevel = this.route.snapshot.queryParamMap.get('parent'); + this.showParent = !!this.parentAcquisitionLevel; + // FOR DEV ONLY ---- + this.debug = !environment.production; + this.logPrefix = '[landing-page] '; + } + get form() { + return this.landingForm.form; + } + get strategyLabel() { + return this._state.get('strategyLabel'); + } + set strategyLabel(value) { + this._state.set('strategyLabel', () => value); + } + ngAfterViewInit() { + super.ngAfterViewInit(); + // Enable samples tab, when has pmfms + firstTruePromise(this.samplesTable.hasPmfms$).then(() => { + this.showSamplesTable = true; + this.markForCheck(); + }); + // Use landing date as default dateTime for samples + this.registerSubscription(this.landingForm.form + .get('dateTime') + .valueChanges.pipe(throttleTime(200), filter(isNotNil), tap((dateTime) => (this.samplesTable.defaultSampleDate = fromDateISOString(dateTime)))) + .subscribe()); + this.registerSubscription(this.landingForm.observedLocationChanges.pipe(filter((_) => this.showParent)).subscribe((parent) => this.onParentChanged(parent))); + // Watch table events, to avoid strategy edition, when has sample rows + this.registerSubscription(merge(this.samplesTable.onConfirmEditCreateRow, this.samplesTable.onCancelOrDeleteRow, this.samplesTable.onAfterDeletedRows) + .pipe(debounceTime(500)) + .subscribe(() => (this.landingForm.canEditStrategy = this.samplesTable.empty))); + } + canUserWrite(data, opts) { + var _a; + return isNil((_a = this.parent) === null || _a === void 0 ? void 0 : _a.validationDate) && super.canUserWrite(data, opts); + } + reload() { + return __awaiter(this, void 0, void 0, function* () { + this.markAsLoading(); + const route = this.route.snapshot; + yield this.load(this.data && this.data.id, route.params); + }); + } + watchStrategyFilter(program) { + console.debug(this.logPrefix + 'watchStrategyFilter', this.acquisitionLevel); + if (this.strategyResolution === 'user-select') { + return this._state.select(['acquisitionLevel', 'strategyLabel'], s => s) + .pipe( + // DEBUG + tap(s => console.debug(this.logPrefix + 'Received strategy label: ', s)), map(({ acquisitionLevel, strategyLabel }) => { + return { + acquisitionLevel, + programId: program.id, + label: strategyLabel + }; + })); + } + return super.watchStrategyFilter(program); + } + onPrepareSampleForm({ form, pmfms }) { + var _a; + console.debug('[landing-page] Initializing sample form (validators...)'); + // Add computation and validation + (_a = this._rowValidatorSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + this._rowValidatorSubscription = this.registerSampleRowValidator(form, pmfms); + } + setError(err, opts) { + // cast err to solve type error : detail is not a property of AppErrorWithDetails, property detail is on AppErrorWithDetails.error.detail + err = err; + if (err && + typeof err !== 'string' && + (err === null || err === void 0 ? void 0 : err.code) === ServerErrorCodes.DATA_NOT_UNIQUE && + (err === null || err === void 0 ? void 0 : err.details) && + typeof err.details === 'object' && + err.details.hasOwnProperty('duplicatedValues')) { + const details = err.details; + this.samplesTable.setError('LANDING.ERROR.DUPLICATED_SAMPLE_TAG_ID', { duplicatedValues: details.duplicatedValues }); + super.setError(undefined, opts); + this.selectedTabIndex = this.getFirstInvalidTabIndex(); + } + else { + this.samplesTable.setError(undefined); + super.setError(err, opts); + } + } + updateView(data, opts) { + const _super = Object.create(null, { + updateView: { get: () => super.updateView } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.updateView.call(this, data, opts); + this.landingForm.showParent = this.showParent; + this.landingForm.parentAcquisitionLevel = this.parentAcquisitionLevel; + if (this.parent) { + // Parent is an Observed location + if (this.parent instanceof ObservedLocation) { + this.landingForm.showProgram = false; + this.landingForm.showVessel = true; + } + // Parent is an Trip + else if (this.parent instanceof Trip) { + this.landingForm.showProgram = false; + this.landingForm.showVessel = false; + } + } + // No parent defined + else { + // If show parent + if (this.showParent) { + console.warn('[landing-page] Landing without parent: show parent field'); + this.landingForm.showProgram = false; + this.landingForm.showVessel = true; + this.landingForm.showLocation = false; + this.landingForm.showDateTime = false; + this.showQualityForm = true; + } + // Landing is root + else { + console.warn('[landing-page] Landing as ROOT has not been tested !'); + this.landingForm.showProgram = true; + this.landingForm.showVessel = true; + this.landingForm.showLocation = true; + this.landingForm.showDateTime = true; + this.showQualityForm = true; + } + } + if (!this.isNewData && this.landingForm.requiredStrategy) { + this.landingForm.canEditStrategy = false; + } + this.defaultBackHref = this.computeDefaultBackHref(); + if (!opts || opts.emitEvent !== false) { + this.markForCheck(); + } + }); + } + openReport(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.dirty) { + const data = yield this.saveAndGetDataIfValid(); + if (!data) + return; // Cancel + } + return this.router.navigateByUrl(this.computePageUrl(this.data.id) + '/report'); + }); + } + /* -- protected methods -- */ + registerForms() { + this.addChildForms([this.landingForm, this.samplesTable]); + } + onNewEntity(data, options) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const queryParams = this.route.snapshot.queryParams; + // DEBUG + //console.debug('DEV - Creating new landing entity'); + // Mask quality cards + this.showEntityMetadata = false; + this.showQualityForm = false; + if (this.isOnFieldMode) { + data.dateTime = moment(); + } + // Fill parent ids + data.observedLocationId = options && options.observedLocationId && parseInt(options.observedLocationId); + data.tripId = options && options.tripId && parseInt(options.tripId); + // Set rankOrder + if (isNotNil(queryParams['rankOrder'])) { + data.rankOrder = +queryParams['rankOrder']; + } + else { + data.rankOrder = 1; + } + // Fill defaults, from table's filter. + const tableId = this.queryParams['tableId']; + const searchFilter = tableId && this.settings.getPageSettings(tableId, LandingsPageSettingsEnum.FILTER_KEY); + if (searchFilter) { + // Synchronization status + if (searchFilter.synchronizationStatus && searchFilter.synchronizationStatus !== 'SYNC') { + data.synchronizationStatus = 'DIRTY'; + } + // program + if (searchFilter.program && searchFilter.program.label) { + data.program = ReferentialRef.fromObject(searchFilter.program); + } + // Location + if (searchFilter.location && this.landingForm.showLocation) { + data.location = ReferentialRef.fromObject(searchFilter.location); + } + // Strategy + if (searchFilter.strategy) { + data.strategy = Strategy.fromObject(searchFilter.strategy); + } + } + // Load parent + this.parent = yield this.loadParent(data); + yield this.fillPropertiesFromParent(data, this.parent); + // Get contextual strategy + const contextualStrategy = this.context.getValue('strategy'); + const strategyLabel = ((_a = data.strategy) === null || _a === void 0 ? void 0 : _a.label) || (contextualStrategy === null || contextualStrategy === void 0 ? void 0 : contextualStrategy.label) || queryParams['strategyLabel']; + if (strategyLabel) { + data.measurementValues = data.measurementValues || {}; + data.measurementValues[PmfmIds.STRATEGY_LABEL] = strategyLabel; + if (EntityUtils.isEmpty(data.strategy, 'id')) { + data.strategy = contextualStrategy || (yield this.strategyRefService.loadByLabel(strategyLabel)); + } + } + // Emit program, strategy + const programLabel = (_b = data.program) === null || _b === void 0 ? void 0 : _b.label; + if (programLabel) + this.programLabel = programLabel; + if (strategyLabel) + this.strategyLabel = strategyLabel; + }); + } + onEntityLoaded(data, options) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + this.parent = yield this.loadParent(data); + const programLabel = (_a = this.parent.program) === null || _a === void 0 ? void 0 : _a.label; + // Copy not fetched data + if (this.parent) { + // Set program using parent's program, if not already set + data.program = ReferentialUtils.isNotEmpty(data.program) ? data.program : this.parent.program; + data.observers = (isNotEmptyArray(data.observers) && data.observers) || this.parent.observers; + if (this.parent instanceof ObservedLocation) { + data.location = data.location || this.parent.location; + data.dateTime = data.dateTime || this.parent.startDateTime || this.parent.endDateTime; + data.observedLocation = this.showParent ? this.parent : undefined; + data.observedLocationId = this.showParent ? null : this.parent.id; + data.tripId = undefined; + //data.trip = undefined; // Keep it + } + else if (this.parent instanceof Trip) { + data.vesselSnapshot = this.parent.vesselSnapshot; + data.location = data.location || this.parent.returnLocation || this.parent.departureLocation; + data.dateTime = data.dateTime || this.parent.returnDateTime || this.parent.departureDateTime; + data.trip = this.showParent ? this.parent : undefined; + data.tripId = this.showParent ? undefined : this.parent.id; + data.observedLocation = undefined; + data.observedLocationId = undefined; + } + this.showEntityMetadata = EntityUtils.isRemote(data); + this.showQualityForm = false; + } + // Landing as root + else { + this.showEntityMetadata = EntityUtils.isRemote(data); + this.showQualityForm = this.showEntityMetadata; + } + const strategyLabel = data.measurementValues && data.measurementValues[PmfmIds.STRATEGY_LABEL]; + this.landingForm.canEditStrategy = isNil(strategyLabel) || isEmptyArray(data.samples); + // Emit program, strategy + if (programLabel) + this.programLabel = programLabel; + if (strategyLabel) + this.strategyLabel = strategyLabel; + }); + } + onParentChanged(parent) { + return __awaiter(this, void 0, void 0, function* () { + if (!equals(parent, this.parent)) { + console.debug('[landing] Parent changed to: ', parent); + this.parent = parent; + // Update data (copy some properties) + if (this.loaded && !this.saving) { + const data = yield this.getValue(); + yield this.fillPropertiesFromParent(data, parent); + yield this.setValue(data); + this.markAsDirty(); + } + } + }); + } + fillPropertiesFromParent(data, parent) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + // DEBUG + console.debug('[landing-page] Fill some properties from parent', parent); + const queryParams = this.route.snapshot.queryParams; + if (parent) { + // Copy parent program and observers + data.program = parent.program; + data.observers = parent.observers; + if (parent instanceof ObservedLocation) { + data.observedLocation = this.showParent ? parent : undefined; + data.observedLocationId = this.showParent ? null : this.parent.id; + data.location = (this.landingForm.showLocation && data.location) || parent.location; + data.dateTime = (this.landingForm.showDateTime && data.dateTime) || parent.startDateTime || parent.endDateTime; + // Keep trip, because some data are stored into the trip (e.g. fishingAreas, metier, ...) + //data.trip = undefined; + data.tripId = undefined; + // Load the vessel, if any + if (isNotNil(queryParams['vessel'])) { + const vesselId = +queryParams['vessel']; + console.debug(`[landing-page] Loading vessel {${vesselId}}...`); + data.vesselSnapshot = yield this.vesselService.load(vesselId, { fetchPolicy: 'cache-first' }); + } + } + else if (parent instanceof Trip) { + data.trip = this.showParent ? parent : undefined; + data.vesselSnapshot = parent.vesselSnapshot; + data.location = parent.returnLocation || parent.departureLocation; + data.dateTime = parent.returnDateTime || parent.departureDateTime; + data.observedLocation = undefined; + data.observedLocationId = undefined; + } + // Copy date to samples, if not set by user + if (!this.samplesTable.showSampleDateColumn) { + console.debug(`[landing-page] Updating samples...`); + (data.samples || []).forEach((sample) => { + sample.sampleDate = data.dateTime; + }); + } + } + // No parent + else { + const contextualProgram = this.context.getValue('program'); + const programLabel = ((_a = data.program) === null || _a === void 0 ? void 0 : _a.label) || (contextualProgram === null || contextualProgram === void 0 ? void 0 : contextualProgram.label) || queryParams['program']; + if (programLabel && EntityUtils.isEmpty(data === null || data === void 0 ? void 0 : data.program, 'id')) { + data.program = contextualProgram || (yield this.programRefService.loadByLabel(programLabel)); + } + } + }); + } + computeDefaultBackHref() { + if (this.parent && !this.showParent) { + // Back to parent observed location + if (this.parent instanceof ObservedLocation) { + return `/observations/${this.parent.id}?tab=1`; + } + // Back to parent trip + else if (this.parent instanceof Trip) { + return `/trips/${this.parent.id}?tab=2`; + } + } + if (this.parentAcquisitionLevel) { + // Back to entity table + switch (this.parentAcquisitionLevel) { + case 'OBSERVED_LOCATION': + return `/observations/landings`; + break; + default: + throw new Error('Cannot compute the back href, for parent ' + this.parentAcquisitionLevel); + } + } + } + setProgram(program) { + const _super = Object.create(null, { + setProgram: { get: () => super.setProgram } + }); + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!program) + return; // Skip + yield _super.setProgram.call(this, program); + const isNewData = this.isNewData; + // Customize the UI, using program options + const enableStrategy = program.getPropertyAsBoolean(ProgramProperties.LANDING_STRATEGY_ENABLE); + this.landingForm.locationLevelIds = program.getPropertyAsNumbers(ProgramProperties.OBSERVED_LOCATION_LOCATION_LEVEL_IDS); + this.landingForm.allowAddNewVessel = program.getPropertyAsBoolean(ProgramProperties.OBSERVED_LOCATION_CREATE_VESSEL_ENABLE); + this.landingForm.showStrategy = enableStrategy; + this.landingForm.requiredStrategy = !isNewData && enableStrategy; + this.landingForm.canEditStrategy = isNewData && enableStrategy; + this.landingForm.showObservers = program.getPropertyAsBoolean(ProgramProperties.LANDING_OBSERVERS_ENABLE); + this.landingForm.showDateTime = program.getPropertyAsBoolean(ProgramProperties.LANDING_DATE_TIME_ENABLE); + this.landingForm.showLocation = program.getPropertyAsBoolean(ProgramProperties.LANDING_LOCATION_ENABLE); + this.landingForm.fishingAreaLocationLevelIds = program.getPropertyAsNumbers(ProgramProperties.LANDING_FISHING_AREA_LOCATION_LEVEL_IDS); + // Compute i18n prefix + let i18nSuffix = program.getProperty(ProgramProperties.I18N_SUFFIX); + i18nSuffix = i18nSuffix && i18nSuffix !== 'legacy' ? i18nSuffix : ((_a = this.i18nContext) === null || _a === void 0 ? void 0 : _a.suffix) || ''; + this.i18nContext.suffix = i18nSuffix; + this.landingForm.i18nSuffix = i18nSuffix; + this.enableReport = program.getPropertyAsBoolean(ProgramProperties.OBSERVED_LOCATION_REPORT_ENABLE); + if (this.samplesTable) { + this.samplesTable.i18nColumnSuffix = i18nSuffix; + this.samplesTable.i18nColumnPrefix = SAMPLE_TABLE_DEFAULT_I18N_PREFIX + i18nSuffix; + this.samplesTable.setModalOption('maxVisibleButtons', program.getPropertyAsInt(ProgramProperties.MEASUREMENTS_MAX_VISIBLE_BUTTONS)); + this.samplesTable.setModalOption('maxItemCountForButtons', program.getPropertyAsInt(ProgramProperties.MEASUREMENTS_MAX_ITEM_COUNT_FOR_BUTTONS)); + this.samplesTable.weightDisplayedUnit = this.settings.getProperty(TRIP_LOCAL_SETTINGS_OPTIONS.SAMPLE_WEIGHT_UNIT, program.getProperty(ProgramProperties.LANDING_SAMPLE_WEIGHT_UNIT)); + this.samplesTable.showLabelColumn = program.getPropertyAsBoolean(ProgramProperties.LANDING_SAMPLE_LABEL_ENABLE); + // Apply sample table pmfms + // If strategy is required, pmfms will be set by setStrategy() + if (!enableStrategy) { + yield this.setTablePmfms(this.samplesTable, program.label); + } + } + if (this.strategyCard) { + this.strategyCard.i18nPrefix = STRATEGY_SUMMARY_DEFAULT_I18N_PREFIX + i18nSuffix; + } + // Emit ready event (should allow children forms to apply value) + // If strategy is required, markAsReady() will be called in setStrategy() + if (!enableStrategy || isNewData) { + this.markAsReady(); + } + // Listen program's strategies change (will reload strategy if need) + if (this.network.online) { + this.startListenProgramRemoteChanges(program); + this.startListenStrategyRemoteChanges(program); + } + }); + } + setStrategy(strategy, opts) { + const _super = Object.create(null, { + setStrategy: { get: () => super.setStrategy } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.setStrategy.call(this, strategy); + const program = this.program; + if (!strategy || !program) + return; // Skip if empty + // Propagate to form + this.landingForm.strategyLabel = strategy.label; + // Propagate strategy's fishing area locations to form + const fishingAreaLocations = removeDuplicatesFromArray((strategy.appliedStrategies || []).map((a) => a.location), 'id'); + this.landingForm.filteredFishingAreaLocations = fishingAreaLocations; + this.landingForm.enableFishingAreaFilter = isNotEmptyArray(fishingAreaLocations); // Enable filter should be done AFTER setting locations, to reload items + // Configure samples table + if (this.samplesTable && this.samplesTable.acquisitionLevel) { + this.samplesTable.strategyLabel = strategy.label; + const taxonNameStrategy = firstArrayValue(strategy.taxonNames); + this.samplesTable.defaultTaxonName = taxonNameStrategy && taxonNameStrategy.taxonName; + this.samplesTable.showTaxonGroupColumn = false; + // Load strategy's pmfms + yield this.setTablePmfms(this.samplesTable, program.label, strategy.label); + } + this.markAsReady(); + this.markForCheck(); + }); + } + setTablePmfms(table, programLabel, strategyLabel) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!strategyLabel) { + // Set the table program, to delegate pmfms load + table.programLabel = programLabel; + } + else { + // Load strategy's pmfms + let samplesPmfms = yield this.programRefService.loadProgramPmfms(programLabel, { + strategyLabel, + acquisitionLevel: table.acquisitionLevel, + }); + const strategyPmfmIds = samplesPmfms.map((pmfm) => pmfm.id); + // Retrieve additional pmfms(= PMFMs in date, but NOT in the strategy) + const additionalPmfmIds = ((!this.isNewData && ((_a = this.data) === null || _a === void 0 ? void 0 : _a.samples)) || []).reduce((res, sample) => MeasurementValuesUtils.getPmfmIds(sample.measurementValues || {}).reduce((res, pmfmId) => (!strategyPmfmIds.includes(pmfmId) ? res.concat(pmfmId) : res), res), []); + // Override samples table pmfm, if need + if (isNotEmptyArray(additionalPmfmIds)) { + // Load additional pmfms, from ids + const additionalPmfms = (yield Promise.all(additionalPmfmIds.map((id) => this.pmfmService.loadPmfmFull(id)))).map(DenormalizedPmfmStrategy.fromFullPmfm); + // IMPORTANT: Make sure pmfms have been loaded once, BEFORE override. + // (Elsewhere, the strategy's PMFM will be applied after the override, and additional PMFM will be lost) + samplesPmfms = samplesPmfms.concat(additionalPmfms); + } + // Give it to samples table (but exclude STRATEGY_LABEL) + table.pmfms = samplesPmfms.filter((p) => p.id !== PmfmIds.STRATEGY_LABEL); + // Avoid to load by program, because PMFM are already known + //table.programLabel = programLabel; + } + }); + } + loadParent(data) { + return __awaiter(this, void 0, void 0, function* () { + let parent; + // Load parent observed location + if (isNotNil(data.observedLocationId)) { + console.debug(`[landing-page] Loading parent observed location #${data.observedLocationId} ...`); + parent = yield this.observedLocationService.load(data.observedLocationId, { fetchPolicy: 'cache-first' }); + } + // Load parent trip + else if (isNotNil(data.tripId)) { + console.debug('[landing-page] Loading parent trip...'); + parent = yield this.tripService.load(data.tripId, { fetchPolicy: 'cache-first' }); + } + else { + console.debug('[landing] No parent (observed location or trip) found in path.'); + } + return parent; + }); + } + setValue(data) { + return __awaiter(this, void 0, void 0, function* () { + if (!data) + return; // Skip + yield this.landingForm.setValue(data); + // Set samples to table + this.samplesTable.value = data.samples || []; + }); + } + computePageHistory(title) { + const _super = Object.create(null, { + computePageHistory: { get: () => super.computePageHistory } + }); + return __awaiter(this, void 0, void 0, function* () { + return Object.assign(Object.assign({}, (yield _super.computePageHistory.call(this, title))), { icon: 'boat' }); + }); + } + computeTitle(data) { + return __awaiter(this, void 0, void 0, function* () { + const program = yield firstNotNilPromise(this.program$, { stop: this.destroySubject }); + let i18nSuffix = program.getProperty(ProgramProperties.I18N_SUFFIX); + i18nSuffix = (i18nSuffix !== 'legacy' && i18nSuffix) || ''; + const titlePrefix = (this.parent && + this.parent instanceof ObservedLocation && + this.translate.instant('LANDING.TITLE_PREFIX', { + location: this.parent.location && (this.parent.location.name || this.parent.location.label), + date: (this.parent.startDateTime && this.dateFormat.transform(this.parent.startDateTime)) || '', + })) || + ''; + // new data + if (!data || isNil(data.id)) { + return titlePrefix + this.translate.instant(`LANDING.NEW.${i18nSuffix}TITLE`); + } + // Existing data + return (titlePrefix + + this.translate.instant(`LANDING.EDIT.${i18nSuffix}TITLE`, { + vessel: data.vesselSnapshot && (data.vesselSnapshot.exteriorMarking || data.vesselSnapshot.name), + })); + }); + } + computePageUrl(id) { + const parentUrl = this.getParentPageUrl(); + return `${parentUrl}/landing/${id}`; + } + getFirstInvalidTabIndex() { + if (this.landingForm.invalid) + return 0; + if (this.samplesTable.invalid || this.samplesTable.error) + return 1; + return -1; + } + computeUsageMode(landing) { + return this.settings.isUsageMode('FIELD') && + // Force desktop mode if landing date/time is 1 day later than now + (isNil(landing && landing.dateTime) || landing.dateTime.diff(moment(), 'day') <= 1) + ? 'FIELD' + : 'DESK'; + } + getValue() { + const _super = Object.create(null, { + getValue: { get: () => super.getValue } + }); + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + // DEBUG + //console.debug('[landing-page] getValue()'); + const data = yield _super.getValue.call(this); + // Workaround, because sometime measurementValues is empty (see issue IMAGINE-273) + data.measurementValues = ((_a = this.form.controls.measurementValues) === null || _a === void 0 ? void 0 : _a.value) || {}; + // Store strategy label to measurement + if (this.strategyResolution === DataStrategyResolutions.USER_SELECT) { + const strategyLabel = (_b = this.strategy) === null || _b === void 0 ? void 0 : _b.label; + if (isNotNilOrBlank(strategyLabel)) { + data.measurementValues[PmfmIds.STRATEGY_LABEL] = strategyLabel; + } + } + // Save samples table + if (this.samplesTable.dirty) { + yield this.samplesTable.save(); + } + data.samples = this.samplesTable.value; + // DEBUG + //console.debug('[landing-page] DEV check getValue() result:', data); + return data; + }); + } + openObservedLocation(parent) { + return __awaiter(this, void 0, void 0, function* () { + const saved = (this.mobile || this.isOnFieldMode) && (!this.dirty || this.valid) + ? // If on field mode: try to save silently + yield this.save(null, { openTabIndex: -1 }) + : // If desktop mode: ask before save + yield this.saveIfDirtyAndConfirm(); + if (!saved) + return; // Skip + return this.navController.navigateForward(['observations', parent.id], { + replaceUrl: false, + queryParams: { + tab: 0, + embedded: true, + }, + }); + }); + } + getJsonValueToSave() { + var _a; + return (_a = this.landingForm.value) === null || _a === void 0 ? void 0 : _a.asObject(); + } + registerSampleRowValidator(form, pmfms) { + // Can be override by subclasses (e.g auction control, biological sampling samples table) + console.warn('[landing-page] No row validator override'); + return null; + } + setWeightDisplayUnit(unitLabel) { + return __awaiter(this, void 0, void 0, function* () { + if (this.samplesTable.weightDisplayedUnit === unitLabel) + return; // Skip if same + const saved = (this.mobile || this.isOnFieldMode) && (!this.dirty || this.valid) + ? // If on field mode: try to save silently + yield this.save(null, { openTabIndex: -1 }) + : // If desktop mode: ask before save + yield this.saveIfDirtyAndConfirm(); + if (!saved) + return; // Skip + console.debug('[landing-page] Change weight unit to ' + unitLabel); + this.samplesTable.weightDisplayedUnit = unitLabel; + this.settings.setProperty(TRIP_LOCAL_SETTINGS_OPTIONS.SAMPLE_WEIGHT_UNIT, unitLabel); + // Reload program and strategy + yield this.reloadProgram({ clearCache: false }); + if (this.landingForm.requiredStrategy) + yield this.reloadStrategy({ clearCache: false }); + // Reload data + setTimeout(() => this.reload(), 250); + }); + } +}; +__decorate([ + ViewChild('landingForm', { static: true }), + __metadata("design:type", LandingForm) +], LandingPage.prototype, "landingForm", void 0); +__decorate([ + ViewChild('samplesTable', { static: true }), + __metadata("design:type", SamplesTable) +], LandingPage.prototype, "samplesTable", void 0); +__decorate([ + ViewChild('strategyCard', { static: false }), + __metadata("design:type", StrategySummaryCardComponent) +], LandingPage.prototype, "strategyCard", void 0); +LandingPage = LandingPage_1 = __decorate([ + Component({ + selector: 'app-landing-page', + templateUrl: './landing.page.html', + styleUrls: ['./landing.page.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + animations: [fadeInOutAnimation], + providers: [ + { provide: APP_DATA_ENTITY_EDITOR, useExisting: LandingPage_1 }, + { + provide: AppEditorOptions, + useValue: { + pathIdAttribute: 'landingId', + }, + }, + ], + }), + __param(1, Optional()), + __metadata("design:paramtypes", [Injector, LandingEditorOptions]) +], LandingPage); +export { LandingPage }; +//# sourceMappingURL=landing.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landing.page.js.map b/out-tsc/app/app/trip/landing/landing.page.js.map new file mode 100644 index 000000000..de6bb8e4b --- /dev/null +++ b/out-tsc/app/app/trip/landing/landing.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"landing.page.js","sourceRoot":"","sources":["../../../../../src/app/trip/landing/landing.page.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAiB,uBAAuB,EAAE,SAAS,EAAE,QAAQ,EAAU,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEzH,OAAO,EACL,gBAAgB,EAGhB,WAAW,EACX,MAAM,EACN,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EAEjB,YAAY,EACZ,KAAK,EACL,eAAe,EACf,QAAQ,EACR,eAAe,EACf,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,yBAAyB,EACzB,gBAAgB,GAEjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,gCAAgC,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAA6B,MAAM,uCAAuC,CAAC;AAElI,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oCAAoC,EAAE,4BAA4B,EAAE,MAAM,oDAAoD,CAAC;AACxI,OAAO,EAAE,KAAK,EAA4B,MAAM,MAAM,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAG1E,OAAO,EAAE,qBAAqB,EAAwB,OAAO,EAAoB,MAAM,4CAA4C,CAAC;AACpI,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qDAAqD,CAAC;AAE/F,OAAO,MAAM,MAAM,QAAQ,CAAC;AAI5B,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAEjF,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAGnG,MAAM,OAAO,oBAAqB,SAAQ,qBAAqB;CAAG;AAsB3D,IAAM,WAAW,mBAAjB,MAAM,WACX,SAAQ,uBAA4D;IAmCpE,YAAY,QAAkB,EAAc,OAA6B;QACvE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,kBACnD,QAAQ,EAAE,CAAC,EACX,UAAU,EAAE,eAAe,EAC3B,mBAAmB,EAAE,IAAI,EACzB,gBAAgB,EAAE,qBAAqB,CAAC,OAAO,IAC5C,OAAO,EACV,CAAC;QA9BL,eAAU,GAAG,KAAK,CAAC;QAEnB,uBAAkB,GAAG,KAAK,CAAC;QAC3B,oBAAe,GAAG,KAAK,CAAC;QAExB,qBAAgB,GAAG,KAAK,CAAC;QACzB,iBAAY,GAAG,KAAK,CAAC;QAyBnB,IAAI,CAAC,uBAAuB,GAAG,QAAQ,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrE,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACjE,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAE5C,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAyB,CAAC;QACtG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC;QAEhD,oBAAoB;QACpB,IAAI,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC;IACrC,CAAC;IApCD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,aAAa,CAAC,KAAa;QAC7B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IA6BD,eAAe;QACb,KAAK,CAAC,eAAe,EAAE,CAAC;QAExB,qCAAqC;QACrC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACtD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,mDAAmD;QACnD,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,WAAW,CAAC,IAAI;aAClB,GAAG,CAAC,UAAU,CAAC;aACf,YAAY,CAAC,IAAI,CAChB,YAAY,CAAC,GAAG,CAAC,EACjB,MAAM,CAAC,QAAQ,CAAC,EAChB,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CACvF;aACA,SAAS,EAAE,CACf,CAAC;QAEF,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAClI,CAAC;QAEF,sEAAsE;QACtE,IAAI,CAAC,oBAAoB,CACvB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;aACzH,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;aACvB,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CACjF,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,IAAa,EAAE,IAAU;;QACpC,OAAO,KAAK,CAAC,MAAA,IAAI,CAAC,MAAM,0CAAE,cAAc,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9E,CAAC;IAEK,MAAM;;YACV,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;YAClC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC;KAAA;IAES,mBAAmB,CAAC,OAAgB;QAE5C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,qBAAqB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7E,IAAI,IAAI,CAAC,kBAAkB,KAAK,aAAa,EAAE;YAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,kBAAkB,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBACrE,IAAI;YACH,QAAQ;YACR,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,2BAA2B,EAAE,CAAC,CAAC,CAAC,EACxE,GAAG,CAAC,CAAC,EAAC,gBAAgB,EAAE,aAAa,EAAC,EAAE,EAAE;gBACxC,OAAgC;oBAC9B,gBAAgB;oBAChB,SAAS,EAAE,OAAO,CAAC,EAAE;oBACrB,KAAK,EAAE,aAAa;iBACrB,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;SACL;QAED,OAAO,KAAK,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,mBAAmB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;;QACjC,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAEzE,iCAAiC;QACjC,MAAA,IAAI,CAAC,yBAAyB,0CAAE,WAAW,EAAE,CAAC;QAC9C,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAChF,CAAC;IAED,QAAQ,CAAC,GAAiC,EAAE,IAAwD;QAClG,yIAAyI;QACzI,GAAG,GAAG,GAAU,CAAC;QACjB,IACE,GAAG;YACH,OAAO,GAAG,KAAK,QAAQ;YACvB,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,MAAK,gBAAgB,CAAC,eAAe;aAC9C,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,CAAA;YACZ,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;YAC/B,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAC9C;YACA,MAAM,OAAO,GAAG,GAAG,CAAC,OAAc,CAAC;YACnC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,wCAAwC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACrH,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;SACxD;aAAM;YACL,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACtC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;SAC3B;IACH,CAAC;IAEK,UAAU,CACd,IAAoB,EACpB,IAIC;;;;;YAED,MAAM,OAAM,UAAU,YAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAEnC,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YAC9C,IAAI,CAAC,WAAW,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC;YAEtE,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,iCAAiC;gBACjC,IAAI,IAAI,CAAC,MAAM,YAAY,gBAAgB,EAAE;oBAC3C,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,KAAK,CAAC;oBACrC,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC;iBACpC;gBAED,oBAAoB;qBACf,IAAI,IAAI,CAAC,MAAM,YAAY,IAAI,EAAE;oBACpC,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,KAAK,CAAC;oBACrC,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,KAAK,CAAC;iBACrC;aACF;YACD,oBAAoB;iBACf;gBACH,iBAAiB;gBACjB,IAAI,IAAI,CAAC,UAAU,EAAE;oBACnB,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;oBACzE,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,KAAK,CAAC;oBACrC,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC;oBACnC,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,KAAK,CAAC;oBACtC,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,KAAK,CAAC;oBACtC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;iBAC7B;gBACD,kBAAkB;qBACb;oBACH,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;oBACrE,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC;oBACpC,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC;oBACnC,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC;oBACrC,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC;oBACrC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;iBAC7B;aACF;YAED,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE;gBACxD,IAAI,CAAC,WAAW,CAAC,eAAe,GAAG,KAAK,CAAC;aAC1C;YACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAErD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;gBACrC,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;QACH,CAAC;KAAA;IAEK,UAAU,CAAC,KAAY;;YAC3B,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAChD,IAAI,CAAC,IAAI;oBAAE,OAAO,CAAC,SAAS;aAC7B;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;QAClF,CAAC;KAAA;IAED,8BAA8B;IAEpB,aAAa;QACrB,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5D,CAAC;IAEe,WAAW,CAAC,IAAa,EAAE,OAAkC;;;YAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;YAEpD,QAAQ;YACR,qDAAqD;YAErD,qBAAqB;YACrB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAChC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAE7B,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,CAAC;aAC1B;YAED,kBAAkB;YAClB,IAAI,CAAC,kBAAkB,GAAG,OAAO,IAAI,OAAO,CAAC,kBAAkB,IAAI,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;YACxG,IAAI,CAAC,MAAM,GAAG,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAEpE,gBAAgB;YAChB,IAAI,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,EAAE;gBACtC,IAAI,CAAC,SAAS,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;aAC5C;iBAAM;gBACL,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;aACpB;YAED,sCAAsC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,YAAY,GAAG,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAgB,OAAO,EAAE,wBAAwB,CAAC,UAAU,CAAC,CAAC;YAC3H,IAAI,YAAY,EAAE;gBAChB,yBAAyB;gBACzB,IAAI,YAAY,CAAC,qBAAqB,IAAI,YAAY,CAAC,qBAAqB,KAAK,MAAM,EAAE;oBACvF,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC;iBACtC;gBAED,UAAU;gBACV,IAAI,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE;oBACtD,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;iBAChE;gBAED,WAAW;gBACX,IAAI,YAAY,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;oBAC1D,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;iBAClE;gBAED,WAAW;gBACX,IAAI,YAAY,CAAC,QAAQ,EAAE;oBACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;iBAC5D;aACF;YAED,cAAc;YACd,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAE1C,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAEvD,0BAA0B;YAC1B,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa,CAAC;YACzE,MAAM,aAAa,GAAG,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,KAAK,MAAI,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,KAAK,CAAA,IAAI,WAAW,CAAC,eAAe,CAAC,CAAC;YACxG,IAAI,aAAa,EAAE;gBACjB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC;gBACtD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,aAAa,CAAC;gBAC/D,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE;oBAC5C,IAAI,CAAC,QAAQ,GAAG,kBAAkB,IAAI,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;iBAClG;aACF;YAED,yBAAyB;YACzB,MAAM,YAAY,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAK,CAAC;YACzC,IAAI,YAAY;gBAAE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;YACnD,IAAI,aAAa;gBAAE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;;KACvD;IAEe,cAAc,CAAC,IAAa,EAAE,OAAkC;;;YAC9E,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,YAAY,GAAG,MAAA,IAAI,CAAC,MAAM,CAAC,OAAO,0CAAE,KAAK,CAAC;YAEhD,wBAAwB;YACxB,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,yDAAyD;gBACzD,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC9F,IAAI,CAAC,SAAS,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;gBAE9F,IAAI,IAAI,CAAC,MAAM,YAAY,gBAAgB,EAAE;oBAC3C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;oBACtD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;oBACtF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;oBAClE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAClE,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;oBACxB,mCAAmC;iBACpC;qBAAM,IAAI,IAAI,CAAC,MAAM,YAAY,IAAI,EAAE;oBACtC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;oBACjD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;oBAC7F,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;oBAC7F,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;oBACtD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3D,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;oBAClC,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;iBACrC;gBAED,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACrD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;aAC9B;YACD,kBAAkB;iBACb;gBACH,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACrD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC;aAChD;YAED,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC/F,IAAI,CAAC,WAAW,CAAC,eAAe,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEtF,yBAAyB;YACzB,IAAI,YAAY;gBAAE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;YACnD,IAAI,aAAa;gBAAE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;;KACvD;IAEe,eAAe,CAAC,MAA+B;;YAC7D,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;gBAChC,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,MAAM,CAAC,CAAC;gBACvD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBAErB,qCAAqC;gBACrC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBAC/B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACnC,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBAClD,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;iBACpB;aACF;QACH,CAAC;KAAA;IAEe,wBAAwB,CAAC,IAAa,EAAE,MAA+B;;;YACrF,QAAQ;YACR,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,MAAM,CAAC,CAAC;YAEzE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;YAEpD,IAAI,MAAM,EAAE;gBACV,oCAAoC;gBACpC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;gBAC9B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;gBAElC,IAAI,MAAM,YAAY,gBAAgB,EAAE;oBACtC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC7D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAClE,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC;oBACpF,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,WAAW,CAAC;oBAC/G,yFAAyF;oBACzF,wBAAwB;oBACxB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;oBAExB,0BAA0B;oBAC1B,IAAI,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE;wBACnC,MAAM,QAAQ,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;wBACxC,OAAO,CAAC,KAAK,CAAC,kCAAkC,QAAQ,MAAM,CAAC,CAAC;wBAChE,IAAI,CAAC,cAAc,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;qBAC/F;iBACF;qBAAM,IAAI,MAAM,YAAY,IAAI,EAAE;oBACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;oBACjD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;oBAC5C,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,iBAAiB,CAAC;oBAClE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,iBAAiB,CAAC;oBAClE,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;oBAClC,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;iBACrC;gBAED,2CAA2C;gBAC3C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE;oBAC3C,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;oBACpD,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;wBACtC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACpC,CAAC,CAAC,CAAC;iBACJ;aACF;YAED,YAAY;iBACP;gBACH,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC3D,MAAM,YAAY,GAAG,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAK,MAAI,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,KAAK,CAAA,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC;gBAC/F,IAAI,YAAY,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,EAAE,IAAI,CAAC,EAAE;oBAC5D,IAAI,CAAC,OAAO,GAAG,iBAAiB,IAAI,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;iBAC9F;aACF;;KACF;IAES,sBAAsB;QAC9B,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACnC,mCAAmC;YACnC,IAAI,IAAI,CAAC,MAAM,YAAY,gBAAgB,EAAE;gBAC3C,OAAO,iBAAiB,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;aAChD;YAED,sBAAsB;iBACjB,IAAI,IAAI,CAAC,MAAM,YAAY,IAAI,EAAE;gBACpC,OAAO,UAAU,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;aACzC;SACF;QACD,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,uBAAuB;YACvB,QAAQ,IAAI,CAAC,sBAAsB,EAAE;gBACnC,KAAK,mBAAmB;oBACtB,OAAO,wBAAwB,CAAC;oBAChC,MAAM;gBACR;oBACE,MAAM,IAAI,KAAK,CAAC,2CAA2C,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC;aAC9F;SACF;IACH,CAAC;IAEe,UAAU,CAAC,OAAgB;;;;;;YACzC,IAAI,CAAC,OAAO;gBAAE,OAAO,CAAC,OAAO;YAC7B,MAAM,OAAM,UAAU,YAAC,OAAO,CAAC,CAAC;YAEhC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAEjC,0CAA0C;YAC1C,MAAM,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;YAC/F,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,oCAAoC,CAAC,CAAC;YAEzH,IAAI,CAAC,WAAW,CAAC,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,sCAAsC,CAAC,CAAC;YAC5H,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,cAAc,CAAC;YAC/C,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,SAAS,IAAI,cAAc,CAAC;YACjE,IAAI,CAAC,WAAW,CAAC,eAAe,GAAG,SAAS,IAAI,cAAc,CAAC;YAC/D,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,CAAC;YAC1G,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,CAAC;YACzG,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;YACxG,IAAI,CAAC,WAAW,CAAC,2BAA2B,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,uCAAuC,CAAC,CAAC;YAEvI,sBAAsB;YACtB,IAAI,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACpE,UAAU,GAAG,UAAU,IAAI,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,MAAM,KAAI,EAAE,CAAC;YACjG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,UAAU,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,UAAU,CAAC;YAEzC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,+BAA+B,CAAC,CAAC;YAEpG,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,IAAI,CAAC,YAAY,CAAC,gBAAgB,GAAG,UAAU,CAAC;gBAChD,IAAI,CAAC,YAAY,CAAC,gBAAgB,GAAG,gCAAgC,GAAG,UAAU,CAAC;gBACnF,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,mBAAmB,EAAE,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,CAAC,CAAC;gBACpI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,wBAAwB,EAAE,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,uCAAuC,CAAC,CAAC,CAAC;gBAChJ,IAAI,CAAC,YAAY,CAAC,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAC/D,2BAA2B,CAAC,kBAAkB,EAC9C,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,0BAA0B,CAAC,CAClE,CAAC;gBACF,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,CAAC;gBAEhH,2BAA2B;gBAC3B,8DAA8D;gBAC9D,IAAI,CAAC,cAAc,EAAE;oBACnB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;iBAC5D;aACF;YAED,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,oCAAoC,GAAG,UAAU,CAAC;aAClF;YAED,gEAAgE;YAChE,yEAAyE;YACzE,IAAI,CAAC,cAAc,IAAI,SAAS,EAAE;gBAChC,IAAI,CAAC,WAAW,EAAE,CAAC;aACpB;YAED,oEAAoE;YACpE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACvB,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC;gBAC9C,IAAI,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;aAChD;;KACF;IAEe,WAAW,CAAC,QAAkB,EAAE,IAAmC;;;;;YACjF,MAAM,OAAM,WAAW,YAAC,QAAQ,CAAC,CAAC;YAElC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO;gBAAE,OAAO,CAAC,gBAAgB;YAEnD,oBAAoB;YACpB,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;YAEhD,sDAAsD;YACtD,MAAM,oBAAoB,GAAG,yBAAyB,CACpD,CAAC,QAAQ,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EACzD,IAAI,CACL,CAAC;YACF,IAAI,CAAC,WAAW,CAAC,4BAA4B,GAAG,oBAAoB,CAAC;YACrE,IAAI,CAAC,WAAW,CAAC,uBAAuB,GAAG,eAAe,CAAC,oBAAoB,CAAC,CAAC,CAAC,wEAAwE;YAE1J,0BAA0B;YAC1B,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE;gBAC3D,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;gBACjD,MAAM,iBAAiB,GAAG,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC/D,IAAI,CAAC,YAAY,CAAC,gBAAgB,GAAG,iBAAiB,IAAI,iBAAiB,CAAC,SAAS,CAAC;gBACtF,IAAI,CAAC,YAAY,CAAC,oBAAoB,GAAG,KAAK,CAAC;gBAE/C,wBAAwB;gBACxB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;aAC5E;YAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;KAAA;IAEe,aAAa,CAAC,KAAkD,EAAE,YAAoB,EAAE,aAAsB;;;YAC5H,IAAI,CAAC,aAAa,EAAE;gBAClB,gDAAgD;gBAChD,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;aACnC;iBAAM;gBACL,wBAAwB;gBACxB,IAAI,YAAY,GAAY,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,YAAY,EAAE;oBACtF,aAAa;oBACb,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;iBACzC,CAAC,CAAC;gBACH,MAAM,eAAe,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAE5D,sEAAsE;gBACtE,MAAM,iBAAiB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,KAAI,MAAA,IAAI,CAAC,IAAI,0CAAE,OAAO,CAAA,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAC9E,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CACd,sBAAsB,CAAC,UAAU,CAAC,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,MAAM,CACtE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAC/E,GAAG,CACJ,EACH,EAAE,CACH,CAAC;gBAEF,uCAAuC;gBACvC,IAAI,eAAe,CAAC,iBAAiB,CAAC,EAAE;oBACtC,kCAAkC;oBAClC,MAAM,eAAe,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAC/G,wBAAwB,CAAC,YAAY,CACtC,CAAC;oBAEF,qEAAqE;oBACrE,wGAAwG;oBACxG,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;iBACrD;gBAED,wDAAwD;gBACxD,KAAK,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;gBAC1E,2DAA2D;gBAC3D,oCAAoC;aACrC;;KACF;IAEe,UAAU,CAAC,IAAa;;YACtC,IAAI,MAA+B,CAAC;YAEpC,gCAAgC;YAChC,IAAI,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;gBACrC,OAAO,CAAC,KAAK,CAAC,oDAAoD,IAAI,CAAC,kBAAkB,MAAM,CAAC,CAAC;gBACjG,MAAM,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;aAC3G;YACD,mBAAmB;iBACd,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC9B,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBACvD,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;aACnF;iBAAM;gBACL,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;aACjF;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;KAAA;IAEe,QAAQ,CAAC,IAAa;;YACpC,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,OAAO;YAE1B,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEtC,uBAAuB;YACvB,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAC/C,CAAC;KAAA;IAEe,kBAAkB,CAAC,KAAa;;;;;YAC9C,uCACK,CAAC,MAAM,OAAM,kBAAkB,YAAC,KAAK,CAAC,CAAC,KAC1C,IAAI,EAAE,MAAM,IACZ;QACJ,CAAC;KAAA;IAEe,YAAY,CAAC,IAAa;;YACxC,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YACvF,IAAI,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACpE,UAAU,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YAE3D,MAAM,WAAW,GACf,CAAC,IAAI,CAAC,MAAM;gBACV,IAAI,CAAC,MAAM,YAAY,gBAAgB;gBACvC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,sBAAsB,EAAE;oBAC7C,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAC3F,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,IAAK,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAY,CAAC,IAAI,EAAE;iBAC5G,CAAC,CAAC;gBACL,EAAE,CAAC;YAEL,WAAW;YACX,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBAC3B,OAAO,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,UAAU,OAAO,CAAC,CAAC;aAC/E;YAED,gBAAgB;YAChB,OAAO,CACL,WAAW;gBACX,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,gBAAgB,UAAU,OAAO,EAAE;oBACxD,MAAM,EAAE,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;iBACjG,CAAC,CACH,CAAC;QACJ,CAAC;KAAA;IAES,cAAc,CAAC,EAAkB;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1C,OAAO,GAAG,SAAS,YAAY,EAAE,EAAE,CAAC;IACtC,CAAC;IAES,uBAAuB;QAC/B,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC;QACnE,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAES,gBAAgB,CAAC,OAAgB;QACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC;YACvC,kEAAkE;YAClE,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACnF,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,MAAM,CAAC;IACb,CAAC;IAEe,QAAQ;;;;;;YACtB,QAAQ;YACR,6CAA6C;YAE7C,MAAM,IAAI,GAAG,MAAM,OAAM,QAAQ,WAAE,CAAC;YAEpC,kFAAkF;YAClF,IAAI,CAAC,iBAAiB,GAAG,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,0CAAE,KAAK,KAAI,EAAE,CAAC;YAE3E,sCAAsC;YACtC,IAAI,IAAI,CAAC,kBAAkB,KAAK,uBAAuB,CAAC,WAAW,EAAE;gBACnE,MAAM,aAAa,GAAG,MAAA,IAAI,CAAC,QAAQ,0CAAE,KAAK,CAAC;gBAC3C,IAAI,eAAe,CAAC,aAAa,CAAC,EAAE;oBAClC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,aAAa,CAAC;iBAChE;aACF;YAED,qBAAqB;YACrB,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;gBAC3B,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;aAChC;YACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAEvC,QAAQ;YACR,qEAAqE;YAErE,OAAO,IAAI,CAAC;;KACb;IAEK,oBAAoB,CAAC,MAAwB;;YACjD,MAAM,KAAK,GACT,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;gBAChE,CAAC,CAAC,yCAAyC;oBACzC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC7C,CAAC,CAAC,mCAAmC;oBACnC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAEzC,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,OAAO;YAE3B,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE;gBACrE,UAAU,EAAE,KAAK;gBACjB,WAAW,EAAE;oBACX,GAAG,EAAE,CAAC;oBACN,QAAQ,EAAE,IAAI;iBACf;aACF,CAAC,CAAC;QACL,CAAC;KAAA;IAES,kBAAkB;;QAC1B,OAAO,MAAA,IAAI,CAAC,WAAW,CAAC,KAAK,0CAAE,QAAQ,EAAE,CAAC;IAC5C,CAAC;IAES,0BAA0B,CAAC,IAAsB,EAAE,KAAc;QACzE,yFAAyF;QACzF,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,oBAAoB,CAAC,SAA2B;;YAC9D,IAAI,IAAI,CAAC,YAAY,CAAC,mBAAmB,KAAK,SAAS;gBAAE,OAAO,CAAC,eAAe;YAEhF,MAAM,KAAK,GACT,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;gBAChE,CAAC,CAAC,yCAAyC;oBACzC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC7C,CAAC,CAAC,mCAAmC;oBACnC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAEzC,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,OAAO;YAE3B,OAAO,CAAC,KAAK,CAAC,uCAAuC,GAAG,SAAS,CAAC,CAAC;YACnE,IAAI,CAAC,YAAY,CAAC,mBAAmB,GAAG,SAAS,CAAC;YAClD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,2BAA2B,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;YAErF,8BAA8B;YAC9B,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;YAChD,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB;gBAAE,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;YAExF,cAAc;YACd,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC;KAAA;CACF,CAAA;AA3rBC;IAAC,SAAS,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;8BAAc,WAAW;gDAAC;AACrE;IAAC,SAAS,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;8BAAe,YAAY;iDAAC;AACxE;IAAC,SAAS,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;8BAAe,4BAA4B;iDAAC;AAlC9E,WAAW;IAhBvB,SAAS,CAAC;QACT,QAAQ,EAAE,kBAAkB;QAC5B,WAAW,EAAE,qBAAqB;QAClC,SAAS,EAAE,CAAC,qBAAqB,CAAC;QAClC,eAAe,EAAE,uBAAuB,CAAC,MAAM;QAC/C,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,SAAS,EAAE;YACT,EAAE,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,aAAW,EAAE;YAC7D;gBACE,OAAO,EAAE,gBAAgB;gBACzB,QAAQ,EAAE;oBACR,eAAe,EAAE,WAAW;iBAC7B;aACF;SACF;KACF,CAAC;IAqCiC,WAAA,QAAQ,EAAE,CAAA;qCAArB,QAAQ,EAAuB,oBAAoB;GApC9D,WAAW,CA2tBvB;SA3tBY,WAAW"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landing.service.js b/out-tsc/app/app/trip/landing/landing.service.js new file mode 100644 index 000000000..1d1e9ec48 --- /dev/null +++ b/out-tsc/app/app/trip/landing/landing.service.js @@ -0,0 +1,1178 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable, Injector } from '@angular/core'; +import { AppFormUtils, chainPromises, DateUtils, EntitiesStorage, Entity, EntityUtils, firstNotNilPromise, FormErrorTranslator, fromDateISOString, isEmptyArray, isNil, isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrBlank, JobUtils, LocalSettingsService, MINIFY_ENTITY_FOR_POD, NetworkService, ProgressBarService, toDateISOString, toNumber, } from '@sumaris-net/ngx-components'; +import { EMPTY, firstValueFrom } from 'rxjs'; +import { Landing } from './landing.model'; +import { gql } from '@apollo/client/core'; +import { filter, map } from 'rxjs/operators'; +import { Sample } from '../sample/sample.model'; +import { VesselSnapshotFragments } from '@app/referential/services/vessel-snapshot.service'; +import { RootDataEntityUtils } from '@app/data/services/model/root-data-entity.model'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { ReferentialFragments } from '@app/referential/services/referential.fragments'; +import { LandingFilter } from './landing.filter'; +import { DataEntityUtils, MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE, SERIALIZE_FOR_OPTIMISTIC_RESPONSE, } from '@app/data/services/model/data-entity.model'; +import { TripFragments, TripService } from '@app/trip/trip/trip.service'; +import { Trip } from '@app/trip/trip/trip.model'; +import { DataErrorCodes } from '@app/data/services/errors'; +import { ObservedLocation } from '@app/trip/observedlocation/observed-location.model'; +import { MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +import { TripFilter } from '@app/trip/trip/trip.filter'; +import { RootDataSynchroService } from '@app/data/services/root-data-synchro-service.class'; +import { ObservedLocationFilter } from '@app/trip/observedlocation/observed-location.filter'; +import { ProgramUtils } from '@app/referential/services/model/program.model'; +import { LandingValidatorService } from '@app/trip/landing/landing.validator'; +import { MEASUREMENT_VALUES_PMFM_ID_REGEXP } from '@app/data/measurement/measurement.model'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { ProgressionModel } from '@app/shared/progression/progression.model'; +import { OBSERVED_LOCATION_FEATURE_NAME } from '@app/trip/trip.config'; +import { PmfmIds } from '@app/referential/services/model/model.enum'; +import { StrategyRefService } from '@app/referential/services/strategy-ref.service'; +import { DataCommonFragments, DataFragments } from '@app/trip/common/data.fragments'; +import { VesselSnapshotFilter } from '@app/referential/services/filter/vessel.filter'; +export const LandingFragments = { + lightLanding: gql `fragment LightLandingFragment on LandingVO { + id + program { + id + label + } + dateTime + location { + ...LocationFragment + } + creationDate + updateDate + controlDate + validationDate + qualificationDate + comments + rankOrder + observedLocationId + tripId + vesselSnapshot { + ...VesselSnapshotFragment + } + recorderDepartment { + ...LightDepartmentFragment + } + recorderPerson { + ...LightPersonFragment + } + measurementValues + samplesCount + } + ${DataCommonFragments.location} + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + ${VesselSnapshotFragments.vesselSnapshot} + ${ReferentialFragments.lightReferential}`, + landing: gql `fragment LandingFragment on LandingVO { + id + program { + id + label + } + dateTime + location { + ...LocationFragment + } + creationDate + updateDate + controlDate + validationDate + qualificationDate + comments + rankOrder + observedLocationId + tripId + trip { + ...EmbeddedLandedTripFragment + } + vesselSnapshot { + ...VesselSnapshotFragment + } + recorderDepartment { + ...LightDepartmentFragment + } + recorderPerson { + ...LightPersonFragment + } + observers { + ...LightPersonFragment + } + measurementValues + samples { + ...SampleFragment + } + samplesCount + }` +}; +const LandingQueries = { + load: gql `query Landing($id: Int!){ + data: landing(id: $id){ + ...LandingFragment + } + } + ${LandingFragments.landing} + ${DataCommonFragments.location} + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + ${VesselSnapshotFragments.vesselSnapshot} + ${DataFragments.sample} + ${TripFragments.embeddedLandedTrip}`, + loadAll: gql `query LightLandings($filter: LandingFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String){ + data: landings(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + ...LightLandingFragment + } + } + ${LandingFragments.lightLanding}`, + loadAllWithTotal: gql `query LightLandingsWithTotal($filter: LandingFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String){ + data: landings(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + ...LightLandingFragment + } + total: landingsCount(filter: $filter) + } + ${LandingFragments.lightLanding}`, + loadAllFullWithTotal: gql `query Landings($filter: LandingFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String){ + data: landings(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + ...LandingFragment + } + total: landingsCount(filter: $filter) + } + ${LandingFragments.landing} + ${DataCommonFragments.location} + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + ${VesselSnapshotFragments.vesselSnapshot} + ${DataFragments.sample} + ${TripFragments.embeddedLandedTrip}`, + loadNearbyTripDates: gql `query LandingNearbyTripDates($filter: TripFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String){ + data: trips(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection) { + id + departureDateTime + } + }`, +}; +const LandingMutations = { + save: gql `mutation SaveLanding($data:LandingVOInput!){ + data: saveLanding(landing: $data){ + ...LandingFragment + } + } + ${LandingFragments.landing} + ${DataCommonFragments.location} + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + ${VesselSnapshotFragments.vesselSnapshot} + ${DataFragments.sample} + ${TripFragments.embeddedLandedTrip}`, + saveAll: gql `mutation SaveLandings($data:[LandingVOInput!]!){ + data: saveLandings(landings: $data){ + ...LandingFragment + } + } + ${LandingFragments.landing} + ${DataCommonFragments.location} + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + ${VesselSnapshotFragments.vesselSnapshot} + ${DataFragments.sample} + ${TripFragments.embeddedLandedTrip}`, + terminate: gql `mutation TerminateLanding($data: LandingVOInput!){ + data: controlLanding(landing: $data){ + ...LightLandingFragment + } + } + ${LandingFragments.lightLanding}`, + deleteAll: gql `mutation DeleteLandings($ids:[Int!]!){ + deleteLandings(ids: $ids) + }` +}; +const LandingSubscriptions = { + listenChanges: gql `subscription UpdateLanding($id: Int!, $interval: Int){ + data: updateLanding(id: $id, interval: $interval) { + ...LandingFragment + } + } + ${LandingFragments.landing} + ${DataCommonFragments.location} + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + ${VesselSnapshotFragments.vesselSnapshot} + ${DataFragments.sample} + ${TripFragments.embeddedLandedTrip} + ${ReferentialFragments.metier} + ${DataFragments.fishingArea} + ` +}; +const sortByDateOrIdFn = (n1, n2) => n1.dateTime.isSame(n2.dateTime) + ? (n1.id === n2.id ? 0 : Math.abs(n1.id) > Math.abs(n2.id) ? 1 : -1) + : (n1.dateTime.isAfter(n2.dateTime) ? 1 : -1); +const sortByAscRankOrder = (n1, n2) => n1.rankOrder === n2.rankOrder + ? 0 : + (n1.rankOrder > n2.rankOrder ? 1 : -1); +const sortByDescRankOrder = (n1, n2) => n1.rankOrder === n2.rankOrder ? 0 : + (n1.rankOrder > n2.rankOrder ? -1 : 1); +let LandingService = class LandingService extends RootDataSynchroService { + constructor(injector, network, entities, programRefService, strategyRefService, tripService, validatorService, progressBarService, formErrorTranslator, settings) { + super(injector, Landing, LandingFilter, { + queries: LandingQueries, + mutations: LandingMutations, + subscriptions: LandingSubscriptions + }); + this.network = network; + this.entities = entities; + this.programRefService = programRefService; + this.strategyRefService = strategyRefService; + this.tripService = tripService; + this.validatorService = validatorService; + this.progressBarService = progressBarService; + this.formErrorTranslator = formErrorTranslator; + this.settings = settings; + this.loading = false; + // /!\ should be same as observed location service + this._featureName = OBSERVED_LOCATION_FEATURE_NAME; + this._logPrefix = '[landing-service] '; + } + hasSampleWithTagId(landingIds) { + // TODO + console.warn('TODO: implement LandingService.hasSampleWithTagId()'); + return Promise.resolve(false); + } + loadAllByObservedLocation(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + return firstValueFrom(this.watchAllByObservedLocation(filter, opts)); + }); + } + watchAllByObservedLocation(filter, opts) { + return this.watchAll(0, -1, null, null, filter, opts); + } + watchAll(offset, size, sortBy, sortDirection, dataFilter, opts) { + dataFilter = this.asFilter(dataFilter); + //if (!dataFilter || dataFilter.isEmpty()) { + //console.warn('[landing-service] Trying to load landing without \'filter\'. Skipping.'); + //return EMPTY; + //} + // Load offline + const offline = this.network.offline + || (dataFilter && ((dataFilter.synchronizationStatus && dataFilter.synchronizationStatus !== 'SYNC') + || EntityUtils.isLocalId(dataFilter.observedLocationId) + || EntityUtils.isLocalId(dataFilter.tripId))) || false; + if (offline) { + return this.watchAllLocally(offset, size, sortBy, sortDirection, dataFilter, opts); + } + // Fix sortBy (id -> rankOrder) + let afterSortBy = sortBy; + sortBy = (sortBy !== 'id' && sortBy) || 'dateTime'; + if (sortBy === 'vessel') { + sortBy = 'vesselSnapshot.' + this.settings.getFieldDisplayAttributes('vesselSnapshot', VesselSnapshotFilter.DEFAULT_SEARCH_ATTRIBUTES)[0]; + // If fetching all rows: do NOT sort on pod + if (size === -1) { + afterSortBy = sortBy; + sortBy = 'dateTime'; + } + else { + console.warn(this._logPrefix + `Pod sorting on '${sortBy}' can be long... Please make sure you need a page size=${size}, instead of all rows (that allow to sort in App side)`); + } + } + const groupByVessel = (dataFilter === null || dataFilter === void 0 ? void 0 : dataFilter.groupByVessel) === true; + if (groupByVessel || size === -1) { + // sortBy = 'dateTime'; + // sortDirection = 'desc'; + size = 1000; + } + const variables = { + offset: offset || 0, + size: size || 20, + sortBy, + sortDirection: sortDirection || 'asc', + filter: dataFilter && dataFilter.asPodObject() + }; + let now = this._debug && Date.now(); + if (this._debug) + console.debug('[landing-service] Watching landings... using variables:', variables); + const fullLoad = (opts && opts.fullLoad === true); // false by default + const withTotal = (!opts || opts.withTotal !== false); + const query = fullLoad ? LandingQueries.loadAllFullWithTotal : + (withTotal ? this.queries.loadAllWithTotal : this.queries.loadAll); + return this.mutableWatchQuery({ + queryName: withTotal ? 'LoadAllWithTotal' : 'LoadAll', + query, + arrayFieldName: 'data', + totalFieldName: withTotal ? 'total' : undefined, + insertFilterFn: dataFilter === null || dataFilter === void 0 ? void 0 : dataFilter.asFilterFn(), + variables, + error: { code: DataErrorCodes.LOAD_ENTITIES_ERROR, message: 'ERROR.LOAD_ENTITIES_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || 'cache-and-network' + }) + .pipe( + // Skip update during load() + filter(() => !this.loading), map(({ data, total }) => { + let entities = (!opts || opts.toEntity !== false) + ? (data || []).map(Landing.fromObject) + : (data || []); + if (this._debug) { + if (now) { + console.debug(`[landing-service] Loaded {${entities.length || 0}} landings in ${Date.now() - now}ms`, entities); + now = undefined; + } + } + // Group by vessel (keep last landing) + if (isNotEmptyArray(entities) && groupByVessel) { + const landingByVesselMap = new Map(); + entities.forEach(landing => { + const existingLanding = landingByVesselMap.get(landing.vesselSnapshot.id); + if (!existingLanding || fromDateISOString(existingLanding.dateTime).isBefore(landing.dateTime)) { + landingByVesselMap.set(landing.vesselSnapshot.id, landing); + } + }); + entities = Array.from(landingByVesselMap.values()); + total = entities.length; + } + // Compute rankOrder, by tripId or observedLocationId + if (!opts || opts.computeRankOrder !== false) { + this.computeRankOrderAndSort(entities, offset, total, afterSortBy, sortDirection, dataFilter); + } + return { data: entities, total }; + })); + } + loadAll(offset, size, sortBy, sortDirection, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + const offlineData = this.network.offline || (filter && filter.synchronizationStatus && filter.synchronizationStatus !== 'SYNC') || false; + if (offlineData) { + return yield this.loadAllLocally(offset, size, sortBy, sortDirection, filter, opts); + } + return firstNotNilPromise(this.watchAll(offset, size, sortBy, sortDirection, filter, opts)); + }); + } + loadAllLocally(offset, size, sortBy, sortDirection, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + filter = this.asFilter(filter); + const variables = { + offset: offset || 0, + size: size >= 0 ? size : 1000, + sortBy: (sortBy !== 'id' && sortBy) || 'endDateTime', + sortDirection: sortDirection || 'asc', + filter: filter.asFilterFn() + }; + const res = yield this.entities.loadAll('LandingVO', variables, { fullLoad: opts && opts.fullLoad }); + const entities = (!opts || opts.toEntity !== false) ? + (res.data || []).map(json => this.fromObject(json)) : + (res.data || []); + return { data: entities, total: res.total }; + }); + } + load(id, options) { + return __awaiter(this, void 0, void 0, function* () { + if (isNil(id)) + throw new Error('Missing argument \'id\''); + const now = Date.now(); + if (this._debug) + console.debug(`[landing-service] Loading landing {${id}}...`); + this.loading = true; + try { + let data; + // If local entity + if (id < 0) { + data = yield this.entities.load(id, Landing.TYPENAME); + } + else { + // Load remotely + const res = yield this.graphql.query({ + query: this.queries.load, + variables: { id }, + error: { code: DataErrorCodes.LOAD_ENTITY_ERROR, message: 'ERROR.LOAD_ENTITY_ERROR' }, + fetchPolicy: options && options.fetchPolicy || undefined + }); + data = res && res.data; + } + // Transform to entity + const entity = data && Landing.fromObject(data); + if (entity && this._debug) + console.debug(`[landing-service] landing #${id} loaded in ${Date.now() - now}ms`, entity); + entity.trip = Trip.fromObject(data.trip); + return entity; + } + finally { + this.loading = false; + } + }); + } + saveAll(entities, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!entities) + return entities; + const localEntities = entities.filter(entity => entity + && ((entity.id < 0) + || (entity.synchronizationStatus && entity.synchronizationStatus !== 'SYNC') + || ((opts === null || opts === void 0 ? void 0 : opts.observedLocationId) && opts.observedLocationId < 0))); + if (isNotEmptyArray(localEntities)) { + return this.saveAllLocally(localEntities, opts); + } + const json = entities + .map(entity => { + // Fill default properties (as recorder department and person) + this.fillDefaultProperties(entity, opts); + // Reset quality properties + this.resetQualityProperties(entity); + return this.asObject(entity, MINIFY_ENTITY_FOR_POD); + }); + const now = Date.now(); + if (this._debug) + console.debug('[landing-service] Saving landings...', json); + yield this.graphql.mutate({ + mutation: this.mutations.saveAll, + variables: { + data: json + }, + error: { code: DataErrorCodes.SAVE_ENTITIES_ERROR, message: 'ERROR.SAVE_ENTITIES_ERROR' }, + update: (proxy, { data }) => { + if (this._debug) + console.debug(`[landing-service] Landings saved remotely in ${Date.now() - now}ms`); + // For each result, copy ID+updateDate to source entity + // Then filter to keep only new landings (need to cache update) + const newSavedLandings = (data.data && entities || []) + .map(entity => { + const savedEntity = data.data.find(obj => entity.equals(obj)); + const isNew = isNil(entity.id); + this.copyIdAndUpdateDate(savedEntity, entity); + return isNew ? savedEntity : null; + }).filter(isNotNil); + // Add to cache + if (isNotEmptyArray(newSavedLandings)) { + this.insertIntoMutableCachedQueries(proxy, { + queries: this.getLoadQueries(), + data: newSavedLandings + }); + } + } + }); + return entities; + }); + } + saveAllLocally(entities, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!entities) + return entities; + if (this._debug) + console.debug(`[landing-service] Saving ${entities.length} landings locally...`); + const jobsFactories = (entities || []).map(entity => () => this.saveLocally(entity, Object.assign({}, opts))); + return chainPromises(jobsFactories); + }); + } + save(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + const isNew = isNil(entity.id); + // If parent is a local entity: force to save locally + // If is a local entity: force a local save + const offline = entity.observedLocationId < 0 || RootDataEntityUtils.isLocal(entity); + if (offline) { + return yield this.saveLocally(entity, opts); + } + const now = Date.now(); + if (this._debug) + console.debug('[landing-service] Saving a landing...', entity); + // Prepare to save + this.fillDefaultProperties(entity, opts); + // Reset quality properties + this.resetQualityProperties(entity); + // When offline, provide an optimistic response + const offlineResponse = (!opts || opts.enableOptimisticResponse !== false) ? + (context) => __awaiter(this, void 0, void 0, function* () { + // Make sure to fill id, with local ids + yield this.fillOfflineDefaultProperties(entity); + // For the query to be tracked (see tracked query link) with a unique serialization key + context.tracked = (!entity.synchronizationStatus || entity.synchronizationStatus === 'SYNC'); + if (isNotNil(entity.id)) + context.serializationKey = `${Landing.TYPENAME}:${entity.id}`; + return { data: [this.asObject(entity, SERIALIZE_FOR_OPTIMISTIC_RESPONSE)] }; + }) : undefined; + // Transform into json + const json = this.asObject(entity, MINIFY_ENTITY_FOR_POD); + //if (this._debug) + console.debug('[landing-service] Saving landing (minified):', json); + yield this.graphql.mutate({ + mutation: this.mutations.save, + variables: { + data: json + }, + offlineResponse, + error: { code: DataErrorCodes.SAVE_ENTITIES_ERROR, message: 'ERROR.SAVE_ENTITIES_ERROR' }, + update: (proxy, { data }) => __awaiter(this, void 0, void 0, function* () { + const savedEntity = data && data.data; + // Local entity: save it + if (savedEntity.id < 0) { + if (this._debug) + console.debug('[landing-service] [offline] Saving landing locally...', savedEntity); + // Save response locally + yield this.entities.save(savedEntity); + } + // Update the entity and update GraphQL cache + else { + // Remove existing entity from the local storage + if (entity.id < 0 && (savedEntity.id > 0 || savedEntity.updateDate)) { + if (this._debug) + console.debug(`[landing-service] Deleting landing {${entity.id}} from local storage`); + yield this.entities.delete(entity); + } + this.copyIdAndUpdateDate(savedEntity, entity); + if (this._debug) + console.debug(`[landing-service] Landing saved remotely in ${Date.now() - now}ms`, entity); + // Add to cache + if (isNew) { + // Cache load by parent + this.insertIntoMutableCachedQueries(proxy, { + queries: this.getLoadQueries(), + data: savedEntity + }); + } + } + }) + }); + return entity; + }); + } + /** + * Delete landing locally (from the entity storage) + * + * @param filter (required observedLocationId) + */ + deleteLocally(filter) { + return __awaiter(this, void 0, void 0, function* () { + if (!filter || isNil(filter.observedLocationId)) + throw new Error('Missing arguments \'filter.observedLocationId\''); + const dataFilter = this.asFilter(filter); + const variables = { + filter: dataFilter && dataFilter.asFilterFn() + }; + try { + // Find landing to delete + const res = yield this.entities.loadAll(Landing.TYPENAME, variables, { fullLoad: false }); + const ids = (res && res.data || []).map(o => o.id); + if (isEmptyArray(ids)) + return undefined; // Skip + // Apply deletion + return yield this.entities.deleteMany(ids, { entityName: Landing.TYPENAME }); + } + catch (err) { + console.error(`[landing-service] Failed to delete landings ${JSON.stringify(filter)}`, err); + throw err; + } + }); + } + /** + * Load many local landings + */ + watchAllLocally(offset, size, sortBy, sortDirection, dataFilter, opts) { + dataFilter = LandingFilter.fromObject(dataFilter); + if (!dataFilter || dataFilter.isEmpty()) { + console.warn('[landing-service] Trying to watch landings without \'filter\': skipping.'); + return EMPTY; + } + if (isNotNil(dataFilter.observedLocationId) && dataFilter.observedLocationId >= 0) + throw new Error('Invalid \'filter.observedLocationId\': must be a local ID (id<0)!'); + if (isNotNil(dataFilter.tripId) && dataFilter.tripId >= 0) + throw new Error('Invalid \'filter.tripId\': must be a local ID (id<0)!'); + const variables = { + offset: offset || 0, + size: size >= 0 ? size : 20, + sortBy: (sortBy !== 'id' && sortBy) || (opts && opts.trash ? 'updateDate' : 'dateTime'), + sortDirection: sortDirection || (opts && opts.trash ? 'desc' : 'asc'), + trash: opts && opts.trash || false, + filter: dataFilter.asFilterFn() + }; + const entityName = (!dataFilter.synchronizationStatus || dataFilter.synchronizationStatus !== 'SYNC') + ? Landing.TYPENAME // Local entities + : EntitiesStorage.REMOTE_PREFIX + Landing.TYPENAME; // Remote entities + if (this._debug) + console.debug(`[landing-service] Loading ${entityName} locally... using options:`, variables); + return this.entities.watchAll(entityName, variables, { fullLoad: opts === null || opts === void 0 ? void 0 : opts.fullLoad }) + .pipe(map(({ data, total }) => { + const entities = (!opts || opts.toEntity !== false) + ? (data || []).map(Landing.fromObject) + : (data || []); + total = total || entities.length; + // Compute rankOrder, by tripId or observedLocationId + if (!opts || opts.computeRankOrder !== false) { + this.computeRankOrderAndSort(entities, offset, total, sortBy, sortDirection, dataFilter); + } + return { + data: entities, + total + }; + })); + } + deleteAll(entities, options) { + return __awaiter(this, void 0, void 0, function* () { + // Get local entity ids, then delete id + const localIds = entities === null || entities === void 0 ? void 0 : entities.filter(EntityUtils.isLocal).map(t => t.id); + if (isNotEmptyArray(localIds)) { + if (this._debug) + console.debug('[landing-service] Deleting landings locally... ids:', localIds); + yield this.entities.deleteMany(localIds, { entityName: Landing.TYPENAME }); + } + const ids = entities.filter(EntityUtils.isRemote).map(t => t.id); + if (isEmptyArray(ids)) + return; // stop, if nothing else to do + const now = Date.now(); + if (this._debug) + console.debug('[landing-service] Deleting landings... ids:', ids); + yield this.graphql.mutate({ + mutation: this.mutations.deleteAll, + variables: { + ids + }, + update: (proxy) => { + // Remove from cache + this.removeFromMutableCachedQueriesByIds(proxy, { queries: this.getLoadQueries(), ids }); + if (this._debug) + console.debug(`[landing-service] Landings deleted in ${Date.now() - now}ms`); + } + }); + }); + } + listenChanges(id, opts) { + if (isNil(id)) + throw new Error('Missing argument \'id\''); + // Should not need to watch local entity + if (EntityUtils.isLocalId(id)) { + return EMPTY; + } + if (this._debug) + console.debug(`[landing-service] [WS] Listening changes for trip {${id}}...`); + return this.graphql.subscribe({ + query: this.subscriptions.listenChanges, + fetchPolicy: opts && opts.fetchPolicy || undefined, + variables: { id, interval: toNumber(opts && opts.interval, 10) }, + error: { + code: DataErrorCodes.SUBSCRIBE_ENTITY_ERROR, + message: 'ERROR.SUBSCRIBE_ENTITY_ERROR' + } + }) + .pipe(map(({ data }) => { + const entity = data && Landing.fromObject(data); + if (entity && this._debug) + console.debug(`[landing-service] Landing {${id}} updated on server!`, entity); + return entity; + })); + } + translateControlPath(path, opts) { + opts = Object.assign({ i18nPrefix: 'LANDING.EDIT.' }, opts); + // Translate PMFM field + if (MEASUREMENT_VALUES_PMFM_ID_REGEXP.test(path) && opts.pmfms) { + const pmfmId = parseInt(path.split('.').pop()); + const pmfm = opts.pmfms.find(p => p.id === pmfmId); + return PmfmUtils.getPmfmName(pmfm); + } + // Default translation + return this.formErrorTranslator.translateControlPath(path, opts); + } + synchronizeById(id) { + return __awaiter(this, void 0, void 0, function* () { + const entity = yield this.load(id); + if (!entity || entity.id >= 0) + return; // skip + return yield this.synchronize(entity); + }); + } + synchronize(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + opts = Object.assign({ enableOptimisticResponse: false }, opts); + const localId = entity === null || entity === void 0 ? void 0 : entity.id; + if (isNil(localId) || localId >= 0) + throw new Error('Entity must be a local entity'); + if (this.network.offline) + throw new Error('Could not synchronize if network if offline'); + // Clone (to keep original entity unchanged) + entity = entity instanceof Entity ? entity.clone() : entity; + entity.synchronizationStatus = 'SYNC'; + entity.id = undefined; + // Synchronize trip + if (EntityUtils.isLocalId(entity.tripId)) { + // Load the local trip + const trip = yield this.tripService.load(entity.tripId, { fullLoad: true, rankOrderOnPeriod: false }); + // Link to parent observed location + trip.observedLocationId = entity.observedLocationId; + // Copy vessel from landing (Could be different if Vessel has been synchronized previously, without updating the trip). + trip.vesselSnapshot = entity.vesselSnapshot; + // Synchronize the trip + const savedTrip = yield this.tripService.synchronize(trip, { withLanding: false, withOperation: false, withOperationGroup: true }); + entity.tripId = savedTrip.id; + } + entity.trip = undefined; + try { + entity = yield this.save(entity, opts); + // Check return entity has a valid id + if (isNil(entity.id) || entity.id < 0) { + throw { code: DataErrorCodes.SYNCHRONIZE_ENTITY_ERROR }; + } + } + catch (err) { + throw Object.assign(Object.assign({}, err), { code: DataErrorCodes.SYNCHRONIZE_ENTITY_ERROR, message: 'ERROR.SYNCHRONIZE_ENTITY_ERROR', context: entity.asObject(MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE) }); + } + try { + if (this._debug) + console.debug(`[landing-service] Deleting landing {${entity.id}} from local storage`); + yield this.entities.deleteById(localId, { entityName: ObservedLocation.TYPENAME }); + } + catch (err) { + console.error(`[landing-service] Failed to locally delete landing {${entity.id}}`, err); + // Continue + } + return entity; + }); + } + control(entity, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const now = this._debug && Date.now(); + const maxProgression = toNumber(opts === null || opts === void 0 ? void 0 : opts.maxProgression, 100); + opts = Object.assign(Object.assign({}, opts), { maxProgression }); + opts.progression = opts.progression || new ProgressionModel({ total: maxProgression }); + const progressionStep = maxProgression / 3; + if (this._debug) + console.debug(`[landing-service] Control {${entity.id}} ...`); + opts = yield this.fillControlOptions(entity, opts); + const form = this.validatorService.getFormGroup(entity, Object.assign(Object.assign({}, opts), { withMeasurements: true })); + if (!form.valid) { + // Wait end of validation (e.g. async validators) + yield AppFormUtils.waitWhilePending(form); + // Get form errors + if (form.invalid) { + const errors = AppFormUtils.getFormErrors(form); + if (this._debug) + console.debug(`[landing-service] Control {${entity.id}} [INVALID] in ${Date.now() - now}ms`, errors); + return errors; + } + } + if (this._debug) + console.debug(`[landing-service] Control {${entity.id}} [OK] in ${Date.now() - now}ms`); + if (opts === null || opts === void 0 ? void 0 : opts.progression) + opts.progression.increment(progressionStep); + // Also control trip + if (isNotNil(entity.tripId)) { + const trip = yield this.tripService.load(entity.tripId, { isLandedTrip: true }); + // Should never occur + if (isNil(trip)) + return undefined; + // control the trip + const errors = yield this.tripService.control(trip, { + progression: opts === null || opts === void 0 ? void 0 : opts.progression, + maxProgression: (opts === null || opts === void 0 ? void 0 : opts.maxProgression) - progressionStep, + }); + if (errors) { + return { + trip: (_a = errors === null || errors === void 0 ? void 0 : errors.details) === null || _a === void 0 ? void 0 : _a.errors + }; + } + // terminate the trip + if (isNil(trip.controlDate)) + yield this.tripService.terminate(trip); + } + else if (opts === null || opts === void 0 ? void 0 : opts.progression) + opts.progression.increment(progressionStep); + return undefined; // No error + }); + } + controlAllByObservedLocation(observedLocation, opts) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const maxProgression = toNumber(opts === null || opts === void 0 ? void 0 : opts.maxProgression, 100); + opts = Object.assign(Object.assign({}, opts), { maxProgression }); + opts.progression = opts.progression || new ProgressionModel({ total: maxProgression }); + const endProgression = opts.progression.current + maxProgression; + // Increment + this.progressBarService.increase(); + try { + const { data } = yield this.loadAllByObservedLocation(LandingFilter.fromObject({ + observedLocationId: observedLocation.id, + })); + if (isEmptyArray(data)) + return undefined; + const progressionStep = maxProgression / data.length / 2; // 2 steps by landing: control, then save + let errorsById = null; + for (const entity of data) { + opts = yield this.fillControlOptions(entity, opts); + const errors = yield this.control(entity, Object.assign(Object.assign({}, opts), { maxProgression: progressionStep })); + if (errors) { + errorsById = errorsById || {}; + errorsById[entity.id] = errors; + const errorMessage = this.formErrorTranslator.translateErrors(errors, opts.translatorOptions); + entity.controlDate = null; + entity.qualificationComments = errorMessage; + if ((_a = opts.progression) === null || _a === void 0 ? void 0 : _a.cancelled) + return; // Cancel + // Save entity + yield this.save(entity); + } + else { + if ((_b = opts.progression) === null || _b === void 0 ? void 0 : _b.cancelled) + return; // Cancel + // Need to exclude data that already validated (else got exception when pod control already validated data) + if (isNil(entity.validationDate)) + yield this.terminate(entity); + } + // increment, after save/terminate + opts.progression.increment(progressionStep); + } + return errorsById; + } + catch (err) { + console.error(err && err.message || err); + throw err; + } + finally { + this.progressBarService.decrease(); + if (opts.progression.current < endProgression) { + opts.progression.current = endProgression; + } + } + }); + } + executeImport(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + const now = this._debug && Date.now(); + const maxProgression = opts && opts.maxProgression || 100; + filter = Object.assign({ startDate: DateUtils.moment().startOf('day').add(-15, 'day') }, filter); + console.info('[landing-service] Importing remote landings...', filter); + const { data } = yield JobUtils.fetchAllPages((offset, size) => this.loadAll(offset, size, 'id', null, filter, { + fetchPolicy: 'no-cache', + fullLoad: false, + toEntity: false + }), { + progression: opts === null || opts === void 0 ? void 0 : opts.progression, + maxProgression: maxProgression * 0.9, + logPrefix: this._logPrefix, + fetchSize: 5 + }); + // Save locally + yield this.entities.saveAll(data || [], { + entityName: EntitiesStorage.REMOTE_PREFIX + Landing.TYPENAME, + reset: true + }); + if (this._debug) + console.debug(`[landing-service] Importing remote landings [OK] in ${Date.now() - now}ms`, data); + }); + } + copyIdAndUpdateDate(source, target) { + if (!source) + return; + // DEBUG + //console.debug('[landing-service] copyIdAndUpdateDate', source, target); + super.copyIdAndUpdateDate(source, target); + // Update samples (recursively) + if (target.samples && source.samples) { + this.copyIdAndUpdateDateOnSamples(source, source.samples, target.samples); + } + // Update trip + if (target.trip && source.trip) { + // DEBUG + //console.debug('[landing-service] copyIdAndUpdateDate -> trip', source.trip, target.trip); + this.copyIdAndUpdateDateOnTrip(target, source.trip, target.trip); + } + } + /** + * Workaround to avoid integrity constraints on TRIP.DEPARTURE_DATE_TIME: we add a 1s delay, if another trip exists on same date + * + * @param entity + */ + fixLandingTripDate(entity) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!entity) + throw new Error('Invalid landing'); + const observedLocationId = entity.observedLocationId; + const vesselId = (_a = entity.vesselSnapshot) === null || _a === void 0 ? void 0 : _a.id; + const program = entity.program; + const trip = entity.trip; + const tripId = toNumber(trip === null || trip === void 0 ? void 0 : trip.id, entity.tripId); + const departureDateTime = fromDateISOString(trip.departureDateTime || entity.dateTime); + // Skip if no trip or no observed location + // or if trip already saved remotely + if (!trip || isNil(observedLocationId) || EntityUtils.isRemoteId(tripId)) + return; + if (isNil(vesselId) || !program || isNil(departureDateTime)) { + throw new Error('Invalid landing: missing vessel, program or dateTime'); + } + const offline = this.network.offline + || EntityUtils.isLocalId(entity.id) + || EntityUtils.isLocalId(observedLocationId) + || EntityUtils.isLocalId(tripId) + || false; + let otherDepartureDateTimes; + if (offline) { + const { data: landings } = (yield this.loadAllByObservedLocation({ observedLocationId, vesselId, program }, { computeRankOrder: false, fetchPolicy: 'no-cache', toEntity: false, withTotal: false })); + // Workaround to avoid integrity constraints on TRIP.DEPARTURE_DATE_TIME: we add a 1s delay, if another trip exists on same date + otherDepartureDateTimes = (landings || []) + .filter(l => l.id !== entity.id && l.trip && l.trip.id !== entity.trip.id) + .map(l => l.trip.departureDateTime) + .map(fromDateISOString); + } + else { + const tripFilter = TripFilter.fromObject({ + program, + observedLocationId, + vesselId, + excludedIds: isNotNil(tripId) ? [tripId] : undefined + }); + const { data: trips } = yield this.tripService.loadAll(0, 999, 'id', 'asc', tripFilter, { + query: LandingQueries.loadNearbyTripDates, + // CLT - We need to use 'no-cache' fetch policy in order to transform mutable watch query into ordinary query since mutable queries doesn't manage correctly updates and cache. + // They doesn't wait server result to return client side result. + fetchPolicy: 'no-cache', + withTotal: false + }); + otherDepartureDateTimes = (trips || []) + .filter(t => t.id !== entity.trip.id) + .map(t => t.departureDateTime) + .map(fromDateISOString); + } + const hasDuplicate = otherDepartureDateTimes.some(d => DateUtils.isSame(d, departureDateTime)); + if (hasDuplicate) { + // Compute max(existing date) + const maxDatetime = otherDepartureDateTimes.reduce(DateUtils.max, null); + // Apply 1s to the max(existing date) + trip.departureDateTime = maxDatetime.add(1, 'seconds'); + console.info('[landing-service] Trip\'s departureDateTime has been changed, to avoid integrity constraint error. New date is: ' + toDateISOString(trip.departureDateTime)); + } + }); + } + /* -- protected methods -- */ + /** + * List of importation jobs. + * + * @protected + * @param opts + */ + getImportJobs(filter, opts) { + var _a, _b; + const offlineFilter = (_a = this.settings.getOfflineFeature(this.featureName)) === null || _a === void 0 ? void 0 : _a.filter; + if (!filter) { + const observedLocationFilter = ObservedLocationFilter.fromObject(offlineFilter); + filter = ObservedLocationFilter.toLandingFilter(observedLocationFilter); + } + filter = this.asFilter(filter); + const programLabel = (_b = filter === null || filter === void 0 ? void 0 : filter.program) === null || _b === void 0 ? void 0 : _b.label; + if (programLabel) { + return [ + // Store program to opts, for other services (e.g. used by OperationService) + JobUtils.defer(o => this.programRefService.loadByLabel(programLabel, { fetchPolicy: 'network-only' }) + .then(program => { + opts.program = program; + opts.acquisitionLevels = ProgramUtils.getAcquisitionLevels(program); + })), + ...super.getImportJobs(filter, opts), + // Landing (historical data) + JobUtils.defer(o => this.executeImport(filter, o), opts) + ]; + } + else { + return super.getImportJobs(null, opts); + } + } + /** + * Save into the local storage + * + * @param entity + * @param opts + */ + saveLocally(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (EntityUtils.isRemoteId(entity.observedLocationId)) + throw new Error('Must be linked to a local observed location'); + // Fill default properties (as recorder department and person) + this.fillDefaultProperties(entity, opts); + // Make sure to fill id, with local ids + yield this.fillOfflineDefaultProperties(entity); + const json = this.asObject(entity, MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE); + if (this._debug) + console.debug('[landing-service] [offline] Saving landing locally...', json); + // Save response locally + yield this.entities.save(json); + return entity; + }); + } + asObject(source, opts) { + opts = Object.assign(Object.assign({}, MINIFY_OPTIONS), opts); + const target = source.asObject(opts); + if (opts.minify && !opts.keepEntityName && !opts.keepTypename) { + // Clean vessel features object, before saving + //copy.vesselSnapshot = {id: entity.vesselSnapshot && entity.vesselSnapshot.id}; + // Comment because need to keep recorder person + target.recorderPerson = source.recorderPerson && { + id: source.recorderPerson.id, + firstName: source.recorderPerson.firstName, + lastName: source.recorderPerson.lastName + }; + // Keep id only, on recorder department + target.recorderDepartment = source.recorderDepartment && { id: source.recorderDepartment && source.recorderDepartment.id } || undefined; + // Fill trip properties + const targetTrip = target.trip; + if (targetTrip) { + // Fill defaults + targetTrip.departureDateTime = targetTrip.departureDateTime || target.dateTime; + targetTrip.returnDateTime = targetTrip.returnDateTime || targetTrip.departureDateTime || target.dateTime; + targetTrip.departureLocation = targetTrip.departureLocation || target.location; + targetTrip.returnLocation = targetTrip.returnLocation || targetTrip.departureLocation || target.location; + // Always override recorder department/person + targetTrip.program = target.program; + targetTrip.vesselSnapshot = target.vesselSnapshot; + targetTrip.recorderDepartment = target.recorderDepartment; + targetTrip.recorderPerson = target.recorderPerson; + } + } + return target; + } + fillDefaultProperties(entity, opts) { + super.fillDefaultProperties(entity); + // Fill parent id, if not already set + if (!entity.tripId && !entity.observedLocationId && opts) { + entity.observedLocationId = opts.observedLocationId; + entity.tripId = opts.tripId; + } + // Make sure to set all samples attributes + (entity.samples || []).forEach(s => { + // Always fill label + if (isNilOrBlank(s.label)) { + s.label = `#${s.rankOrder}`; + } + }); + // Measurement: compute rankOrder + // fillRankOrder(entity.measurements); // todo ? use measurements instead of measurementValues + } + fillOfflineDefaultProperties(entity) { + return __awaiter(this, void 0, void 0, function* () { + const isNew = isNil(entity.id); + // If new, generate a local id + if (isNew) { + entity.id = yield this.entities.nextValue(entity); + } + // Fill default synchronization status + entity.synchronizationStatus = entity.synchronizationStatus || 'DIRTY'; + // Fill all sample ids + const samples = entity.samples && EntityUtils.listOfTreeToArray(entity.samples) || []; + yield EntityUtils.fillLocalIds(samples, (_, count) => this.entities.nextValues(Sample.TYPENAME, count)); + }); + } + fillControlOptions(entity, opts) { + var _a, _b, _c; + return __awaiter(this, void 0, void 0, function* () { + opts = opts || { strategy: null }; + // If program is not filled by a parent (an ObservedLocation) + const programLabel = entity.program && entity.program.label || null; + if (((_a = opts.program) === null || _a === void 0 ? void 0 : _a.label) !== programLabel) { + opts.program = yield this.programRefService.loadByLabel(programLabel); + } + // Load the strategy from measurementValues (if exists) + if (!opts.strategy) { + const strategyLabel = (_b = entity.measurementValues) === null || _b === void 0 ? void 0 : _b[PmfmIds.STRATEGY_LABEL]; + opts.strategy = isNotNilOrBlank(strategyLabel) + && (yield this.strategyRefService.loadByLabel(strategyLabel, { programId: (_c = opts.program) === null || _c === void 0 ? void 0 : _c.id })) + || null; + if (opts.strategy) { + // TODO check this + //opts.withStrategy = true; + } + else { + opts.withStrategy = false; + console.debug(this._logPrefix + 'No strategy loaded from landing #' + entity.id); + } + } + if (!(opts === null || opts === void 0 ? void 0 : opts.translatorOptions)) { + opts.translatorOptions = { + controlPathTranslator: { + translateControlPath: (path) => { var _a; return this.translateControlPath(path, { pmfms: (_a = opts.strategy) === null || _a === void 0 ? void 0 : _a.denormalizedPmfms }); } + } + }; + } + return opts; + }); + } + /** + * Copy Id and update, in sample tree (recursively) + * + * @param sources + * @param targets + */ + copyIdAndUpdateDateOnSamples(savedLanding, sources, targets) { + var _a; + // Update samples + if (sources && targets) { + const operationId = (_a = savedLanding.samples[0]) === null || _a === void 0 ? void 0 : _a.operationId; + targets.forEach(target => { + // Set the landing id (required by equals function) => Obsolete : there is no more direct link between sample and landing + target.landingId = savedLanding.id; + // INFO CLT: Fix on sample to landing link. We use operation to link sample to landing (see issue #IMAGINE-569) + // Set the operation id (required by equals function) + target.operationId = operationId; + const source = sources.find(s => target.equals(s)); + EntityUtils.copyIdAndUpdateDate(source, target); + RootDataEntityUtils.copyControlAndValidationDate(source, target); + // Copy parent Id (need for link to parent) + target.parentId = source === null || source === void 0 ? void 0 : source.parentId; + target.parent = null; + // Apply to children + if (target.children && target.children.length) { + this.copyIdAndUpdateDateOnSamples(savedLanding, sources, target.children); // recursive call + } + // Update images + if (target.images && source.images) { + this.copyIdAndUpdateDateOnImages(source, source.images, target.images); // recursive call + } + }); + } + } + /** + * Copy Id and update, on images + * + * @param sources + * @param targets + */ + copyIdAndUpdateDateOnImages(savedSample, sources, targets) { + if (sources && targets && sources.length === targets.length && sources.length > 0) { + sources.forEach((source, index) => { + // Find by index, as order should not be changed during saving + const target = targets[index]; + EntityUtils.copyIdAndUpdateDate(source, target); + DataEntityUtils.copyControlDate(source, target); + DataEntityUtils.copyQualificationDateAndFlag(source, target); + }); + } + } + copyIdAndUpdateDateOnTrip(savedLanding, source, target) { + this.tripService.copyIdAndUpdateDate(source, target); + savedLanding.tripId = target.id; + } + computeRankOrderAndSort(data, offset, total, sortBy, sortDirection, filter) { + // DEBUG + console.debug('[landing-service] DEV - filtering landings - sortBy=' + sortBy); + // Compute rankOrder, by tripId or observedLocationId + if (filter && (isNotNil(filter.tripId) || isNotNil(filter.observedLocationId))) { + const asc = (!sortDirection || sortDirection === 'asc'); + let rankOrder = asc ? 1 + offset : (total - offset - data.length + 1); + // apply a sorted copy (do NOT change original order), then compute rankOrder + data.slice().sort(sortByDateOrIdFn) + .forEach(o => o.rankOrder = rankOrder++); + // Sort by rankOrder (even if 'id' because never used) + if (!sortBy || sortBy === 'rankOrder' || sortBy === 'id' || sortBy === 'dateTime') { + data.sort(asc ? sortByAscRankOrder : sortByDescRankOrder); + } + } + } +}; +LandingService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [Injector, + NetworkService, + EntitiesStorage, + ProgramRefService, + StrategyRefService, + TripService, + LandingValidatorService, + ProgressBarService, + FormErrorTranslator, + LocalSettingsService]) +], LandingService); +export { LandingService }; +//# sourceMappingURL=landing.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landing.service.js.map b/out-tsc/app/app/trip/landing/landing.service.js.map new file mode 100644 index 000000000..a3655c502 --- /dev/null +++ b/out-tsc/app/app/trip/landing/landing.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"landing.service.js","sourceRoot":"","sources":["../../../../../src/app/trip/landing/landing.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landing.validator.js b/out-tsc/app/app/trip/landing/landing.validator.js new file mode 100644 index 000000000..8747c4eed --- /dev/null +++ b/out-tsc/app/app/trip/landing/landing.validator.js @@ -0,0 +1,78 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { LocalSettingsService, SharedValidators, toBoolean, toNumber } from '@sumaris-net/ngx-components'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { Landing } from './landing.model'; +import { DataRootVesselEntityValidatorService } from '@app/data/services/validator/root-vessel-entity.validator'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { PmfmValidators } from '@app/referential/services/validator/pmfm.validators'; +import { TranslateService } from '@ngx-translate/core'; +let LandingValidatorService = class LandingValidatorService extends DataRootVesselEntityValidatorService { + constructor(formBuilder, translate, settings, measurementsValidatorService) { + super(formBuilder, translate, settings); + this.measurementsValidatorService = measurementsValidatorService; + } + getFormGroup(data, opts) { + const form = super.getFormGroup(data, opts); + // Add measurement form + if (opts && opts.withMeasurements) { + const measForm = form.get('measurementValues'); + const pmfms = (opts.strategy && opts.strategy.denormalizedPmfms) + || (opts.program && opts.program.strategies[0] && opts.program.strategies[0].denormalizedPmfms) + || []; + pmfms + .filter(p => p.acquisitionLevel === AcquisitionLevelCodes.LANDING) + .forEach(p => { + const key = p.pmfmId.toString(); + const value = data && data.measurementValues && data.measurementValues[key]; + measForm.addControl(key, this.formBuilder.control(value, PmfmValidators.create(p))); + }); + } + return form; + } + getFormGroupConfig(data, opts) { + const formConfig = Object.assign(super.getFormGroupConfig(data), { + __typename: [Landing.TYPENAME], + location: [(data === null || data === void 0 ? void 0 : data.location) || null, SharedValidators.entity], + dateTime: [(data === null || data === void 0 ? void 0 : data.dateTime) || null], + rankOrder: [toNumber(data === null || data === void 0 ? void 0 : data.rankOrder, null), Validators.compose([SharedValidators.integer, Validators.min(1)])], + rankOrderOnVessel: [toNumber(data === null || data === void 0 ? void 0 : data.rankOrderOnVessel, null), Validators.compose([SharedValidators.integer, Validators.min(1)])], + measurementValues: this.formBuilder.group({}), + // Parent id + observedLocationId: [toNumber(data === null || data === void 0 ? void 0 : data.observedLocationId, null)], + tripId: [toNumber(data === null || data === void 0 ? void 0 : data.tripId, null)], + // Computed values (e.g. for SIH-OBSBIO program) + samplesCount: [toNumber(data === null || data === void 0 ? void 0 : data.samplesCount, null), null] + }); + // Add observed location + if (opts.withObservedLocation) { + formConfig.observedLocation = [data && data.observedLocation, SharedValidators.entity]; + } + // Add observers + if (opts.withObservers) { + formConfig.observers = this.getObserversFormArray(data === null || data === void 0 ? void 0 : data.observers); + } + return formConfig; + } + fillDefaultOptions(opts) { + opts = super.fillDefaultOptions(opts); + opts.withObservers = toBoolean(opts.withObservers, opts.program && opts.program.getPropertyAsBoolean(ProgramProperties.LANDING_OBSERVERS_ENABLE) || false); + opts.withStrategy = toBoolean(opts.withStrategy, opts.program && opts.program.getPropertyAsBoolean(ProgramProperties.LANDING_STRATEGY_ENABLE) || false); + opts.withMeasurements = toBoolean(opts.withMeasurements, toBoolean(!!opts.program, false)); + // TODO add more options, for all form parts: + // opts.withFishingArea = ... + // opts.withMetier = ... + return opts; + } +}; +LandingValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + LocalSettingsService, + MeasurementsValidatorService]) +], LandingValidatorService); +export { LandingValidatorService }; +//# sourceMappingURL=landing.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landing.validator.js.map b/out-tsc/app/app/trip/landing/landing.validator.js.map new file mode 100644 index 000000000..bf965d3a6 --- /dev/null +++ b/out-tsc/app/app/trip/landing/landing.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"landing.validator.js","sourceRoot":"","sources":["../../../../../src/app/trip/landing/landing.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landings-routing.module.js b/out-tsc/app/app/trip/landing/landings-routing.module.js new file mode 100644 index 000000000..c4242cea5 --- /dev/null +++ b/out-tsc/app/app/trip/landing/landings-routing.module.js @@ -0,0 +1,40 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { AppLandingModule } from './landing.module'; +import { LandingsPage } from '@app/trip/landing/landings.page'; +const routes = [ + { + path: '', + pathMatch: 'full', + runGuardsAndResolvers: 'pathParamsChange', + component: LandingsPage, + }, + { + path: 'landing', + loadChildren: () => import('./landing-routing.module').then(m => m.AppLandingRoutingModule) + }, + { + path: 'control', + loadChildren: () => import('./auction-control/auction-control-routing.module').then(m => m.AppAuctionControlRoutingModule) + }, + { + path: 'sampling', + loadChildren: () => import('./sampling/sampling-landing-routing.module').then(m => m.AppSamplingLandingRoutingModule) + } +]; +let AppLandingsRoutingModule = class AppLandingsRoutingModule { +}; +AppLandingsRoutingModule = __decorate([ + NgModule({ + imports: [ + RouterModule.forChild(routes), + AppLandingModule, + ], + exports: [ + RouterModule + ] + }) +], AppLandingsRoutingModule); +export { AppLandingsRoutingModule }; +//# sourceMappingURL=landings-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landings-routing.module.js.map b/out-tsc/app/app/trip/landing/landings-routing.module.js.map new file mode 100644 index 000000000..f40b9ba8f --- /dev/null +++ b/out-tsc/app/app/trip/landing/landings-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"landings-routing.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/landing/landings-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,qBAAqB,EAAE,kBAAkB;QACzC,SAAS,EAAE,YAAY;KACxB;IACD;QACE,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC;KAC5F;IACD;QACE,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,8BAA8B,CAAC;KAC3H;IACD;QACE,IAAI,EAAE,UAAU;QAChB,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,+BAA+B,CAAC;KACtH;CACF,CAAC;AAYK,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;CACpC,CAAA;AADY,wBAAwB;IATpC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,gBAAgB;SACjB;QACD,OAAO,EAAE;YACP,YAAY;SACb;KACF,CAAC;GACW,wBAAwB,CACpC;SADY,wBAAwB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landings.page.js b/out-tsc/app/app/trip/landing/landings.page.js new file mode 100644 index 000000000..1848c214b --- /dev/null +++ b/out-tsc/app/app/trip/landing/landings.page.js @@ -0,0 +1,790 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { UntypedFormBuilder } from '@angular/forms'; +import { Alerts, ConfigService, isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrBlank, isNotNilOrNaN, PersonService, PersonUtils, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, SharedValidators, slideUpDownAnimation, StatusIds, toBoolean, toNumber, } from '@sumaris-net/ngx-components'; +import { AcquisitionLevelCodes, LocationLevelIds } from '@app/referential/services/model/model.enum'; +import { ObservedLocation } from '../observedlocation/observed-location.model'; +import { AppRootDataTable, AppRootTableSettingsEnum } from '@app/data/table/root-table.class'; +import { OBSERVED_LOCATION_FEATURE_NAME, TRIP_CONFIG_OPTIONS } from '../trip.config'; +import { environment } from '@environments/environment'; +import { BehaviorSubject } from 'rxjs'; +import { ObservedLocationOfflineModal } from '../observedlocation/offline/observed-location-offline.modal'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { DATA_CONFIG_OPTIONS } from '@app/data/data.config'; +import { ObservedLocationFilter } from '../observedlocation/observed-location.filter'; +import { filter } from 'rxjs/operators'; +import { DataQualityStatusEnum, DataQualityStatusList } from '@app/data/services/model/model.utils'; +import { ContextService } from '@app/shared/context.service'; +import { Landing } from '@app/trip/landing/landing.model'; +import { LandingFilter } from '@app/trip/landing/landing.filter'; +import { LandingService } from '@app/trip/landing/landing.service'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { Program } from '@app/referential/services/model/program.model'; +import { SelectProgramModal } from '@app/referential/program/select-program.modal'; +import { LANDING_I18N_PMFM_PREFIX, LANDING_RESERVED_END_COLUMNS, LANDING_TABLE_DEFAULT_I18N_PREFIX } from '@app/trip/landing/landings.table'; +import { PMFM_ID_REGEXP, PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { TripService } from '@app/trip/trip/trip.service'; +import { ObservedLocationService } from '@app/trip/observedlocation/observed-location.service'; +import { VesselSnapshotFilter } from '@app/referential/services/filter/vessel.filter'; +import { VesselSnapshotService } from '@app/referential/services/vessel-snapshot.service'; +import { StrategyRefService } from '@app/referential/services/strategy-ref.service'; +import { ObservedLocationsPageSettingsEnum } from '@app/trip/observedlocation/table/observed-locations.page'; +import { PmfmNamePipe } from '@app/referential/pipes/pmfms.pipe'; +export const LandingsPageSettingsEnum = { + PAGE_ID: 'landings', + FILTER_KEY: AppRootTableSettingsEnum.FILTER_KEY, + FEATURE_NAME: OBSERVED_LOCATION_FEATURE_NAME, +}; +export const LANDING_PAGE_RESERVED_START_COLUMNS = [ + 'quality', + 'program', + 'vessel', + 'vesselType', + 'vesselBasePortLocation', + 'location', + 'dateTime', + 'observers', + 'creationDate', + 'recorderPerson', + 'samplesCount' +]; +export const LANDING_PAGE_RESERVED_END_COLUMNS = LANDING_RESERVED_END_COLUMNS; +let LandingsPage = class LandingsPage extends AppRootDataTable { + constructor(injector, dataService, personService, referentialRefService, programRefService, strategyRefService, vesselSnapshotService, observedLocationService, tripService, formBuilder, configService, pmfmNamePipe, context, cd) { + super(injector, Landing, LandingFilter, [...LANDING_PAGE_RESERVED_START_COLUMNS, ...LANDING_RESERVED_END_COLUMNS], dataService, null, { + reservedStartColumns: LANDING_PAGE_RESERVED_START_COLUMNS, + reservedEndColumns: LANDING_PAGE_RESERVED_END_COLUMNS, + i18nColumnPrefix: LANDING_TABLE_DEFAULT_I18N_PREFIX, + i18nPmfmPrefix: LANDING_I18N_PMFM_PREFIX, + watchAllOptions: { + computeRankOrder: false, // Not need, because this table use the landing 'id' + //withObservedLocation: true, // Need to get observers + } + }); + this.personService = personService; + this.referentialRefService = referentialRefService; + this.programRefService = programRefService; + this.strategyRefService = strategyRefService; + this.vesselSnapshotService = vesselSnapshotService; + this.observedLocationService = observedLocationService; + this.tripService = tripService; + this.formBuilder = formBuilder; + this.configService = configService; + this.pmfmNamePipe = pmfmNamePipe; + this.context = context; + this.cd = cd; + this.$title = new BehaviorSubject(undefined); + this.$observedLocationTitle = new BehaviorSubject(undefined); + this.$pmfms = new BehaviorSubject([]); + this.$detailProgram = new BehaviorSubject(undefined); // Program to use to create new landing + this.statusList = DataQualityStatusList; + this.statusById = DataQualityStatusEnum; + this.selectedSegment = ''; + this.showTitleSegment = false; + this.showFilterProgram = true; + this.showFilterStrategy = false; // Can be override by setProgram() or resetProgram() + this.showFilterVessel = true; + this.showFilterLocation = true; + this.showFilterPeriod = true; + this.showFilterSampleLabel = false; // Can be override by setProgram() or resetProgram() + this.showFilterSampleTagId = false; // Can be override by setProgram() or resetProgram() + this.showQuality = true; + this.showRecorder = true; + this.showObservers = true; + this.inlineEdition = false; + this.i18nPmfmPrefix = this.options.i18nPmfmPrefix; + this.filterForm = formBuilder.group({ + program: [null, SharedValidators.entity], + strategy: [null, SharedValidators.entity], + vesselSnapshot: [null, SharedValidators.entity], + location: [null, SharedValidators.entity], + startDate: [null, SharedValidators.validDate], + endDate: [null, SharedValidators.validDate], + synchronizationStatus: [null], + recorderDepartment: [null, SharedValidators.entity], + recorderPerson: [null, SharedValidators.entity], + observers: formBuilder.array([[null, SharedValidators.entity]]), + sampleLabel: [null], + sampleTagId: [null] + }); + this.autoLoad = false; + this.defaultSortBy = 'dateTime'; + this.defaultSortDirection = 'desc'; + this.settingsId = LandingsPageSettingsEnum.PAGE_ID; // Fixed value, to be able to reuse it in the editor page + this.featureName = LandingsPageSettingsEnum.FEATURE_NAME; // Same feature as Observed locations + // FOR DEV ONLY ---- + this.debug = !environment.production; + } + get filterObserversForm() { + return this.filterForm.controls.observers; + } + get filterDataQualityControl() { + return this.filterForm.controls.dataQualityStatus; + } + set showProgramColumn(value) { + this.setShowColumn('program', value); + } + get showProgramColumn() { + return this.getShowColumn('program'); + } + set showVesselTypeColumn(value) { + this.setShowColumn('vesselType', value); + } + get showVesselTypeColumn() { + return this.getShowColumn('vesselType'); + } + set showVesselBasePortLocationColumn(value) { + this.setShowColumn('vesselBasePortLocation', value); + } + get showVesselBasePortLocationColumn() { + return this.getShowColumn('vesselBasePortLocation'); + } + set showObserversColumn(value) { + this.setShowColumn('observers', value); + } + get showObserversColumn() { + return this.getShowColumn('observers'); + } + set showCreationDateColumn(value) { + this.setShowColumn('creationDate', value); + } + get showCreationDateColumn() { + return this.getShowColumn('creationDate'); + } + set showRecorderPersonColumn(value) { + this.setShowColumn('recorderPerson', value); + } + get showRecorderPersonColumn() { + return this.getShowColumn('recorderPerson'); + } + set showDateTimeColumn(value) { + this.setShowColumn('dateTime', value); + } + get showDateTimeColumn() { + return this.getShowColumn('dateTime'); + } + set showSamplesCountColumn(value) { + this.setShowColumn('samplesCount', value); + } + get showSamplesCountColumn() { + return this.getShowColumn('samplesCount'); + } + set showLocationColumn(value) { + this.setShowColumn('location', value); + } + get showLocationColumn() { + return this.getShowColumn('location'); + } + get pmfms() { + return this.$pmfms.value; + } + set pmfms(pmfms) { + this.$pmfms.next(pmfms); + } + ngOnInit() { + super.ngOnInit(); + // Qualitative values display attributes + this.qualitativeValueAttributes = this.settings.getFieldDisplayAttributes('qualitativeValue', ['label', 'name']); + // Programs combo (filter) + this.registerAutocompleteField('program', { + service: this.programRefService, + filter: { + acquisitionLevelLabels: [AcquisitionLevelCodes.OBSERVED_LOCATION, AcquisitionLevelCodes.LANDING], + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] + }, + mobile: this.mobile + }); + // Strategy combo (filter) + this.registerAutocompleteField('strategy', { + suggestFn: (value, filter) => { + const program = this.filterForm.get('program').value; + return this.strategyRefService.suggest(value, Object.assign(Object.assign({}, filter), { levelId: program === null || program === void 0 ? void 0 : program.id })); + }, + attributes: ['label'], + filter: { + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] + }, + mobile: this.mobile + }); + // Combo: vessels + this.vesselSnapshotAttributes = this.settings.getFieldDisplayAttributes('vesselSnapshot', VesselSnapshotFilter.DEFAULT_SEARCH_ATTRIBUTES); + this.vesselSnapshotService.getAutocompleteFieldOptions().then(opts => { + this.registerAutocompleteField('vesselSnapshot', opts); + this.vesselSnapshotAttributes = opts.attributes; + }); + // Locations combo (filter) + this.registerAutocompleteField('location', { + service: this.referentialRefService, + filter: { + entityName: 'Location', + levelIds: [LocationLevelIds.AUCTION, LocationLevelIds.PORT] + }, + mobile: this.mobile + }); + // Combo: recorder department + this.registerAutocompleteField('department', { + service: this.referentialRefService, + filter: { + entityName: 'Department' + }, + mobile: this.mobile + }); + // Combo: recorder person + const personAttributes = this.settings.getFieldDisplayAttributes('person', ['lastName', 'firstName', 'department.name']); + this.registerAutocompleteField('person', { + service: this.personService, + filter: { + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE] + }, + attributes: personAttributes, + displayWith: PersonUtils.personToString, + mobile: this.mobile + }); + // Combo: observers + this.registerAutocompleteField('observers', { + service: this.personService, + filter: { + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE] + }, + attributes: personAttributes, + displayWith: PersonUtils.personToString, + mobile: this.mobile + }); + this.registerSubscription(this.configService.config + .pipe(filter(isNotNil)) + .subscribe(config => this.onConfigLoaded(config))); + // Clear the context + this.resetContext(); + } + setFilter(filter, opts) { + const _super = Object.create(null, { + setFilter: { get: () => super.setFilter } + }); + var _a; + return __awaiter(this, void 0, void 0, function* () { + // Program + const programLabel = (_a = filter === null || filter === void 0 ? void 0 : filter.program) === null || _a === void 0 ? void 0 : _a.label; + if (isNotNilOrBlank(programLabel)) { + const program = yield this.programRefService.loadByLabel(programLabel); + yield this.setProgram(program); + } + else { + // Check if user can access more than one program + const { data, total } = yield this.programRefService.loadAll(0, 1, null, null, { + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] + }, { withTotal: true }); + if (isNotEmptyArray(data) && total === 1) { + const program = data[0]; + yield this.setProgram(program); + } + else { + yield this.resetProgram(); + } + } + _super.setFilter.call(this, filter, opts); + }); + } + /* -- protected function -- */ + onConfigLoaded(config) { + return __awaiter(this, void 0, void 0, function* () { + console.info('[landings] Init using config', config); + // Show title segment ? (always disable on mobile) + this.showTitleSegment = !this.mobile && config.getPropertyAsBoolean(TRIP_CONFIG_OPTIONS.OBSERVED_LOCATION_LANDINGS_TAB_ENABLE); + // title + const observedLocationTitle = config.getProperty(TRIP_CONFIG_OPTIONS.OBSERVED_LOCATION_NAME); + this.$observedLocationTitle.next(observedLocationTitle); + // Quality + this.showQuality = config.getPropertyAsBoolean(DATA_CONFIG_OPTIONS.QUALITY_PROCESS_ENABLE); + this.setShowColumn('quality', this.showQuality, { emitEvent: false }); + // Recorder + this.showRecorder = config.getPropertyAsBoolean(DATA_CONFIG_OPTIONS.SHOW_RECORDER); + this.setShowColumn('recorderPerson', this.showRecorder, { emitEvent: false }); + // Observer + this.showObservers = config.getPropertyAsBoolean(DATA_CONFIG_OPTIONS.SHOW_OBSERVERS); + this.setShowColumn('observers', this.showObservers, { emitEvent: false }); + // Manage filters display according to config settings. + this.showFilterProgram = config.getPropertyAsBoolean(DATA_CONFIG_OPTIONS.SHOW_FILTER_PROGRAM); + this.showFilterLocation = config.getPropertyAsBoolean(DATA_CONFIG_OPTIONS.SHOW_FILTER_LOCATION); + this.showFilterPeriod = config.getPropertyAsBoolean(DATA_CONFIG_OPTIONS.SHOW_FILTER_PERIOD); + // Restore filter from settings, or load all + yield this.restoreFilterOrLoad(); + this.updateColumns(); + }); + } + setProgram(program) { + return __awaiter(this, void 0, void 0, function* () { + if (!(program === null || program === void 0 ? void 0 : program.label)) + throw new Error('Invalid program'); + console.debug('[landings] Init using program', program); + // I18n suffix + let i18nSuffix = program.getProperty(ProgramProperties.I18N_SUFFIX); + i18nSuffix = i18nSuffix !== 'legacy' ? i18nSuffix : ''; + this.i18nColumnSuffix = i18nSuffix; + // Title + const title = this.translateContext.instant(this.i18nColumnPrefix + 'TITLE', this.i18nColumnSuffix); + this.$title.next(title); + this.showVesselTypeColumn = program.getPropertyAsBoolean(ProgramProperties.VESSEL_TYPE_ENABLE); + this.showVesselBasePortLocationColumn = program.getPropertyAsBoolean(ProgramProperties.LANDING_VESSEL_BASE_PORT_LOCATION_ENABLE); + this.showCreationDateColumn = program.getPropertyAsBoolean(ProgramProperties.LANDING_CREATION_DATE_ENABLE); + this.showLocationColumn = this.showFilterLocation || program.getPropertyAsBoolean(ProgramProperties.LANDING_LOCATION_ENABLE); + this.showObserversColumn = this.showObservers || program.getPropertyAsBoolean(ProgramProperties.LANDING_OBSERVERS_ENABLE); + this.showRecorderPersonColumn = this.showRecorder || program.getPropertyAsBoolean(ProgramProperties.LANDING_RECORDER_PERSON_ENABLE); + this.showSamplesCountColumn = program.getPropertyAsBoolean(ProgramProperties.LANDING_SAMPLES_COUNT_ENABLE); + this.showFilterStrategy = program.getPropertyAsBoolean(ProgramProperties.LANDING_STRATEGY_ENABLE); + this.showFilterSampleLabel = program.getPropertyAsBoolean(ProgramProperties.LANDING_SAMPLE_LABEL_ENABLE); + // Location filter + const locationLevelIds = program.getPropertyAsNumbers(ProgramProperties.OBSERVED_LOCATION_LOCATION_LEVEL_IDS); + this.autocompleteFields.location.filter.levelIds = isNotEmptyArray(locationLevelIds) ? locationLevelIds : undefined; + // Landing pmfms + const includedPmfmIds = program.getPropertyAsNumbers(ProgramProperties.LANDING_COLUMNS_PMFM_IDS); + const landingPmfms = yield this.programRefService.loadProgramPmfms(program === null || program === void 0 ? void 0 : program.label, { + acquisitionLevel: AcquisitionLevelCodes.LANDING + }); + const columnPmfms = landingPmfms.filter(p => p.required || (includedPmfmIds === null || includedPmfmIds === void 0 ? void 0 : includedPmfmIds.includes(p.id))); + this.$pmfms.next(columnPmfms); + const samplePmfms = yield this.programRefService.loadProgramPmfms(program === null || program === void 0 ? void 0 : program.label, { + acquisitionLevels: [AcquisitionLevelCodes.SAMPLE, AcquisitionLevelCodes.INDIVIDUAL_MONITORING, AcquisitionLevelCodes.INDIVIDUAL_RELEASE] + }); + this.showFilterSampleTagId = (samplePmfms === null || samplePmfms === void 0 ? void 0 : samplePmfms.some(PmfmUtils.isTagId)) || false; + this.$detailProgram.next(program); + if (this.loaded) + this.updateColumns(); + }); + } + resetProgram() { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[landings] Reset filter program'); + this.showVesselTypeColumn = toBoolean(ProgramProperties.VESSEL_TYPE_ENABLE.defaultValue, false); + this.showVesselBasePortLocationColumn = toBoolean(ProgramProperties.LANDING_VESSEL_BASE_PORT_LOCATION_ENABLE.defaultValue, false); + this.showCreationDateColumn = toBoolean(ProgramProperties.LANDING_CREATION_DATE_ENABLE.defaultValue, false); + this.showLocationColumn = this.showFilterLocation || toBoolean(ProgramProperties.LANDING_LOCATION_ENABLE.defaultValue, false); + this.showObserversColumn = this.showObservers || toBoolean(ProgramProperties.LANDING_OBSERVERS_ENABLE.defaultValue, false); + this.showRecorderPersonColumn = this.showRecorder || toBoolean(ProgramProperties.LANDING_RECORDER_PERSON_ENABLE.defaultValue, false); + this.showSamplesCountColumn = toBoolean(ProgramProperties.LANDING_SAMPLES_COUNT_ENABLE.defaultValue, false); + this.showFilterStrategy = toBoolean(ProgramProperties.LANDING_STRATEGY_ENABLE.defaultValue, false); + this.showFilterSampleLabel = toBoolean(ProgramProperties.LANDING_SAMPLE_LABEL_ENABLE.defaultValue, false); + this.showFilterSampleTagId = false; + // Reset location filter + delete this.autocompleteFields.location.filter.levelIds; + this.$title.next(this.i18nColumnPrefix + 'TITLE'); + this.$pmfms.next([]); + this.$detailProgram.next(undefined); + if (this.loaded) + this.updateColumns(); + }); + } + restoreFilterOrLoad(opts) { + const _super = Object.create(null, { + restoreFilterOrLoad: { get: () => super.restoreFilterOrLoad } + }); + return __awaiter(this, void 0, void 0, function* () { + // Load by observed location + const observedLocationId = this.route.snapshot.paramMap.get('observedLocationId'); + if (isNotNilOrNaN(observedLocationId)) { + const observedLocation = yield this.observedLocationService.load(+observedLocationId); + yield this.setFilter({ observedLocationId: +observedLocationId, program: observedLocation.program }, Object.assign({ emitEvent: true }, opts)); + return; + } + // Load by trip + const tripId = this.route.snapshot.paramMap.get('tripId'); + if (isNotNilOrNaN(tripId)) { + const trip = yield this.tripService.load(+tripId); + yield this.setFilter({ tripId: +tripId, program: trip.program }, Object.assign({ emitEvent: true }, opts)); + return; + } + // For to use queryParams, if any + const { q } = this.route.snapshot.queryParams; + if (isNotNilOrBlank(q)) { + return _super.restoreFilterOrLoad.call(this, Object.assign(Object.assign({}, opts), { sources: ['queryParams'] })); + } + // Default implementation + return _super.restoreFilterOrLoad.call(this, opts); + }); + } + getDisplayColumns() { + const pmfms = this.pmfms; + if (!pmfms) + return this.columns; + const userColumns = this.getUserColumns(); + const pmfmColumnNames = pmfms + //.filter(p => p.isMandatory || !userColumns || userColumns.includes(p.pmfmId.toString())) + .filter(p => !p.hidden) + .map(p => p.id.toString()); + const startColumns = (this.options && this.options.reservedStartColumns || []).filter(c => !userColumns || userColumns.includes(c)); + const endColumns = (this.options && this.options.reservedEndColumns || []).filter(c => !userColumns || userColumns.includes(c)); + return RESERVED_START_COLUMNS + .concat(startColumns) + .concat(pmfmColumnNames) + .concat(endColumns) + .concat(RESERVED_END_COLUMNS) + // Remove columns to hide + .filter(column => !this.excludesColumns.includes(column)); + // DEBUG + //console.debug("[measurement-table] Updating columns: ", this.displayedColumns) + //if (!this.loading) this.markForCheck(); + } + onSegmentChanged(event) { + return __awaiter(this, void 0, void 0, function* () { + const path = event.detail.value; + if (isNilOrBlank(path)) + return; // Skip if no path + this.markAsLoading(); + // Prepare filter for next page + const nextFilter = ObservedLocationFilter.fromLandingFilter(this.asFilter()); + const json = (nextFilter === null || nextFilter === void 0 ? void 0 : nextFilter.asObject({ keepTypename: true })) || {}; + yield this.settings.savePageSetting(ObservedLocationsPageSettingsEnum.PAGE_ID, json, ObservedLocationsPageSettingsEnum.FILTER_KEY); + setTimeout(() => __awaiter(this, void 0, void 0, function* () { + yield this.navController.navigateRoot(path, { animated: false }); + // Reset the selected segment + this.selectedSegment = ''; + this.markAsLoaded(); + }), 200); + }); + } + /** + * Action triggered when user swipes + */ + onSwipeTab(event) { + // DEBUG + // if (this.debug) console.debug("[landings] onSwipeTab()"); + // Skip, if not a valid swipe event + if (!event + || event.defaultPrevented || (event.srcEvent && event.srcEvent.defaultPrevented) + || event.pointerType !== 'touch') { + return false; + } + this.toggleSynchronizationStatus(); + return true; + } + openRow(id, row) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail) + return false; + if (this.onOpenRow.observers.length) { + this.onOpenRow.emit(row); + return true; + } + const data = Landing.fromObject(row.currentData); + // Get the detail program + const program = yield this.getDetailProgram(data); + if (!program) + return false; // User cancelled + // Get the detail editor + const editor = program.getProperty(ProgramProperties.LANDING_EDITOR); + console.debug('[landings] Opening a landing, using editor: ' + editor); + return yield this.navController.navigateForward([editor, id], { + relativeTo: this.route, + queryParams: { + parent: AcquisitionLevelCodes.OBSERVED_LOCATION + } + }); + }); + } + openNewRowDetail(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail) + return false; + if (this.onNewRow.observed) { + this.onNewRow.emit(event); + return true; + } + // Get the detail program + const program = yield this.getDetailProgram(); + if (!program) + return false; // User cancelled + // Get the detail editor + const editor = program.getProperty(ProgramProperties.LANDING_EDITOR); + console.debug('[landings] Opening new landing, using editor: ' + editor); + return yield this.navController.navigateForward([editor, 'new'], { + relativeTo: this.route, + queryParams: { + program: program === null || program === void 0 ? void 0 : program.label, + parent: AcquisitionLevelCodes.OBSERVED_LOCATION, + tableId: this.settingsId + } + }); + }); + } + openTrashModal(event) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[landings] Opening trash modal...'); + // TODO BLA + /*const modal = await this.modalCtrl.create({ + component: TripTrashModal, + componentProps: { + synchronizationStatus: this.filter.synchronizationStatus + }, + keyboardClose: true, + cssClass: 'modal-large' + }); + + // Open the modal + await modal.present(); + + // On dismiss + const res = await modal.onDidDismiss(); + if (!res) return; // CANCELLED*/ + }); + } + prepareOfflineMode(event, opts) { + const _super = Object.create(null, { + prepareOfflineMode: { get: () => super.prepareOfflineMode } + }); + return __awaiter(this, void 0, void 0, function* () { + if (this.importing) + return; // Skip + if (event) { + const feature = this.settings.getOfflineFeature(this.featureName) || { + name: this.featureName + }; + const value = Object.assign(Object.assign({}, this.filter), feature.filter); + const modal = yield this.modalCtrl.create({ + component: ObservedLocationOfflineModal, + componentProps: { + value + }, keyboardClose: true + }); + // Open the modal + modal.present(); + // Wait until closed + const { data, role } = yield modal.onDidDismiss(); + if (!data || role === 'cancel') + return; // User cancelled + // Update feature filter, and save it into settings + feature.filter = data; + this.settings.saveOfflineFeature(feature); + // DEBUG + console.debug('[observed-location-table] Will prepare offline mode, using filter:', feature.filter); + } + return _super.prepareOfflineMode.call(this, event, opts); + }); + } + deleteSelection(event, opts) { + const _super = Object.create(null, { + deleteSelection: { get: () => super.deleteSelection } + }); + return __awaiter(this, void 0, void 0, function* () { + const rowsToDelete = this.selection.selected; + const landingIds = (rowsToDelete || []) + .map(row => row.currentData) + .map(ObservedLocation.fromObject) + .map(o => o.id); + // ask confirmation if one landing has samples (with tagId) + if (isNotEmptyArray(landingIds) && (!opts || opts.interactive !== false)) { + const hasSample = yield this._dataService.hasSampleWithTagId(landingIds); + if (hasSample) { + const messageKey = landingIds.length === 1 + ? 'OBSERVED_LOCATION.LANDING.CONFIRM.DELETE_ONE_HAS_SAMPLE' + : 'OBSERVED_LOCATION.LANDING.CONFIRM.DELETE_MANY_HAS_SAMPLE'; + const confirmed = yield Alerts.askConfirmation(messageKey, this.alertCtrl, this.translate, event); + if (!confirmed) + return; // skip + } + } + // Use inherited function, when no sample + return _super.deleteSelection.call(this, event, { interactive: false /*already confirmed*/ }); + }); + } + get canUserCancelOrDelete() { + // IMAGINE-632: User can only delete landings or samples created by himself or on which he is defined as observer + // Cannot delete if not connected + if (!this.accountService.isLogin() || this.selection.isEmpty()) { + return false; + } + // When connected user is an admin + if (this.accountService.isAdmin()) { + return true; + } + const user = this.accountService.person; + // Find a row that user CANNOT delete + const invalidRow = this.selection.selected + .find(row => { + var _a; + const entity = row.currentData; + // When observed location has been recorded by connected user + if (user.id === ((_a = entity === null || entity === void 0 ? void 0 : entity.recorderPerson) === null || _a === void 0 ? void 0 : _a.id)) { + return false; // OK + } + // When connected user is in observed location observers + return !(entity.observers || []).some(observer => (user.id === (observer === null || observer === void 0 ? void 0 : observer.id))); + }); + // + return !invalidRow; + } + /** + * Use in ngFor, for trackBy + * + * @param index + * @param pmfm + */ + trackPmfmFn(index, pmfm) { + return toNumber(pmfm === null || pmfm === void 0 ? void 0 : pmfm.id, index); + } + // Override pmfm column name + getI18nColumnName(columnName) { + // Translate pmfm column + if (PMFM_ID_REGEXP.test(columnName)) { + const pmfm = this.pmfms.find(p => p.id.toString() === columnName); + if (pmfm) { + return this.pmfmNamePipe.transform(pmfm, { html: false, i18nPrefix: this.i18nPmfmPrefix, i18nContext: this.i18nColumnSuffix }); + } + } + return super.getI18nColumnName(columnName); + } + /* -- protected methods -- */ + getDetailProgram(source) { + var _a, _b, _c; + return __awaiter(this, void 0, void 0, function* () { + // Find data program + const programLabel = ((_a = source === null || source === void 0 ? void 0 : source.program) === null || _a === void 0 ? void 0 : _a.label) || ((_c = (_b = this.filter) === null || _b === void 0 ? void 0 : _b.program) === null || _c === void 0 ? void 0 : _c.label); + let program = programLabel && (yield this.programRefService.loadByLabel(programLabel)) + || this.$detailProgram.value; + if (!program) { + const modal = yield this.modalCtrl.create({ + component: SelectProgramModal, + componentProps: { + filter: { + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], + acquisitionLevelLabels: [AcquisitionLevelCodes.LANDING] + } + }, + keyboardClose: true, + cssClass: 'modal-large' + }); + yield modal.present(); + const { data } = yield modal.onDidDismiss(); + program = data === null || data === void 0 ? void 0 : data[0]; + if (!(program instanceof Program)) + return; // User cancelled + console.debug('[landings] Selected program: ', program); + } + return program; + }); + } + markForCheck() { + this.cd.markForCheck(); + } + resetContext() { + this.context.reset(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingsPage.prototype, "showTitleSegment", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingsPage.prototype, "showFilterProgram", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingsPage.prototype, "showFilterStrategy", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingsPage.prototype, "showFilterVessel", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingsPage.prototype, "showFilterLocation", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingsPage.prototype, "showFilterPeriod", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingsPage.prototype, "showFilterSampleLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingsPage.prototype, "showFilterSampleTagId", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingsPage.prototype, "showQuality", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingsPage.prototype, "showRecorder", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingsPage.prototype, "showObservers", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsPage.prototype, "showProgramColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsPage.prototype, "showVesselTypeColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsPage.prototype, "showVesselBasePortLocationColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsPage.prototype, "showObserversColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsPage.prototype, "showCreationDateColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsPage.prototype, "showRecorderPersonColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsPage.prototype, "showDateTimeColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsPage.prototype, "showSamplesCountColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsPage.prototype, "showLocationColumn", null); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], LandingsPage.prototype, "pmfms", null); +LandingsPage = __decorate([ + Component({ + selector: 'app-landings-page', + templateUrl: 'landings.page.html', + styleUrls: ['landings.page.scss'], + animations: [slideUpDownAnimation], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + LandingService, + PersonService, + ReferentialRefService, + ProgramRefService, + StrategyRefService, + VesselSnapshotService, + ObservedLocationService, + TripService, + UntypedFormBuilder, + ConfigService, + PmfmNamePipe, + ContextService, + ChangeDetectorRef]) +], LandingsPage); +export { LandingsPage }; +//# sourceMappingURL=landings.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landings.page.js.map b/out-tsc/app/app/trip/landing/landings.page.js.map new file mode 100644 index 000000000..d871f612c --- /dev/null +++ b/out-tsc/app/app/trip/landing/landings.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"landings.page.js","sourceRoot":"","sources":["../../../../../src/app/trip/landing/landings.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landings.table.js b/out-tsc/app/app/trip/landing/landings.table.js new file mode 100644 index 000000000..a3fbdf1f0 --- /dev/null +++ b/out-tsc/app/app/trip/landing/landings.table.js @@ -0,0 +1,396 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Injector, Input, Output } from '@angular/core'; +import { AccountService, AppValidatorService, isNil, isNotNil } from '@sumaris-net/ngx-components'; +import { LandingService } from './landing.service'; +import { BaseMeasurementsTable } from '@app/data/measurement/measurements-table.class'; +import { AcquisitionLevelCodes, LocationLevelIds } from '@app/referential/services/model/model.enum'; +import { VesselSnapshotService } from '@app/referential/services/vessel-snapshot.service'; +import { Trip } from '../trip/trip.model'; +import { ObservedLocation } from '../observedlocation/observed-location.model'; +import { Landing } from './landing.model'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { environment } from '@environments/environment'; +import { LandingFilter } from './landing.filter'; +import { LandingValidatorService } from '@app/trip/landing/landing.validator'; +import { VesselSnapshotFilter } from '@app/referential/services/filter/vessel.filter'; +import { ObservedLocationContextService } from '@app/trip/observedlocation/observed-location-context.service'; +export const LANDING_RESERVED_START_COLUMNS = [ + 'quality', + 'vessel', + 'vesselType', + 'vesselBasePortLocation', + 'location', + 'dateTime', + 'observers', + 'creationDate', + 'recorderPerson', + 'samplesCount', +]; +export const LANDING_RESERVED_END_COLUMNS = ['comments']; +export const LANDING_TABLE_DEFAULT_I18N_PREFIX = 'LANDING.TABLE.'; +export const LANDING_I18N_PMFM_PREFIX = 'LANDING.PMFM.'; +let LandingsTable = class LandingsTable extends BaseMeasurementsTable { + constructor(injector, accountService, context) { + super(injector, Landing, LandingFilter, injector.get(LandingService), injector.get(AppValidatorService), { + reservedStartColumns: LANDING_RESERVED_START_COLUMNS, + reservedEndColumns: LANDING_RESERVED_END_COLUMNS, + mapPmfms: (pmfms) => this.mapPmfms(pmfms), + requiredStrategy: false, + i18nColumnPrefix: LANDING_TABLE_DEFAULT_I18N_PREFIX, + i18nPmfmPrefix: LANDING_I18N_PMFM_PREFIX + }); + this.accountService = accountService; + this.context = context; + this.openTrip = new EventEmitter(); + this.newTrip = new EventEmitter(); + this.canDelete = true; + this.showFabButton = false; + this.showError = true; + this.useSticky = true; + this.includedPmfmIds = null; + this.cd = injector.get(ChangeDetectorRef); + this.readOnly = false; // Allow deletion + this.inlineEdition = false; + this.confirmBeforeDelete = true; + this.saveBeforeSort = false; + this.saveBeforeFilter = false; + this.saveBeforeDelete = false; + this.autoLoad = false; // waiting parent to be loaded, or the call of onRefresh.next() + this.vesselSnapshotService = injector.get(VesselSnapshotService); + this.referentialRefService = injector.get(ReferentialRefService); + this.defaultPageSize = -1; // Do not use paginator + this.defaultSortBy = 'id'; + this.defaultSortDirection = 'asc'; + // Set default acquisition level + this.acquisitionLevel = AcquisitionLevelCodes.LANDING; + this.showObserversColumn = false; + // FOR DEV ONLY ---- + this.debug = !environment.production; + } + set strategyPmfmId(value) { + if (this._strategyPmfmId !== value) { + this._strategyPmfmId = value; + this.setShowColumn('strategy', isNotNil(this._strategyPmfmId)); + } + } + get strategyPmfmId() { + return this._strategyPmfmId; + } + set detailEditor(value) { + if (value !== this._detailEditor) { + this._detailEditor = value; + // TODO: should be set with another setter, configure from a ProgramProperties option + this.inlineEdition = value === 'trip'; + } + } + get detailEditor() { + return this._detailEditor; + } + get isTripDetailEditor() { + return this._detailEditor === 'trip'; + } + set showBasePortLocationColumn(value) { + this.setShowColumn('vesselBasePortLocation', value); + } + get showBasePortLocationColumn() { + return this.getShowColumn('vesselBasePortLocation'); + } + set showObserversColumn(value) { + this.setShowColumn('observers', value); + } + get showObserversColumn() { + return this.getShowColumn('observers'); + } + set showDateTimeColumn(value) { + this.setShowColumn('dateTime', value); + } + get showDateTimeColumn() { + return this.getShowColumn('dateTime'); + } + set showIdColumn(value) { + this.setShowColumn('id', value); + } + get showIdColumn() { + return this.getShowColumn('id'); + } + set showVesselTypeColumn(value) { + this.setShowColumn('vesselType', value); + } + get showVesselTypeColumn() { + return this.getShowColumn('vesselType'); + } + set showLocationColumn(value) { + this.setShowColumn('location', value); + } + get showLocationColumn() { + return this.getShowColumn('location'); + } + set showCreationDateColumn(value) { + this.setShowColumn('creationDate', value); + } + get showCreationDateColumn() { + return this.getShowColumn('creationDate'); + } + set showRecorderPersonColumn(value) { + this.setShowColumn('recorderPerson', value); + } + get showRecorderPersonColumn() { + return this.getShowColumn('recorderPerson'); + } + set showVesselBasePortLocationColumn(value) { + this.setShowColumn('vesselBasePortLocation', value); + } + get showVesselBasePortLocationColumn() { + return this.getShowColumn('vesselBasePortLocation'); + } + set showSamplesCountColumn(value) { + this.setShowColumn('samplesCount', value); + } + get showSamplesCountColumn() { + return this.getShowColumn('samplesCount'); + } + set parent(value) { + this.setParent(value); + } + ngOnInit() { + this._enabled = this.canEdit; + super.ngOnInit(); + // Vessels display attributes + this.vesselSnapshotAttributes = this.settings.getFieldDisplayAttributes('vesselSnapshot', VesselSnapshotFilter.DEFAULT_SEARCH_ATTRIBUTES); + // Qualitative values display attributes + this.qualitativeValueAttributes = this.settings.getFieldDisplayAttributes('qualitativeValue', ['label', 'name']); + this.registerAutocompleteField('location', { + service: this.referentialRefService, + filter: { + entityName: 'Location', + levelId: LocationLevelIds.PORT + }, + mobile: this.mobile + }); + } + ngOnDestroy() { + super.ngOnDestroy(); + this.openTrip.unsubscribe(); + this.newTrip.unsubscribe(); + } + mapPmfms(pmfms) { + var _a; + const includedPmfmIds = this.includedPmfmIds || ((_a = this.context.program) === null || _a === void 0 ? void 0 : _a.getPropertyAsNumbers(ProgramProperties.LANDING_COLUMNS_PMFM_IDS)); + // Keep selectivity device, if any + return pmfms.filter(p => p.required || (includedPmfmIds === null || includedPmfmIds === void 0 ? void 0 : includedPmfmIds.includes(p.id))); + } + setParent(parent) { + if (isNil(parent === null || parent === void 0 ? void 0 : parent.id)) { + this._parentDateTime = undefined; + this.setFilter(LandingFilter.fromObject({})); + } + else if (parent instanceof ObservedLocation) { + this._parentDateTime = parent.startDateTime; + this._parentObservers = parent.observers; + this.context.observedLocation = parent; + this.setFilter(LandingFilter.fromObject({ observedLocationId: parent.id }), { emitEvent: true /*refresh*/ }); + } + else if (parent instanceof Trip) { + this._parentDateTime = parent.departureDateTime; + this.context.trip = parent; + this.setFilter(LandingFilter.fromObject({ tripId: parent.id }), { emitEvent: true /*refresh*/ }); + } + } + getMaxRankOrderOnVessel(vessel) { + return __awaiter(this, void 0, void 0, function* () { + const rows = this.dataSource.getRows(); + return rows + .filter(row => vessel.equals(row.currentData.vesselSnapshot)) + .reduce((res, row) => Math.max(res, row.currentData.rankOrderOnVessel || 0), 0); + }); + } + getMaxRankOrder() { + const _super = Object.create(null, { + getMaxRankOrder: { get: () => super.getMaxRankOrder } + }); + return __awaiter(this, void 0, void 0, function* () { + // Expose as public (was protected) + return _super.getMaxRankOrder.call(this); + }); + } + getLandingDate(landing) { + if (!landing || !landing.dateTime) + return undefined; + // return nothing if the landing date equals parent date + if (this._parentDateTime && landing.dateTime.isSame(this._parentDateTime)) { + return undefined; + } + // default + return landing.dateTime; + } + addRow(event) { + const _super = Object.create(null, { + addRow: { get: () => super.addRow } + }); + return __awaiter(this, void 0, void 0, function* () { + if (this.isTripDetailEditor) { + if (!this._enabled) + return false; + if (this.debug) + console.debug('[landings-table] Asking for new landing...'); + // Force modal + return this.openNewRowDetail(event); + } + // default behavior + return _super.addRow.call(this, event); + }); + } + confirmAndEditTrip(event, row) { + if (event) + event.stopPropagation(); + if (!this.confirmEditCreate(event, row)) { + return false; + } + if (isNotNil(row.currentData.tripId)) { + // Edit trip + this.openTrip.emit(row); + } + else { + // New trip + this.newTrip.emit(row); + } + } + get canCancelOrDeleteSelectedRows() { + // IMAGINE-632: User can only delete landings or samples created by himself or on which he is defined as observer + if (this.accountService.isAdmin()) { + return true; + } + if (this.selection.isEmpty()) + return false; + return this.selection.selected.every(row => this.canCancelOrDelete(row)); + } + /* -- protected methods -- */ + canCancelOrDelete(row) { + var _a, _b; + // IMAGINE-632: User can only delete landings or samples created by himself or on which he is defined as observer + if (this.accountService.isAdmin()) { + return true; + } + const personId = (_a = this.accountService.person) === null || _a === void 0 ? void 0 : _a.id; + const entity = this.toEntity(row); + const recorder = entity.recorderPerson; + if (personId === (recorder === null || recorder === void 0 ? void 0 : recorder.id)) { + return true; + } + // When connected user is in observed location observers + return ((_b = this._parentObservers) === null || _b === void 0 ? void 0 : _b.some(o => o.id === personId)) || false; + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Output(), + __metadata("design:type", Object) +], LandingsTable.prototype, "openTrip", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], LandingsTable.prototype, "newTrip", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingsTable.prototype, "canDelete", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingsTable.prototype, "showFabButton", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingsTable.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], LandingsTable.prototype, "useSticky", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], LandingsTable.prototype, "includedPmfmIds", void 0); +__decorate([ + Input(), + __metadata("design:type", Number), + __metadata("design:paramtypes", [Number]) +], LandingsTable.prototype, "strategyPmfmId", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], LandingsTable.prototype, "detailEditor", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsTable.prototype, "showBasePortLocationColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsTable.prototype, "showObserversColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsTable.prototype, "showDateTimeColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsTable.prototype, "showIdColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsTable.prototype, "showVesselTypeColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsTable.prototype, "showLocationColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsTable.prototype, "showCreationDateColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsTable.prototype, "showRecorderPersonColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsTable.prototype, "showVesselBasePortLocationColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], LandingsTable.prototype, "showSamplesCountColumn", null); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], LandingsTable.prototype, "parent", null); +LandingsTable = __decorate([ + Component({ + selector: 'app-landings-table', + templateUrl: 'landings.table.html', + styleUrls: ['landings.table.scss'], + providers: [ + { provide: AppValidatorService, useExisting: LandingValidatorService } + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + AccountService, + ObservedLocationContextService]) +], LandingsTable); +export { LandingsTable }; +//# sourceMappingURL=landings.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/landings.table.js.map b/out-tsc/app/app/trip/landing/landings.table.js.map new file mode 100644 index 000000000..f7e32f0ce --- /dev/null +++ b/out-tsc/app/app/trip/landing/landings.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"landings.table.js","sourceRoot":"","sources":["../../../../../src/app/trip/landing/landings.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/report/base-landing-report.class.js b/out-tsc/app/app/trip/landing/report/base-landing-report.class.js new file mode 100644 index 000000000..e921eb128 --- /dev/null +++ b/out-tsc/app/app/trip/landing/report/base-landing-report.class.js @@ -0,0 +1,143 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { Directive, Injector, Optional } from '@angular/core'; +import { ImageAttachment, isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrNaN, } from '@sumaris-net/ngx-components'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { environment } from '@environments/environment'; +import { AppDataEntityReport, DataReportStats, } from '@app/data/report/data-entity-report.class'; +import { TaxonGroupRef } from '@app/referential/services/model/taxon-group.model'; +import { Landing } from '@app/trip/landing/landing.model'; +import { ObservedLocationService } from '@app/trip/observedlocation/observed-location.service'; +import { LandingService } from '@app/trip/landing/landing.service'; +import { TRIP_LOCAL_SETTINGS_OPTIONS } from '@app/trip/trip.config'; +import { DenormalizedPmfmStrategy } from '@app/referential/services/model/pmfm-strategy.model'; +import { TaxonNameRef } from '@app/referential/services/model/taxon-name.model'; +export class LandingStats extends DataReportStats { + fromObject(source) { + super.fromObject(source); + this.sampleCount = source.sampleCount; + this.images = source.images.map(item => ImageAttachment.fromObject(item)); + this.pmfms = source.pmfms.map(item => DenormalizedPmfmStrategy.fromObject(item)); + this.weightDisplayedUnit = source.weightDisplayedUnit; + this.taxonGroup = TaxonGroupRef.fromObject(source.taxonGroup); + this.taxonName = TaxonNameRef.fromObject(source.taxonName); + this.strategyLabel = source.strategyLabel; + } + ; + asObject(opts) { + var _a, _b; + return { + sampleCount: this.sampleCount, + images: this.images.map(item => item.asObject()), + pmfms: this.pmfms.map(item => item.asObject()), + program: this.program.asObject(), + weightDisplayedUnit: this.weightDisplayedUnit, + taxonGroup: (_a = this.taxonGroup) === null || _a === void 0 ? void 0 : _a.asObject(), + taxonName: (_b = this.taxonName) === null || _b === void 0 ? void 0 : _b.asObject(), + strategyLabel: this.strategyLabel, + }; + } +} +let BaseLandingReport = class BaseLandingReport extends AppDataEntityReport { + constructor(injector, statsType, options) { + super(injector, Landing, statsType, options); + this.injector = injector; + this.statsType = statsType; + this.logPrefix = 'base-landing-report'; + this.observedLocationService = injector.get(ObservedLocationService); + this.landingService = injector.get(LandingService); + if (!this.route || isNilOrBlank(this._pathIdAttribute)) { + throw new Error('Unable to load from route: missing \'route\' or \'options.pathIdAttribute\'.'); + } + } + loadData(id, opts) { + return __awaiter(this, void 0, void 0, function* () { + console.log(`[${this.logPrefix}] loadData`); + const data = yield this.landingService.load(id); + if (!data) + throw new Error('ERROR.LOAD_ENTITY_ERROR'); + // Fill fake sample for testing purpose + // this.addFakeSamplesForDev(data); + // Remove technical label (starting with #) + (data.samples || []).forEach(sample => { + var _a; + // Remove invalid sample label + if ((_a = sample.label) === null || _a === void 0 ? void 0 : _a.startsWith('#')) + sample.label = null; + }); + yield this.fillParent(data); + return data; + }); + } + /* -- protected function -- */ + fillParent(data) { + return __awaiter(this, void 0, void 0, function* () { + let parent; + if (isNotNilOrNaN(data.observedLocationId)) { + parent = yield this.observedLocationService.load(data.observedLocationId); + } + if (!parent) + throw new Error('ERROR.LOAD_ENTITY_ERROR'); + data.observedLocation = parent; + }); + } + computeStats(data, opts) { + var _a, _b, _c, _d, _e, _f, _g; + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.log(`[${this.logPrefix}.computeStats]`); + // TODO When we need to get stats from opts ? + const stats = (opts === null || opts === void 0 ? void 0 : opts.stats) || new this.statsType(); + // TODO Check and send error if data.observedLocation is empty (must be filled `computeParent` in `loadData`) + const parent = data.observedLocation; + stats.program = yield this.programRefService.loadByLabel(parent.program.label); + // Compute agg data + stats.taxonGroup = (_a = (data.samples || []).find(s => { var _a; return !!((_a = s.taxonGroup) === null || _a === void 0 ? void 0 : _a.name); })) === null || _a === void 0 ? void 0 : _a.taxonGroup; + stats.taxonName = (_b = (data.samples || []).find(s => { var _a; return isNotNil((_a = s.taxonName) === null || _a === void 0 ? void 0 : _a.referenceTaxonId); })) === null || _b === void 0 ? void 0 : _b.taxonName; + stats.metiers = (((_c = data.trip) === null || _c === void 0 ? void 0 : _c.metiers) || []); + stats.fishingAreas = (((_d = data.trip) === null || _d === void 0 ? void 0 : _d.fishingAreas) || []); + stats.weightDisplayedUnit = this.settings.getProperty(TRIP_LOCAL_SETTINGS_OPTIONS.SAMPLE_WEIGHT_UNIT, stats.program.getProperty(ProgramProperties.LANDING_SAMPLE_WEIGHT_UNIT)); + const pmfms = stats.pmfms || (yield this.programRefService.loadProgramPmfms(stats.program.label, { + acquisitionLevel: AcquisitionLevelCodes.SAMPLE, + taxonGroupId: (_e = stats.taxonGroup) === null || _e === void 0 ? void 0 : _e.id, + referenceTaxonId: (_f = stats.taxonName) === null || _f === void 0 ? void 0 : _f.referenceTaxonId + })); + stats.pmfms = (stats.weightDisplayedUnit) + ? PmfmUtils.setWeightUnitConversions(pmfms, stats.weightDisplayedUnit) + : pmfms; + // Compute sample count + stats.sampleCount = ((_g = data.samples) === null || _g === void 0 ? void 0 : _g.length) || 0; + // Compute images, with title + stats.images = (data.samples || []) + .filter(s => isNotEmptyArray(s.images)) + .flatMap(s => { + // Add title to image + s.images.forEach(image => { + image.title = image.title || s.label || `#${s.rankOrder}`; + }); + return s.images; + }); + return stats; + }); + } + computeI18nContext(stats) { + return Object.assign(Object.assign({}, super.computeI18nContext(stats)), { pmfmPrefix: 'TRIP.SAMPLE.PMFM.' }); + } + addFakeSamplesForDev(data, count = 20) { + if (environment.production || !data.samples.length) + return; // Skip + const samples = new Array(count); + for (let i = 0; i < count; i++) { + samples[i] = data.samples[i % data.samples.length].clone(); + } + data.samples = samples; + } +}; +BaseLandingReport = __decorate([ + Directive(), + __param(2, Optional()), + __metadata("design:paramtypes", [Injector, Function, Object]) +], BaseLandingReport); +export { BaseLandingReport }; +//# sourceMappingURL=base-landing-report.class.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/report/base-landing-report.class.js.map b/out-tsc/app/app/trip/landing/report/base-landing-report.class.js.map new file mode 100644 index 000000000..30dae422a --- /dev/null +++ b/out-tsc/app/app/trip/landing/report/base-landing-report.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"base-landing-report.class.js","sourceRoot":"","sources":["../../../../../../src/app/trip/landing/report/base-landing-report.class.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAa,QAAQ,EAAC,MAAM,eAAe,CAAC;AACvE,OAAO,EAGL,eAAe,EACf,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,aAAa,GACd,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAQ,SAAS,EAAC,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAC,qBAAqB,EAAmB,MAAM,4CAA4C,CAAC;AACnG,OAAO,EAAC,iBAAiB,EAAC,MAAM,iDAAiD,CAAC;AAClF,OAAO,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AACtD,OAAO,EACL,mBAAmB,EAEnB,eAAe,GAChB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAC,aAAa,EAAC,MAAM,mDAAmD,CAAC;AAEhF,OAAO,EAAC,OAAO,EAAC,MAAM,iCAAiC,CAAC;AACxD,OAAO,EAAC,uBAAuB,EAAC,MAAM,sDAAsD,CAAC;AAC7F,OAAO,EAAC,cAAc,EAAC,MAAM,mCAAmC,CAAC;AAEjE,OAAO,EAAC,2BAA2B,EAAC,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAC,wBAAwB,EAAC,MAAM,qDAAqD,CAAC;AAC7F,OAAO,EAAC,YAAY,EAAC,MAAM,kDAAkD,CAAC;AAI9E,MAAM,OAAO,YAAa,SAAQ,eAAe;IAa/C,UAAU,CAAC,MAAW;QACpB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,wBAAwB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACjF,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;QACtD,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC9D,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAC5C,CAAC;IAAA,CAAC;IAEF,QAAQ,CAAC,IAA4B;;QACnC,OAAQ;YACN,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChD,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9C,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YAChC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,UAAU,EAAE,MAAA,IAAI,CAAC,UAAU,0CAAE,QAAQ,EAAE;YACvC,SAAS,EAAE,MAAA,IAAI,CAAC,SAAS,0CAAE,QAAQ,EAAE;YACrC,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC;IACJ,CAAC;CAEF;AAGM,IAAe,iBAAiB,GAAhC,MAAe,iBACpB,SAAQ,mBAAuC;IAQ/C,YACY,QAAkB,EAClB,SAAqB,EACnB,OAAiC;QAE7C,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAJnC,aAAQ,GAAR,QAAQ,CAAU;QAClB,cAAS,GAAT,SAAS,CAAY;QARvB,cAAS,GAAG,qBAAqB,CAAC;QAY1C,IAAI,CAAC,uBAAuB,GAAG,QAAQ,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrE,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAEnD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;YACtD,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;SACjG;IACH,CAAC;IAEK,QAAQ,CAAC,EAAU,EAAE,IAA2D;;YACpF,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,YAAY,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAEtD,uCAAuC;YACvC,mCAAmC;YAEnC,2CAA2C;YAC3C,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;;gBACpC,8BAA8B;gBAC9B,IAAI,MAAA,MAAM,CAAC,KAAK,0CAAE,UAAU,CAAC,GAAG,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;YACzD,CAAC,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAE5B,OAAO,IAAe,CAAC;QACzB,CAAC;KAAA;IAED,8BAA8B;IAEd,UAAU,CAAC,IAAa;;YACtC,IAAI,MAAwB,CAAC;YAC7B,IAAI,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;gBAC1C,MAAM,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;aAC3E;YACD,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACxD,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;QACjC,CAAC;KAAA;IAEe,YAAY,CAAC,IAAa,EAAE,IAA2B;;;YACrE,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,gBAAgB,CAAC,CAAC;YAChE,6CAA6C;YAC7C,MAAM,KAAK,GAAM,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,KAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAErD,6GAA6G;YAC7G,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAoC,CAAC;YACzD,KAAK,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAE/E,mBAAmB;YACnB,KAAK,CAAC,UAAU,GAAG,MAAA,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAC,OAAA,CAAC,CAAC,CAAA,MAAA,CAAC,CAAC,UAAU,0CAAE,IAAI,CAAA,CAAA,EAAA,CAAC,0CAAE,UAAU,CAAC;YACpF,KAAK,CAAC,SAAS,GAAG,MAAA,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAC,OAAA,QAAQ,CAAC,MAAA,CAAC,CAAC,SAAS,0CAAE,gBAAgB,CAAC,CAAA,EAAA,CAAC,0CAAE,SAAS,CAAC;YACrG,KAAK,CAAC,OAAO,GAAG,CAAC,CAAA,MAAC,IAAI,CAAC,IAAa,0CAAE,OAAO,KAAI,EAAE,CAAC,CAAC;YACrD,KAAK,CAAC,YAAY,GAAG,CAAC,CAAA,MAAC,IAAI,CAAC,IAAa,0CAAE,YAAY,KAAI,EAAE,CAAC,CAAC;YAE/D,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,2BAA2B,CAAC,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,0BAA0B,CAAC,CAAC,CAAC;YAE/K,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,KAAI,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE;gBAC9F,gBAAgB,EAAE,qBAAqB,CAAC,MAAM;gBAC9C,YAAY,EAAE,MAAA,KAAK,CAAC,UAAU,0CAAE,EAAE;gBAClC,gBAAgB,EAAE,MAAA,KAAK,CAAC,SAAS,0CAAE,gBAAgB;aACpD,CAAC,CAAA,CAAC;YACH,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC;gBACvC,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,mBAAmB,CAAC;gBACtE,CAAC,CAAC,KAAK,CAAC;YAEV,uBAAuB;YACvB,KAAK,CAAC,WAAW,GAAG,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,KAAI,CAAC,CAAC;YAE9C,6BAA6B;YAC7B,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;iBAChC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;iBACtC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACX,qBAAqB;gBACrB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACvB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC5D,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,CAAC,MAAM,CAAC;YAClB,CAAC,CAAC,CAAC;YAEL,OAAO,KAAK,CAAC;;KACd;IAES,kBAAkB,CAAC,KAAQ;QACnC,uCACK,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAClC,UAAU,EAAE,mBAAmB,IAC/B;IACJ,CAAC;IAES,oBAAoB,CAAC,IAAa,EAAE,KAAK,GAAG,EAAE;QACtD,IAAI,WAAW,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,CAAC,OAAO;QACnE,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC9B,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;SAC5D;QACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CAEF,CAAA;AAhHqB,iBAAiB;IADtC,SAAS,EAAE;IAaP,WAAA,QAAQ,EAAE,CAAA;qCAFS,QAAQ;GAVV,iBAAiB,CAgHtC;SAhHqB,iBAAiB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/report/landing-report-routing.module.js b/out-tsc/app/app/trip/landing/report/landing-report-routing.module.js new file mode 100644 index 000000000..a783cabb7 --- /dev/null +++ b/out-tsc/app/app/trip/landing/report/landing-report-routing.module.js @@ -0,0 +1,25 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { LandingReport } from './landing.report'; +import { LandingReportModule } from './landing.report.module'; +const routes = [ + { + path: '', + pathMatch: 'full', + component: LandingReport, + } +]; +let LandingReportRoutingModule = class LandingReportRoutingModule { +}; +LandingReportRoutingModule = __decorate([ + NgModule({ + imports: [ + RouterModule.forChild(routes), + LandingReportModule, + ], + exports: [RouterModule] + }) +], LandingReportRoutingModule); +export { LandingReportRoutingModule }; +//# sourceMappingURL=landing-report-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/report/landing-report-routing.module.js.map b/out-tsc/app/app/trip/landing/report/landing-report-routing.module.js.map new file mode 100644 index 000000000..792af80df --- /dev/null +++ b/out-tsc/app/app/trip/landing/report/landing-report-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"landing-report-routing.module.js","sourceRoot":"","sources":["../../../../../../src/app/trip/landing/report/landing-report-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,aAAa;KACzB;CACF,CAAC;AASK,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;CAAI,CAAA;AAA9B,0BAA0B;IAPtC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,mBAAmB;SACpB;QACD,OAAO,EAAE,CAAC,YAAY,CAAC;KACxB,CAAC;GACW,0BAA0B,CAAI;SAA9B,0BAA0B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/report/landing.report.js b/out-tsc/app/app/trip/landing/report/landing.report.js new file mode 100644 index 000000000..6db1e892f --- /dev/null +++ b/out-tsc/app/app/trip/landing/report/landing.report.js @@ -0,0 +1,43 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector } from '@angular/core'; +import { BaseLandingReport, LandingStats } from '@app/trip/landing/report/base-landing-report.class'; +import { lastValueFrom } from 'rxjs'; +let LandingReport = class LandingReport extends BaseLandingReport { + constructor(injector) { + super(injector, LandingStats, { pathIdAttribute: 'landingId' }); + this.injector = injector; + this.logPrefix = 'landing-report'; + } + /* -- protected function -- */ + computeTitle(data, stats) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const titlePrefix = yield lastValueFrom(this.translateContext.get('LANDING.TITLE_PREFIX', this.i18nContext.suffix, { + location: ((_a = data.location) === null || _a === void 0 ? void 0 : _a.name) || '', + date: this.dateFormat.transform(data.dateTime, { time: false }) + })); + const title = yield lastValueFrom(this.translate.get('LANDING.REPORT.TITLE')); + return titlePrefix + title; + }); + } + computeDefaultBackHref(data, stats) { + return `/observations/${this.data.observedLocationId}/landing/${data.id}?tab=1`; + } + computeShareBasePath() { + return 'observations/report/landing'; + } +}; +LandingReport = __decorate([ + Component({ + selector: 'app-landing-report', + styleUrls: [ + './landing.report.scss', + '../../../data/report/base-report.scss', + ], + templateUrl: './landing.report.html', + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector]) +], LandingReport); +export { LandingReport }; +//# sourceMappingURL=landing.report.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/report/landing.report.js.map b/out-tsc/app/app/trip/landing/report/landing.report.js.map new file mode 100644 index 000000000..ffbfcc19b --- /dev/null +++ b/out-tsc/app/app/trip/landing/report/landing.report.js.map @@ -0,0 +1 @@ +{"version":3,"file":"landing.report.js","sourceRoot":"","sources":["../../../../../../src/app/trip/landing/report/landing.report.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,uBAAuB,EAAE,SAAS,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAC,iBAAiB,EAAE,YAAY,EAAC,MAAM,oDAAoD,CAAC;AAInG,OAAO,EAAC,aAAa,EAAC,MAAM,MAAM,CAAC;AAW5B,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,iBAAiB;IAQlD,YACY,QAAkB;QAE5B,KAAK,CACH,QAAQ,EACR,YAAY,EACZ,EAAC,eAAe,EAAE,WAAW,EAAC,CAAC,CAAC;QALxB,aAAQ,GAAR,QAAQ,CAAU;QAPpB,cAAS,GAAG,gBAAgB,CAAC;IAavC,CAAC;IAED,8BAA8B;IAEd,YAAY,CAAC,IAAa,EAAE,KAAmB;;;YAC7D,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,sBAAsB,EACtF,IAAI,CAAC,WAAW,CAAC,MAAM,EACvB;gBACE,QAAQ,EAAE,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,IAAI,KAAI,EAAE;gBACnC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC;aAC9D,CAAC,CAAC,CAAC;YACN,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC9E,OAAO,WAAW,GAAG,KAAK,CAAC;;KAC5B;IAES,sBAAsB,CAAC,IAAa,EAAE,KAAmB;QACjE,OAAO,iBAAiB,IAAI,CAAC,IAAI,CAAC,kBAAkB,YAAY,IAAI,CAAC,EAAE,QAAQ,CAAC;IAClF,CAAC;IAES,oBAAoB;QAC5B,OAAO,6BAA6B,CAAC;IACvC,CAAC;CAGF,CAAA;AAvCY,aAAa;IATzB,SAAS,CAAC;QACT,QAAQ,EAAE,oBAAoB;QAC9B,SAAS,EAAE;YACT,uBAAuB;YACvB,uCAAuC;SACxC;QACD,WAAW,EAAE,uBAAuB;QACpC,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAUsB,QAAQ;GATnB,aAAa,CAuCzB;SAvCY,aAAa"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/report/landing.report.module.js b/out-tsc/app/app/trip/landing/report/landing.report.module.js new file mode 100644 index 000000000..99a9dfc52 --- /dev/null +++ b/out-tsc/app/app/trip/landing/report/landing.report.module.js @@ -0,0 +1,29 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { LandingReport } from './landing.report'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppDataModule } from '@app/data/data.module'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { AppSharedReportModule } from '@app/shared/report/report.module'; +import { TranslateModule } from '@ngx-translate/core'; +let LandingReportModule = class LandingReportModule { +}; +LandingReportModule = __decorate([ + NgModule({ + declarations: [ + LandingReport, + ], + imports: [ + AppCoreModule, + AppReferentialModule, + AppDataModule, + TranslateModule.forChild(), + AppSharedReportModule, + ], + exports: [ + LandingReport, + ], + }) +], LandingReportModule); +export { LandingReportModule }; +//# sourceMappingURL=landing.report.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/report/landing.report.module.js.map b/out-tsc/app/app/trip/landing/report/landing.report.module.js.map new file mode 100644 index 000000000..eb9dc40de --- /dev/null +++ b/out-tsc/app/app/trip/landing/report/landing.report.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"landing.report.module.js","sourceRoot":"","sources":["../../../../../../src/app/trip/landing/report/landing.report.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAiB/C,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;CAAI,CAAA;AAAvB,mBAAmB;IAf/B,QAAQ,CAAC;QACR,YAAY,EAAE;YACZ,aAAa;SACd;QACD,OAAO,EAAE;YACP,aAAa;YACb,oBAAoB;YACpB,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAC1B,qBAAqB;SACtB;QACD,OAAO,EAAE;YACP,aAAa;SACd;KACF,CAAC;GACW,mBAAmB,CAAI;SAAvB,mBAAmB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/sampling/biological-sampling.validators.js b/out-tsc/app/app/trip/landing/sampling/biological-sampling.validators.js new file mode 100644 index 000000000..2e5288a68 --- /dev/null +++ b/out-tsc/app/app/trip/landing/sampling/biological-sampling.validators.js @@ -0,0 +1,39 @@ +import { AppFormUtils, isNotNil, isNotNilOrBlank } from '@sumaris-net/ngx-components'; +import { PmfmIds } from '@app/referential/services/model/model.enum'; +import { SAMPLE_VALIDATOR_I18N_ERROR_KEYS } from '@app/trip/sample/sample.validator'; +export class BiologicalSamplingValidators { + static addSampleValidators(form, pmfms, pmfmGroups, opts) { + if (!form) { + console.warn('Argument \'form\' required'); + return null; + } + if (!pmfmGroups) { + console.warn('Argument \'pmfmGroups\' required'); + return null; + } + pmfms.filter(p => (pmfmGroups.AGE || []).includes(p.id)) + .filter(p => !p.isComputed) + .forEach(p => { + p.isComputed = true; + }); + // Disable computed pmfms + AppFormUtils.disableControls(form, pmfms + .filter(p => p.isComputed) + .map(p => `measurementValues.${p.id}`), { onlySelf: true, emitEvent: false }); + // DEBUG + //console.debug('Calling BiologicalSamplingValidators.addSampleValidators()') + form.setValidators((control) => { + const measurementValues = form.controls.measurementValues.value; + const tagId = measurementValues[PmfmIds.TAG_ID]; + if (isNotNilOrBlank(tagId) && tagId.length !== 4) { + return { tagIdLength: { length: 4 } }; + } + const hasWeight = (pmfmGroups.WEIGHT || []).findIndex(pmfmId => isNotNil(measurementValues[pmfmId.toString()])) !== -1; + const hasLengthSize = (pmfmGroups.LENGTH || []).findIndex(pmfmId => isNotNil(measurementValues[pmfmId.toString()])) !== -1; + if (!hasWeight && !hasLengthSize) { + return { missingWeightOrSize: SAMPLE_VALIDATOR_I18N_ERROR_KEYS.missingWeightOrSize }; + } + }); + } +} +//# sourceMappingURL=biological-sampling.validators.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/sampling/biological-sampling.validators.js.map b/out-tsc/app/app/trip/landing/sampling/biological-sampling.validators.js.map new file mode 100644 index 000000000..fcf4a9738 --- /dev/null +++ b/out-tsc/app/app/trip/landing/sampling/biological-sampling.validators.js.map @@ -0,0 +1 @@ +{"version":3,"file":"biological-sampling.validators.js","sourceRoot":"","sources":["../../../../../../src/app/trip/landing/sampling/biological-sampling.validators.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAa,MAAM,6BAA6B,CAAC;AACjG,OAAO,EAAE,OAAO,EAAE,MAAM,4CAA4C,CAAC;AACrE,OAAO,EAAE,gCAAgC,EAAE,MAAM,mCAAmC,CAAC;AAErF,MAAM,OAAO,4BAA4B;IAGvC,MAAM,CAAC,mBAAmB,CAAC,IAAsB,EACtB,KAAiC,EACjC,UAA+B,EAC/B,IAAmC;QAC5D,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC;SACb;QACD,IAAI,CAAC,UAAU,EAAE;YACf,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC;SACb;QAED,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,IAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACnD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;aAC1B,OAAO,CAAC,CAAC,CAAC,EAAE;YACX,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;QACtB,CAAC,CAAC,CAAC;QAEL,yBAAyB;QACzB,YAAY,CAAC,eAAe,CAAC,IAAI,EAC/B,KAAK;aACF,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;aACzB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;QAEhF,QAAQ;QACR,6EAA6E;QAE7E,IAAI,CAAC,aAAa,CAAE,CAAC,OAAO,EAAE,EAAE;YAC9B,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC;YAEhE,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,eAAe,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBAChD,OAAO,EAAE,WAAW,EAAE,EAAC,MAAM,EAAE,CAAC,EAAC,EAAE,CAAC;aACrC;YAED,MAAM,SAAS,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACvH,MAAM,aAAa,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3H,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa,EAAC;gBAC/B,OAAO,EAAE,mBAAmB,EAAE,gCAAgC,CAAC,mBAAmB,EAAE,CAAC;aACtF;QACH,CAAC,CAAC,CAAC;IAEL,CAAC;CACF"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/sampling/report/sampling-landing-report-routing.module.js b/out-tsc/app/app/trip/landing/sampling/report/sampling-landing-report-routing.module.js new file mode 100644 index 000000000..362868850 --- /dev/null +++ b/out-tsc/app/app/trip/landing/sampling/report/sampling-landing-report-routing.module.js @@ -0,0 +1,25 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { SamplingLandingReport } from './sampling-landing.report'; +import { SamplingLandingReportModule } from './sampling-landing.report.module'; +const routes = [ + { + path: '', + pathMatch: 'full', + component: SamplingLandingReport, + } +]; +let SamplingReportRoutingModule = class SamplingReportRoutingModule { +}; +SamplingReportRoutingModule = __decorate([ + NgModule({ + imports: [ + RouterModule.forChild(routes), + SamplingLandingReportModule, + ], + exports: [RouterModule] + }) +], SamplingReportRoutingModule); +export { SamplingReportRoutingModule }; +//# sourceMappingURL=sampling-landing-report-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/sampling/report/sampling-landing-report-routing.module.js.map b/out-tsc/app/app/trip/landing/sampling/report/sampling-landing-report-routing.module.js.map new file mode 100644 index 000000000..8a74eedc4 --- /dev/null +++ b/out-tsc/app/app/trip/landing/sampling/report/sampling-landing-report-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sampling-landing-report-routing.module.js","sourceRoot":"","sources":["../../../../../../../src/app/trip/landing/sampling/report/sampling-landing-report-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAE/E,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,qBAAqB;KACjC;CACF,CAAC;AASK,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;CAAI,CAAA;AAA/B,2BAA2B;IAPvC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,2BAA2B;SAC5B;QACD,OAAO,EAAE,CAAC,YAAY,CAAC;KACxB,CAAC;GACW,2BAA2B,CAAI;SAA/B,2BAA2B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/sampling/report/sampling-landing.report.js b/out-tsc/app/app/trip/landing/sampling/report/sampling-landing.report.js new file mode 100644 index 000000000..13f614ab0 --- /dev/null +++ b/out-tsc/app/app/trip/landing/sampling/report/sampling-landing.report.js @@ -0,0 +1,75 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector } from '@angular/core'; +import { PmfmIds } from '@app/referential/services/model/model.enum'; +import { environment } from '@environments/environment'; +import { BaseLandingReport, LandingStats } from '@app/trip/landing/report/base-landing-report.class'; +import { lastValueFrom } from 'rxjs'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +let SamplingLandingReport = class SamplingLandingReport extends BaseLandingReport { + constructor(injector) { + super(injector, LandingStats, { + pathParentIdAttribute: 'observedLocationId', + pathIdAttribute: 'samplingId', + }); + this.referentialRefService = this.injector.get(ReferentialRefService); + } + /* -- protected function -- */ + computeStats(data, opts) { + const _super = Object.create(null, { + computeStats: { get: () => super.computeStats } + }); + return __awaiter(this, void 0, void 0, function* () { + const stats = yield _super.computeStats.call(this, data, opts); + stats.strategyLabel = data.measurementValues[PmfmIds.STRATEGY_LABEL]; + const samplePrefix = `${stats.strategyLabel}-`; + (data.samples || []).forEach(sample => { + const tagId = sample.measurementValues[PmfmIds.TAG_ID]; + if (tagId && tagId.startsWith(samplePrefix)) { + sample.measurementValues[PmfmIds.TAG_ID] = tagId.substring(samplePrefix.length); + } + }); + return stats; + }); + } + computeTitle(data, stats) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const titlePrefix = yield lastValueFrom(this.translate.get('LANDING.TITLE_PREFIX', { + location: ((_a = data.location) === null || _a === void 0 ? void 0 : _a.name) || '', + date: this.dateFormat.transform(data.dateTime, { time: false }) + })); + const strategyLabel = this.stats.strategyLabel || data.measurementValues[PmfmIds.STRATEGY_LABEL] || ''; + const title = yield lastValueFrom(this.translate.get('LANDING.REPORT.SAMPLING.TITLE', { + vessel: data.vesselSnapshot && (data.vesselSnapshot.registrationCode || data.vesselSnapshot.name), + strategyLabel + })); + return titlePrefix + title; + }); + } + computeDefaultBackHref(data, stats) { + return `/observations/${data.observedLocationId}/sampling/${data.id}?tab=1`; + } + computeShareBasePath() { + return 'observations/report/sampling'; + } + addFakeSamplesForDev(data, count = 25) { + if (environment.production) + return; // Skip + super.addFakeSamplesForDev(data, count); + data.samples.forEach((s, index) => s.measurementValues[PmfmIds.TAG_ID] = `${index + 1}`); + } +}; +SamplingLandingReport = __decorate([ + Component({ + selector: 'app-sampling-landing-report', + styleUrls: [ + '../../report/landing.report.scss', + '../../../../data/report/base-report.scss', + ], + templateUrl: './sampling-landing.report.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector]) +], SamplingLandingReport); +export { SamplingLandingReport }; +//# sourceMappingURL=sampling-landing.report.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/sampling/report/sampling-landing.report.js.map b/out-tsc/app/app/trip/landing/sampling/report/sampling-landing.report.js.map new file mode 100644 index 000000000..f68e70a14 --- /dev/null +++ b/out-tsc/app/app/trip/landing/sampling/report/sampling-landing.report.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sampling-landing.report.js","sourceRoot":"","sources":["../../../../../../../src/app/trip/landing/sampling/report/sampling-landing.report.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/sampling/report/sampling-landing.report.module.js b/out-tsc/app/app/trip/landing/sampling/report/sampling-landing.report.module.js new file mode 100644 index 000000000..e3b3bfe02 --- /dev/null +++ b/out-tsc/app/app/trip/landing/sampling/report/sampling-landing.report.module.js @@ -0,0 +1,29 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppDataModule } from '@app/data/data.module'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { AppSharedReportModule } from '@app/shared/report/report.module'; +import { TranslateModule } from '@ngx-translate/core'; +import { SamplingLandingReport } from './sampling-landing.report'; +let SamplingLandingReportModule = class SamplingLandingReportModule { +}; +SamplingLandingReportModule = __decorate([ + NgModule({ + declarations: [ + SamplingLandingReport, + ], + imports: [ + AppCoreModule, + AppDataModule, + TranslateModule.forChild(), + AppSharedReportModule, + AppReferentialModule, + ], + exports: [ + SamplingLandingReport, + ] + }) +], SamplingLandingReportModule); +export { SamplingLandingReportModule }; +//# sourceMappingURL=sampling-landing.report.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/sampling/report/sampling-landing.report.module.js.map b/out-tsc/app/app/trip/landing/sampling/report/sampling-landing.report.module.js.map new file mode 100644 index 000000000..f10a81210 --- /dev/null +++ b/out-tsc/app/app/trip/landing/sampling/report/sampling-landing.report.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sampling-landing.report.module.js","sourceRoot":"","sources":["../../../../../../../src/app/trip/landing/sampling/report/sampling-landing.report.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAkB3D,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;CAAI,CAAA;AAA/B,2BAA2B;IAfvC,QAAQ,CAAC;QACR,YAAY,EAAE;YACZ,qBAAqB;SACtB;QACD,OAAO,EAAE;YACP,aAAa;YACb,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAC1B,qBAAqB;YACrB,oBAAoB;SACrB;QACD,OAAO,EAAE;YACP,qBAAqB;SACtB;KACF,CAAC;GACW,2BAA2B,CAAI;SAA/B,2BAA2B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/sampling/sampling-landing-routing.module.js b/out-tsc/app/app/trip/landing/sampling/sampling-landing-routing.module.js new file mode 100644 index 000000000..b62b4432b --- /dev/null +++ b/out-tsc/app/app/trip/landing/sampling/sampling-landing-routing.module.js @@ -0,0 +1,43 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { ComponentDirtyGuard } from '@sumaris-net/ngx-components'; +import { SamplingLandingPage } from '@app/trip/landing/sampling/sampling-landing.page'; +import { AppSamplingLandingModule } from '@app/trip/landing/sampling/sampling-landing.module'; +const routes = [ + { + path: ':samplingId', + data: { + profile: 'USER', + pathIdParam: 'samplingId' + }, + children: [ + { + path: '', + pathMatch: 'full', + runGuardsAndResolvers: 'pathParamsChange', + component: SamplingLandingPage, + canDeactivate: [ComponentDirtyGuard] + }, + { + path: 'report', + loadChildren: () => import('./report/sampling-landing-report-routing.module').then(m => m.SamplingReportRoutingModule) + } + ] + } +]; +let AppSamplingLandingRoutingModule = class AppSamplingLandingRoutingModule { +}; +AppSamplingLandingRoutingModule = __decorate([ + NgModule({ + imports: [ + RouterModule.forChild(routes), + AppSamplingLandingModule + ], + exports: [ + RouterModule + ] + }) +], AppSamplingLandingRoutingModule); +export { AppSamplingLandingRoutingModule }; +//# sourceMappingURL=sampling-landing-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/sampling/sampling-landing-routing.module.js.map b/out-tsc/app/app/trip/landing/sampling/sampling-landing-routing.module.js.map new file mode 100644 index 000000000..d8f1dcdce --- /dev/null +++ b/out-tsc/app/app/trip/landing/sampling/sampling-landing-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sampling-landing-routing.module.js","sourceRoot":"","sources":["../../../../../../src/app/trip/landing/sampling/sampling-landing-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAC;AAG9F,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE;YACJ,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,YAAY;SAC1B;QACD,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,EAAE;gBACR,SAAS,EAAE,MAAM;gBACjB,qBAAqB,EAAE,kBAAkB;gBACzC,SAAS,EAAE,mBAAmB;gBAC9B,aAAa,EAAE,CAAC,mBAAmB,CAAC;aACrC;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,iDAAiD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA,CAAC,CAAC,2BAA2B,CAAC;aACtH;SACF;KACF;CACF,CAAC;AAYK,IAAM,+BAA+B,GAArC,MAAM,+BAA+B;CAC3C,CAAA;AADY,+BAA+B;IAT3C,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,wBAAwB;SACzB;QACD,OAAO,EAAE;YACP,YAAY;SACb;KACF,CAAC;GACW,+BAA+B,CAC3C;SADY,+BAA+B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/sampling/sampling-landing.module.js b/out-tsc/app/app/trip/landing/sampling/sampling-landing.module.js new file mode 100644 index 000000000..deb9692e3 --- /dev/null +++ b/out-tsc/app/app/trip/landing/sampling/sampling-landing.module.js @@ -0,0 +1,41 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { AppDataModule } from '@app/data/data.module'; +import { TranslateModule } from '@ngx-translate/core'; +import { VesselModule } from '@app/vessel/vessel.module'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppMeasurementModule } from '@app/data/measurement/measurement.module'; +import { AppSampleModule } from '@app/trip/sample/sample.module'; +import { AppLandingModule } from '@app/trip/landing/landing.module'; +import { SamplingLandingPage } from '@app/trip/landing/sampling/sampling-landing.page'; +let AppSamplingLandingModule = class AppSamplingLandingModule { + constructor() { + console.debug('[sampling-landing] Creating module...'); + } +}; +AppSamplingLandingModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + AppDataModule, + TranslateModule.forChild(), + // Functional modules + VesselModule, + AppReferentialModule, + AppMeasurementModule, + AppSampleModule, + AppLandingModule, + ], + declarations: [ + SamplingLandingPage, + ], + exports: [ + // Components + SamplingLandingPage, + ] + }), + __metadata("design:paramtypes", []) +], AppSamplingLandingModule); +export { AppSamplingLandingModule }; +//# sourceMappingURL=sampling-landing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/sampling/sampling-landing.module.js.map b/out-tsc/app/app/trip/landing/sampling/sampling-landing.module.js.map new file mode 100644 index 000000000..2d7e5a922 --- /dev/null +++ b/out-tsc/app/app/trip/landing/sampling/sampling-landing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sampling-landing.module.js","sourceRoot":"","sources":["../../../../../../src/app/trip/landing/sampling/sampling-landing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AAwBhF,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAEnC;QACE,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACzD,CAAC;CACF,CAAA;AALY,wBAAwB;IArBpC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAE1B,qBAAqB;YACrB,YAAY;YACZ,oBAAoB;YACpB,oBAAoB;YACpB,eAAe;YACf,gBAAgB;SACjB;QACD,YAAY,EAAE;YACZ,mBAAmB;SACpB;QACD,OAAO,EAAE;YACP,aAAa;YACb,mBAAmB;SACpB;KACF,CAAC;;GACW,wBAAwB,CAKpC;SALY,wBAAwB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/sampling/sampling-landing.page.js b/out-tsc/app/app/trip/landing/sampling/sampling-landing.page.js new file mode 100644 index 000000000..b0fb8f81a --- /dev/null +++ b/out-tsc/app/app/trip/landing/sampling/sampling-landing.page.js @@ -0,0 +1,358 @@ +var SamplingLandingPage_1; +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, EventEmitter, Injector } from '@angular/core'; +import { firstValueFrom, merge, mergeMap, of } from 'rxjs'; +import { AcquisitionLevelCodes, ParameterLabelGroups, Parameters, PmfmIds } from '@app/referential/services/model/model.enum'; +import { PmfmService } from '@app/referential/services/pmfm.service'; +import { AccountService, fadeInOutAnimation, firstNotNilPromise, isEmptyArray, isNil, isNotNil, isNotNilOrBlank, SharedValidators, } from '@sumaris-net/ngx-components'; +import { BiologicalSamplingValidators } from './biological-sampling.validators'; +import { LandingPage } from '../landing.page'; +import { Landing } from '../landing.model'; +import { ObservedLocation } from '../../observedlocation/observed-location.model'; +import { SamplingStrategyService } from '@app/referential/services/sampling-strategy.service'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { LandingService } from '@app/trip/landing/landing.service'; +import { Trip } from '@app/trip/trip/trip.model'; +import { debounceTime, distinctUntilChanged, filter, map } from 'rxjs/operators'; +import { APP_DATA_ENTITY_EDITOR } from '@app/data/form/data-editor.utils'; +import { Parameter } from '@app/referential/services/model/parameter.model'; +let SamplingLandingPage = SamplingLandingPage_1 = class SamplingLandingPage extends LandingPage { + constructor(injector, samplingStrategyService, pmfmService, accountService, landingService) { + super(injector, { + pathIdAttribute: 'samplingId', + enableListenChanges: false, + }); + this.samplingStrategyService = samplingStrategyService; + this.pmfmService = pmfmService; + this.accountService = accountService; + this.landingService = landingService; + this.onRefreshEffort = new EventEmitter(); + this.zeroEffortWarning = false; + this.noEffortError = false; + this.warning = null; + this.ageFractions$ = this._state.select('ageFractions'); + this.i18nContext.suffix = 'SAMPLING.'; + this.fractionDisplayAttributes = this.settings.getFieldDisplayAttributes('fraction', ['name']); + } + ngOnInit() { + super.ngOnInit(); + // Configure sample table + this.samplesTable.defaultSortBy = PmfmIds.TAG_ID.toString(); // Change if referential ref is not ready (see ngAfterViewInit() ) + this.samplesTable.defaultSortDirection = 'asc'; + this._state.hold(this.strategy$.pipe(debounceTime(250)), (strategy) => this.checkStrategyEffort(strategy)); + this._state.connect('strategyLabel', merge(this.landingForm.strategyLabel$, this.landingForm.strategyChanges.pipe(map((s) => s === null || s === void 0 ? void 0 : s.label))).pipe(distinctUntilChanged(), filter(isNotNilOrBlank))); + // Load age parameter ids + this._state.connect('ageParameterIds', of(ParameterLabelGroups.AGE).pipe(mergeMap((parameterLabels) => this.referentialRefService.loadAllByLabels(parameterLabels, Parameter.ENTITY_NAME)), map((parameters) => parameters.map((p) => p.id)))); + // Load strategy's age fractions + this._state.connect('ageFractions', this._state + .select(['strategy', 'ageParameterIds'], (s) => s) + .pipe(mergeMap(({ strategy, ageParameterIds }) => __awaiter(this, void 0, void 0, function* () { + var _a; + const ageFractionIds = ((strategy === null || strategy === void 0 ? void 0 : strategy.denormalizedPmfms) || []) + .filter((pmfm) => isNotNil(pmfm.parameterId) && ageParameterIds.includes(pmfm.parameterId)) + .map((pmfm) => pmfm.fractionId); + if (isEmptyArray(ageFractionIds)) + return []; + const sortBy = ((_a = this.fractionDisplayAttributes) === null || _a === void 0 ? void 0 : _a[0]) || 'name'; + return this.referentialRefService.loadAllByIds(ageFractionIds, 'Fraction', sortBy, 'asc'); + })))); + } + ngAfterViewInit() { + super.ngAfterViewInit(); + // Set sample table acquisition level + this.samplesTable.acquisitionLevel = AcquisitionLevelCodes.SAMPLE; + // Wait referential ready (before reading enumerations) + this.referentialRefService + .ready() + // Load Pmfm groups + .then(() => { + const parameterLabelsGroups = Parameters.getSampleParameterLabelGroups({ + // Exclude the parameter PRESERVATION (=Etat) - Need by IMAGINE (see issue #458) + excludedParameterLabels: ['PRESERVATION'], + }); + return this.pmfmService.loadIdsGroupByParameterLabels(parameterLabelsGroups); + }) + .then((pmfmGroups) => { + // Configure sample table + this.samplesTable.defaultSortBy = PmfmIds.TAG_ID.toString(); + this.samplesTable.readonlyPmfmGroups = ParameterLabelGroups.AGE; + this.samplesTable.pmfmIdsToCopy = [PmfmIds.DRESSING]; + this.samplesTable.pmfmGroups = pmfmGroups; + }); + } + /* -- protected functions -- */ + loadStrategy(strategyFilter) { + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.debug(this.logPrefix + 'Loading strategy, using filter:', strategyFilter); + return this.strategyRefService.loadByFilter(strategyFilter, { + failIfMissing: true, + fullLoad: true, + debug: this.debug, + }); + }); + } + updateViewState(data, opts) { + super.updateViewState(data); + // Update tabs state (show/hide) + this.updateTabsState(data); + } + updateTabsState(data) { + // Enable landings ta + this.showSamplesTable = this.showSamplesTable || !this.isNewData || this.isOnFieldMode; + // confirmation pop-up on quite form if form not touch + if (this.isNewData && this.isOnFieldMode) { + this.markAsDirty(); + } + // Move to second tab + if (this.showSamplesTable && this.autoOpenNextTab && !this.isNewData && this.selectedTabIndex === 0) { + this.selectedTabIndex = 1; + this.tabGroup.realignInkBar(); + this.autoOpenNextTab = false; // Should switch only once + } + } + setStrategy(strategy) { + const _super = Object.create(null, { + setStrategy: { get: () => super.setStrategy } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.setStrategy.call(this, strategy); + this.onRefreshEffort.emit(strategy); + }); + } + checkStrategyEffort(strategy) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + strategy = strategy || ((_a = this.landingForm.strategyControl) === null || _a === void 0 ? void 0 : _a.value); + try { + const [program] = yield Promise.all([ + firstNotNilPromise(this.program$, { stop: this.destroySubject }), + this.landingForm.waitIdle({ stop: this.destroySubject }), + ]); + if (strategy === null || strategy === void 0 ? void 0 : strategy.label) { + const dateTime = (this.landingForm.showDateTime && this.data.dateTime) || + (this.parent instanceof Trip && this.parent.departureDateTime) || + (this.parent instanceof ObservedLocation && this.parent.startDateTime); + // If no date (e.g. no parent selected yet) : skip + if (!dateTime) { + // DEBUG + console.debug('[sampling-landing-page] Skip strategy effort loaded: no date (no parent entity)'); + return; + } + // Add validator errors on expected effort for this sampleRow (issue #175) + const strategyEffort = yield this.samplingStrategyService.loadStrategyEffortByDate(program.label, strategy.label, dateTime, { + // Not need realized effort (issue #492) + withRealized: false, + }); + // DEBUG + console.debug('[sampling-landing-page] Strategy effort loaded: ', strategyEffort); + // No effort defined + if (!strategyEffort) { + this.noEffortError = true; + this.samplesTable.disable(); + this.zeroEffortWarning = false; + this.landingForm.strategyControl.setErrors({ noEffort: true }); + this.landingForm.strategyControl.markAsTouched(); + } + // Effort is set, but = 0 + else if (strategyEffort.expectedEffort === 0) { + this.zeroEffortWarning = true; + this.noEffortError = false; + SharedValidators.clearError(this.landingForm.strategyControl, 'noEffort'); + } + // And positive effort has been defined: OK + else { + this.zeroEffortWarning = false; + this.noEffortError = false; + SharedValidators.clearError(this.landingForm.strategyControl, 'noEffort'); + } + } + // No strategy + else { + this.zeroEffortWarning = false; + this.noEffortError = false; + SharedValidators.clearError(this.landingForm.strategyControl, 'noEffort'); + } + if (this.noEffortError) { + this.samplesTable.disable(); + } + else if (this.enabled) { + this.samplesTable.enable(); + } + } + catch (err) { + const error = (err === null || err === void 0 ? void 0 : err.message) || err; + console.error('[sampling-landing-page] Error while checking strategy effort', err); + this.setError(error); + } + finally { + this.markForCheck(); + } + }); + } + onEntityLoaded(data, options) { + const _super = Object.create(null, { + onEntityLoaded: { get: () => super.onEntityLoaded } + }); + return __awaiter(this, void 0, void 0, function* () { + //console.debug('Calling onEntityLoaded', data); + yield _super.onEntityLoaded.call(this, data, options); + }); + } + getValue() { + const _super = Object.create(null, { + getValue: { get: () => super.getValue } + }); + var _a; + return __awaiter(this, void 0, void 0, function* () { + let data = yield _super.getValue.call(this); + // Convert into entity + data = Landing.fromObject(data); + // Compute final TAG_ID, using the strategy label + const strategyLabel = (_a = data.measurementValues) === null || _a === void 0 ? void 0 : _a[PmfmIds.STRATEGY_LABEL]; + if (isNotNilOrBlank(strategyLabel)) { + const sampleLabelPrefix = strategyLabel + '-'; + data.samples = (data.samples || []).map((sample) => { + const tagId = sample.measurementValues[PmfmIds.TAG_ID]; + if (tagId && !tagId.startsWith(sampleLabelPrefix)) { + // Clone to keep existing data unchanged. + // This is required by the samples-table in the readonly/mobile mode, + // because the table has no validator service (row.currentData will be a Sample entity): + // and when an error occur during save() this entities will be restore, and the sampleLabelPrefix will be shown + // -> see issue #455 for details + // TODO : Add the prefix to the TAG_ID a the last moment when the landing service save the data. + // Manage this beahviours by creating specific save option. + sample = sample.clone(); + // Add the sample prefix + sample.measurementValues[PmfmIds.TAG_ID] = sampleLabelPrefix + tagId; + } + return sample; + }); + } + if (data.trip) { + const trip = data.trip; + // Force trip.operations and trip.operationGroup as empty array (instead of undefined) + // This is useful to avoid a unused fetch in the pod, after saving a landing + if (!trip.operations) + trip.operations = []; + if (!trip.operationGroups) + trip.operationGroups = []; + } + if (isNil(data.id) && isNotNil(data.observedLocationId)) { + // Workaround (see issue IMAGINE-639 - Saisie de plusieurs espèces sur un même navire) + yield this.landingService.fixLandingTripDate(data); + } + return data; + }); + } + setValue(data) { + const _super = Object.create(null, { + setValue: { get: () => super.setValue } + }); + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!data) + return; // Skip + if (this.parent instanceof ObservedLocation && isNotNil(data.id)) { + const recorderIsNotObserver = !(this.parent.observers && this.parent.observers.find((p) => p.equals(data.recorderPerson))); + this.warning = recorderIsNotObserver ? 'LANDING.WARNING.NOT_OBSERVER_ERROR' : null; + } + const strategyLabel = (_a = data.measurementValues) === null || _a === void 0 ? void 0 : _a[PmfmIds.STRATEGY_LABEL.toString()]; + if (strategyLabel) { + // Propagate strategy + this.strategyLabel = strategyLabel; + // Remove sample's TAG_ID prefix + { + const samplePrefix = strategyLabel + '-'; + let prefixCount = 0; + console.info(`[sampling-landing-page] Removing prefix '${samplePrefix}' in samples TAG_ID...`); + (data.samples || []).map((sample) => { + var _a; + const tagId = (_a = sample.measurementValues) === null || _a === void 0 ? void 0 : _a[PmfmIds.TAG_ID]; + if (tagId === null || tagId === void 0 ? void 0 : tagId.startsWith(samplePrefix)) { + sample.measurementValues[PmfmIds.TAG_ID] = tagId.substring(samplePrefix.length); + prefixCount++; + } + }); + // Check if replacements has been done on every sample. If not, log a warning + if (prefixCount > 0 && prefixCount !== data.samples.length) { + const invalidTagIds = data.samples + .map((sample) => { var _a; return (_a = sample.measurementValues) === null || _a === void 0 ? void 0 : _a[PmfmIds.TAG_ID]; }) + .filter((tagId) => !tagId || tagId.length > 4 || tagId.indexOf('-') !== -1); + console.warn(`[sampling-landing-page] ${data.samples.length - prefixCount} samples found with a wrong prefix`, invalidTagIds); + } + } + } + // Apply the value into form and table + yield _super.setValue.call(this, data); + }); + } + computePageHistory(title) { + const _super = Object.create(null, { + computePageHistory: { get: () => super.computePageHistory } + }); + return __awaiter(this, void 0, void 0, function* () { + return Object.assign(Object.assign({}, (yield _super.computePageHistory.call(this, title))), { icon: 'boat' }); + }); + } + computePageUrl(id) { + const parentUrl = this.getParentPageUrl(); + return `${parentUrl}/sampling/${id}`; + } + registerSampleRowValidator(form, pmfms) { + console.debug('[sampling-landing-page] Adding row validator'); + return BiologicalSamplingValidators.addSampleValidators(form, pmfms, this.samplesTable.pmfmGroups || {}, { + markForCheck: () => this.markForCheck(), + }); + } + computeTitle(data) { + return __awaiter(this, void 0, void 0, function* () { + const program = yield firstNotNilPromise(this.program$, { stop: this.destroySubject }); + let i18nSuffix = program.getProperty(ProgramProperties.I18N_SUFFIX); + i18nSuffix = (i18nSuffix !== 'legacy' && i18nSuffix) || ''; + const titlePrefix = (this.parent && + this.parent instanceof ObservedLocation && + (yield firstValueFrom(this.translate.get('LANDING.TITLE_PREFIX', { + location: this.parent.location && (this.parent.location.name || this.parent.location.label), + date: (this.parent.startDateTime && this.dateFormat.transform(this.parent.startDateTime)) || '', + })))) || + ''; + // new data + if (!data || isNil(data.id)) { + return titlePrefix + this.translate.instant(`LANDING.NEW.${i18nSuffix}TITLE`); + } + // Existing data + const strategy = yield firstNotNilPromise(this.strategy$, { stop: this.destroySubject }); + return (titlePrefix + + this.translate.instant(`LANDING.EDIT.${i18nSuffix}TITLE`, { + vessel: data.vesselSnapshot && (data.vesselSnapshot.registrationCode || data.vesselSnapshot.name), + strategyLabel: strategy && strategy.label, + })); + }); + } + enable(opts) { + const done = super.enable(opts); + // Keep sample table disabled, when no effort + if (done && this.noEffortError) { + this.samplesTable.disable(opts); + } + return done; + } +}; +SamplingLandingPage = SamplingLandingPage_1 = __decorate([ + Component({ + selector: 'app-sampling-landing-page', + templateUrl: './sampling-landing.page.html', + styleUrls: ['./sampling-landing.page.scss'], + providers: [{ provide: APP_DATA_ENTITY_EDITOR, useExisting: SamplingLandingPage_1 }], + animations: [fadeInOutAnimation], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + SamplingStrategyService, + PmfmService, + AccountService, + LandingService]) +], SamplingLandingPage); +export { SamplingLandingPage }; +//# sourceMappingURL=sampling-landing.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/sampling/sampling-landing.page.js.map b/out-tsc/app/app/trip/landing/sampling/sampling-landing.page.js.map new file mode 100644 index 000000000..da89ce1f4 --- /dev/null +++ b/out-tsc/app/app/trip/landing/sampling/sampling-landing.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sampling-landing.page.js","sourceRoot":"","sources":["../../../../../../src/app/trip/landing/sampling/sampling-landing.page.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAiB,uBAAuB,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAU,MAAM,eAAe,CAAC;AAElH,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAgB,MAAM,MAAM,CAAC;AAEzE,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,4CAA4C,CAAC;AAC9H,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EACL,cAAc,EAEd,kBAAkB,EAClB,kBAAkB,EAElB,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,eAAe,EAGf,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,WAAW,EAAoB,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AAE9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAgBrE,IAAM,mBAAmB,2BAAzB,MAAM,mBAAoB,SAAQ,WAAqC;IAS5E,YACE,QAAkB,EACR,uBAAgD,EAChD,WAAwB,EACxB,cAA8B,EAC9B,cAA8B;QAExC,KAAK,CAAC,QAAQ,EAAE;YACd,eAAe,EAAE,YAAY;YAC7B,mBAAmB,EAAE,KAAK;SAC3B,CAAC,CAAC;QARO,4BAAuB,GAAvB,uBAAuB,CAAyB;QAChD,gBAAW,GAAX,WAAW,CAAa;QACxB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,mBAAc,GAAd,cAAc,CAAgB;QAb1C,oBAAe,GAAG,IAAI,YAAY,EAAO,CAAC;QAC1C,sBAAiB,GAAG,KAAK,CAAC;QAC1B,kBAAa,GAAG,KAAK,CAAC;QACtB,YAAO,GAAW,IAAI,CAAC;QAGd,kBAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAa1D,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC;QACtC,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACjG,CAAC;IAED,QAAQ;QACN,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEjB,yBAAyB;QACzB,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,kEAAkE;QAC/H,IAAI,CAAC,YAAY,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAE/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE3G,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CACxC,IAAI,CAAC,WAAW,CAAC,cAAc,EAC/B,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,KAAK,CAAC,CAAC,CAC5D,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAEzD,yBAAyB;QACzB,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,iBAAiB,EACjB,EAAE,CAAW,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,CACzC,QAAQ,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC,EACjH,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CACjD,CACF,CAAC;QAEF,gCAAgC;QAChC,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,cAAc,EACd,IAAI,CAAC,MAAM;aACR,MAAM,CAAC,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aACjD,IAAI,CACH,QAAQ,CAAC,CAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,EAAE;;YAC/C,MAAM,cAAc,GAAG,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,iBAAiB,KAAI,EAAE,CAAC;iBACvD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;iBAC1F,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAElC,IAAI,YAAY,CAAC,cAAc,CAAC;gBAAE,OAAO,EAAE,CAAC;YAE5C,MAAM,MAAM,GAAG,CAAA,MAAA,IAAI,CAAC,yBAAyB,0CAAG,CAAC,CAAC,KAAI,MAAM,CAAC;YAC7D,OAAO,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,cAAc,EAAE,UAAU,EAAE,MAAgC,EAAE,KAAK,CAAC,CAAC;QACtH,CAAC,CAAA,CAAC,CACH,CACJ,CAAC;IACJ,CAAC;IAED,eAAe;QACb,KAAK,CAAC,eAAe,EAAE,CAAC;QAExB,qCAAqC;QACrC,IAAI,CAAC,YAAY,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,MAAM,CAAC;QAElE,uDAAuD;QACvD,IAAI,CAAC,qBAAqB;aACvB,KAAK,EAAE;YACR,mBAAmB;aAClB,IAAI,CAAC,GAAG,EAAE;YACT,MAAM,qBAAqB,GAAG,UAAU,CAAC,6BAA6B,CAAC;gBACrE,gFAAgF;gBAChF,uBAAuB,EAAE,CAAC,cAAc,CAAC;aAC1C,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,WAAW,CAAC,6BAA6B,CAAC,qBAAqB,CAAC,CAAC;QAC/E,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;YACnB,yBAAyB;YACzB,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC5D,IAAI,CAAC,YAAY,CAAC,kBAAkB,GAAG,oBAAoB,CAAC,GAAG,CAAC;YAChE,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,UAAU,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC;IAED,+BAA+B;IAEf,YAAY,CAAC,cAAuC;;YAClE,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,iCAAiC,EAAE,cAAc,CAAC,CAAC;YAClG,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,cAAc,EAAE;gBAC1D,aAAa,EAAE,IAAI;gBACnB,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;QACL,CAAC;KAAA;IAED,eAAe,CAAC,IAAa,EAAE,IAAkD;QAC/E,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAE5B,gCAAgC;QAChC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,eAAe,CAAC,IAAa;QAC3B,qBAAqB;QACrB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC;QAEvF,sDAAsD;QACtD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,EAAE;YACxC,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB;QAED,qBAAqB;QACrB,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC,EAAE;YACnG,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC9B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC,0BAA0B;SACzD;IACH,CAAC;IAEe,WAAW,CAAC,QAAkB;;;;;YAC5C,MAAM,OAAM,WAAW,YAAC,QAAQ,CAAC,CAAC;YAElC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;KAAA;IAEe,mBAAmB,CAAC,QAAmB;;;YACrD,QAAQ,GAAG,QAAQ,KAAI,MAAA,IAAI,CAAC,WAAW,CAAC,eAAe,0CAAE,KAAK,CAAA,CAAC;YAE/D,IAAI;gBACF,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAClC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;oBAChE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;iBACzD,CAAC,CAAC;gBAEH,IAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,EAAE;oBACnB,MAAM,QAAQ,GACZ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;wBACrD,CAAC,IAAI,CAAC,MAAM,YAAY,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;wBAC9D,CAAC,IAAI,CAAC,MAAM,YAAY,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oBAEzE,kDAAkD;oBAClD,IAAI,CAAC,QAAQ,EAAE;wBACb,QAAQ;wBACR,OAAO,CAAC,KAAK,CAAC,iFAAiF,CAAC,CAAC;wBACjG,OAAO;qBACR;oBAED,0EAA0E;oBAC1E,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE;wBAC1H,wCAAwC;wBACxC,YAAY,EAAE,KAAK;qBACpB,CAAC,CAAC;oBAEH,QAAQ;oBACR,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,cAAc,CAAC,CAAC;oBAElF,oBAAoB;oBACpB,IAAI,CAAC,cAAc,EAAE;wBACnB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;wBAC1B,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;wBAC5B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;wBAC/B,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,SAAS,CAAmB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;wBACjF,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;qBAClD;oBACD,yBAAyB;yBACpB,IAAI,cAAc,CAAC,cAAc,KAAK,CAAC,EAAE;wBAC5C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;wBAC9B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;wBAC3B,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;qBAC3E;oBACD,2CAA2C;yBACtC;wBACH,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;wBAC/B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;wBAC3B,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;qBAC3E;iBACF;gBAED,cAAc;qBACT;oBACH,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;oBAC/B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;oBAC3B,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;iBAC3E;gBAED,IAAI,IAAI,CAAC,aAAa,EAAE;oBACtB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;iBAC7B;qBAAM,IAAI,IAAI,CAAC,OAAO,EAAE;oBACvB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;iBAC5B;aACF;YAAC,OAAO,GAAG,EAAE;gBACZ,MAAM,KAAK,GAAG,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,KAAI,GAAG,CAAC;gBAClC,OAAO,CAAC,KAAK,CAAC,8DAA8D,EAAE,GAAG,CAAC,CAAC;gBACnF,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aACtB;oBAAS;gBACR,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;;KACF;IAEe,cAAc,CAAC,IAAa,EAAE,OAAkC;;;;;YAC9E,gDAAgD;YAChD,MAAM,OAAM,cAAc,YAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;KAAA;IAEe,QAAQ;;;;;;YACtB,IAAI,IAAI,GAAG,MAAM,OAAM,QAAQ,WAAE,CAAC;YAElC,sBAAsB;YACtB,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEhC,iDAAiD;YACjD,MAAM,aAAa,GAAG,MAAA,IAAI,CAAC,iBAAiB,0CAAG,OAAO,CAAC,cAAc,CAAC,CAAC;YACvE,IAAI,eAAe,CAAC,aAAa,CAAC,EAAE;gBAClC,MAAM,iBAAiB,GAAG,aAAa,GAAG,GAAG,CAAC;gBAC9C,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBACjD,MAAM,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBACvD,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE;wBACjD,yCAAyC;wBACzC,qEAAqE;wBACrE,wFAAwF;wBACxF,+GAA+G;wBAC/G,gCAAgC;wBAChC,gGAAgG;wBAChG,kEAAkE;wBAClE,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;wBAExB,wBAAwB;wBACxB,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,iBAAiB,GAAG,KAAK,CAAC;qBACtE;oBACD,OAAO,MAAM,CAAC;gBAChB,CAAC,CAAC,CAAC;aACJ;YAED,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,MAAM,IAAI,GAAG,IAAI,CAAC,IAAY,CAAC;gBAE/B,sFAAsF;gBACtF,4EAA4E;gBAC5E,IAAI,CAAC,IAAI,CAAC,UAAU;oBAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,eAAe;oBAAE,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;aACtD;YAED,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;gBACvD,sFAAsF;gBACtF,MAAM,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;aACpD;YAED,OAAO,IAAI,CAAC;;KACb;IAEe,QAAQ,CAAC,IAAa;;;;;;YACpC,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,OAAO;YAE1B,IAAI,IAAI,CAAC,MAAM,YAAY,gBAAgB,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBAChE,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC3H,IAAI,CAAC,OAAO,GAAG,qBAAqB,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,IAAI,CAAC;aACpF;YAED,MAAM,aAAa,GAAG,MAAA,IAAI,CAAC,iBAAiB,0CAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;YAClF,IAAI,aAAa,EAAE;gBACjB,qBAAqB;gBACrB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;gBAEnC,gCAAgC;gBAChC;oBACE,MAAM,YAAY,GAAG,aAAa,GAAG,GAAG,CAAC;oBACzC,IAAI,WAAW,GAAG,CAAC,CAAC;oBACpB,OAAO,CAAC,IAAI,CAAC,4CAA4C,YAAY,wBAAwB,CAAC,CAAC;oBAC/F,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;;wBAClC,MAAM,KAAK,GAAG,MAAA,MAAM,CAAC,iBAAiB,0CAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBACzD,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,CAAC,YAAY,CAAC,EAAE;4BACnC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;4BAChF,WAAW,EAAE,CAAC;yBACf;oBACH,CAAC,CAAC,CAAC;oBAEH,6EAA6E;oBAC7E,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;wBAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO;6BAC/B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,WAAC,OAAA,MAAA,MAAM,CAAC,iBAAiB,0CAAG,OAAO,CAAC,MAAM,CAAC,CAAA,EAAA,CAAC;6BAC3D,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC9E,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,WAAW,oCAAoC,EAAE,aAAa,CAAC,CAAC;qBAC/H;iBACF;aACF;YAED,sCAAsC;YACtC,MAAM,OAAM,QAAQ,YAAC,IAAI,CAAC,CAAC;;KAC5B;IAEe,kBAAkB,CAAC,KAAa;;;;;YAC9C,uCACK,CAAC,MAAM,OAAM,kBAAkB,YAAC,KAAK,CAAC,CAAC,KAC1C,IAAI,EAAE,MAAM,IACZ;QACJ,CAAC;KAAA;IAES,cAAc,CAAC,EAAkB;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1C,OAAO,GAAG,SAAS,aAAa,EAAE,EAAE,CAAC;IACvC,CAAC;IAES,0BAA0B,CAAC,IAAsB,EAAE,KAAiC;QAC5F,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAE9D,OAAO,4BAA4B,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,EAAE,EAAE;YACvG,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE;SACxC,CAAC,CAAC;IACL,CAAC;IAEe,YAAY,CAAC,IAAa;;YACxC,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YACvF,IAAI,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACpE,UAAU,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YAE3D,MAAM,WAAW,GACf,CAAC,IAAI,CAAC,MAAM;gBACV,IAAI,CAAC,MAAM,YAAY,gBAAgB;gBACvC,CAAC,MAAM,cAAc,CACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAsB,EAAE;oBACzC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAC3F,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,IAAK,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAY,CAAC,IAAI,EAAE;iBAC5G,CAAC,CACH,CAAC,CAAC;gBACL,EAAE,CAAC;YAEL,WAAW;YACX,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBAC3B,OAAO,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,UAAU,OAAO,CAAC,CAAC;aAC/E;YACD,gBAAgB;YAChB,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YAEzF,OAAO,CACL,WAAW;gBACX,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,gBAAgB,UAAU,OAAO,EAAE;oBACxD,MAAM,EAAE,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;oBACjG,aAAa,EAAE,QAAQ,IAAI,QAAQ,CAAC,KAAK;iBAC1C,CAAC,CACH,CAAC;QACJ,CAAC;KAAA;IAED,MAAM,CAAC,IAAkD;QACvD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEhC,6CAA6C;QAC7C,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE;YAC9B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACjC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAxWY,mBAAmB;IAR/B,SAAS,CAAC;QACT,QAAQ,EAAE,2BAA2B;QACrC,WAAW,EAAE,8BAA8B;QAC3C,SAAS,EAAE,CAAC,8BAA8B,CAAC;QAC3C,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,qBAAmB,EAAE,CAAC;QAClF,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAWY,QAAQ;QACiB,uBAAuB;QACnC,WAAW;QACR,cAAc;QACd,cAAc;GAd/B,mBAAmB,CAwW/B;SAxWY,mBAAmB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/select-landings.modal.js b/out-tsc/app/app/trip/landing/select-landings.modal.js new file mode 100644 index 000000000..af43cebd9 --- /dev/null +++ b/out-tsc/app/app/trip/landing/select-landings.modal.js @@ -0,0 +1,92 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, ViewChild } from '@angular/core'; +import { LandingsTable } from './landings.table'; +import { ModalController } from '@ionic/angular'; +import { LandingFilter } from './landing.filter'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { Landing } from './landing.model'; +import { isNotNil } from '@sumaris-net/ngx-components'; +let SelectLandingsModal = class SelectLandingsModal { + constructor(viewCtrl, cd) { + this.viewCtrl = viewCtrl; + this.cd = cd; + this.filter = null; + // default value + this.acquisitionLevel = AcquisitionLevelCodes.LANDING; + } + get loadingSubject() { + return this.table.loadingSubject; + } + ngOnInit() { + this.filter = this.filter || new LandingFilter(); + this.table.filter = this.filter; + this.table.programLabel = this.programLabel || this.filter.program && this.filter.program.label; + this.table.acquisitionLevel = this.acquisitionLevel; + setTimeout(() => { + this.table.onRefresh.next('modal'); + this.markForCheck(); + }, 200); + } + selectRow(row) { + if (row) { + this.table.selection.select(row); + //this.close(); + } + } + close(event) { + return __awaiter(this, void 0, void 0, function* () { + try { + if (this.hasSelection()) { + const landings = (this.table.selection.selected || []) + .map(row => row.currentData) + .map(Landing.fromObject) + .filter(isNotNil); + this.viewCtrl.dismiss(landings); + } + return true; + } + catch (err) { + // nothing to do + return false; + } + }); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.viewCtrl.dismiss(); + }); + } + hasSelection() { + return this.table.selection.hasValue() && this.table.selection.selected.length === 1; + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + ViewChild('table', { static: true }), + __metadata("design:type", LandingsTable) +], SelectLandingsModal.prototype, "table", void 0); +__decorate([ + Input(), + __metadata("design:type", LandingFilter) +], SelectLandingsModal.prototype, "filter", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SelectLandingsModal.prototype, "acquisitionLevel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SelectLandingsModal.prototype, "programLabel", void 0); +SelectLandingsModal = __decorate([ + Component({ + selector: 'app-select-landings-modal', + templateUrl: './select-landings.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [ModalController, + ChangeDetectorRef]) +], SelectLandingsModal); +export { SelectLandingsModal }; +//# sourceMappingURL=select-landings.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/landing/select-landings.modal.js.map b/out-tsc/app/app/trip/landing/select-landings.modal.js.map new file mode 100644 index 000000000..492bc6df2 --- /dev/null +++ b/out-tsc/app/app/trip/landing/select-landings.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"select-landings.modal.js","sourceRoot":"","sources":["../../../../../src/app/trip/landing/select-landings.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/form/observed-location-form.module.js b/out-tsc/app/app/trip/observedlocation/form/observed-location-form.module.js new file mode 100644 index 000000000..780c0ba3a --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/form/observed-location-form.module.js @@ -0,0 +1,27 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { AppCoreModule } from '@app/core/core.module'; +import { TranslateModule } from '@ngx-translate/core'; +import { ObservedLocationForm } from '@app/trip/observedlocation/form/observed-location.form'; +import { AppPmfmFormFieldModule } from '@app/referential/pmfm/field/pmfm.form-field.module'; +import { AppReferentialPipesModule } from '@app/referential/pipes/referential-pipes.module'; +let AppObservedLocationFormModule = class AppObservedLocationFormModule { +}; +AppObservedLocationFormModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + TranslateModule.forChild(), + AppReferentialPipesModule, + AppPmfmFormFieldModule + ], + declarations: [ + ObservedLocationForm, + ], + exports: [ + ObservedLocationForm, + ] + }) +], AppObservedLocationFormModule); +export { AppObservedLocationFormModule }; +//# sourceMappingURL=observed-location-form.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/form/observed-location-form.module.js.map b/out-tsc/app/app/trip/observedlocation/form/observed-location-form.module.js.map new file mode 100644 index 000000000..d9cb2fc6d --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/form/observed-location-form.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"observed-location-form.module.js","sourceRoot":"","sources":["../../../../../../src/app/trip/observedlocation/form/observed-location-form.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAC,oBAAoB,EAAC,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAC,sBAAsB,EAAC,MAAM,oDAAoD,CAAC;AAC1F,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAmBrF,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;CAAI,CAAA;AAAjC,6BAA6B;IAfzC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAE1B,yBAAyB;YACzB,sBAAsB;SACvB;QACD,YAAY,EAAE;YACZ,oBAAoB;SACrB;QACD,OAAO,EAAE;YACP,oBAAoB;SACrB;KACF,CAAC;GACW,6BAA6B,CAAI;SAAjC,6BAA6B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/form/observed-location.form.js b/out-tsc/app/app/trip/observedlocation/form/observed-location.form.js new file mode 100644 index 000000000..74d77ef35 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/form/observed-location.form.js @@ -0,0 +1,282 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, Input } from '@angular/core'; +import { debounceTime, distinctUntilChanged, map } from 'rxjs/operators'; +import { ObservedLocationValidatorService } from '../observed-location.validator'; +import { MeasurementValuesForm } from '@app/data/measurement/measurement-values.form.class'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { UntypedFormBuilder } from '@angular/forms'; +import { DateUtils, FormArrayHelper, fromDateISOString, isEmptyArray, isNil, isNotNil, PersonService, PersonUtils, ReferentialUtils, StatusIds, toBoolean, toDateISOString } from '@sumaris-net/ngx-components'; +import { AcquisitionLevelCodes, LocationLevelIds } from '@app/referential/services/model/model.enum'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { environment } from '@environments/environment'; +let ObservedLocationForm = class ObservedLocationForm extends MeasurementValuesForm { + constructor(injector, measurementsValidatorService, formBuilder, programRefService, validatorService, referentialRefService, personService) { + super(injector, measurementsValidatorService, formBuilder, programRefService, validatorService.getFormGroup()); + this.measurementsValidatorService = measurementsValidatorService; + this.formBuilder = formBuilder; + this.programRefService = programRefService; + this.validatorService = validatorService; + this.referentialRefService = referentialRefService; + this.personService = personService; + this.required = true; + this.showError = true; + this.showEndDateTime = true; + this.showStartTime = true; + this.showEndTime = true; + this.showComment = true; + this.showButtons = true; + this.showProgram = true; + this.startDateDay = null; + this.timezone = null; + this.observerFocusIndex = -1; + this._enable = false; + this.mobile = this.settings.mobile; + // Set default acquisition level + this.acquisitionLevel = AcquisitionLevelCodes.OBSERVED_LOCATION; + // FOR DEV ONLY ---- + this.debug = !environment.production; + } + set showObservers(value) { + if (this._showObservers !== value) { + this._showObservers = value; + this.initObserversHelper(); + this.markForCheck(); + } + } + get showObservers() { + return this._showObservers; + } + get empty() { + const value = this.value; + return (!value.location || !value.location.id) + && (!value.startDateTime) + && (!value.comments || !value.comments.length); + } + get valid() { + return this.form && (this.required ? this.form.valid : (this.form.valid || this.empty)); + } + get observersForm() { + return this.form.controls.observers; + } + get measurementValuesForm() { + return this.form.controls.measurementValues; + } + get programControl() { + return this.form.get('program'); + } + ngOnInit() { + super.ngOnInit(); + // Default values + this.showObservers = toBoolean(this.showObservers, true); // Will init the observers helper + this.tabindex = isNotNil(this.tabindex) ? this.tabindex : 1; + if (isEmptyArray(this.locationLevelIds)) + this.locationLevelIds = [LocationLevelIds.PORT]; + // Combo: programs + this.registerAutocompleteField('program', { + service: this.programRefService, + filter: { + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], + acquisitionLevelLabels: [AcquisitionLevelCodes.OBSERVED_LOCATION, AcquisitionLevelCodes.LANDING] + } + }); + // Combo location + this.registerAutocompleteField('location', { + suggestFn: (value, filter) => this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { levelIds: this.locationLevelIds })), + filter: { + entityName: 'Location', + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE] + }, + mobile: this.mobile + }); + // Combo: observers + this.registerAutocompleteField('person', { + // Important, to get the current (focused) control value, in suggestObservers() function (otherwise it will received '*'). + showAllOnFocus: false, + suggestFn: (value, filter) => this.suggestObservers(value, filter), + // Default filter. An excludedIds will be add dynamically + filter: { + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE], + userProfiles: ['SUPERVISOR', 'USER'] + }, + attributes: ['lastName', 'firstName', 'department.name'], + displayWith: PersonUtils.personToString, + mobile: this.mobile + }); + // Propagate program + this.registerSubscription(this.form.get('program').valueChanges + .pipe(debounceTime(250), map(value => (value && typeof value === 'string') ? value : (value && value.label || undefined)), distinctUntilChanged()) + .subscribe(programLabel => this.programLabel = programLabel)); + // Copy startDateTime to endDateTime, when endDate is hidden + const endDateTimeControl = this.form.get('endDateTime'); + this.registerSubscription(this.form.get('startDateTime').valueChanges + .pipe(debounceTime(150)) + .subscribe(startDateTime => { + var _a; + startDateTime = (_a = fromDateISOString(startDateTime)) === null || _a === void 0 ? void 0 : _a.clone(); + if (!startDateTime) + return; // Skip + if (this.timezone) + startDateTime.tz(this.timezone); + // Compute the end date time + if (!this.showEndDateTime) { + // copy start date time + 1ms + const endDateTime = startDateTime.clone().add(1, 'millisecond'); + endDateTimeControl.patchValue(toDateISOString(endDateTime), { emitEvent: false }); + } + // Add a offset + else if (this.forceDurationDays > 0) { + const endDate = startDateTime.clone() + .add(this.forceDurationDays, 'day') + .add(-1, 'second'); + // add expected number of days + endDateTimeControl.patchValue(toDateISOString(endDate), { emitEvent: false }); + } + })); + } + onApplyingEntity(data, opts) { + if (!data) + return; + super.onApplyingEntity(data, opts); + // Make sure to have (at least) one observer + // TODO BLA enable this + //data.observers = data.observers && data.observers.length ? data.observers : [null]; + // Resize observers array + if (this._showObservers) { + this.observersHelper.resize(Math.max(1, data.observers.length)); + } + else { + this.observersHelper.removeAllEmpty(); + } + // Force to show end date + if (!this.showEndDateTime && isNotNil(data.endDateTime) && isNotNil(data.startDateTime)) { + const diffInSeconds = fromDateISOString(data.endDateTime) + .diff(fromDateISOString(data.startDateTime), 'second'); + if (diffInSeconds !== 0) { + this.showEndDateTime = true; + this.markForCheck(); + } + } + // Update form group + this.validatorService.updateFormGroup(this.form, { + startDateDay: this.startDateDay, + timezone: this.timezone + }); + // Create a filter for start date picker + this.startDatePickerFilter = (d) => isNil(this.startDateDay) || DateUtils.isAtDay(d, this.startDateDay, this.timezone); + } + addObserver() { + this.observersHelper.add(); + if (!this.mobile) { + this.observerFocusIndex = this.observersHelper.size() - 1; + } + } + enable(opts) { + super.enable(opts); + // Leave program disable once data has been saved + if (!this.isNewData && !this.programControl.disabled) { + this.programControl.disable({ emitEvent: false }); + this.markForCheck(); + } + } + /* -- protected method -- */ + initObserversHelper() { + if (isNil(this._showObservers)) + return; // skip if not loading yet + this.observersHelper = new FormArrayHelper(FormArrayHelper.getOrCreateArray(this.formBuilder, this.form, 'observers'), (person) => this.validatorService.getObserverControl(person), ReferentialUtils.equals, ReferentialUtils.isEmpty, { + allowEmptyArray: !this._showObservers + }); + if (this._showObservers) { + // Create at least one observer + if (this.observersHelper.size() === 0) { + this.observersHelper.resize(1); + } + } + else if (this.observersHelper.size() > 0) { + this.observersHelper.resize(0); + } + } + suggestObservers(value, filter) { + const currentControlValue = ReferentialUtils.isNotEmpty(value) ? value : null; + const newValue = currentControlValue ? '*' : value; + // Excluded existing observers, BUT keep the current control value + const excludedIds = (this.observersForm.value || []) + .filter(ReferentialUtils.isNotEmpty) + .filter(person => !currentControlValue || currentControlValue !== person) + .map(person => parseInt(person.id)); + return this.personService.suggest(newValue, Object.assign(Object.assign({}, filter), { excludedIds })); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationForm.prototype, "required", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationForm.prototype, "showEndDateTime", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationForm.prototype, "showStartTime", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationForm.prototype, "showEndTime", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationForm.prototype, "showComment", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationForm.prototype, "showButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationForm.prototype, "showProgram", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], ObservedLocationForm.prototype, "startDateDay", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], ObservedLocationForm.prototype, "forceDurationDays", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], ObservedLocationForm.prototype, "timezone", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], ObservedLocationForm.prototype, "locationLevelIds", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], ObservedLocationForm.prototype, "showObservers", null); +ObservedLocationForm = __decorate([ + Component({ + selector: 'app-form-observed-location', + templateUrl: './observed-location.form.html', + styleUrls: ['./observed-location.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + MeasurementsValidatorService, + UntypedFormBuilder, + ProgramRefService, + ObservedLocationValidatorService, + ReferentialRefService, + PersonService]) +], ObservedLocationForm); +export { ObservedLocationForm }; +//# sourceMappingURL=observed-location.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/form/observed-location.form.js.map b/out-tsc/app/app/trip/observedlocation/form/observed-location.form.js.map new file mode 100644 index 000000000..c329d3645 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/form/observed-location.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"observed-location.form.js","sourceRoot":"","sources":["../../../../../../src/app/trip/observedlocation/form/observed-location.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/observed-location-context.service.js b/out-tsc/app/app/trip/observedlocation/observed-location-context.service.js new file mode 100644 index 000000000..eb6ac6972 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/observed-location-context.service.js @@ -0,0 +1,29 @@ +import { __decorate, __metadata, __param } from "tslib"; +import { Inject, Injectable, Optional } from '@angular/core'; +import { TripContextService } from '@app/trip/trip-context.service'; +import { CONTEXT_DEFAULT_STATE } from '@app/shared/context.service'; +let ObservedLocationContextService = class ObservedLocationContextService extends TripContextService { + constructor(defaultState) { + super(defaultState || {}); + } + set observedLocation(value) { + this.set('observedLocation', () => value); + } + get observedLocation() { + return this.get('observedLocation'); + } + get landing() { + return this.get('landing'); + } + set landing(value) { + this.set('landing', _ => value); + } +}; +ObservedLocationContextService = __decorate([ + Injectable({ providedIn: 'root' }), + __param(0, Optional()), + __param(0, Inject(CONTEXT_DEFAULT_STATE)), + __metadata("design:paramtypes", [Object]) +], ObservedLocationContextService); +export { ObservedLocationContextService }; +//# sourceMappingURL=observed-location-context.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/observed-location-context.service.js.map b/out-tsc/app/app/trip/observedlocation/observed-location-context.service.js.map new file mode 100644 index 000000000..beaa55d40 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/observed-location-context.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"observed-location-context.service.js","sourceRoot":"","sources":["../../../../../src/app/trip/observedlocation/observed-location-context.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG7D,OAAO,EAAe,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAQ7D,IAAM,8BAA8B,GAApC,MAAM,8BAA4F,SAAQ,kBAAqB;IAEpI,YAAuD,YAAe;QACpE,KAAK,CAAC,YAAY,IAAO,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,gBAAgB,CAAC,KAAuB;QAC1C,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,OAAO,CAAC,KAAc;QACxB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;CACF,CAAA;AArBY,8BAA8B;IAD1C,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;IAGlB,WAAA,QAAQ,EAAE,CAAA;IAAE,WAAA,MAAM,CAAC,qBAAqB,CAAC,CAAA;;GAF3C,8BAA8B,CAqB1C;SArBY,8BAA8B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/observed-location-routing.module.js b/out-tsc/app/app/trip/observedlocation/observed-location-routing.module.js new file mode 100644 index 000000000..bd20e0c7c --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/observed-location-routing.module.js @@ -0,0 +1,119 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { AuthGuardService, ComponentDirtyGuard } from '@sumaris-net/ngx-components'; +import { ObservedLocationsPage } from './table/observed-locations.page'; +import { ObservedLocationPage } from './observed-location.page'; +import { LandedTripPage } from '../landedtrip/landed-trip.page'; +import { AppObservedLocationModule } from '@app/trip/observedlocation/observed-location.module'; +const routes = [ + // table + { + path: '', + pathMatch: 'full', + component: ObservedLocationsPage, + canActivate: [AuthGuardService], + data: { + profile: 'USER', + }, + }, + // Landings + { + path: 'landings', + loadChildren: () => import('../landing/landings-routing.module').then((m) => m.AppLandingsRoutingModule), + canActivate: [AuthGuardService], + data: { + profile: 'USER', + }, + }, + { + path: ':observedLocationId', + runGuardsAndResolvers: 'pathParamsChange', + canActivate: [AuthGuardService], + data: { + profile: 'USER', + pathIdParam: 'observedLocationId', + }, + children: [ + { + path: '', + pathMatch: 'full', + component: ObservedLocationPage, + runGuardsAndResolvers: 'pathParamsChange', + canDeactivate: [ComponentDirtyGuard], + data: { + profile: 'USER', + pathIdParam: 'observedLocationId', + }, + }, + { + path: 'landing', + loadChildren: () => import('../landing/landing-routing.module').then((m) => m.AppLandingRoutingModule), + }, + { + path: 'control', + loadChildren: () => import('../landing/auction-control/auction-control-routing.module').then((m) => m.AppAuctionControlRoutingModule), + }, + { + path: 'sampling', + loadChildren: () => import('../landing/sampling/sampling-landing-routing.module').then((m) => m.AppSamplingLandingRoutingModule), + }, + { + path: 'trip/:tripId', + data: { + profile: 'USER', + pathIdParam: 'tripId', + }, + pathMatch: 'full', + component: LandedTripPage, + runGuardsAndResolvers: 'pathParamsChange', + canDeactivate: [ComponentDirtyGuard], + }, + { + path: 'report', + loadChildren: () => import('./report/observed-location-report-routing.module').then((m) => m.AppObservedLocationReportRoutingModule), + }, + ], + }, + // Shared report + { + path: 'report', + children: [ + { + path: '', + pathMatch: 'full', + loadChildren: () => import('./report/observed-location-report-routing.module').then((m) => m.AppObservedLocationReportRoutingModule), + }, + { + path: 'landing', + pathMatch: 'full', + loadChildren: () => import('@app/trip/landing/report/landing-report-routing.module').then((m) => m.LandingReportRoutingModule), + }, + { + path: 'control', + pathMatch: 'full', + loadChildren: () => import('@app/trip/landing/auction-control/report/auction-control-report-routing.module').then((m) => m.AuctionControlReportRoutingModule), + }, + { + path: 'sampling', + pathMatch: 'full', + loadChildren: () => import('@app/trip/landing/sampling/report/sampling-landing-report-routing.module').then((m) => m.SamplingReportRoutingModule), + }, + ], + }, +]; +let AppObservedLocationRoutingModule = class AppObservedLocationRoutingModule { +}; +AppObservedLocationRoutingModule = __decorate([ + NgModule({ + imports: [ + AppObservedLocationModule, + RouterModule.forChild(routes) + ], + exports: [ + RouterModule + ] + }) +], AppObservedLocationRoutingModule); +export { AppObservedLocationRoutingModule }; +//# sourceMappingURL=observed-location-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/observed-location-routing.module.js.map b/out-tsc/app/app/trip/observedlocation/observed-location-routing.module.js.map new file mode 100644 index 000000000..ca1981eb7 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/observed-location-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"observed-location-routing.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/observedlocation/observed-location-routing.module.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/observed-location.filter.js b/out-tsc/app/app/trip/observedlocation/observed-location.filter.js new file mode 100644 index 000000000..957bb16d6 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/observed-location.filter.js @@ -0,0 +1,85 @@ +var ObservedLocationFilter_1; +import { __decorate } from "tslib"; +import { LandingFilter } from '../landing/landing.filter'; +import { RootDataEntityFilter } from '@app/data/services/model/root-data-filter.model'; +import { EntityClass, isNotEmptyArray, isNotNil, Person, ReferentialRef, ReferentialUtils, } from '@sumaris-net/ngx-components'; +import { DataSynchroImportFilter } from '@app/data/services/root-data-synchro-service.class'; +let ObservedLocationFilter = ObservedLocationFilter_1 = class ObservedLocationFilter extends RootDataEntityFilter { + static toLandingFilter(source) { + if (!source) + return undefined; + return LandingFilter.fromObject({ + program: source.program, + startDate: source.startDate, + endDate: source.endDate, + location: source.location, + locations: source.locations, + }); + } + static fromLandingFilter(source) { + if (!source) + return undefined; + return ObservedLocationFilter_1.fromObject({ + program: source.program, + startDate: source.startDate, + endDate: source.endDate, + location: source.location, + locations: source.locations, + }); + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.location = ReferentialRef.fromObject(source.location); + this.observers = (source.observers && source.observers.map(Person.fromObject)) || []; + } + asObject(opts) { + var _a; + const target = super.asObject(opts); + if (opts && opts.minify) { + // Location + target.locationIds = isNotNil((_a = this.location) === null || _a === void 0 ? void 0 : _a.id) ? [this.location.id] : (this.locations || []).map((l) => l.id).filter(isNotNil); + delete target.location; + delete target.locations; + // Observers + target.observerPersonIds = (this.observers && this.observers.map((o) => o && o.id).filter(isNotNil)) || undefined; + delete target.observers; + } + else { + target.location = (this.location && this.location.asObject(opts)) || undefined; + target.observers = (this.observers && this.observers.map((o) => o && o.asObject(opts)).filter(isNotNil)) || undefined; + } + return target; + } + buildFilter() { + const filterFns = super.buildFilter(); + // Location + if (ReferentialUtils.isNotEmpty(this.location)) { + const locationId = this.location.id; + filterFns.push((t) => t.location && t.location.id === locationId); + } + // Start/end period + if (this.startDate) { + const startDate = this.startDate.clone(); + filterFns.push((t) => (t.endDateTime ? startDate.isSameOrBefore(t.endDateTime) : startDate.isSameOrBefore(t.startDateTime))); + } + if (this.endDate) { + const endDate = this.endDate.clone().add(1, 'day').startOf('day'); + filterFns.push((t) => t.startDateTime && endDate.isAfter(t.startDateTime)); + } + // Recorder department and person + // Already defined in super classes root-data-filter.model.ts et data-filter.model.ts + // Observers + const observerIds = this.observers && this.observers.map((o) => o && o.id).filter(isNotNil); + if (isNotEmptyArray(observerIds)) { + filterFns.push((t) => t.observers && t.observers.findIndex((o) => o && observerIds.includes(o.id)) !== -1); + } + return filterFns; + } +}; +ObservedLocationFilter = ObservedLocationFilter_1 = __decorate([ + EntityClass({ typename: 'ObservedLocationFilterVO' }) +], ObservedLocationFilter); +export { ObservedLocationFilter }; +export class ObservedLocationOfflineFilter extends DataSynchroImportFilter { +} +//# sourceMappingURL=observed-location.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/observed-location.filter.js.map b/out-tsc/app/app/trip/observedlocation/observed-location.filter.js.map new file mode 100644 index 000000000..7ea51fbbe --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/observed-location.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"observed-location.filter.js","sourceRoot":"","sources":["../../../../../src/app/trip/observedlocation/observed-location.filter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/observed-location.model.js b/out-tsc/app/app/trip/observedlocation/observed-location.model.js new file mode 100644 index 000000000..a2a747e2f --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/observed-location.model.js @@ -0,0 +1,67 @@ +var ObservedLocation_1; +import { __decorate, __metadata } from "tslib"; +import { MeasurementUtils, MeasurementValuesUtils, } from '@app/data/measurement/measurement.model'; +import { Landing } from '../landing/landing.model'; +import { EntityClass, fromDateISOString, isNotNil, Person, ReferentialRef, toDateISOString, } from '@sumaris-net/ngx-components'; +import { RootDataEntity } from '@app/data/services/model/root-data-entity.model'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +let ObservedLocation = ObservedLocation_1 = class ObservedLocation extends RootDataEntity { + constructor() { + super(ObservedLocation_1.TYPENAME); + this.location = null; + this.measurementValues = {}; + this.observers = []; + this.landings = []; + } + copy(target) { + target.fromObject(this); + } + asObject(options) { + const target = super.asObject(options); + target.startDateTime = toDateISOString(this.startDateTime); + target.endDateTime = toDateISOString(this.endDateTime); + target.location = + (this.location && this.location.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS /*keep for list*/))) || undefined; + target.measurementValues = MeasurementValuesUtils.asObject(this.measurementValues, options); + target.landings = (this.landings && this.landings.map((s) => s.asObject(options))) || undefined; + target.observers = + (this.observers && + this.observers.map((o) => o.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS /*keep for list*/)))) || + undefined; + return target; + } + fromObject(source) { + super.fromObject(source); + this.startDateTime = fromDateISOString(source.startDateTime); + this.endDateTime = fromDateISOString(source.endDateTime); + this.location = source.location && ReferentialRef.fromObject(source.location); + this.measurementValues = + (source.measurementValues && Object.assign({}, source.measurementValues)) || MeasurementUtils.toMeasurementValues(source.measurements); + this.observers = (source.observers && source.observers.map(Person.fromObject)) || []; + this.landings = (source.landings && source.landings.map(Landing.fromObject)) || []; + return this; + } + equals(other) { + return ((super.equals(other) && isNotNil(this.id)) || + // Same location + (this.location && + other.location && + this.location.id === other.location.id && + // Same start date/time + this.startDateTime === other.startDateTime && + // Same recorder person + this.recorderPerson && + other.recorderPerson && + this.recorderPerson.id === other.recorderPerson.id)); + } + getStrategyDateTime() { + return this.startDateTime; + } +}; +ObservedLocation.ENTITY_NAME = 'ObservedLocation'; +ObservedLocation = ObservedLocation_1 = __decorate([ + EntityClass({ typename: 'ObservedLocationVO' }), + __metadata("design:paramtypes", []) +], ObservedLocation); +export { ObservedLocation }; +//# sourceMappingURL=observed-location.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/observed-location.model.js.map b/out-tsc/app/app/trip/observedlocation/observed-location.model.js.map new file mode 100644 index 000000000..07cc6203e --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/observed-location.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"observed-location.model.js","sourceRoot":"","sources":["../../../../../src/app/trip/observedlocation/observed-location.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/observed-location.module.js b/out-tsc/app/app/trip/observedlocation/observed-location.module.js new file mode 100644 index 000000000..68048cecb --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/observed-location.module.js @@ -0,0 +1,53 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { ObservedLocationPage } from './observed-location.page'; +import { SelectVesselsForDataModal } from './vessels/select-vessel-for-data.modal'; +import { TranslateModule } from '@ngx-translate/core'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppDataModule } from '@app/data/data.module'; +import { AppMeasurementModule } from '@app/data/measurement/measurement.module'; +import { AppLandingModule } from '@app/trip/landing/landing.module'; +import { AppLandedTripModule } from '@app/trip/landedtrip/landed-trip.module'; +import { AppAggregatedLandingModule } from '@app/trip/aggregated-landing/aggregated-landing.module'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { VesselModule } from '@app/vessel/vessel.module'; +import { AppObservedLocationOfflineModule } from '@app/trip/observedlocation/offline/observed-location-offline.module'; +import { AppObservedLocationsTableModule } from '@app/trip/observedlocation/table/observed-location-table.module'; +import { AppObservedLocationFormModule } from '@app/trip/observedlocation/form/observed-location-form.module'; +let AppObservedLocationModule = class AppObservedLocationModule { + constructor() { + console.debug('[observed-location] Creating module...'); + } +}; +AppObservedLocationModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + AppReferentialModule, + AppDataModule, + TranslateModule.forChild(), + //AppTripModule, + //AppReferentialModule, + // Functional modules + VesselModule, + AppMeasurementModule, + AppLandingModule, + AppLandedTripModule, + AppAggregatedLandingModule, + // Sub modules + AppObservedLocationsTableModule, + AppObservedLocationOfflineModule, + AppObservedLocationFormModule, + ], + declarations: [ + ObservedLocationPage, + SelectVesselsForDataModal + ], + exports: [ + AppObservedLocationsTableModule, + ] + }), + __metadata("design:paramtypes", []) +], AppObservedLocationModule); +export { AppObservedLocationModule }; +//# sourceMappingURL=observed-location.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/observed-location.module.js.map b/out-tsc/app/app/trip/observedlocation/observed-location.module.js.map new file mode 100644 index 000000000..ce3c9e96a --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/observed-location.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"observed-location.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/observedlocation/observed-location.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAC;AACpG,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,gCAAgC,EAAE,MAAM,qEAAqE,CAAC;AACvH,OAAO,EAAE,+BAA+B,EAAE,MAAM,iEAAiE,CAAC;AAClH,OAAO,EAAC,6BAA6B,EAAC,MAAM,+DAA+D,CAAC;AAiCrG,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IAEpC;QACE,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC1D,CAAC;CACF,CAAA;AALY,yBAAyB;IA9BrC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,oBAAoB;YACpB,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAE1B,gBAAgB;YAChB,uBAAuB;YAEvB,qBAAqB;YACrB,YAAY;YACZ,oBAAoB;YACpB,gBAAgB;YAChB,mBAAmB;YACnB,0BAA0B;YAE1B,cAAc;YACd,+BAA+B;YAC/B,gCAAgC;YAChC,6BAA6B;SAC9B;QACD,YAAY,EAAE;YACZ,oBAAoB;YACpB,yBAAyB;SAC1B;QACD,OAAO,EAAE;YACP,+BAA+B;SAChC;KACF,CAAC;;GACW,yBAAyB,CAKrC;SALY,yBAAyB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/observed-location.page.js b/out-tsc/app/app/trip/observedlocation/observed-location.page.js new file mode 100644 index 000000000..4f1d03701 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/observed-location.page.js @@ -0,0 +1,601 @@ +var ObservedLocationPage_1; +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, Input, ViewChild } from '@angular/core'; +import { ObservedLocationForm } from './form/observed-location.form'; +import { ObservedLocationService } from './observed-location.service'; +import { LandingsTable } from '../landing/landings.table'; +import { AppRootDataEntityEditor } from '@app/data/form/root-data-editor.class'; +import { AccountService, Alerts, ConfigService, CORE_CONFIG_OPTIONS, DateUtils, EntityUtils, fadeInOutAnimation, firstNotNilPromise, isNotNil, NetworkService, ReferentialRef, ReferentialUtils, StatusIds, toBoolean, TranslateContextService, } from '@sumaris-net/ngx-components'; +import { ModalController } from '@ionic/angular'; +import { SelectVesselsForDataModal } from './vessels/select-vessel-for-data.modal'; +import { ObservedLocation } from './observed-location.model'; +import { Landing } from '../landing/landing.model'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { VesselSnapshot } from '@app/referential/services/model/vessel-snapshot.model'; +import { BehaviorSubject } from 'rxjs'; +import { filter, first, tap } from 'rxjs/operators'; +import { AggregatedLandingsTable } from '../aggregated-landing/aggregated-landings.table'; +import { ObservedLocationsPageSettingsEnum } from './table/observed-locations.page'; +import { environment } from '@environments/environment'; +import { DATA_CONFIG_OPTIONS } from '@app/data/data.config'; +import { LandingFilter } from '../landing/landing.filter'; +import { ContextService } from '@app/shared/context.service'; +import moment from 'moment'; +import { VesselService } from '@app/vessel/services/vessel-service'; +import { ObservedLocationContextService } from '@app/trip/observedlocation/observed-location-context.service'; +import { APP_DATA_ENTITY_EDITOR } from '@app/data/form/data-editor.utils'; +const ObservedLocationPageTabs = { + GENERAL: 0, + LANDINGS: 1, +}; +let ObservedLocationPage = ObservedLocationPage_1 = class ObservedLocationPage extends AppRootDataEntityEditor { + constructor(injector, dataService, modalCtrl, configService, accountService, vesselService, translateContext, context, observedLocationContext, network) { + super(injector, ObservedLocation, dataService, { + pathIdAttribute: 'observedLocationId', + tabCount: 2, + i18nPrefix: 'OBSERVED_LOCATION.EDIT.', + enableListenChanges: true + }); + this.modalCtrl = modalCtrl; + this.configService = configService; + this.accountService = accountService; + this.vesselService = vesselService; + this.translateContext = translateContext; + this.context = context; + this.observedLocationContext = observedLocationContext; + this.network = network; + this.showLandingTab = false; + this.$landingTableType = new BehaviorSubject(undefined); + this.$table = new BehaviorSubject(undefined); + this.dbTimeZone = DateUtils.moment().tz(); + this.showRecorder = true; + this.showObservers = true; + this.canCopyLocally = false; + this.showToolbar = true; + this.showQualityForm = true; + this.showOptionsMenu = true; + this.toolbarColor = 'primary'; + this.defaultBackHref = '/observations'; + // FOR DEV ONLY ---- + this.debug = !environment.production; + } + get table() { + return this.$table.value; + } + ngOnInit() { + super.ngOnInit(); + this.registerSubscription(this.configService.config.subscribe(config => { + if (!config) + return; + this.showRecorder = config.getPropertyAsBoolean(DATA_CONFIG_OPTIONS.SHOW_RECORDER); + this.dbTimeZone = config.getProperty(CORE_CONFIG_OPTIONS.DB_TIMEZONE); + this.markForCheck(); + })); + // Detect embedded mode, from route params + this.registerSubscription(this.route.queryParams + .pipe(first()) + .subscribe(queryParams => { + // Manage embedded mode + const embedded = toBoolean(queryParams['embedded'], false); + if (embedded) { + this.showLandingTab = false; + this.showOptionsMenu = false; + this.showQualityForm = false; + this.autoOpenNextTab = false; // Keep first tab + this.toolbarColor = 'secondary'; + this.markForCheck(); + } + })); + } + updateView(data, opts) { + //return super.updateView(Object.freeze(data), opts); + return super.updateView(data, opts); + } + updateViewState(data, opts) { + super.updateViewState(data); + // Update tabs state (show/hide) + this.updateTabsState(data); + if (this.aggregatedLandingsTable) + this.aggregatedLandingsTable.updateCanEditDelete(isNotNil(data.validationDate)); + } + updateTabsState(data) { + // Enable landings tab + this.showLandingTab = this.showLandingTab || (!this.isNewData || this.isOnFieldMode); + // INFO CLT : #IMAGINE-614 / Set form to dirty in creation in order to manager errors on silent save (as done for update) + if (this.isNewData && this.isOnFieldMode) { + this.markAsDirty(); + } + // Move to second tab + if (this.showLandingTab && this.autoOpenNextTab && !this.isNewData && this.selectedTabIndex === 0) { + this.selectedTabIndex = 1; + this.tabGroup.realignInkBar(); + this.autoOpenNextTab = false; // Should switch only once + } + } + onOpenLanding(row) { + return __awaiter(this, void 0, void 0, function* () { + if (!row) + return; + const saved = this.isOnFieldMode && this.dirty + // If on field mode: try to save silently + ? yield this.save(undefined) + // If desktop mode: ask before save + : yield this.saveIfDirtyAndConfirm(); + if (!saved) + return; // Cannot save + this.markAsLoading(); + try { + yield this.router.navigateByUrl(`/observations/${this.data.id}/${this.landingEditor}/${row.currentData.id}`); + } + finally { + this.markAsLoaded(); + } + }); + } + onNewLanding(event) { + return __awaiter(this, void 0, void 0, function* () { + const saved = this.isOnFieldMode && this.dirty + // If on field mode: try to save silently + ? yield this.save(event) + // If desktop mode: ask before save + : yield this.saveIfDirtyAndConfirm(); + if (!saved) + return; // Cannot save + this.markAsLoading(); + try { + // Add landing using vessels modal + if (this.addLandingUsingHistoryModal) { + const vessel = yield this.openSelectVesselModal(); + if (vessel && this.landingsTable) { + const rankOrder = ((yield this.landingsTable.getMaxRankOrderOnVessel(vessel)) || 0) + 1; + yield this.router.navigateByUrl(`/observations/${this.data.id}/${this.landingEditor}/new?vessel=${vessel.id}&rankOrder=${rankOrder}`); + } + } + // Create landing without vessel selection + else { + const rankOrder = ((yield this.landingsTable.getMaxRankOrder()) || 0) + 1; + yield this.router.navigateByUrl(`/observations/${this.data.id}/${this.landingEditor}/new?rankOrder=${rankOrder}`); + } + } + finally { + this.markAsLoaded(); + } + }); + } + onNewAggregatedLanding(event) { + return __awaiter(this, void 0, void 0, function* () { + const saved = this.isOnFieldMode && this.dirty + // If on field mode: try to save silently + ? yield this.save(event) + // If desktop mode: ask before save + : yield this.saveIfDirtyAndConfirm(); + if (!saved) + return; // Cannot save + this.markAsLoading(); + try { + const vessel = yield this.openSelectVesselModal(true); + if (vessel && this.aggregatedLandingsTable) { + yield this.aggregatedLandingsTable.addAggregatedRow(vessel); + } + } + finally { + this.markAsLoaded(); + } + }); + } + onNewTrip(row) { + return __awaiter(this, void 0, void 0, function* () { + const saved = this.isOnFieldMode && this.dirty + // If on field mode: try to save silently + ? yield this.save(undefined) + // If desktop mode: ask before save + : yield this.saveIfDirtyAndConfirm(); + if (!saved) + return; // Cannot save + this.markAsLoading(); + try { + const landing = row.currentData; + yield this.router.navigateByUrl(`/observations/${this.data.id}/${this.landingEditor}/new?vessel=${landing.vesselSnapshot.id}&landing=${landing.id}`); + } + finally { + this.markAsLoaded(); + } + }); + } + onOpenTrip(row) { + return __awaiter(this, void 0, void 0, function* () { + const saved = this.isOnFieldMode && this.dirty + // If on field mode: try to save silently + ? yield this.save(undefined) + // If desktop mode: ask before save + : yield this.saveIfDirtyAndConfirm(); + if (!saved) + return; // Cannot save + this.markAsLoading(); + try { + yield this.router.navigateByUrl(`/observations/${this.data.id}/${this.landingEditor}/${row.currentData.tripId}`); + } + finally { + this.markAsLoaded(); + } + }); + } + openSelectVesselModal(excludeExistingVessels) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const programLabel = ((_a = this.aggregatedLandingsTable) === null || _a === void 0 ? void 0 : _a.programLabel) || this.programLabel || this.data.program.label; + if (!this.data.startDateTime || !programLabel) { + throw new Error('Root entity has no program and start date. Cannot open select vessels modal'); + } + // Prepare vessel filter's value + const excludeVesselIds = (toBoolean(excludeExistingVessels, false) && this.aggregatedLandingsTable + && (yield this.aggregatedLandingsTable.vesselIdsAlreadyPresent())) || []; + const showOfflineVessels = EntityUtils.isLocal(this.data) && (yield this.vesselService.countAll({ synchronizationStatus: 'DIRTY' })) > 0; + const defaultVesselSynchronizationStatus = this.network.offline || showOfflineVessels ? 'DIRTY' : 'SYNC'; + // Prepare landing's filter + const startDate = this.data.startDateTime.clone().add(-15, 'days'); + const endDate = this.data.startDateTime.clone(); + const landingFilter = LandingFilter.fromObject({ + programLabel, + startDate, + endDate, + locationId: ReferentialUtils.isNotEmpty(this.data.location) ? this.data.location.id : undefined, + groupByVessel: (this.landingsTable && this.landingsTable.isTripDetailEditor) || (isNotNil(this.aggregatedLandingsTable)), + excludeVesselIds, + synchronizationStatus: 'SYNC' // only remote entities. This is required to read 'Remote#LandingVO' local storage + }); + const modal = yield this.modalCtrl.create({ + component: SelectVesselsForDataModal, + componentProps: { + allowMultiple: false, + landingFilter, + vesselFilter: { + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE], + onlyWithRegistration: true + }, + allowAddNewVessel: this.allowAddNewVessel, + showVesselTypeColumn: this.showVesselType, + showBasePortLocationColumn: this.showVesselBasePortLocation, + showSamplesCountColumn: (_b = this.landingsTable) === null || _b === void 0 ? void 0 : _b.showSamplesCountColumn, + defaultVesselSynchronizationStatus, + showOfflineVessels, + maxDateVesselRegistration: endDate, + }, + keyboardClose: true, + cssClass: 'modal-large' + }); + // Open the modal + yield modal.present(); + // Wait until closed + const { data } = yield modal.onDidDismiss(); + // If modal return a landing, use it + if (data && data[0] instanceof Landing) { + console.debug('[observed-location] Vessel selection modal result:', data); + return data[0].vesselSnapshot; + } + if (data && data[0] instanceof VesselSnapshot) { + console.debug('[observed-location] Vessel selection modal result:', data); + const vessel = data[0]; + if (excludeVesselIds.includes(data.id)) { + yield Alerts.showError('AGGREGATED_LANDING.VESSEL_ALREADY_PRESENT', this.alertCtrl, this.translate); + return; + } + return vessel; + } + else { + console.debug('[observed-location] Vessel selection modal was cancelled'); + } + }); + } + addRow(event) { + if (this.landingsTable) { + this.landingsTable.addRow(event); + } + else if (this.aggregatedLandingsTable) { + this.aggregatedLandingsTable.addRow(event); + } + } + openReport(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.dirty) { + const data = yield this.saveAndGetDataIfValid(); + if (!data) + return; // Cancel + } + return this.router.navigateByUrl(this.computePageUrl(this.data.id) + '/report'); + }); + } + copyLocally() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.data) + return; + // Copy the trip + yield this.dataService.copyLocallyById(this.data.id, { withLanding: true, displaySuccessToast: true }); + }); + } + /* -- protected methods -- */ + setProgram(program) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!program) + return; // Skip + if (this.debug) + console.debug(`[observed-location] Program ${program.label} loaded, with properties: `, program.properties); + // Update the context + if (this.observedLocationContext.program !== program) { + console.debug('TODO setting context program', program.label); + this.observedLocationContext.setValue('program', program); + } + try { + this.observedLocationForm.showEndDateTime = program.getPropertyAsBoolean(ProgramProperties.OBSERVED_LOCATION_END_DATE_TIME_ENABLE); + this.observedLocationForm.showStartTime = program.getPropertyAsBoolean(ProgramProperties.OBSERVED_LOCATION_START_TIME_ENABLE); + this.observedLocationForm.locationLevelIds = program.getPropertyAsNumbers(ProgramProperties.OBSERVED_LOCATION_LOCATION_LEVEL_IDS); + this.observedLocationForm.showObservers = program.getPropertyAsBoolean(ProgramProperties.OBSERVED_LOCATION_OBSERVERS_ENABLE); + if (!this.observedLocationForm.showObservers && ((_a = this.data) === null || _a === void 0 ? void 0 : _a.observers)) { + this.data.observers = []; // make sure to reset data observers, if any + } + const aggregatedLandings = program.getPropertyAsBoolean(ProgramProperties.OBSERVED_LOCATION_AGGREGATED_LANDINGS_ENABLE); + if (aggregatedLandings) { + // Force some date properties + this.observedLocationForm.timezone = this.dbTimeZone; + this.observedLocationForm.showEndDateTime = true; + this.observedLocationForm.showStartTime = false; + this.observedLocationForm.showEndTime = false; + this.observedLocationForm.startDateDay = program.getPropertyAsInt(ProgramProperties.OBSERVED_LOCATION_AGGREGATED_LANDINGS_START_DAY); + this.observedLocationForm.forceDurationDays = program.getPropertyAsInt(ProgramProperties.OBSERVED_LOCATION_AGGREGATED_LANDINGS_DAY_COUNT); + } + else { + this.observedLocationForm.timezone = null; // Use local TZ for dates + } + this.allowAddNewVessel = program.getPropertyAsBoolean(ProgramProperties.OBSERVED_LOCATION_CREATE_VESSEL_ENABLE); + this.addLandingUsingHistoryModal = program.getPropertyAsBoolean(ProgramProperties.OBSERVED_LOCATION_SHOW_LANDINGS_HISTORY); + let i18nSuffix = program.getProperty(ProgramProperties.I18N_SUFFIX); + i18nSuffix = i18nSuffix !== 'legacy' ? i18nSuffix : ''; + this.i18nContext.suffix = i18nSuffix; + this.enableReport = program.getPropertyAsBoolean(ProgramProperties.OBSERVED_LOCATION_REPORT_ENABLE); + this.landingEditor = program.getProperty(ProgramProperties.LANDING_EDITOR); + this.showVesselType = program.getPropertyAsBoolean(ProgramProperties.VESSEL_TYPE_ENABLE); + this.showVesselBasePortLocation = program.getPropertyAsBoolean(ProgramProperties.LANDING_VESSEL_BASE_PORT_LOCATION_ENABLE); + this.$landingTableType.next(aggregatedLandings ? 'aggregated' : 'legacy'); + // Wait the expected table (set using ngInit - see template) + const table$ = this.$table.pipe(filter(t => aggregatedLandings ? t instanceof AggregatedLandingsTable : t instanceof LandingsTable)); + const table = yield firstNotNilPromise(table$, { stop: this.destroySubject }); + // Configure table + if (aggregatedLandings) { + console.debug('[observed-location] Init aggregated landings table:', table); + const aggregatedLandingsTable = table; + aggregatedLandingsTable.timeZone = this.dbTimeZone; + aggregatedLandingsTable.nbDays = program.getPropertyAsInt(ProgramProperties.OBSERVED_LOCATION_AGGREGATED_LANDINGS_DAY_COUNT); + aggregatedLandingsTable.programLabel = program.getProperty(ProgramProperties.OBSERVED_LOCATION_AGGREGATED_LANDINGS_PROGRAM); + } + else { + console.debug('[observed-location] Init landings table:', table); + const landingsTable = table; + landingsTable.i18nColumnSuffix = i18nSuffix; + landingsTable.detailEditor = this.landingEditor; + landingsTable.showDateTimeColumn = program.getPropertyAsBoolean(ProgramProperties.LANDING_DATE_TIME_ENABLE); + landingsTable.showVesselTypeColumn = this.showVesselType; + landingsTable.showVesselBasePortLocationColumn = this.showVesselBasePortLocation; + landingsTable.showObserversColumn = program.getPropertyAsBoolean(ProgramProperties.LANDING_OBSERVERS_ENABLE); + landingsTable.showCreationDateColumn = program.getPropertyAsBoolean(ProgramProperties.LANDING_CREATION_DATE_ENABLE); + landingsTable.showRecorderPersonColumn = program.getPropertyAsBoolean(ProgramProperties.LANDING_RECORDER_PERSON_ENABLE); + landingsTable.showLocationColumn = program.getPropertyAsBoolean(ProgramProperties.LANDING_LOCATION_ENABLE); + landingsTable.showSamplesCountColumn = program.getPropertyAsBoolean(ProgramProperties.LANDING_SAMPLES_COUNT_ENABLE); + landingsTable.includedPmfmIds = program.getPropertyAsNumbers(ProgramProperties.LANDING_COLUMNS_PMFM_IDS); + this.showLandingTab = true; + } + this.addChildForm(() => table); + this.markAsReady(); + // Listen program, to reload if changes + if (this.network.online) + this.startListenProgramRemoteChanges(program); + } + catch (err) { + this.setError(err); + } + }); + } + onNewEntity(data, options) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + console.debug('[observed-location] New entity: applying defaults...'); + // If is on field mode, fill default values + if (this.isOnFieldMode) { + if (!this.observedLocationForm.showStartTime && this.observedLocationForm.timezone) { + data.startDateTime = moment().tz(this.observedLocationForm.timezone) + .startOf('day').utc(); + } + else { + data.startDateTime = moment(); + } + // Set current user as observers (if enable) + if (this.showObservers) { + const user = this.accountService.account.asPerson(); + data.observers.push(user); + } + this.showLandingTab = true; + // Listen first opening the operations tab, then save + this.registerSubscription(this.tabGroup.selectedTabChange + .pipe(filter(event => event.index === ObservedLocationPageTabs.LANDINGS), first(), tap(() => this.save())) + .subscribe()); + } + // Fill defaults, from table's filter. Implemented for all usage mode, to fix #IMAGINE-648 + const tableId = this.queryParams['tableId']; + const searchFilter = tableId && this.settings.getPageSettings(tableId, ObservedLocationsPageSettingsEnum.FILTER_KEY); + if (searchFilter) { + // Synchronization status + if (searchFilter.synchronizationStatus && searchFilter.synchronizationStatus !== 'SYNC') { + data.synchronizationStatus = 'DIRTY'; + } + // program + if (searchFilter.program && searchFilter.program.label) { + data.program = ReferentialRef.fromObject(searchFilter.program); + } + // Location + if (searchFilter.location) { + data.location = ReferentialRef.fromObject(searchFilter.location); + } + } + // Set contextual program, if any + if (!data.program) { + const contextualProgram = this.context.getValue('program'); + if (contextualProgram === null || contextualProgram === void 0 ? void 0 : contextualProgram.label) { + data.program = ReferentialRef.fromObject(contextualProgram); + } + } + // Propagate program + const programLabel = (_a = data.program) === null || _a === void 0 ? void 0 : _a.label; + this.programLabel = programLabel; + // Enable forms (do not wait for program load) + if (!programLabel) + this.markAsReady(); + }); + } + onEntityLoaded(data, options) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const programLabel = (_a = data.program) === null || _a === void 0 ? void 0 : _a.label; + if (programLabel) + this.programLabel = programLabel; + this.canCopyLocally = this.accountService.isAdmin() && EntityUtils.isRemoteId(data === null || data === void 0 ? void 0 : data.id); + }); + } + setValue(data) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + console.info('[observed-location] Setting data', data); + if (!this.isNewData) { + // Wait ready only on existing data (must not wait table because program is not set yet) + yield this.ready(); + } + // Set data to form + this.observedLocationForm.value = data; + if (!this.isNewData) { + // Propagate to table parent + (_a = this.table) === null || _a === void 0 ? void 0 : _a.setParent(data); + } + }); + } + getValue() { + const _super = Object.create(null, { + getValue: { get: () => super.getValue } + }); + return __awaiter(this, void 0, void 0, function* () { + return yield _super.getValue.call(this); + }); + } + get form() { + return this.observedLocationForm.form; + } + computeUsageMode(data) { + return this.settings.isUsageMode('FIELD') || data.synchronizationStatus === 'DIRTY' ? 'FIELD' : 'DESK'; + } + registerForms() { + this.addChildForms([ + this.observedLocationForm, + // Use landings table as child, only if editable + //() => this.landingsTable?.canEdit && this.landingsTable, + //() => this.aggregatedLandingsTable + ]); + } + computeTitle(data) { + return __awaiter(this, void 0, void 0, function* () { + // new data + if (this.isNewData) { + return this.translate.get('OBSERVED_LOCATION.NEW.TITLE').toPromise(); + } + // Make sure page is ready (e.g. i18nContext has been loaded, in setProgram()) + yield this.ready(); + // Existing data + return this.translateContext.get(`OBSERVED_LOCATION.EDIT.TITLE`, this.i18nContext.suffix, { + location: data.location && (data.location.name || data.location.label), + dateTime: data.startDateTime && this.dateFormat.transform(data.startDateTime) + }).toPromise(); + }); + } + computePageHistory(title) { + const _super = Object.create(null, { + computePageHistory: { get: () => super.computePageHistory } + }); + return __awaiter(this, void 0, void 0, function* () { + return Object.assign(Object.assign({}, (yield _super.computePageHistory.call(this, title))), { icon: 'location' }); + }); + } + onEntitySaved(data) { + const _super = Object.create(null, { + onEntitySaved: { get: () => super.onEntitySaved } + }); + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + yield _super.onEntitySaved.call(this, data); + // Save landings table, when editable + if (((_a = this.landingsTable) === null || _a === void 0 ? void 0 : _a.dirty) && this.landingsTable.canEdit) { + yield this.landingsTable.save(); + } + else if ((_b = this.aggregatedLandingsTable) === null || _b === void 0 ? void 0 : _b.dirty) { + yield this.aggregatedLandingsTable.save(); + } + }); + } + getFirstInvalidTabIndex() { + var _a; + return this.observedLocationForm.invalid ? 0 + : (((_a = this.table) === null || _a === void 0 ? void 0 : _a.invalid) ? 1 + : -1); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + ViewChild('observedLocationForm', { static: true }), + __metadata("design:type", ObservedLocationForm) +], ObservedLocationPage.prototype, "observedLocationForm", void 0); +__decorate([ + ViewChild('landingsTable'), + __metadata("design:type", LandingsTable) +], ObservedLocationPage.prototype, "landingsTable", void 0); +__decorate([ + ViewChild('aggregatedLandingsTable'), + __metadata("design:type", AggregatedLandingsTable) +], ObservedLocationPage.prototype, "aggregatedLandingsTable", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationPage.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationPage.prototype, "showQualityForm", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationPage.prototype, "showOptionsMenu", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], ObservedLocationPage.prototype, "toolbarColor", void 0); +ObservedLocationPage = ObservedLocationPage_1 = __decorate([ + Component({ + selector: 'app-observed-location-page', + templateUrl: './observed-location.page.html', + styleUrls: ['./observed-location.page.scss'], + animations: [fadeInOutAnimation], + changeDetection: ChangeDetectionStrategy.OnPush, + providers: [ + { provide: APP_DATA_ENTITY_EDITOR, useExisting: ObservedLocationPage_1 } + ], + }), + __metadata("design:paramtypes", [Injector, + ObservedLocationService, + ModalController, + ConfigService, + AccountService, + VesselService, + TranslateContextService, + ContextService, + ObservedLocationContextService, + NetworkService]) +], ObservedLocationPage); +export { ObservedLocationPage }; +//# sourceMappingURL=observed-location.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/observed-location.page.js.map b/out-tsc/app/app/trip/observedlocation/observed-location.page.js.map new file mode 100644 index 000000000..da29a6833 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/observed-location.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"observed-location.page.js","sourceRoot":"","sources":["../../../../../src/app/trip/observedlocation/observed-location.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/observed-location.service.js b/out-tsc/app/app/trip/observedlocation/observed-location.service.js new file mode 100644 index 000000000..cc0403da0 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/observed-location.service.js @@ -0,0 +1,1032 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { Injectable, Injector, Optional } from '@angular/core'; +import { AccountService, AppFormUtils, arrayDistinct, chainPromises, EntitiesStorage, Entity, EntityUtils, FormErrorTranslator, GraphqlService, isEmptyArray, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, JobUtils, NetworkService, ProgressBarService, Toasts, toNumber, } from '@sumaris-net/ngx-components'; +import { gql } from '@apollo/client/core'; +import { filter, map } from 'rxjs/operators'; +import { COPY_LOCALLY_AS_OBJECT_OPTIONS, MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE, SAVE_AS_OBJECT_OPTIONS, } from '@app/data/services/model/data-entity.model'; +import { ObservedLocation } from './observed-location.model'; +import { RootDataEntityUtils } from '@app/data/services/model/root-data-entity.model'; +import { LandingFragments, LandingService } from '../landing/landing.service'; +import { RootDataSynchroService } from '@app/data/services/root-data-synchro-service.class'; +import { Landing } from '../landing/landing.model'; +import { ObservedLocationValidatorService } from './observed-location.validator'; +import { environment } from '@environments/environment'; +import { VesselSnapshotFragments } from '@app/referential/services/vessel-snapshot.service'; +import { OBSERVED_LOCATION_FEATURE_NAME } from '../trip.config'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { VESSEL_FEATURE_NAME } from '@app/vessel/services/config/vessel.config'; +import { LandingFilter } from '../landing/landing.filter'; +import { ObservedLocationFilter } from './observed-location.filter'; +import { SampleFilter } from '@app/trip/sample/sample.filter'; +import { TripFragments } from '@app/trip/trip/trip.service'; +import { DataErrorCodes } from '@app/data/services/errors'; +import { TripErrorCodes } from '@app/trip/trip.errors'; +import { VesselService } from '@app/vessel/services/vessel-service'; +import { VesselSnapshot } from '@app/referential/services/model/vessel-snapshot.model'; +import { AggregatedLandingService } from '@app/trip/aggregated-landing/aggregated-landing.service'; +import moment from 'moment'; +import { ProgramUtils } from '@app/referential/services/model/program.model'; +import { Trip } from '@app/trip/trip/trip.model'; +import { SynchronizationStatusEnum } from '@app/data/services/model/model.utils'; +import { TrashRemoteService } from '@app/core/services/trash-remote.service'; +import { ToastController } from '@ionic/angular'; +import { TranslateService } from '@ngx-translate/core'; +import { ProgressionModel } from '@app/shared/progression/progression.model'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { MEASUREMENT_VALUES_PMFM_ID_REGEXP } from '@app/data/measurement/measurement.model'; +import { DataCommonFragments, DataFragments } from "@app/trip/common/data.fragments"; +export const ObservedLocationFragments = { + lightObservedLocation: gql `fragment LightObservedLocationFragment on ObservedLocationVO { + id + program { + id + label + } + startDateTime + endDateTime + creationDate + updateDate + controlDate + validationDate + qualificationDate + qualityFlagId + comments + location { + ...LocationFragment + } + recorderDepartment { + ...LightDepartmentFragment + } + recorderPerson { + ...LightPersonFragment + } + observers { + ...LightPersonFragment + } + } + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + ${DataCommonFragments.location} + `, + observedLocation: gql `fragment ObservedLocationFragment on ObservedLocationVO { + id + program { + id + label + } + startDateTime + endDateTime + creationDate + updateDate + controlDate + validationDate + qualificationDate + qualityFlagId + comments + location { + ...LocationFragment + } + recorderDepartment { + ...LightDepartmentFragment + } + recorderPerson { + ...LightPersonFragment + } + observers { + ...LightPersonFragment + } + measurementValues + }` +}; +// Load query +const ObservedLocationQueries = { + load: gql `query ObservedLocation($id: Int!) { + data: observedLocation(id: $id) { + ...ObservedLocationFragment + } + } + ${ObservedLocationFragments.observedLocation} + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + ${DataCommonFragments.location}`, + loadAll: gql `query ObservedLocations($filter: ObservedLocationFilterVOInput, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $trash: Boolean){ + data: observedLocations(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, trash: $trash){ + ...LightObservedLocationFragment + } + } + ${ObservedLocationFragments.lightObservedLocation}`, + loadAllWithTotal: gql `query ObservedLocations($filter: ObservedLocationFilterVOInput, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $trash: Boolean){ + data: observedLocations(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, trash: $trash){ + ...LightObservedLocationFragment + } + total: observedLocationsCount(filter: $filter, trash: $trash) + } + ${ObservedLocationFragments.lightObservedLocation}`, + countSamples: gql `query SamplesCountQuery($filter: SampleFilterVOInput!){ + total: samplesCount(filter: $filter) + }` +}; +const ObservedLocationMutations = { + save: gql `mutation SaveObservedLocation($data: ObservedLocationVOInput!, $options: ObservedLocationSaveOptionsInput!){ + data: saveObservedLocation(observedLocation: $data, options: $options){ + ...ObservedLocationFragment + } + } + ${ObservedLocationFragments.observedLocation} + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + ${DataCommonFragments.location}`, + saveWithLandings: gql `mutation SaveObservedLocationWithLandings($data: ObservedLocationVOInput!, $options: ObservedLocationSaveOptionsInput!){ + data: saveObservedLocation(observedLocation: $data, options: $options){ + ...ObservedLocationFragment + landings { + ...LandingFragment + } + } + } + ${ObservedLocationFragments.observedLocation} + ${LandingFragments.landing} + ${TripFragments.embeddedLandedTrip} + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + ${DataCommonFragments.location} + ${VesselSnapshotFragments.vesselSnapshot} + ${DataFragments.sample}`, + deleteAll: gql `mutation DeleteObservedLocations($ids:[Int]!){ + deleteObservedLocations(ids: $ids) + }`, + terminate: gql `mutation TerminateObservedLocation($data: ObservedLocationVOInput!, $options: DataControlOptionsInput){ + data: controlObservedLocation(observedLocation: $data, options: $options) { + ...ObservedLocationFragment + } + } + ${ObservedLocationFragments.observedLocation} + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + ${DataCommonFragments.location}`, + validate: gql `mutation ValidateObservedLocation($data: ObservedLocationVOInput!, $options: DataValidateOptionsInput) { + data: validateObservedLocation(observedLocation: $data, options: $options) { + ...ObservedLocationFragment + } + } + ${ObservedLocationFragments.observedLocation} + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + ${DataCommonFragments.location}`, + unvalidate: gql `mutation UnvalidateObservedLocation($data: ObservedLocationVOInput!, $options: DataValidateOptionsInput) { + data: unvalidateObservedLocation(observedLocation: $data, options: $options) { + ...ObservedLocationFragment + } + } + ${ObservedLocationFragments.observedLocation} + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + ${DataCommonFragments.location}`, + qualify: gql `mutation QualifyObservedLocation($data: ObservedLocationVOInput!){ + data: qualifyObservedLocation(observedLocation: $data){ + ...ObservedLocationFragment + } + } + ${ObservedLocationFragments.observedLocation} + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + ${DataCommonFragments.location}` +}; +const ObservedLocationSubscriptions = { + listenChanges: gql `subscription UpdateObservedLocation($id: Int!, $interval: Int){ + data: updateObservedLocation(id: $id, interval: $interval) { + ...LightObservedLocationFragment + } + } + ${ObservedLocationFragments.lightObservedLocation}` +}; +let ObservedLocationService = class ObservedLocationService extends RootDataSynchroService { + constructor(injector, graphql, accountService, network, entities, validatorService, vesselService, landingService, aggregatedLandingService, trashRemoteService, progressBarService, formErrorTranslator, translate, toastController) { + super(injector, ObservedLocation, ObservedLocationFilter, { + queries: ObservedLocationQueries, + mutations: ObservedLocationMutations, + subscriptions: ObservedLocationSubscriptions + }); + this.graphql = graphql; + this.accountService = accountService; + this.network = network; + this.entities = entities; + this.validatorService = validatorService; + this.vesselService = vesselService; + this.landingService = landingService; + this.aggregatedLandingService = aggregatedLandingService; + this.trashRemoteService = trashRemoteService; + this.progressBarService = progressBarService; + this.formErrorTranslator = formErrorTranslator; + this.translate = translate; + this.toastController = toastController; + this.loading = false; + this._featureName = OBSERVED_LOCATION_FEATURE_NAME; + // FOR DEV ONLY + this._debug = !environment.production; + if (this._debug) + console.debug('[observed-location-service] Creating service'); + } + watchAll(offset, size, sortBy, sortDirection, dataFilter, opts) { + // Load offline + const offlineData = this.network.offline || ((dataFilter === null || dataFilter === void 0 ? void 0 : dataFilter.synchronizationStatus) && dataFilter.synchronizationStatus !== 'SYNC') || false; + if (offlineData) { + return this.watchAllLocally(offset, size, sortBy, sortDirection, dataFilter, opts); + } + dataFilter = this.asFilter(dataFilter); + const variables = { + offset: offset || 0, + size: size || 20, + sortBy: sortBy || (opts && opts.trash ? 'updateDate' : 'startDateTime'), + sortDirection: sortDirection || (opts && opts.trash ? 'desc' : 'asc'), + trash: opts && opts.trash || false, + filter: dataFilter === null || dataFilter === void 0 ? void 0 : dataFilter.asPodObject() + }; + let now = Date.now(); + console.debug('[observed-location-service] Watching observed locations... using options:', variables); + const withTotal = (!opts || opts.withTotal !== false); + const query = withTotal ? this.queries.loadAllWithTotal : this.queries.loadAll; + return this.mutableWatchQuery({ + queryName: withTotal ? 'LoadAllWithTotal' : 'LoadAll', + query, + arrayFieldName: 'data', + totalFieldName: withTotal ? 'total' : undefined, + insertFilterFn: dataFilter === null || dataFilter === void 0 ? void 0 : dataFilter.asFilterFn(), + variables, + error: { code: DataErrorCodes.LOAD_ENTITIES_ERROR, message: 'ERROR.LOAD_ENTITIES_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || 'cache-and-network' + }) + .pipe(filter(() => !this.loading), map(({ data, total }) => { + const entities = (data || []).map(ObservedLocation.fromObject); + if (now) { + console.debug(`[observed-location-service] Loaded {${entities.length || 0}} observed locations in ${Date.now() - now}ms`, entities); + now = undefined; + } + return { data: entities, total }; + })); + } + watchAllLocally(offset, size, sortBy, sortDirection, dataFilter, opts) { + dataFilter = this.asFilter(dataFilter); + const variables = { + offset: offset || 0, + size: size || 20, + sortBy: sortBy || 'startDateTime', + sortDirection: sortDirection || 'asc', + filter: dataFilter && dataFilter.asFilterFn() + }; + console.debug('[observed-location-service] Watching local observed locations... using options:', variables); + return this.entities.watchAll(ObservedLocation.TYPENAME, variables) + .pipe(map(res => { + const data = (res && res.data || []).map(ObservedLocation.fromObject); + const total = res && isNotNil(res.total) ? res.total : undefined; + return { data, total }; + })); + } + load(id, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (isNil(id)) + throw new Error('Missing argument \'id\''); + const now = Date.now(); + if (this._debug) + console.debug(`[observed-location-service] Loading observed location {${id}}...`); + this.loading = true; + try { + let data; + // If local entity + if (id < 0) { + data = yield this.entities.load(id, ObservedLocation.TYPENAME); + if (!data) + throw { code: DataErrorCodes.LOAD_ENTITY_ERROR, message: 'ERROR.LOAD_ENTITY_ERROR' }; + if (opts && opts.withLanding) { + const { data: landings } = yield this.entities.loadAll(Landing.TYPENAME, { filter: LandingFilter.fromObject({ observedLocationId: id }).asFilterFn() }); + data = Object.assign(Object.assign({}, data), { landings }); + } + } + else { + const res = yield this.graphql.query({ + query: this.queries.load, + variables: { id }, + error: { code: DataErrorCodes.LOAD_ENTITY_ERROR, message: 'ERROR.LOAD_ENTITY_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || undefined + }); + data = res && res.data; + } + const entities = (!opts || opts.toEntity !== false) + ? ObservedLocation.fromObject(data) + : data; + if (id > 0 && entities && opts && opts.withLanding) { + entities.landings = (yield this.landingService.loadAllByObservedLocation({ observedLocationId: id })).data; + } + if (entities && this._debug) + console.debug(`[observed-location-service] Observed location #${id} loaded in ${Date.now() - now}ms`, entities); + return entities; + } + finally { + this.loading = false; + } + }); + } + hasOfflineData() { + const _super = Object.create(null, { + hasOfflineData: { get: () => super.hasOfflineData } + }); + return __awaiter(this, void 0, void 0, function* () { + const result = yield _super.hasOfflineData.call(this); + if (result) + return result; + const res = yield this.entities.loadAll(ObservedLocation.TYPENAME, { + offset: 0, + size: 0 + }); + return res && res.total > 0; + }); + } + listenChanges(id, opts) { + if (isNil(id)) + throw new Error('Missing argument \'id\' '); + // If local entity + if (EntityUtils.isLocalId(id)) { + if (this._debug) + console.debug(this._logPrefix + `Listening for local changes on ${this._logTypeName} {${id}}...`); + return this.entities.watchAll(ObservedLocation.TYPENAME, { offset: 0, size: 1, filter: (t) => t.id === id }) + .pipe(map(({ data }) => { + const json = isNotEmptyArray(data) && data[0]; + const entity = (!opts || opts.toEntity !== false) ? this.fromObject(json) : json; + // Set an updateDate, to force update detection + if (entity && this._debug) + console.debug(this._logPrefix + `${this._logTypeName} {${id}} updated locally !`, entity); + return entity; + })); + } + if (this._debug) + console.debug(`[observed-location-service] [WS] Listening changes for observedLocation {${id}}...`); + return this.graphql.subscribe({ + query: this.subscriptions.listenChanges, + fetchPolicy: opts && opts.fetchPolicy || undefined, + variables: { id, interval: toNumber(opts && opts.interval, 10) }, + error: { + code: DataErrorCodes.SUBSCRIBE_ENTITY_ERROR, + message: 'ERROR.SUBSCRIBE_ENTITY_ERROR' + } + }) + .pipe(map(({ data }) => { + const entity = data && ObservedLocation.fromObject(data); + if (entity && this._debug) + console.debug(`[observed-location-service] Observed location {${id}} updated on server !`, entity); + return entity; + })); + } + translateControlPath(path, opts) { + opts = Object.assign({ i18nPrefix: 'OBSERVED_LOCATION.EDIT.' }, opts); + // Translate PMFM fields + if (MEASUREMENT_VALUES_PMFM_ID_REGEXP.test(path) && opts.pmfms) { + const pmfmId = parseInt(path.split('.').pop()); + const pmfm = opts.pmfms.find(p => p.id === pmfmId); + return PmfmUtils.getPmfmName(pmfm); + } + // Default translation + return this.formErrorTranslator.translateControlPath(path, opts); + } + save(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + // If is a local entity: force a local save + if (RootDataEntityUtils.isLocal(entity)) { + return this.saveLocally(entity, opts); + } + opts = Object.assign({ withLanding: false }, opts); + const now = Date.now(); + if (this._debug) + console.debug('[observed-location-service] Saving an observed location...'); + // Prepare to save + this.fillDefaultProperties(entity); + // Reset quality properties + this.resetQualityProperties(entity); + // Transform into json + const json = this.asObject(entity, SAVE_AS_OBJECT_OPTIONS); + if (RootDataEntityUtils.isNew(entity)) + delete json.id; // Make to remove temporary id, before sending to graphQL + if (this._debug) + console.debug('[observed-location-service] Using minify object, to send:', json); + const variables = { + data: json, + options: { + withLanding: opts.withLanding + } + }; + const mutation = opts.withLanding ? ObservedLocationMutations.saveWithLandings : this.mutations.save; + yield this.graphql.mutate({ + mutation, + variables, + error: { code: DataErrorCodes.SAVE_ENTITY_ERROR, message: 'ERROR.SAVE_ENTITY_ERROR' }, + update: (proxy, { data }) => { + const savedEntity = data && data.data; + if (savedEntity !== entity) { + if (this._debug) + console.debug(`[observed-location-service] Observed location saved in ${Date.now() - now}ms`, entity); + this.copyIdAndUpdateDate(savedEntity, entity); + } + // Add to cache + if (RootDataEntityUtils.isNew(entity)) { + this.insertIntoMutableCachedQueries(proxy, { + queries: this.getLoadQueries(), + data: savedEntity + }); + } + } + }); + // Update date of children entities, if need (see IMAGINE-276) + if (!RootDataEntityUtils.isNew(entity)) { + yield this.updateChildrenDate(entity); + } + if (!opts || opts.emitEvent !== false) { + this.onSave.next([entity]); + } + return entity; + }); + } + saveAll(entities, opts) { + const _super = Object.create(null, { + saveAll: { get: () => super.saveAll } + }); + return __awaiter(this, void 0, void 0, function* () { + const result = yield _super.saveAll.call(this, entities, opts); + if (!opts || opts.emitEvent !== false) { + this.onSave.next(result); + } + return result; + }); + } + saveLocally(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (isNotNil(entity.id) && entity.id >= 0) + throw new Error('Must be a local entity'); + opts = Object.assign({ withLanding: false }, opts); + const isNew = isNil(entity.id); + this.fillDefaultProperties(entity); + // Reset quality properties + this.resetQualityProperties(entity); + // Make sure to fill id, with local ids + yield this.fillOfflineDefaultProperties(entity); + // Reset synchro status + entity.synchronizationStatus = 'DIRTY'; + // Extract landings (saved just after) + const landings = entity.landings; + delete entity.landings; + const jsonLocal = this.asObject(entity, MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE); + if (this._debug) + console.debug('[observed-location-service] [offline] Saving observed location locally...', jsonLocal); + // Save observed location locally + yield this.entities.save(jsonLocal, { entityName: ObservedLocation.TYPENAME }); + // Save landings + if (opts.withLanding && isNotEmptyArray(landings)) { + const program = yield this.programRefService.loadByLabel(entity.program.label); + const landingHasDateTime = program.getPropertyAsBoolean(ProgramProperties.LANDING_DATE_TIME_ENABLE); + landings.forEach(l => { + l.id = null; // Clean ID, to force new ids + l.observedLocationId = entity.id; // Link to parent entity + l.updateDate = undefined; + // Copy date to landing and samples (IMAGINE-276) + if (!landingHasDateTime) { + l.dateTime = entity.startDateTime; + (l.samples || []).forEach(s => { + s.sampleDate = l.dateTime; + }); + } + }); + // Save landings + entity.landings = yield this.landingService.saveAll(landings, { observedLocationId: entity.id }); + } + // Update date of children entities, if need (see IMAGINE-276) + else if (!opts.withLanding && !isNew) { + yield this.updateChildrenDate(entity); + } + if (!opts || opts.emitEvent !== false) { + this.onSave.next([entity]); + } + return entity; + }); + } + copyLocally(source, opts) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[observed-location-service] Copy trip locally...', source); + opts = Object.assign({ keepRemoteId: false, deletedFromTrash: false, withLanding: true }, opts); + const isLocal = RootDataEntityUtils.isLocal(source); + // Create a new entity (without id and updateDate) + const json = this.asObject(source, Object.assign(Object.assign({}, COPY_LOCALLY_AS_OBJECT_OPTIONS), { keepRemoteId: opts.keepRemoteId })); + json.synchronizationStatus = SynchronizationStatusEnum.DIRTY; // To make sure it will be saved locally + // Save + const target = yield this.saveLocally(ObservedLocation.fromObject(json), opts); + // Remove from the local trash + if (opts.deletedFromTrash) { + if (isLocal) { + yield this.entities.deleteFromTrash(source, { entityName: Trip.TYPENAME }); + } + else { + yield this.trashRemoteService.delete(Trip.ENTITY_NAME, source.id); + } + } + if (opts.displaySuccessToast) { + yield this.showToast({ message: 'SOCIAL.USER_EVENT.INFO.COPIED_LOCALLY', type: 'info' }); + } + return target; + }); + } + copyLocallyById(id, opts) { + return __awaiter(this, void 0, void 0, function* () { + // Load existing data + const source = yield this.load(id, Object.assign(Object.assign({}, opts), { fetchPolicy: 'network-only' })); + // Copy remote trip to local storage + return yield this.copyLocally(source, opts); + }); + } + /** + * Delete many observations + * + * @param entities + * @param opts + */ + deleteAll(entities, opts) { + return __awaiter(this, void 0, void 0, function* () { + // Delete local entities + const localEntities = entities === null || entities === void 0 ? void 0 : entities.filter(RootDataEntityUtils.isLocal); + if (isNotEmptyArray(localEntities)) { + return this.deleteAllLocally(localEntities, opts); + } + const remoteEntities = entities === null || entities === void 0 ? void 0 : entities.filter(EntityUtils.isRemote); + const ids = remoteEntities === null || remoteEntities === void 0 ? void 0 : remoteEntities.map(t => t.id); + if (isEmptyArray(ids)) + return; // stop if empty + const now = Date.now(); + if (this._debug) + console.debug(`[observed-location-service] Deleting {${ids.join(',')}}`, ids); + yield this.graphql.mutate({ + mutation: this.mutations.deleteAll, + variables: { ids }, + update: (proxy) => { + // Update the cache + this.removeFromMutableCachedQueriesByIds(proxy, { + queries: this.getLoadQueries(), + ids + }); + if (this._debug) + console.debug(`[observed-location-service] Observed locations deleted in ${Date.now() - now}ms`); + this.onDelete.next(remoteEntities); + } + }); + }); + } + /** + * Delete many local entities + * + * @param entities + * @param opts + */ + deleteAllLocally(entities, opts) { + return __awaiter(this, void 0, void 0, function* () { + // Get local entity ids, then delete id + const localEntities = entities && entities + .filter(RootDataEntityUtils.isLocal); + // Delete, one by one + yield chainPromises((localEntities || []) + .map(entity => () => this.deleteLocally(entity, opts))); + }); + } + deleteLocally(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + const trash = !opts || opts !== false; + const trashUpdateDate = trash && moment(); + if (this._debug) + console.debug(`[observedLocation-service] Deleting observed location #${entity.id}... {trash: ${trash}`); + try { + // Load children + const { data: landings } = yield this.landingService.loadAllByObservedLocation({ observedLocationId: entity.id }, { fullLoad: true /*need to keep content in trash*/, computeRankOrder: false }); + yield this.entities.delete(entity, { entityName: ObservedLocation.TYPENAME }); + this.onDelete.next([entity]); + if (isNotNil(landings)) { + yield this.landingService.deleteAll(landings, { trash: false }); + } + if (trash) { + // Fill observedLocation's operation, before moving it to trash + entity.landings = landings; + entity.updateDate = trashUpdateDate; + const json = entity.asObject(Object.assign(Object.assign({}, MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE), { keepLocalId: false })); + // Add to trash + yield this.entities.saveToTrash(json, { entityName: ObservedLocation.TYPENAME }); + } + } + catch (err) { + console.error('Error during observation location deletion: ', err); + throw { code: DataErrorCodes.DELETE_ENTITY_ERROR, message: 'ERROR.DELETE_ENTITY_ERROR' }; + } + this.onDelete.next([entity]); + }); + } + control(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + const now = this._debug && Date.now(); + const maxProgression = toNumber(opts === null || opts === void 0 ? void 0 : opts.maxProgression, 100); + opts = Object.assign(Object.assign({}, opts), { maxProgression }); + opts.progression = opts.progression || new ProgressionModel({ total: maxProgression }); + const progressionStep = maxProgression / 20; + if (this._debug) + console.debug(`[observed-location-service] Control {${entity.id}} ...`); + opts = yield this.fillControlOptions(entity, opts); + // If control has been disabled (in program's option) + if (!opts.enable) { + console.info(`[observed-location-service] Skip control {${entity.id}} (disabled by program option)...`); + return undefined; + } // Skip + const form = this.validatorService.getFormGroup(entity, opts); + if (!form.valid) { + // Wait end of validation (e.g. async validators) + yield AppFormUtils.waitWhilePending(form); + // Get form errors + if (form.invalid) { + const errors = AppFormUtils.getFormErrors(form); + if (this._debug) + console.debug(`[observed-location-service] Control {${entity.id}} [INVALID] in ${Date.now() - now}ms`, errors); + return { + message: 'COMMON.FORM.HAS_ERROR', + details: { + errors, + }, + }; + } + } + if (this._debug) + console.debug(`[observed-location-service] Control {${entity.id}} [OK] in ${Date.now() - now}ms`); + if (opts === null || opts === void 0 ? void 0 : opts.progression) + opts.progression.increment(progressionStep); + // Get if meta operation and the program label for sub operations + const subProgramLabel = opts.program.getProperty(ProgramProperties.OBSERVED_LOCATION_AGGREGATED_LANDINGS_PROGRAM); + // If meta, control sub observed location + if (isNotNilOrBlank(subProgramLabel)) { + const nbDays = opts.program.getPropertyAsInt(ProgramProperties.OBSERVED_LOCATION_AGGREGATED_LANDINGS_DAY_COUNT); + const childrenFilter = ObservedLocationFilter.fromObject({ + programLabel: subProgramLabel, + startDate: entity.startDateTime, + endDate: entity.endDateTime || entity.startDateTime.clone().add(nbDays, 'day'), + }); + const errors = yield this.controlAllByFilter(childrenFilter, { + progression: opts === null || opts === void 0 ? void 0 : opts.progression, + maxProgression: maxProgression - progressionStep, + }); + if (errors) { + return { + message: 'OBSERVED_LOCATION.ERROR.INVALID_SUB', + details: { + errors: { + // TODO Rename sub + sub: errors + } + } + }; + } + } + // Else control landings + else { + const errors = yield this.landingService.controlAllByObservedLocation(entity, { + program: opts === null || opts === void 0 ? void 0 : opts.program, + strategy: null, + progression: opts === null || opts === void 0 ? void 0 : opts.progression, + maxProgression: (opts === null || opts === void 0 ? void 0 : opts.maxProgression) - progressionStep + }); + if (errors) { + return { + message: 'OBSERVED_LOCATION.ERROR.INVALID_LANDING', + details: { + errors: { + landings: errors + } + } + }; + } + if (this._debug) + console.debug(`[observed-location-service] Control {${entity.id}} [OK] in ${Date.now() - now}ms`); + } + // TODO Mark local as controlled ? + return undefined; + }); + } + controlAllByFilter(filter, opts) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const maxProgression = toNumber(opts === null || opts === void 0 ? void 0 : opts.maxProgression, 100); + opts = Object.assign(Object.assign({}, opts), { maxProgression }); + opts.progression = opts.progression || new ProgressionModel({ total: maxProgression }); + const endProgression = opts.progression.current + maxProgression; + // Increment + this.progressBarService.increase(); + try { + const { data } = yield this.loadAll(0, 1000, undefined, undefined, filter, {}); + if (isEmptyArray(data)) + return undefined; + const progressionStep = maxProgression / data.length / 2; // 2 steps by observed location: control, then save + let errorsById = null; + for (const entity of data) { + const errors = yield this.control(entity, Object.assign(Object.assign({}, opts), { maxProgression: progressionStep })); + // Control failed: save error + if (errors) { + errorsById = errorsById || {}; + errorsById[entity.id] = errors; + // translate, then save normally + const errorMessage = this.formErrorTranslator.translateErrors(errors.details.errors, opts.translatorOptions); + // const errorMessage = errors.message; + entity.controlDate = null; + entity.qualificationComments = errorMessage; + if ((_a = opts.progression) === null || _a === void 0 ? void 0 : _a.cancelled) + return; // Cancel + // Save entity + yield this.save(entity); + } + // OK succeed: terminate + else { + if ((_b = opts.progression) === null || _b === void 0 ? void 0 : _b.cancelled) + return; // Cancel + // Need to exclude data that already validated (else got exception when pod control already validated data) + if (isNil(entity.validationDate)) + yield this.terminate(entity); + } + // increament, after save/terminate + opts.progression.increment(progressionStep); + } + return errorsById; + } + catch (err) { + console.error(err && err.message || err); + throw err; + } + finally { + this.progressBarService.decrease(); + if (opts.progression.current < endProgression) { + opts.progression.current = endProgression; + } + } + }); + } + synchronize(entity, opts) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + opts = Object.assign({ enableOptimisticResponse: false }, opts); + const localId = entity === null || entity === void 0 ? void 0 : entity.id; + if (!EntityUtils.isLocalId(localId)) + throw new Error('Entity must be a local entity'); + if (this.network.offline) + throw new Error('Could not synchronize if network if offline'); + // Clone (to keep original entity unchanged) + entity = entity instanceof Entity ? entity.clone() : entity; + entity.synchronizationStatus = 'SYNC'; + entity.id = undefined; + const program = yield this.programRefService.loadByLabel((_a = entity.program) === null || _a === void 0 ? void 0 : _a.label); + const useAggregatedLandings = program.getPropertyAsBoolean(ProgramProperties.OBSERVED_LOCATION_AGGREGATED_LANDINGS_ENABLE); + const targetProgramLabel = program.getProperty(ProgramProperties.OBSERVED_LOCATION_AGGREGATED_LANDINGS_PROGRAM); + let landings = []; + let aggregatedLandings = []; + if (useAggregatedLandings) { + // Load aggregated landings + const { data } = yield this.aggregatedLandingService.loadAllByObservedLocation({ observedLocationId: localId }, { fullLoad: true, rankOrderOnPeriod: false }); + aggregatedLandings = data || []; + } + else { + // Load landings + const { data } = yield this.landingService.loadAllByObservedLocation({ observedLocationId: localId }, { fullLoad: true, rankOrderOnPeriod: false }); + landings = data || []; + } + // Make sure to remove landings here (will be saved AFTER observed location) + entity.landings = undefined; + // Get local vessels (not saved) + const localVessels = arrayDistinct([...landings, ...aggregatedLandings].map(value => value.vesselSnapshot).filter(EntityUtils.isLocal), 'id') + .map(VesselSnapshot.toVessel); + if (isNotEmptyArray(localVessels)) { + const savedVessels = new Map(); + for (const vessel of localVessels) { + const vesselLocalId = vessel.id; + const savedVessel = yield this.vesselService.synchronize(vessel); + savedVessels.set(vesselLocalId, VesselSnapshot.fromVessel(savedVessel)); + } + //replace landing local vessel's by saved one + [...landings, ...aggregatedLandings].forEach(landing => { + if (savedVessels.has(landing.vesselSnapshot.id)) { + landing.vesselSnapshot = savedVessels.get(landing.vesselSnapshot.id); + } + }); + } + try { + entity = yield this.save(entity, Object.assign(Object.assign({}, opts), { emitEvent: false /*will emit a onSynchronize, instead of onSave */ })); + // Check return entity has a valid id + if (isNil(entity.id) || entity.id < 0) { + throw { code: DataErrorCodes.SYNCHRONIZE_ENTITY_ERROR }; + } + if (!opts || opts.emitEvent !== false) { + this.onSynchronize.next({ localId, remoteEntity: entity }); + } + // synchronize landings + if (isNotEmptyArray(landings)) { + entity.landings = yield Promise.all(landings.map(landing => { + landing.observedLocationId = entity.id; + landing.location = entity.location; + return this.landingService.synchronize(landing); + })); + } + // Synchronize aggregated landings + if (isNotEmptyArray(aggregatedLandings)) { + yield this.aggregatedLandingService.synchronizeAll(aggregatedLandings, { + filter: { + observedLocationId: entity.id, + startDate: entity.startDateTime, + endDate: entity.endDateTime || entity.startDateTime, + locationId: (_b = entity.location) === null || _b === void 0 ? void 0 : _b.id, + programLabel: targetProgramLabel + } + }); + } + } + catch (err) { + throw Object.assign(Object.assign({}, err), { code: DataErrorCodes.SYNCHRONIZE_ENTITY_ERROR, message: 'ERROR.SYNCHRONIZE_ENTITY_ERROR', context: entity.asObject(MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE) }); + } + try { + if (this._debug) + console.debug(`[observed-location-service] Deleting observedLocation {${entity.id}} from local storage`); + // Delete observedLocation + yield this.entities.deleteById(localId, { entityName: ObservedLocation.TYPENAME }); + } + catch (err) { + console.error(`[observed-location-service] Failed to locally delete observedLocation {${entity.id}} and its landings`, err); + // Continue + } + // Clear page history + try { + // FIXME: find a way o clean only synchronized data ? + yield this.settings.clearPageHistory(); + } + catch (err) { /* Continue */ } + return entity; + }); + } + hasSampleWithTagId(observedLocationIds) { + return __awaiter(this, void 0, void 0, function* () { + // Check locally + const localIds = (observedLocationIds || []).filter(EntityUtils.isLocalId); + if (isNotEmptyArray(localIds)) { + const hasSampleFn = (observedLocationId) => __awaiter(this, void 0, void 0, function* () { + const { data: landings } = yield this.landingService.loadAllByObservedLocation({ observedLocationId }, { fullLoad: false, toEntity: false, computeRankOrder: false, withTotal: false }); + return (landings || []).some(l => l.samplesCount > 0); + }); + const hasLocalSamples = (yield chainPromises(localIds.map(observedLocationId => () => hasSampleFn(observedLocationId)))) + .some(has => has === true); + if (hasLocalSamples) + return true; + } + // Check remotely + const remoteIds = (observedLocationIds || []).filter(EntityUtils.isRemoteId); + if (isNotEmptyArray(remoteIds)) { + const filter = SampleFilter.fromObject({ withTagId: true, observedLocationIds: remoteIds }); + const res = yield this.graphql.query({ + query: ObservedLocationQueries.countSamples, + variables: { + filter: filter.asPodObject() + }, + error: { code: DataErrorCodes.LOAD_ENTITIES_ERROR, message: 'OBSERVED_LOCATION.ERROR.COUNT_SAMPLES_ERROR' }, + fetchPolicy: 'network-only' + }); + return ((res === null || res === void 0 ? void 0 : res.total) || 0) > 0; + } + return false; + }); + } + /* -- protected methods -- */ + /** + * List of importation jobs. + * + * @protected + * @param opts + */ + getImportJobs(filter, opts) { + var _a, _b; + filter = filter || ((_a = this.settings.getOfflineFeature(this.featureName)) === null || _a === void 0 ? void 0 : _a.filter); + filter = this.asFilter(filter); + const programLabel = filter && ((_b = filter.program) === null || _b === void 0 ? void 0 : _b.label); + const landingFilter = ObservedLocationFilter.toLandingFilter(filter); + if (programLabel) { + return [ + // Store program to opts, for other services (e.g. used by OperationService) + JobUtils.defer(o => this.programRefService.loadByLabel(programLabel, { fetchPolicy: 'network-only' }) + .then(program => { + opts.program = program; + opts.acquisitionLevels = ProgramUtils.getAcquisitionLevels(program); + // TODO filter on location level + //opts.locationLevelIds = program.getPropertyAsNumbers(ProgramProperties.OBSERVED_LOCATION_OFFLINE_IMPORT_LOCATION_LEVEL_IDS); + // TODO filter on vessel (e.g. OBSBIO) + })), + ...super.getImportJobs(filter, opts), + // Landing (historical data) + JobUtils.defer(o => this.landingService.executeImport(landingFilter, o), opts) + ]; + } + else { + return super.getImportJobs(null, opts); + } + } + finishImport() { + super.finishImport(); + // Add vessel offline feature + this.settings.markOfflineFeatureAsSync(VESSEL_FEATURE_NAME); + } + updateChildrenDate(entity) { + return __awaiter(this, void 0, void 0, function* () { + if (!entity || !entity.program || !entity.program.label || !entity.startDateTime) + return; // Skip + const program = yield this.programRefService.loadByLabel(entity.program.label); + const landingHasDateTime = program.getPropertyAsBoolean(ProgramProperties.LANDING_DATE_TIME_ENABLE); + if (landingHasDateTime) + return; // Not need to update children dates + const now = Date.now(); + console.info('[observed-location-service] Applying date to children entities (Landing, Sample)...'); + try { + let res; + let offset = 0; + const size = 10; // Use paging, to avoid loading ALL landings once + do { + res = yield this.landingService.loadAll(offset, size, null, null, { observedLocationId: entity.id }, { fullLoad: true, fetchPolicy: 'no-cache' }); + const updatedLandings = (res.data || []).map(l => { + if (!l.dateTime || !l.dateTime.isSame(entity.startDateTime)) { + l.dateTime = entity.startDateTime; + (l.samples || []).forEach(sample => { + sample.sampleDate = l.dateTime; + }); + return l; + } + return undefined; + }).filter(isNotNil); + // Save landings, if need + if (isNotEmptyArray(updatedLandings)) { + yield this.landingService.saveAll(updatedLandings, { observedLocationId: entity.id, enableOptimisticResponse: false }); + } + offset += size; + } while (offset < res.total); + console.info(`[observed-location-service] Applying date to children entities (Landing, Sample) [OK] in ${Date.now() - now}ms`); + } + catch (err) { + throw Object.assign(Object.assign({}, err), { code: TripErrorCodes.UPDATE_OBSERVED_LOCATION_CHILDREN_DATE_ERROR, message: 'OBSERVED_LOCATION.ERROR.UPDATE_CHILDREN_DATE_ERROR' }); + } + }); + } + fillControlOptions(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + opts = yield this.fillProgramOptions(entity, opts); + opts = Object.assign(Object.assign({}, opts), { enable: opts.program.getPropertyAsBoolean(ProgramProperties.OBSERVED_LOCATION_CONTROL_ENABLE), withMeasurements: true }); + if (!opts.translatorOptions) { + opts.translatorOptions = { + controlPathTranslator: { + translateControlPath: (path) => this.translateControlPath(path, {}) + } + }; + } + return opts; + }); + } + fillTerminateOption(entity, opts) { + const _super = Object.create(null, { + fillTerminateOption: { get: () => super.fillTerminateOption } + }); + return __awaiter(this, void 0, void 0, function* () { + opts = yield _super.fillTerminateOption.call(this, entity, opts); + return Object.assign({ withChildren: !opts.program.getPropertyAsBoolean(ProgramProperties.OBSERVED_LOCATION_CONTROL_ENABLE) }, opts); + }); + } + fillValidateOption(entity, opts) { + const _super = Object.create(null, { + fillValidateOption: { get: () => super.fillValidateOption } + }); + return __awaiter(this, void 0, void 0, function* () { + opts = yield _super.fillValidateOption.call(this, entity, opts); + return Object.assign({ withChildren: !opts.program.getPropertyAsBoolean(ProgramProperties.OBSERVED_LOCATION_CONTROL_ENABLE) }, opts); + }); + } + showToast(opts) { + return __awaiter(this, void 0, void 0, function* () { + return Toasts.show(this.toastController, this.translate, opts); + }); + } +}; +ObservedLocationService = __decorate([ + Injectable({ providedIn: 'root' }), + __param(12, Optional()), + __param(13, Optional()), + __metadata("design:paramtypes", [Injector, + GraphqlService, + AccountService, + NetworkService, + EntitiesStorage, + ObservedLocationValidatorService, + VesselService, + LandingService, + AggregatedLandingService, + TrashRemoteService, + ProgressBarService, + FormErrorTranslator, + TranslateService, + ToastController]) +], ObservedLocationService); +export { ObservedLocationService }; +//# sourceMappingURL=observed-location.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/observed-location.service.js.map b/out-tsc/app/app/trip/observedlocation/observed-location.service.js.map new file mode 100644 index 000000000..df8078607 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/observed-location.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"observed-location.service.js","sourceRoot":"","sources":["../../../../../src/app/trip/observedlocation/observed-location.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/observed-location.validator.js b/out-tsc/app/app/trip/observedlocation/observed-location.validator.js new file mode 100644 index 000000000..0951abd38 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/observed-location.validator.js @@ -0,0 +1,83 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators, } from '@angular/forms'; +import { DateUtils, isNotNil, LocalSettingsService, SharedFormGroupValidators, SharedValidators, toBoolean } from '@sumaris-net/ngx-components'; +import { ObservedLocation } from './observed-location.model'; +import { DataRootEntityValidatorService } from '@app/data/services/validator/root-data-entity.validator'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { PmfmValidators } from '@app/referential/services/validator/pmfm.validators'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import moment from 'moment'; +import { TranslateService } from '@ngx-translate/core'; +let ObservedLocationValidatorService = class ObservedLocationValidatorService extends DataRootEntityValidatorService { + constructor(formBuilder, translate, settings) { + super(formBuilder, translate, settings); + } + getFormGroup(data, opts) { + opts = this.fillDefaultOptions(opts); + const form = super.getFormGroup(data, opts); + // Add measurement form + if (opts.withMeasurements) { + const measForm = form.get('measurementValues'); + // TODO: find strategy from date and location + (opts.program && opts.program.strategies[0] && opts.program.strategies[0].denormalizedPmfms || []) + .filter(p => p.acquisitionLevel === AcquisitionLevelCodes.OBSERVED_LOCATION) + .forEach(p => { + var _a; + const key = p.id.toString(); + const value = (_a = data === null || data === void 0 ? void 0 : data.measurementValues) === null || _a === void 0 ? void 0 : _a[key]; + measForm.addControl(key, this.formBuilder.control(value, PmfmValidators.create(p))); + }); + } + return form; + } + getFormGroupConfig(data, opts) { + return Object.assign(Object.assign({}, super.getFormGroupConfig(data)), { __typename: [ObservedLocation.TYPENAME], location: [(data === null || data === void 0 ? void 0 : data.location) || null, Validators.compose([Validators.required, SharedValidators.entity])], startDateTime: [(data === null || data === void 0 ? void 0 : data.startDateTime) || null, this.createStartDateValidator(opts)], endDateTime: [(data === null || data === void 0 ? void 0 : data.endDateTime) || null], measurementValues: this.formBuilder.group({}), observers: this.getObserversFormArray(data === null || data === void 0 ? void 0 : data.observers) }); + } + updateFormGroup(formGroup, opts) { + opts = this.fillDefaultOptions(opts); + // Update the start date validator + formGroup.get('startDateTime').setValidators(this.createStartDateValidator(opts)); + return formGroup; + } + getFormGroupOptions(data) { + return { + validators: [SharedFormGroupValidators.dateRange('startDateTime', 'endDateTime')] + }; + } + fillDefaultOptions(opts) { + opts = super.fillDefaultOptions(opts); + opts.withObservers = toBoolean(opts.withObservers, toBoolean(opts.program && opts.program.getPropertyAsBoolean(ProgramProperties.TRIP_OBSERVERS_ENABLE), ProgramProperties.TRIP_OBSERVERS_ENABLE.defaultValue === 'true')); + opts.withMeasurements = toBoolean(opts.withMeasurements, !!opts.program); + return opts; + } + createStartDateValidator(opts) { + const validators = [Validators.required]; + // Check if a date is at the given day of week + if (isNotNil(opts.startDateDay)) { + const weekday = opts.startDateDay; + const timezone = opts.timezone; + validators.push((control) => { + if (!DateUtils.isAtDay(control.value, weekday, timezone)) { + control.markAsTouched(); + return { msg: { + key: 'OBSERVED_LOCATION.ERROR.START_DATE_INVALID', + params: { + day: moment().day(weekday).format('dddd') + } + } }; + } + return null; + }); + } + return validators.length === 1 ? validators[0] : Validators.compose(validators); + } +}; +ObservedLocationValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + LocalSettingsService]) +], ObservedLocationValidatorService); +export { ObservedLocationValidatorService }; +//# sourceMappingURL=observed-location.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/observed-location.validator.js.map b/out-tsc/app/app/trip/observedlocation/observed-location.validator.js.map new file mode 100644 index 000000000..3cb2d23df --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/observed-location.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"observed-location.validator.js","sourceRoot":"","sources":["../../../../../src/app/trip/observedlocation/observed-location.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/offline/observed-location-offline.modal.js b/out-tsc/app/app/trip/observedlocation/offline/observed-location-offline.modal.js new file mode 100644 index 000000000..0af13c27f --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/offline/observed-location-offline.modal.js @@ -0,0 +1,270 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { ModalController } from '@ionic/angular'; +import { TranslateService } from '@ngx-translate/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { AppForm, AppFormUtils, isEmptyArray, isNilOrBlank, isNotEmptyArray, isNotNil, referentialsToString, referentialToString, SharedValidators, StatusIds, } from '@sumaris-net/ngx-components'; +import moment from 'moment'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { ProgramRefQueries, ProgramRefService } from '@app/referential/services/program-ref.service'; +import { map, mergeMap, tap } from 'rxjs/operators'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { ObservedLocationOfflineFilter } from '../observed-location.filter'; +import { DATA_IMPORT_PERIODS } from '@app/data/data.config'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { StrategyRefService } from '@app/referential/services/strategy-ref.service'; +import { BehaviorSubject } from 'rxjs'; +let ObservedLocationOfflineModal = class ObservedLocationOfflineModal extends AppForm { + constructor(injector, viewCtrl, translate, formBuilder, programRefService, strategyRefService, referentialRefService, cd) { + super(injector, formBuilder.group({ + program: [null, Validators.compose([Validators.required, SharedValidators.entity])], + strategy: [null, Validators.required], + enableHistory: [true, Validators.required], + location: [null, Validators.required], + periodDuration: ['15 day', Validators.required], + })); + this.viewCtrl = viewCtrl; + this.translate = translate; + this.formBuilder = formBuilder; + this.programRefService = programRefService; + this.strategyRefService = strategyRefService; + this.referentialRefService = referentialRefService; + this.cd = cd; + this.title = 'OBSERVED_LOCATION.OFFLINE_MODAL.TITLE'; + this._enable = false; // Disable by default + this.mobile = this.settings.mobile; + // Prepare start date items + const datePattern = translate.instant('COMMON.DATE_PATTERN'); + this.periodDurationLabels = DATA_IMPORT_PERIODS.map((v) => { + const date = moment() + .utc(false) + .add(-1 * v.value, v.unit); // Substract the period, from now + return { + key: `${v.value} ${v.unit}`, + label: `${date.fromNow(true /*no suffix*/)} (${date.format(datePattern)})`, + startDate: date.startOf('day'), // Reset time + }; + }); + } + get value() { + return this.getValue(); + } + set value(data) { + this.setValue(data); + } + get valid() { + return this.form.valid; + } + get modalName() { + return this.constructor.name; + } + ngOnInit() { + super.ngOnInit(); + // Program + this.registerAutocompleteField('program', { + service: this.programRefService, + filter: { + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], + acquisitionLevelLabels: [AcquisitionLevelCodes.OBSERVED_LOCATION, AcquisitionLevelCodes.LANDING], + }, + mobile: this.mobile, + }); + // Listen program (with properties) + const programSubject = new BehaviorSubject(null); + this.registerSubscription(this.form + .get('program') + .valueChanges.pipe( + // Load the program + mergeMap((program) => isNilOrBlank(program === null || program === void 0 ? void 0 : program.label) + ? Promise.resolve() + : this.programRefService.loadByLabel(program.label, { + query: ProgramRefQueries.loadLight, + fetchPolicy: 'cache-first', + }))) + .subscribe((program) => programSubject.next(program || null))); + const displayAttributes = this.settings.getFieldDisplayAttributes('location'); + const locations$ = programSubject.pipe(mergeMap((program) => { + if (!program) + return Promise.resolve(); + const locationLevelIds = program.getPropertyAsNumbers(ProgramProperties.OBSERVED_LOCATION_LOCATION_LEVEL_IDS); + return this.referentialRefService.loadAll(0, 100, displayAttributes[0], 'asc', { + entityName: 'Location', + levelIds: locationLevelIds, + }); + }), map((res) => res && res.data), tap((items) => { + if (isEmptyArray(items)) { + this.form.get('location').disable(); + } + else { + this.form.get('location').enable(); + } + })); + this.registerAutocompleteField('location', { + items: locations$, + displayWith: (arg) => { + if (Array.isArray(arg)) { + return referentialsToString(arg, displayAttributes); + } + return referentialToString(arg, displayAttributes); + }, + mobile: this.mobile, + }); + // Strategies + this.registerAutocompleteField('strategy', { + suggestFn: (value, filter) => this.strategyRefService.suggest(value, Object.assign(Object.assign({}, filter), { level: programSubject.value }), 'label', 'desc', { fetchPolicy: 'cache-first' }), + displayWith: (item) => (item === null || item === void 0 ? void 0 : item.label) || '', + mobile: this.mobile, + }); + this.registerSubscription(programSubject + .pipe(mergeMap((program) => { + if (!program) + return Promise.resolve(); + return this.strategyRefService.loadAll(0, 0, null, null, { levelId: program.id }); + }), map((res) => (res && res.total) || 0)) + .subscribe((strategiesCount) => { + if (strategiesCount > 1) { + this.form.get('strategy').enable(); + } + else { + this.form.get('strategy').disable(); + } + })); + // Enable/disable sub controls, from the 'enable history' checkbox + const subControls = [this.form.get('location'), this.form.get('periodDuration')]; + this.form.get('enableHistory').valueChanges.subscribe((enable) => { + if (enable) { + subControls.forEach((control) => { + control.enable(); + control.setValidators(Validators.required); + }); + } + else { + subControls.forEach((control) => { + control.disable(); + control.setValidators(null); + }); + } + }); + } + setValue(value) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + if (!value) + return; // skip + const json = { + program: null, + strategy: null, + location: null, + periodDuration: null, + }; + // Program + if (value.programLabel) { + json.program = yield this.programRefService.loadByLabel(value.programLabel, { query: ProgramRefQueries.loadLight }); + } + // Strategy + if (isNotEmptyArray(value.strategyIds) && isNotNil(json.program.id)) { + json.strategy = (_b = (yield this.strategyRefService.loadAll(0, value.strategyIds.length, 'label', 'asc', { + levelId: (_a = json.program) === null || _a === void 0 ? void 0 : _a.id, + includedIds: value.strategyIds, + }))) === null || _b === void 0 ? void 0 : _b.data; + } + else { + } + // Location + if (isNotEmptyArray(value.locationIds)) { + json.location = yield Promise.all(value.locationIds.map((id) => this.referentialRefService.loadById(id, 'Location'))); + } + // Duration period + if (value.periodDuration && value.periodDurationUnit) { + json.periodDuration = `${value.periodDuration} ${value.periodDurationUnit}`; + } + this.enable(); + if (isEmptyArray(json.strategy)) { + this.form.get('strategy').disable(); // Disable by default, when empty + } + this.form.patchValue(json); + this.markAsLoaded(); + }); + } + getValue() { + const json = this.form.value; + // DEBUG + console.debug('[observed-location-offline] Modal form.value:', json); + const value = new ObservedLocationOfflineFilter(); + // Set program + value.programLabel = (json.program && json.program.label) || json.program; + // Location + if (json.strategy) { + if (Array.isArray(json.strategy)) { + value.strategyIds = json.strategy.map((entity) => entity.id); + } + else { + value.strategyIds = [json.strategy.id]; + } + } + // Location + if (json.location) { + if (Array.isArray(json.location)) { + value.locationIds = json.location.map((entity) => entity.id); + } + else { + value.locationIds = [json.location.id]; + } + } + // Set start date + if (json.enableHistory && json.periodDuration) { + const periodDuration = this.periodDurationLabels.find((item) => item.key === json.periodDuration); + value.startDate = periodDuration && periodDuration.startDate; + // Keep value of periodDuration (to be able to save it in local settings) + const parts = json.periodDuration.split(' '); + value.periodDuration = +parts[0]; + value.periodDurationUnit = parts[1]; + } + // DEBUG + //console.debug("[observed-location-offline] Modal result value:", value); + return value; + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.viewCtrl.dismiss(null, 'cancel'); + }); + } + validate(event) { + return __awaiter(this, void 0, void 0, function* () { + this.form.markAllAsTouched(); + if (!this.form.valid) { + yield AppFormUtils.waitWhilePending(this.form); + if (this.form.invalid) { + AppFormUtils.logFormErrors(this.form, '[offline-import-config] '); + return; // stop + } + } + return this.viewCtrl.dismiss(this.getValue(), 'OK'); + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationOfflineModal.prototype, "title", void 0); +ObservedLocationOfflineModal = __decorate([ + Component({ + selector: 'app-observed-location-offline-modal', + styleUrls: ['./observed-location-offline.modal.scss'], + templateUrl: './observed-location-offline.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + ModalController, + TranslateService, + UntypedFormBuilder, + ProgramRefService, + StrategyRefService, + ReferentialRefService, + ChangeDetectorRef]) +], ObservedLocationOfflineModal); +export { ObservedLocationOfflineModal }; +//# sourceMappingURL=observed-location-offline.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/offline/observed-location-offline.modal.js.map b/out-tsc/app/app/trip/observedlocation/offline/observed-location-offline.modal.js.map new file mode 100644 index 000000000..5af4a5a6f --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/offline/observed-location-offline.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"observed-location-offline.modal.js","sourceRoot":"","sources":["../../../../../../src/app/trip/observedlocation/offline/observed-location-offline.modal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAU,MAAM,eAAe,CAAC;AAC/G,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EACL,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,SAAS,GACV,MAAM,6BAA6B,CAAC;AACrC,OAAO,MAAkB,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AACrG,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACpF,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAUhC,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,OAAsC;IAsBtF,YACE,QAAkB,EACR,QAAyB,EACzB,SAA2B,EAC3B,WAA+B,EAC/B,iBAAoC,EACpC,kBAAsC,EACtC,qBAA4C,EAC5C,EAAqB;QAE/B,KAAK,CACH,QAAQ,EACR,WAAW,CAAC,KAAK,CAAC;YAChB,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YACnF,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;YACrC,aAAa,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;YAC1C,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;YACrC,cAAc,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC;SAChD,CAAC,CACH,CAAC;QAjBQ,aAAQ,GAAR,QAAQ,CAAiB;QACzB,cAAS,GAAT,SAAS,CAAkB;QAC3B,gBAAW,GAAX,WAAW,CAAoB;QAC/B,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,OAAE,GAAF,EAAE,CAAmB;QA1BxB,UAAK,GAAG,uCAAuC,CAAC;QAsCvD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,qBAAqB;QAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAEnC,2BAA2B;QAC3B,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC7D,IAAI,CAAC,oBAAoB,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACxD,MAAM,IAAI,GAAG,MAAM,EAAE;iBAClB,GAAG,CAAC,KAAK,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iCAAiC;YAC/D,OAAO;gBACL,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,EAAE;gBAC3B,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG;gBAC1E,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,aAAa;aAC9C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAnDD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED,IAAI,KAAK,CAAC,IAAS;QACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAuCD,QAAQ;QACN,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEjB,UAAU;QACV,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE;YACxC,OAAO,EAAE,IAAI,CAAC,iBAAiB;YAC/B,MAAM,EAAE;gBACN,SAAS,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC;gBAClD,sBAAsB,EAAE,CAAC,qBAAqB,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,OAAO,CAAC;aACjG;YACD,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,mCAAmC;QACnC,MAAM,cAAc,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,IAAI;aACN,GAAG,CAAC,SAAS,CAAC;aACd,YAAY,CAAC,IAAI;QAChB,mBAAmB;QACnB,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CACnB,YAAY,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC;YAC1B,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE;YACnB,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE;gBAChD,KAAK,EAAE,iBAAiB,CAAC,SAAS;gBAClC,WAAW,EAAE,aAAa;aAC3B,CAAC,CACP,CACF;aACA,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAChE,CAAC;QAEF,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;QAC9E,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CACpC,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE;YACnB,IAAI,CAAC,OAAO;gBAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YACvC,MAAM,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,oCAAoC,CAAC,CAAC;YAC9G,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;gBAC7E,UAAU,EAAE,UAAU;gBACtB,QAAQ,EAAE,gBAAgB;aAC3B,CAAC,CAAC;QACL,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAC7B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACZ,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;gBACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;aACrC;iBAAM;gBACL,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,CAAC;aACpC;QACH,CAAC,CAAC,CACH,CAAC;QACF,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE;YACzC,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE;gBACnB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBACtB,OAAO,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;iBACrD;gBACD,OAAO,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;YACrD,CAAC;YACD,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,aAAa;QACb,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE;YACzC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAC3B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAC7B,KAAK,kCAEA,MAAM,KACT,KAAK,EAAE,cAAc,CAAC,KAAK,KAE7B,OAAO,EACP,MAAM,EACN,EAAE,WAAW,EAAE,aAAa,EAAE,CAC/B;YACH,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,KAAI,EAAE;YACxC,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,IAAI,CAAC,oBAAoB,CACvB,cAAc;aACX,IAAI,CACH,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE;YACnB,IAAI,CAAC,OAAO;gBAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QACpF,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CACtC;aACA,SAAS,CAAC,CAAC,eAAe,EAAE,EAAE;YAC7B,IAAI,eAAe,GAAG,CAAC,EAAE;gBACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,CAAC;aACpC;iBAAM;gBACL,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;aACrC;QACH,CAAC,CAAC,CACL,CAAC;QAEF,kEAAkE;QAClE,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACjF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE;YAC/D,IAAI,MAAM,EAAE;gBACV,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;oBAC9B,OAAO,CAAC,MAAM,EAAE,CAAC;oBACjB,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAC7C,CAAC,CAAC,CAAC;aACJ;iBAAM;gBACL,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;oBAC9B,OAAO,CAAC,OAAO,EAAE,CAAC;oBAClB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEK,QAAQ,CAAC,KAA0C;;;YACvD,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,OAAO;YAE3B,MAAM,IAAI,GAAG;gBACX,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,IAAI;gBACd,cAAc,EAAE,IAAI;aACrB,CAAC;YAEF,UAAU;YACV,IAAI,KAAK,CAAC,YAAY,EAAE;gBACtB,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,iBAAiB,CAAC,SAAS,EAAE,CAAC,CAAC;aACrH;YAED,WAAW;YACX,IAAI,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;gBACnE,IAAI,CAAC,QAAQ,GAAG,MAAA,CACd,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE;oBACjF,OAAO,EAAE,MAAA,IAAI,CAAC,OAAO,0CAAE,EAAE;oBACzB,WAAW,EAAE,KAAK,CAAC,WAAW;iBAC/B,CAAC,CACH,0CAAE,IAAI,CAAC;aACT;iBAAM;aACN;YAED,WAAW;YACX,IAAI,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;gBACtC,IAAI,CAAC,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;aACvH;YAED,kBAAkB;YAClB,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,kBAAkB,EAAE;gBACpD,IAAI,CAAC,cAAc,GAAG,GAAG,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;aAC7E;YAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,iCAAiC;aACvE;YAED,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAE3B,IAAI,CAAC,YAAY,EAAE,CAAC;;KACrB;IAED,QAAQ;QACN,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAE7B,QAAQ;QACR,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,IAAI,CAAC,CAAC;QAErE,MAAM,KAAK,GAAG,IAAI,6BAA6B,EAAE,CAAC;QAElD,cAAc;QACd,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC;QAE1E,WAAW;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAChC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;aAC9D;iBAAM;gBACL,KAAK,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;aACxC;SACF;QAED,WAAW;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAChC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;aAC9D;iBAAM;gBACL,KAAK,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;aACxC;SACF;QAED,iBAAiB;QACjB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,cAAc,EAAE;YAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC;YAClG,KAAK,CAAC,SAAS,GAAG,cAAc,IAAI,cAAc,CAAC,SAAS,CAAC;YAE7D,yEAAyE;YACzE,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7C,KAAK,CAAC,cAAc,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjC,KAAK,CAAC,kBAAkB,GAAG,KAAK,CAAC,CAAC,CAAwB,CAAC;SAC5D;QAED,QAAQ;QACR,0EAA0E;QAE1E,OAAO,KAAK,CAAC;IACf,CAAC;IAEK,MAAM;;YACV,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;KAAA;IAEK,QAAQ,CAAC,KAAa;;YAC1B,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAE7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACpB,MAAM,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/C,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;oBACrB,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAC;oBAClE,OAAO,CAAC,OAAO;iBAChB;aACF;YAED,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;KAAA;IAES,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;CACF,CAAA;AAzRC;IAAC,KAAK,EAAE;;2DAAiD;AAJ9C,4BAA4B;IANxC,SAAS,CAAC;QACT,QAAQ,EAAE,qCAAqC;QAC/C,SAAS,EAAE,CAAC,wCAAwC,CAAC;QACrD,WAAW,EAAE,wCAAwC;QACrD,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAwBY,QAAQ;QACE,eAAe;QACd,gBAAgB;QACd,kBAAkB;QACZ,iBAAiB;QAChB,kBAAkB;QACf,qBAAqB;QACxC,iBAAiB;GA9BtB,4BAA4B,CA6RxC;SA7RY,4BAA4B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/offline/observed-location-offline.module.js b/out-tsc/app/app/trip/observedlocation/offline/observed-location-offline.module.js new file mode 100644 index 000000000..b22a956bb --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/offline/observed-location-offline.module.js @@ -0,0 +1,23 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { TranslateModule } from '@ngx-translate/core'; +import { ObservedLocationOfflineModal } from './observed-location-offline.modal'; +import { AppCoreModule } from '@app/core/core.module'; +let AppObservedLocationOfflineModule = class AppObservedLocationOfflineModule { +}; +AppObservedLocationOfflineModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + TranslateModule.forChild(), + ], + declarations: [ + ObservedLocationOfflineModal + ], + exports: [ + ObservedLocationOfflineModal + ] + }) +], AppObservedLocationOfflineModule); +export { AppObservedLocationOfflineModule }; +//# sourceMappingURL=observed-location-offline.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/offline/observed-location-offline.module.js.map b/out-tsc/app/app/trip/observedlocation/offline/observed-location-offline.module.js.map new file mode 100644 index 000000000..e3312096a --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/offline/observed-location-offline.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"observed-location-offline.module.js","sourceRoot":"","sources":["../../../../../../src/app/trip/observedlocation/offline/observed-location-offline.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAe/C,IAAM,gCAAgC,GAAtC,MAAM,gCAAgC;CAE5C,CAAA;AAFY,gCAAgC;IAZ5C,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;SAC3B;QACD,YAAY,EAAE;YACZ,4BAA4B;SAC7B;QACD,OAAO,EAAE;YACP,4BAA4B;SAC7B;KACF,CAAC;GACW,gCAAgC,CAE5C;SAFY,gCAAgC"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/report/observed-location-report-routing.module.js b/out-tsc/app/app/trip/observedlocation/report/observed-location-report-routing.module.js new file mode 100644 index 000000000..5db8d911e --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/report/observed-location-report-routing.module.js @@ -0,0 +1,27 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { ObservedLocationReport } from './observed-location.report'; +import { AppObservedLocationReportModule } from './observed-location.report.module'; +const routes = [ + { + path: '', + pathMatch: 'full', + component: ObservedLocationReport, + } +]; +let AppObservedLocationReportRoutingModule = class AppObservedLocationReportRoutingModule { +}; +AppObservedLocationReportRoutingModule = __decorate([ + NgModule({ + imports: [ + RouterModule.forChild(routes), + AppObservedLocationReportModule + ], + exports: [ + RouterModule + ] + }) +], AppObservedLocationReportRoutingModule); +export { AppObservedLocationReportRoutingModule }; +//# sourceMappingURL=observed-location-report-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/report/observed-location-report-routing.module.js.map b/out-tsc/app/app/trip/observedlocation/report/observed-location-report-routing.module.js.map new file mode 100644 index 000000000..e8ec85b0d --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/report/observed-location-report-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"observed-location-report-routing.module.js","sourceRoot":"","sources":["../../../../../../src/app/trip/observedlocation/report/observed-location-report-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AAEpF,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,sBAAsB;KAClC;CACF,CAAC;AAYK,IAAM,sCAAsC,GAA5C,MAAM,sCAAsC;CAClD,CAAA;AADY,sCAAsC;IATlD,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,+BAA+B;SAChC;QACD,OAAO,EAAE;YACP,YAAY;SACb;KACF,CAAC;GACW,sCAAsC,CAClD;SADY,sCAAsC"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/report/observed-location.report.js b/out-tsc/app/app/trip/observedlocation/report/observed-location.report.js new file mode 100644 index 000000000..02068d17b --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/report/observed-location.report.js @@ -0,0 +1,218 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, Input, QueryList, ViewChild, ViewChildren, } from '@angular/core'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { Pmfm, PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { RevealComponent } from '@app/shared/report/reveal/reveal.component'; +import { arrayDistinct, isNotEmptyArray, isNotNil } from '@sumaris-net/ngx-components'; +import { LandingReport } from '@app/trip/landing/report/landing.report'; +import { AppDataEntityReport, DataReportStats } from '@app/data/report/data-entity-report.class'; +import { LANDING_I18N_PMFM_PREFIX, LANDING_TABLE_DEFAULT_I18N_PREFIX } from '@app/trip/landing/landings.table'; +import { AuctionControlReport } from '@app/trip/landing/auction-control/report/auction-control.report'; +import { SamplingLandingReport } from '../../landing/sampling/report/sampling-landing.report'; +import { LandingStats } from '@app/trip/landing/report/base-landing-report.class'; +import { ObservedLocation } from '@app/trip/observedlocation/observed-location.model'; +import { ObservedLocationService } from '@app/trip/observedlocation/observed-location.service'; +import { LandingService } from '@app/trip/landing/landing.service'; +import { lastValueFrom } from 'rxjs'; +export class ObservedLocationStats extends DataReportStats { + fromObject(source) { + this.vesselCount = source.vesselCount; + this.pmfms = source.pmfms.map(item => Pmfm.fromObject(item)); + this.landingPmfms = source.landingPmfms.map(item => Pmfm.fromObject(item)); + this.landingEditor = source.landingEditor; // TODO : make it from object + this.landingI18nPmfmPrefix = source.landingI18nPmfmPrefix; + this.landingI18nColumnPrefix = source.landingI18nColumnPrefix; + this.landingShowSampleCount = source.landingShowSampleCount; + this.landingSamplesPmfms = source.landingSamplesPmfms.map(lv1 => lv1.map(lv2 => Pmfm.fromObject(lv2))); + this.landingsStats = source.landingsStats.map(s => { + const stats = new LandingStats(); + stats.fromObject(s); + return stats; + }); + } + asObject(opts) { + let target = super.asObject(opts); + // TODO + target = Object.assign(Object.assign({}, target), { vesselCount: this.vesselCount, pmfms: this.pmfms.map(item => item.asObject()), landingPmfms: this.landingPmfms.map(item => item.asObject()), landingEditor: this.landingEditor, landingI18nPmfmPrefix: this.landingI18nPmfmPrefix, landingI18nColumnPrefix: this.landingI18nColumnPrefix, landingShowSampleCount: this.landingShowSampleCount, landingSamplesPmfms: this.landingSamplesPmfms.map(lv1 => lv1.map(lv2 => lv2.asObject())), + // NOTE : can not be sure that landing stats are present at this moment because they are not computed in ObservedLocationReport:computeStats + // see ObservedLocationReport:statsAsObject + landingsStats: this.landingsStats.map(s => s.asObject(opts)) }); + return target; + } +} +let ObservedLocationReport = class ObservedLocationReport extends AppDataEntityReport { + constructor(injector) { + super(injector, ObservedLocation, ObservedLocationStats, { pathIdAttribute: 'observedLocationId' }); + this.logPrefix = 'observed-location-report'; + this.isNotEmptyArray = isNotEmptyArray; + this.isNotNil = isNotNil; + this.AuctionControlReport = AuctionControlReport; + this.SamplingLandingReport = SamplingLandingReport; + this.LandingReport = LandingReport; + this.showToolbar = true; + this.showError = true; + this.observedLocationService = injector.get(ObservedLocationService); + this.landingService = injector.get(LandingService); + } + loadData(id, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.log(`[${this.logPrefix}] load data...`); + const data = yield this.observedLocationService.load(id, { withLanding: true }); + if (!data) { + throw new Error('ERROR.LOAD_ENTITY_ERROR'); + } + // Load full landings + data.landings = yield Promise.all(data.landings.map(landing => this.landingService.load(landing.id))); + // Inject the parent on all landing // TODO put a copy of the parent that have embeded landing removed + // Or manage this when we serialize/deserialize the object + // (we do not want embeded parent parent when we serialise landing) + data.landings.forEach(landing => landing.observedLocation = data); + return data; + }); + } + dataFromObject(source) { + const result = ObservedLocation.fromObject(source); + result.landings.forEach(l => l.observedLocation = result); + return result; + } + dataAsObject(source, opts) { + const copySource = source.clone(); + // Clean observed location from exported data + // (this is redundant because observed location is the root of data itself) + copySource.landings.forEach(l => delete l.observedLocation); + return copySource.asObject(); + } + markAsReady() { + var _a; + super.markAsReady(); + if (!this.children.length && isNotEmptyArray((_a = this.data) === null || _a === void 0 ? void 0 : _a.landings)) { + this.cd.detectChanges(); + } + this.children.map(c => c.markAsReady()); + } + updateView() { + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.debug(`${this.logPrefix}updateView`); + this.cd.detectChanges(); + yield this.waitIdle({ stop: this.destroySubject }); + this.reveal.initialize(); + }); + } + statsAsObject(source, opts) { + // TODO This is not really the place and the moment for push children stats in this stats, try to find a better way to do this + // (can not be done in computeStats because children was not available at this moment) + source.landingsStats = this.children.map(c => c.stats); + return source.asObject(opts); + } + computeTitle(data, stats) { + return __awaiter(this, void 0, void 0, function* () { + return yield lastValueFrom(this.translate.get('OBSERVED_LOCATION.REPORT.TITLE', { + location: data.location.name, + dateTime: this.dateFormat.transform(data.startDateTime, { time: true }), + })); + }); + } + computeDefaultBackHref(data) { + return `/observations/${data.id}?tab=1`; + } + computeStats(data, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.log(`[${this.logPrefix}.computeStats]`); + const stats = (opts === null || opts === void 0 ? void 0 : opts.stats) || new this.statsType(); + stats.program = yield this.programRefService.loadByLabel(data.program.label); + stats.vesselCount = arrayDistinct(data.landings, 'vesselSnapshot.id').length; + stats.landingEditor = stats.program.getProperty(ProgramProperties.LANDING_EDITOR); + // Force landing editor to default for testing + //this.landingEditor = 'landing' + stats.landingShowSampleCount = stats.program.getPropertyAsBoolean(ProgramProperties.LANDING_SAMPLES_COUNT_ENABLE); + stats.pmfms = yield this.programRefService.loadProgramPmfms(stats.program.label, { acquisitionLevel: AcquisitionLevelCodes.OBSERVED_LOCATION }); + stats.landingSamplesPmfms = yield this.loadLandingsPmfms(this.data.landings, stats.program); + stats.landingPmfms = yield this.programRefService.loadProgramPmfms(stats.program.label, { acquisitionLevel: AcquisitionLevelCodes.LANDING }); + stats.landingI18nColumnPrefix = LANDING_TABLE_DEFAULT_I18N_PREFIX; + stats.landingI18nPmfmPrefix = LANDING_I18N_PMFM_PREFIX; + return stats; + }); + } + computeI18nContext(stats) { + return Object.assign(Object.assign({}, super.computeI18nContext(stats)), { pmfmPrefix: 'OBSERVED_LOCATION.PMFM.' }); + } + computeShareBasePath() { + return 'observations/report'; + } + loadLandingsPmfms(landings, program) { + return __awaiter(this, void 0, void 0, function* () { + const weightDisplayedUnit = yield program.getProperty(ProgramProperties.LANDING_SAMPLE_WEIGHT_UNIT); + return Promise.all(landings.map((landing) => __awaiter(this, void 0, void 0, function* () { + var _a; + const taxonGroup = ((_a = (landing.samples || []) + .find(s => { var _a; return !!((_a = s.taxonGroup) === null || _a === void 0 ? void 0 : _a.name); })) === null || _a === void 0 ? void 0 : _a.taxonGroup) || {}; + const pmfms = yield this.programRefService.loadProgramPmfms(program.label, { + acquisitionLevel: AcquisitionLevelCodes.SAMPLE, + taxonGroupId: taxonGroup === null || taxonGroup === void 0 ? void 0 : taxonGroup.id, + }); + if (weightDisplayedUnit) { + PmfmUtils.setWeightUnitConversions(pmfms, weightDisplayedUnit); + } + return pmfms; + }))); + }); + } + waitIdle(opts) { + const _super = Object.create(null, { + waitIdle: { get: () => super.waitIdle } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.waitIdle.call(this, opts); + // this.cd.detectChanges(); + yield Promise.all(this.children.map(c => { + console.debug(`[${this.logPrefix}] Waiting for child`); + return c.waitIdle(opts); + })); + }); + } + isQualitativePmfm(pmfm) { + var _a; + return pmfm.isQualitative && ((_a = pmfm.qualitativeValues) === null || _a === void 0 ? void 0 : _a.length) <= 3; + } + isNotQualitativePmfm(pmfm) { + var _a; + return !pmfm.isQualitative || !((_a = pmfm.qualitativeValues) === null || _a === void 0 ? void 0 : _a.length) || (pmfm.qualitativeValues.length > 3); + } + hasSamples(landing) { + return isNotEmptyArray(landing === null || landing === void 0 ? void 0 : landing.samples); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationReport.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationReport.prototype, "showError", void 0); +__decorate([ + ViewChild(RevealComponent), + __metadata("design:type", RevealComponent) +], ObservedLocationReport.prototype, "reveal", void 0); +__decorate([ + ViewChildren('landingReport'), + __metadata("design:type", QueryList) +], ObservedLocationReport.prototype, "children", void 0); +ObservedLocationReport = __decorate([ + Component({ + selector: 'app-observed-location', + templateUrl: './observed-location.report.html', + styleUrls: [ + '../../landing/report/landing.report.scss', + '../../../data/report/base-report.scss', + ], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector]) +], ObservedLocationReport); +export { ObservedLocationReport }; +//# sourceMappingURL=observed-location.report.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/report/observed-location.report.js.map b/out-tsc/app/app/trip/observedlocation/report/observed-location.report.js.map new file mode 100644 index 000000000..1150ae8f8 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/report/observed-location.report.js.map @@ -0,0 +1 @@ +{"version":3,"file":"observed-location.report.js","sourceRoot":"","sources":["../../../../../../src/app/trip/observedlocation/report/observed-location.report.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/report/observed-location.report.module.js b/out-tsc/app/app/trip/observedlocation/report/observed-location.report.module.js new file mode 100644 index 000000000..f301d1400 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/report/observed-location.report.module.js @@ -0,0 +1,35 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { ObservedLocationReport } from './observed-location.report'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppDataModule } from '@app/data/data.module'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { AppSharedReportModule } from '@app/shared/report/report.module'; +import { TranslateModule } from '@ngx-translate/core'; +import { AuctionControlReportModule } from '@app/trip/landing/auction-control/report/auction-control.report.module'; +import { SamplingLandingReportModule } from '@app/trip/landing/sampling/report/sampling-landing.report.module'; +import { LandingReportModule } from '@app/trip/landing/report/landing.report.module'; +let AppObservedLocationReportModule = class AppObservedLocationReportModule { +}; +AppObservedLocationReportModule = __decorate([ + NgModule({ + declarations: [ + ObservedLocationReport + ], + imports: [ + AppCoreModule, + AppReferentialModule, + AppDataModule, + TranslateModule.forChild(), + AppSharedReportModule, + LandingReportModule, + AuctionControlReportModule, + SamplingLandingReportModule, + ], + exports: [ + ObservedLocationReport + ], + }) +], AppObservedLocationReportModule); +export { AppObservedLocationReportModule }; +//# sourceMappingURL=observed-location.report.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/report/observed-location.report.module.js.map b/out-tsc/app/app/trip/observedlocation/report/observed-location.report.module.js.map new file mode 100644 index 000000000..68942d6ba --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/report/observed-location.report.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"observed-location.report.module.js","sourceRoot":"","sources":["../../../../../../src/app/trip/observedlocation/report/observed-location.report.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wEAAwE,CAAC;AACpH,OAAO,EAAE,2BAA2B,EAAE,MAAM,kEAAkE,CAAC;AAC/G,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AAoB9E,IAAM,+BAA+B,GAArC,MAAM,+BAA+B;CAAI,CAAA;AAAnC,+BAA+B;IAlB3C,QAAQ,CAAC;QACR,YAAY,EAAE;YACZ,sBAAsB;SACvB;QACD,OAAO,EAAE;YACP,aAAa;YACb,oBAAoB;YACpB,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAC1B,qBAAqB;YACrB,mBAAmB;YACnB,0BAA0B;YAC1B,2BAA2B;SAC5B;QACD,OAAO,EAAE;YACP,sBAAsB;SACvB;KACF,CAAC;GACW,+BAA+B,CAAI;SAAnC,+BAA+B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/select-modal/select-observed-locations.modal.js b/out-tsc/app/app/trip/observedlocation/select-modal/select-observed-locations.modal.js new file mode 100644 index 000000000..c4b75a2e5 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/select-modal/select-observed-locations.modal.js @@ -0,0 +1,210 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input, ViewChild } from '@angular/core'; +import { ObservedLocationsPage } from '../table/observed-locations.page'; +import { ModalController } from '@ionic/angular'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { Subscription } from 'rxjs'; +import { AppFormUtils, isNotNil, LocalSettingsService, toBoolean } from '@sumaris-net/ngx-components'; +import { ObservedLocation } from '@app/trip/observedlocation/observed-location.model'; +import { ObservedLocationFilter } from '@app/trip/observedlocation/observed-location.filter'; +import { ObservedLocationForm } from '@app/trip/observedlocation/form/observed-location.form'; +import { MatTab, MatTabGroup } from '@angular/material/tabs'; +import { ObservedLocationService } from '@app/trip/observedlocation/observed-location.service'; +let SelectObservedLocationsModal = class SelectObservedLocationsModal { + constructor(injector, viewCtrl, observedLocationService, cd) { + this.injector = injector; + this.viewCtrl = viewCtrl; + this.observedLocationService = observedLocationService; + this.cd = cd; + this.selectedTabIndex = 0; + this._subscription = new Subscription(); + this._logPrefix = '[select-observed-location-modal]'; + this.filter = null; + this.settings = injector.get(LocalSettingsService); + // default value + this.acquisitionLevel = AcquisitionLevelCodes.OBSERVED_LOCATION; + } + get loadingSubject() { + return this.table.loadingSubject; + } + ngOnInit() { + // Set defaults + this.mobile = isNotNil(this.mobile) ? this.mobile : this.settings.mobile; + this.allowMultipleSelection = toBoolean(this.allowMultipleSelection, false); + this.filter = this.filter || new ObservedLocationFilter(); + const programLabel = this.programLabel || this.filter.program && this.filter.program.label; + this.table.showFilterProgram = !programLabel; + this.table.showProgramColumn = !programLabel; + // Avoid to register and load filter form values when we are in modal + this.table.settingsId = null; + setTimeout(() => __awaiter(this, void 0, void 0, function* () { + yield this.table.setFilter(this.filter); + // Select the selected id + if (!this.allowMultipleSelection && isNotNil(this.selectedId)) { + this._subscription.add(this.table.dataSource.rowsSubject.subscribe(rows => { + this.table.selectRowByData(ObservedLocation.fromObject({ id: this.selectedId })); + })); + // TODO use permanent selection + //this.table.permanentSelection?.setSelection(ObservedLocation.fromObject({id: this.selectedId})); + } + if (this.allowNewObservedLocation) { + if (this.defaultNewObservedLocation) + this.form.setValue(this.defaultNewObservedLocation); + this.form.enable(); + this.form.markAsReady(); + } + this.selectedTabIndex = 0; + this.tabGroup.realignInkBar(); + this.markForCheck(); + }), 200); + } + ngOnDestroy() { + this._subscription.unsubscribe(); + } + selectRow(row) { + var _a; + if (this.allowMultipleSelection) { + this.table.selection.toggle(row); + } + else { + this.table.selection.setSelection(row); + if (((_a = row.currentData) === null || _a === void 0 ? void 0 : _a.id) !== this.selectedId) { + this.close(); + } + } + } + close(event) { + return __awaiter(this, void 0, void 0, function* () { + try { + if (this.tabSearch.isActive) { + if (this.hasSelection()) { + const data = (this.table.selection.selected || []) + .map(row => row.currentData) + .map(ObservedLocation.fromObject) + .filter(isNotNil); + return this.viewCtrl.dismiss(data); + } + } + else if (this.tabNew.isActive) { + const newData = yield this.createObservedLocation(); + if (newData) { + return this.viewCtrl.dismiss([newData]); + } + } + return false; + } + catch (err) { + // nothing to do + return false; + } + }); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.viewCtrl.dismiss(); + }); + } + createObservedLocation() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.form) + throw Error(`${this._logPrefix} No Form`); + console.debug(`${this._logPrefix} Saving new ObservedLocation...`); + // Avoid multiple call + if (this.form.disabled) + return; + this.form.error = null; + yield AppFormUtils.waitWhilePending(this.form); + if (this.form.invalid) { + this.form.markAllAsTouched(); + AppFormUtils.logFormErrors(this.form.form); + return; + } + try { + const json = this.form.value; + const data = ObservedLocation.fromObject(json); + this.form.disable(); + return yield this.observedLocationService.save(data); + } + catch (err) { + this.form.error = err && err.message || err; + this.form.enable(); + return; + } + }); + } + hasSelection() { + return this.table.selection.hasValue() && this.table.selection.selected.length === 1; + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + ViewChild('table', { static: true }), + __metadata("design:type", ObservedLocationsPage) +], SelectObservedLocationsModal.prototype, "table", void 0); +__decorate([ + ViewChild('form', { static: true }), + __metadata("design:type", ObservedLocationForm) +], SelectObservedLocationsModal.prototype, "form", void 0); +__decorate([ + ViewChild('tabGroup', { static: true }), + __metadata("design:type", MatTabGroup) +], SelectObservedLocationsModal.prototype, "tabGroup", void 0); +__decorate([ + ViewChild('tabSearch', { static: true }), + __metadata("design:type", MatTab) +], SelectObservedLocationsModal.prototype, "tabSearch", void 0); +__decorate([ + ViewChild('tabNew', { static: true }), + __metadata("design:type", MatTab) +], SelectObservedLocationsModal.prototype, "tabNew", void 0); +__decorate([ + Input(), + __metadata("design:type", ObservedLocationFilter) +], SelectObservedLocationsModal.prototype, "filter", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SelectObservedLocationsModal.prototype, "acquisitionLevel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SelectObservedLocationsModal.prototype, "programLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectObservedLocationsModal.prototype, "showFilterProgram", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectObservedLocationsModal.prototype, "allowMultipleSelection", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectObservedLocationsModal.prototype, "allowNewObservedLocation", void 0); +__decorate([ + Input(), + __metadata("design:type", ObservedLocation) +], SelectObservedLocationsModal.prototype, "defaultNewObservedLocation", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], SelectObservedLocationsModal.prototype, "selectedId", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectObservedLocationsModal.prototype, "mobile", void 0); +SelectObservedLocationsModal = __decorate([ + Component({ + selector: 'app-select-observed-locations-modal', + templateUrl: './select-observed-locations.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + ModalController, + ObservedLocationService, + ChangeDetectorRef]) +], SelectObservedLocationsModal); +export { SelectObservedLocationsModal }; +//# sourceMappingURL=select-observed-locations.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/select-modal/select-observed-locations.modal.js.map b/out-tsc/app/app/trip/observedlocation/select-modal/select-observed-locations.modal.js.map new file mode 100644 index 000000000..d4a88be8e --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/select-modal/select-observed-locations.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"select-observed-locations.modal.js","sourceRoot":"","sources":["../../../../../../src/app/trip/observedlocation/select-modal/select-observed-locations.modal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAqB,SAAS,EAAC,MAAM,eAAe,CAAC;AACnI,OAAO,EAAC,qBAAqB,EAAC,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAC,qBAAqB,EAAuB,MAAM,4CAA4C,CAAC;AACvG,OAAO,EAAa,YAAY,EAAC,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAEtG,OAAO,EAAC,gBAAgB,EAAC,MAAM,oDAAoD,CAAC;AACpF,OAAO,EAAC,sBAAsB,EAAC,MAAM,qDAAqD,CAAC;AAC3F,OAAO,EAAC,oBAAoB,EAAC,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAC,uBAAuB,EAAC,MAAM,sDAAsD,CAAC;AAmBtF,IAAM,4BAA4B,GAAlC,MAAM,4BAA4B;IA4BvC,YACY,QAAkB,EAClB,QAAyB,EACzB,uBAAgD,EAChD,EAAqB;QAHrB,aAAQ,GAAR,QAAQ,CAAU;QAClB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,4BAAuB,GAAvB,uBAAuB,CAAyB;QAChD,OAAE,GAAF,EAAE,CAAmB;QA9BjC,qBAAgB,GAAG,CAAC,CAAC;QAEX,kBAAa,GAAG,IAAI,YAAY,EAAE,CAAC;QACnC,eAAU,GAAG,kCAAkC,CAAC;QASjD,WAAM,GAAgC,IAAI,CAAC;QAoBlD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QACnD,gBAAgB;QAChB,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,iBAAiB,CAAC;IAClE,CAAC;IAbD,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;IACnC,CAAC;IAaD,QAAQ;QACN,eAAe;QACf,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACzE,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,sBAAsB,EAAE,CAAC;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QAC3F,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,CAAC,YAAY,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,CAAC,YAAY,CAAC;QAC7C,qEAAqE;QACrE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;QAE7B,UAAU,CAAC,GAAS,EAAE;YAEpB,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAExC,yBAAyB;YACzB,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBAC7D,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;oBACjD,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAC,EAAE,EAAE,IAAI,CAAC,UAAU,EAAC,CAAC,CAAC,CAAC;gBACjF,CAAC,CAAC,CACH,CAAC;gBACF,+BAA+B;gBAC/B,kGAAkG;aACnG;YAED,IAAI,IAAI,CAAC,wBAAwB,EAAE;gBACjC,IAAI,IAAI,CAAC,0BAA0B;oBAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;gBACzF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACnB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;aACzB;YAED,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC,CAAA,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;IAED,WAAW;QACT,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;IACnC,CAAC;IAED,SAAS,CAAC,GAAmC;;QAE3C,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAClC;aACI;YACH,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,CAAA,MAAA,GAAG,CAAC,WAAW,0CAAE,EAAE,MAAK,IAAI,CAAC,UAAU,EAAE;gBAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;SACF;IACH,CAAC;IAEK,KAAK,CAAC,KAAW;;YACrB,IAAI;gBACF,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;oBAC3B,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;wBACvB,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC;6BAC/C,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC;6BAC3B,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC;6BAChC,MAAM,CAAC,QAAQ,CAAC,CAAC;wBACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;qBACpC;iBACF;qBACI,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;oBAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;oBACpD,IAAI,OAAO,EAAE;wBACX,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;qBACzC;iBACF;gBAED,OAAO,KAAK,CAAC;aACd;YAAC,OAAO,GAAG,EAAE;gBACZ,gBAAgB;gBAChB,OAAO,KAAK,CAAC;aACd;QACH,CAAC;KAAA;IAEK,MAAM;;YACV,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAChC,CAAC;KAAA;IAEK,sBAAsB;;YAE1B,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,UAAU,CAAC,CAAC;YAE1D,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,iCAAiC,CAAC,CAAC;YAEnE,sBAAsB;YACtB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC/B,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAEvB,MAAM,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE/C,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACrB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC7B,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3C,OAAO;aACR;YAED,IAAI;gBACF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC7B,MAAM,IAAI,GAAG,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAE/C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAEpB,OAAO,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACtD;YACD,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;gBAC5C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO;aACR;QACH,CAAC;KAAA;IAED,YAAY;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IACvF,CAAC;IAES,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;CACF,CAAA;AA3JC;IAAC,SAAS,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;8BAAQ,qBAAqB;2DAAC;AACnE;IAAC,SAAS,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;8BAAO,oBAAoB;0DAAC;AAChE;IAAC,SAAS,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;8BAAW,WAAW;8DAAC;AAC/D;IAAC,SAAS,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;8BAAY,MAAM;+DAAC;AAC3D;IAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;8BAAS,MAAM;4DAAC;AAErD;IAAC,KAAK,EAAE;8BAAS,sBAAsB;4DAAa;AACpD;IAAC,KAAK,EAAE;;sEAAwC;AAChD;IAAC,KAAK,EAAE;;kEAAsB;AAC9B;IAAC,KAAK,EAAE;;uEAA4B;AACpC;IAAC,KAAK,EAAE;;4EAAiC;AACzC;IAAC,KAAK,EAAE;;8EAAmC;AAC3C;IAAC,KAAK,EAAE;8BAA6B,gBAAgB;gFAAC;AACtD;IAAC,KAAK,EAAE;;gEAAoB;AAC5B;IAAC,KAAK,EAAE;;4DAAiB;AAtBd,4BAA4B;IALxC,SAAS,CAAC;QACT,QAAQ,EAAE,qCAAqC;QAC/C,WAAW,EAAE,wCAAwC;QACrD,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCA8BsB,QAAQ;QACR,eAAe;QACA,uBAAuB;QAC5C,iBAAiB;GAhCtB,4BAA4B,CAmKxC;SAnKY,4BAA4B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/select-modal/select-observed-locations.module.js b/out-tsc/app/app/trip/observedlocation/select-modal/select-observed-locations.module.js new file mode 100644 index 000000000..4a2a11902 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/select-modal/select-observed-locations.module.js @@ -0,0 +1,32 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { TranslateModule } from '@ngx-translate/core'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppDataModule } from '@app/data/data.module'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { SelectObservedLocationsModal } from '@app/trip/observedlocation/select-modal/select-observed-locations.modal'; +import { AppObservedLocationsTableModule } from '@app/trip/observedlocation/table/observed-location-table.module'; +import { AppObservedLocationFormModule } from '@app/trip/observedlocation/form/observed-location-form.module'; +let AppSelectObservedLocationsModalModule = class AppSelectObservedLocationsModalModule { +}; +AppSelectObservedLocationsModalModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + AppReferentialModule, + AppDataModule, + TranslateModule.forChild(), + AppObservedLocationsTableModule, + AppObservedLocationFormModule, + ], + declarations: [ + SelectObservedLocationsModal + ], + exports: [ + // Components + SelectObservedLocationsModal + ] + }) +], AppSelectObservedLocationsModalModule); +export { AppSelectObservedLocationsModalModule }; +//# sourceMappingURL=select-observed-locations.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/select-modal/select-observed-locations.module.js.map b/out-tsc/app/app/trip/observedlocation/select-modal/select-observed-locations.module.js.map new file mode 100644 index 000000000..9eb545fc2 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/select-modal/select-observed-locations.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"select-observed-locations.module.js","sourceRoot":"","sources":["../../../../../../src/app/trip/observedlocation/select-modal/select-observed-locations.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,yEAAyE,CAAC;AACvH,OAAO,EAAE,+BAA+B,EAAE,MAAM,iEAAiE,CAAC;AAClH,OAAO,EAAE,6BAA6B,EAAE,MAAM,+DAA+D,CAAC;AAqBvG,IAAM,qCAAqC,GAA3C,MAAM,qCAAqC;CAEjD,CAAA;AAFY,qCAAqC;IAlBjD,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,oBAAoB;YACpB,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAE1B,+BAA+B;YAC/B,6BAA6B;SAC9B;QACD,YAAY,EAAE;YACZ,4BAA4B;SAC7B;QACD,OAAO,EAAE;YACP,aAAa;YACb,4BAA4B;SAC7B;KACF,CAAC;GACW,qCAAqC,CAEjD;SAFY,qCAAqC"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/table/observed-location-table.module.js b/out-tsc/app/app/trip/observedlocation/table/observed-location-table.module.js new file mode 100644 index 000000000..6d5b46a59 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/table/observed-location-table.module.js @@ -0,0 +1,32 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { ObservedLocationsPage } from './observed-locations.page'; +import { TranslateModule } from '@ngx-translate/core'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppDataModule } from '@app/data/data.module'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { AppObservedLocationOfflineModule } from '../offline/observed-location-offline.module'; +let AppObservedLocationsTableModule = class AppObservedLocationsTableModule { +}; +AppObservedLocationsTableModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + AppReferentialModule, + AppDataModule, + TranslateModule.forChild(), + //AppReferentialModule, + // Sub modules + AppObservedLocationOfflineModule + ], + declarations: [ + ObservedLocationsPage + ], + exports: [ + // Components + ObservedLocationsPage + ] + }) +], AppObservedLocationsTableModule); +export { AppObservedLocationsTableModule }; +//# sourceMappingURL=observed-location-table.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/table/observed-location-table.module.js.map b/out-tsc/app/app/trip/observedlocation/table/observed-location-table.module.js.map new file mode 100644 index 000000000..937d5243a --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/table/observed-location-table.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"observed-location-table.module.js","sourceRoot":"","sources":["../../../../../../src/app/trip/observedlocation/table/observed-location-table.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,gCAAgC,EAAE,MAAM,6CAA6C,CAAC;AAuBxF,IAAM,+BAA+B,GAArC,MAAM,+BAA+B;CAC3C,CAAA;AADY,+BAA+B;IApB3C,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,oBAAoB;YACpB,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAE1B,uBAAuB;YAEvB,cAAc;YACd,gCAAgC;SACjC;QACD,YAAY,EAAE;YACZ,qBAAqB;SACtB;QACD,OAAO,EAAE;YACP,aAAa;YACb,qBAAqB;SACtB;KACF,CAAC;GACW,+BAA+B,CAC3C;SADY,+BAA+B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/table/observed-locations.page.js b/out-tsc/app/app/trip/observedlocation/table/observed-locations.page.js new file mode 100644 index 000000000..99f6683c5 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/table/observed-locations.page.js @@ -0,0 +1,422 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input, ViewChild } from '@angular/core'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { UntypedFormBuilder } from '@angular/forms'; +import { Alerts, ConfigService, isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrBlank, PersonService, PersonUtils, SharedValidators, slideUpDownAnimation, StatusIds, TranslateContextService } from '@sumaris-net/ngx-components'; +import { ObservedLocationService } from '../observed-location.service'; +import { AcquisitionLevelCodes, LocationLevelIds } from '@app/referential/services/model/model.enum'; +import { ObservedLocation } from '../observed-location.model'; +import { AppRootDataTable } from '@app/data/table/root-table.class'; +import { OBSERVED_LOCATION_FEATURE_NAME, TRIP_CONFIG_OPTIONS } from '../../trip.config'; +import { environment } from '@environments/environment'; +import { BehaviorSubject } from 'rxjs'; +import { ObservedLocationOfflineModal } from '../offline/observed-location-offline.modal'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { DATA_CONFIG_OPTIONS } from '@app/data/data.config'; +import { ObservedLocationFilter } from '../observed-location.filter'; +import { filter } from 'rxjs/operators'; +import { DataQualityStatusEnum, DataQualityStatusList } from '@app/data/services/model/model.utils'; +import { ContextService } from '@app/shared/context.service'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { LANDING_TABLE_DEFAULT_I18N_PREFIX } from '@app/trip/landing/landings.table'; +import { AnimationController, IonSegment } from '@ionic/angular'; +import { LandingsPageSettingsEnum } from '@app/trip/landing/landings.page'; +export const ObservedLocationsPageSettingsEnum = { + PAGE_ID: 'observedLocations', + FILTER_KEY: 'filter', + FEATURE_NAME: OBSERVED_LOCATION_FEATURE_NAME, +}; +let ObservedLocationsPage = class ObservedLocationsPage extends AppRootDataTable { + constructor(injector, _dataService, personService, referentialRefService, programRefService, formBuilder, configService, translateContext, animationCtrl, context, cd) { + super(injector, ObservedLocation, ObservedLocationFilter, ['quality', + 'program', + 'location', + 'startDateTime', + 'observers', + 'recorderPerson', + 'comments'], _dataService, null); + this._dataService = _dataService; + this.personService = personService; + this.referentialRefService = referentialRefService; + this.programRefService = programRefService; + this.formBuilder = formBuilder; + this.configService = configService; + this.translateContext = translateContext; + this.animationCtrl = animationCtrl; + this.context = context; + this.cd = cd; + this.$title = new BehaviorSubject(''); + this.$landingsTitle = new BehaviorSubject(''); + this.statusList = DataQualityStatusList; + this.statusById = DataQualityStatusEnum; + this.selectedSegment = 'observations'; + this.showTitleSegment = false; + this.showFilterProgram = true; + this.showFilterLocation = true; + this.showFilterPeriod = true; + this.showQuality = true; + this.showRecorder = true; + this.showObservers = true; + this.allowMultipleSelection = true; + this.inModal = false; + this.enableFilterPanelCompact = false; + this.inlineEdition = false; + this.i18nColumnPrefix = 'OBSERVED_LOCATION.TABLE.'; + this.filterForm = formBuilder.group({ + program: [null, SharedValidators.entity], + location: [null, SharedValidators.entity], + startDate: [null, SharedValidators.validDate], + endDate: [null, SharedValidators.validDate], + synchronizationStatus: [null], + recorderDepartment: [null, SharedValidators.entity], + recorderPerson: [null, SharedValidators.entity], + observers: formBuilder.array([[null, SharedValidators.entity]]) + }); + this.autoLoad = false; + this.defaultSortBy = 'startDateTime'; + this.defaultSortDirection = 'desc'; + this.settingsId = ObservedLocationsPageSettingsEnum.PAGE_ID; // Fixed value, to be able to reuse it in the editor page + this.featureName = ObservedLocationsPageSettingsEnum.FEATURE_NAME; + // FOR DEV ONLY ---- + this.debug = !environment.production; + } + set showProgramColumn(value) { + this.setShowColumn('program', value); + } + get showProgramColumn() { + return this.getShowColumn('program'); + } + get filterObserversForm() { + return this.filterForm.controls.observers; + } + get filterDataQualityControl() { + return this.filterForm.controls.dataQualityStatus; + } + ngOnInit() { + super.ngOnInit(); + // In modal mode: hide update card + if (this.inModal) { + this.showInstallUpgradeCard = false; + this.showUpdateOfflineFeature = false; + } + // Programs combo (filter) + this.registerAutocompleteField('program', { + service: this.programRefService, + filter: { + acquisitionLevelLabels: [AcquisitionLevelCodes.OBSERVED_LOCATION, AcquisitionLevelCodes.LANDING], + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] + }, + mobile: this.mobile + }); + // Locations combo (filter) + this.registerAutocompleteField('location', { + service: this.referentialRefService, + filter: { + entityName: 'Location', + levelIds: [LocationLevelIds.AUCTION, LocationLevelIds.PORT] + }, + mobile: this.mobile + }); + // Combo: recorder department + this.registerAutocompleteField('department', { + service: this.referentialRefService, + filter: { + entityName: 'Department' + }, + mobile: this.mobile + }); + // Combo: recorder person + const personAttributes = this.settings.getFieldDisplayAttributes('person', ['lastName', 'firstName', 'department.name']); + this.registerAutocompleteField('person', { + service: this.personService, + filter: { + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE] + }, + attributes: personAttributes, + displayWith: PersonUtils.personToString, + mobile: this.mobile + }); + // Combo: observers + this.registerAutocompleteField('observers', { + service: this.personService, + filter: { + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE] + }, + attributes: personAttributes, + displayWith: PersonUtils.personToString, + mobile: this.mobile + }); + this.registerSubscription(this.configService.config + .pipe(filter(isNotNil)) + .subscribe(config => this.onConfigLoaded(config))); + // Clear the context + this.resetContext(); + this.filterPanelFloating = !this.enableFilterPanelCompact; + } + setFilter(filter, opts) { + const _super = Object.create(null, { + setFilter: { get: () => super.setFilter } + }); + var _a; + return __awaiter(this, void 0, void 0, function* () { + // Program + const programLabel = (_a = filter === null || filter === void 0 ? void 0 : filter.program) === null || _a === void 0 ? void 0 : _a.label; + if (isNotNilOrBlank(programLabel)) { + const program = yield this.programRefService.loadByLabel(programLabel); + yield this.setProgram(program); + } + else { + // Check if user can access more than one program + const { data, total } = yield this.programRefService.loadAll(0, 1, null, null, { + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] + }, { withTotal: true }); + if (isNotEmptyArray(data) && total === 1) { + const program = data[0]; + yield this.setProgram(program); + } + else { + yield this.resetProgram(); + } + } + _super.setFilter.call(this, filter, Object.assign(Object.assign({}, opts), { emitEvent: this.enableFilterPanelCompact ? true : opts === null || opts === void 0 ? void 0 : opts.emitEvent })); + }); + } + openTrashModal(event) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[observed-locations] Opening trash modal...'); + // TODO BLA + /*const modal = await this.modalCtrl.create({ + component: TripTrashModal, + componentProps: { + synchronizationStatus: this.filter.synchronizationStatus + }, + keyboardClose: true, + cssClass: 'modal-large' + }); + + // Open the modal + await modal.present(); + + // On dismiss + const res = await modal.onDidDismiss(); + if (!res) return; // CANCELLED*/ + }); + } + prepareOfflineMode(event, opts) { + const _super = Object.create(null, { + prepareOfflineMode: { get: () => super.prepareOfflineMode } + }); + return __awaiter(this, void 0, void 0, function* () { + if (this.importing) + return; // Skip + if (event) { + const feature = this.settings.getOfflineFeature(this._dataService.featureName) || { + name: this._dataService.featureName + }; + const value = Object.assign(Object.assign({}, this.filter), feature.filter); + const modal = yield this.modalCtrl.create({ + component: ObservedLocationOfflineModal, + componentProps: { + value + }, keyboardClose: true + }); + // Open the modal + modal.present(); + // Wait until closed + const { data, role } = yield modal.onDidDismiss(); + if (!data || role === 'cancel') + return; // User cancelled + // Update feature filter, and save it into settings + feature.filter = data; + this.settings.saveOfflineFeature(feature); + // DEBUG + console.debug('[observed-location-table] Will prepare offline mode, using filter:', feature.filter); + } + return _super.prepareOfflineMode.call(this, event, opts); + }); + } + deleteSelection(event, opts) { + const _super = Object.create(null, { + deleteSelection: { get: () => super.deleteSelection } + }); + return __awaiter(this, void 0, void 0, function* () { + const rowsToDelete = this.selection.selected; + const observedLocationIds = (rowsToDelete || []) + .map(row => row.currentData) + .map(ObservedLocation.fromObject) + .map(o => o.id); + // ask confirmation if one observation has samples (with tagId) + if (isNotEmptyArray(observedLocationIds) && (!opts || opts.interactive !== false)) { + const hasSample = yield this._dataService.hasSampleWithTagId(observedLocationIds); + if (hasSample) { + const messageKey = observedLocationIds.length === 1 + ? 'OBSERVED_LOCATION.CONFIRM.DELETE_ONE_HAS_SAMPLE' + : 'OBSERVED_LOCATION.CONFIRM.DELETE_MANY_HAS_SAMPLE'; + const confirmed = yield Alerts.askConfirmation(messageKey, this.alertCtrl, this.translate, event); + if (!confirmed) + return; // skip + } + } + // Use inherited function, when no sample + return _super.deleteSelection.call(this, event, { interactive: false /*already confirmed*/ }); + }); + } + /* -- protected functions -- */ + onConfigLoaded(config) { + return __awaiter(this, void 0, void 0, function* () { + console.info('[observed-locations] Init using config', config); + // Show title segment ? (always disable on mobile) + this.showTitleSegment = !this.mobile && config.getPropertyAsBoolean(TRIP_CONFIG_OPTIONS.OBSERVED_LOCATION_LANDINGS_TAB_ENABLE); + const title = config.getProperty(TRIP_CONFIG_OPTIONS.OBSERVED_LOCATION_NAME); + this.$title.next(title); + // Quality + this.showQuality = config.getPropertyAsBoolean(DATA_CONFIG_OPTIONS.QUALITY_PROCESS_ENABLE); + this.setShowColumn('quality', this.showQuality, { emitEvent: false }); + // Recorder + this.showRecorder = config.getPropertyAsBoolean(DATA_CONFIG_OPTIONS.SHOW_RECORDER); + this.setShowColumn('recorderPerson', this.showRecorder, { emitEvent: false }); + // Observer + this.showObservers = config.getPropertyAsBoolean(DATA_CONFIG_OPTIONS.SHOW_OBSERVERS); + this.setShowColumn('observers', this.showObservers, { emitEvent: false }); + // Manage filters display according to config settings. + this.showFilterProgram = config.getPropertyAsBoolean(DATA_CONFIG_OPTIONS.SHOW_FILTER_PROGRAM); + this.showFilterLocation = config.getPropertyAsBoolean(DATA_CONFIG_OPTIONS.SHOW_FILTER_LOCATION); + this.showFilterPeriod = config.getPropertyAsBoolean(DATA_CONFIG_OPTIONS.SHOW_FILTER_PERIOD); + // Restore filter from settings, or load all + if (this.enabled) + yield this.restoreFilterOrLoad(); + this.updateColumns(); + }); + } + onSegmentChanged(event) { + return __awaiter(this, void 0, void 0, function* () { + const path = event.detail.value; + if (isNilOrBlank(path)) + return; + this.markAsLoading(); + // Prepare filter for next page + const nextFilter = ObservedLocationFilter.toLandingFilter(this.asFilter()); + const json = (nextFilter === null || nextFilter === void 0 ? void 0 : nextFilter.asObject({ keepTypename: true })) || {}; + yield this.settings.savePageSetting(LandingsPageSettingsEnum.PAGE_ID, json, LandingsPageSettingsEnum.FILTER_KEY); + setTimeout(() => __awaiter(this, void 0, void 0, function* () { + yield this.navController.navigateRoot(path, { animated: false }); + // Reset the selected segment + this.selectedSegment = ''; + this.markAsLoaded(); + }), 200); + }); + } + /** + * Action triggered when user swipes + */ + onSwipeTab(event) { + // DEBUG + // if (this.debug) console.debug("[observed-locations] onSwipeTab()"); + // Skip, if not a valid swipe event + if (!event + || event.defaultPrevented || (event.srcEvent && event.srcEvent.defaultPrevented) + || event.pointerType !== 'touch') { + return false; + } + this.toggleSynchronizationStatus(); + return true; + } + setProgram(program) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[observed-location] Init using program', program); + // I18n suffix + let i18nSuffix = program.getProperty(ProgramProperties.I18N_SUFFIX); + i18nSuffix = i18nSuffix !== 'legacy' ? i18nSuffix : ''; + this.i18nColumnSuffix = i18nSuffix; + // Title + const landingsTitle = this.translateContext.instant(LANDING_TABLE_DEFAULT_I18N_PREFIX + 'TITLE', this.i18nColumnSuffix); + this.$landingsTitle.next(landingsTitle); + }); + } + resetProgram() { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[observed-location] Reset program'); + // I18n suffix + this.i18nColumnSuffix = ''; + // Title + this.$landingsTitle.next(LANDING_TABLE_DEFAULT_I18N_PREFIX + 'TITLE'); + }); + } + markForCheck() { + this.cd.markForCheck(); + } + resetContext() { + this.context.reset(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationsPage.prototype, "showTitleSegment", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationsPage.prototype, "showFilterProgram", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationsPage.prototype, "showFilterLocation", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationsPage.prototype, "showFilterPeriod", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationsPage.prototype, "showQuality", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationsPage.prototype, "showRecorder", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationsPage.prototype, "showObservers", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationsPage.prototype, "allowMultipleSelection", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationsPage.prototype, "inModal", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ObservedLocationsPage.prototype, "enableFilterPanelCompact", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], ObservedLocationsPage.prototype, "showProgramColumn", null); +__decorate([ + ViewChild('ion-segment', { static: true }), + __metadata("design:type", IonSegment) +], ObservedLocationsPage.prototype, "ionSegment", void 0); +ObservedLocationsPage = __decorate([ + Component({ + selector: 'app-observed-locations-page', + templateUrl: 'observed-locations.page.html', + styleUrls: ['observed-locations.page.scss'], + animations: [slideUpDownAnimation], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + ObservedLocationService, + PersonService, + ReferentialRefService, + ProgramRefService, + UntypedFormBuilder, + ConfigService, + TranslateContextService, + AnimationController, + ContextService, + ChangeDetectorRef]) +], ObservedLocationsPage); +export { ObservedLocationsPage }; +//# sourceMappingURL=observed-locations.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/table/observed-locations.page.js.map b/out-tsc/app/app/trip/observedlocation/table/observed-locations.page.js.map new file mode 100644 index 000000000..46de2def6 --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/table/observed-locations.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"observed-locations.page.js","sourceRoot":"","sources":["../../../../../../src/app/trip/observedlocation/table/observed-locations.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/vessels/select-vessel-for-data.modal.js b/out-tsc/app/app/trip/observedlocation/vessels/select-vessel-for-data.modal.js new file mode 100644 index 000000000..d41dc91cf --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/vessels/select-vessel-for-data.modal.js @@ -0,0 +1,293 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, ViewChild, ViewEncapsulation } from '@angular/core'; +import { LandingsTable } from '../../landing/landings.table'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { ModalController } from '@ionic/angular'; +import { Landing } from '../../landing/landing.model'; +import { VesselService } from '@app/vessel/services/vessel-service'; +import { VesselFilter } from '@app/vessel/services/filter/vessel.filter'; +import { VesselsTable } from '@app/vessel/list/vessels.table'; +import { AppFormUtils, ConfigService, isEmptyArray, isNil, isNotNil, ReferentialRef, toBoolean } from '@sumaris-net/ngx-components'; +import { VesselSnapshot } from '@app/referential/services/model/vessel-snapshot.model'; +import { VesselForm } from '@app/vessel/form/form-vessel'; +import { Vessel } from '@app/vessel/services/model/vessel.model'; +import { Subscription } from 'rxjs'; +import { MatTabGroup } from '@angular/material/tabs'; +import { LandingFilter } from '../../landing/landing.filter'; +import { VESSEL_CONFIG_OPTIONS } from '@app/vessel/services/config/vessel.config'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { debounceTime, mergeMap } from 'rxjs/operators'; +let SelectVesselsForDataModal = class SelectVesselsForDataModal { + constructor(vesselService, configService, viewCtrl, referentialRefService, cd) { + this.vesselService = vesselService; + this.configService = configService; + this.viewCtrl = viewCtrl; + this.referentialRefService = referentialRefService; + this.cd = cd; + this.selectedTabIndex = 0; + this._subscription = new Subscription(); + this.landingFilter = null; + this.vesselFilter = null; + } + get loading() { + const table = this.table; + return table && table.loading; + } + get table() { + return (this.showVessels && this.vesselsTable) || (this.showLandings && this.landingsTable); + } + get showLandings() { + return this.selectedTabIndex === 0; + } + set showLandings(value) { + if (this.showLandings !== value) { + this.selectedTabIndex = value ? 0 : 1; + this.markForCheck(); + } + } + get showVessels() { + return this.selectedTabIndex === 1; + } + set showVessels(value) { + if (this.showVessels !== value) { + this.selectedTabIndex = value ? 1 : 0; + this.markForCheck(); + } + } + get isNewVessel() { + return this.selectedTabIndex === 2; + } + ngOnInit() { + // Init landing table + this.landingFilter = this.landingFilter || new LandingFilter(); + this.landingsTable.filter = this.landingFilter; + this.landingsTable.programLabel = this.landingFilter.program && this.landingFilter.program.label; + this.landingsTable.acquisitionLevel = AcquisitionLevelCodes.LANDING; + // Set defaults + this.allowMultiple = toBoolean(this.allowMultiple, false); + this.allowAddNewVessel = toBoolean(this.allowAddNewVessel, true); + this.showVesselTypeColumn = toBoolean(this.showVesselTypeColumn, false); + this.showBasePortLocationColumn = toBoolean(this.showBasePortLocationColumn, true); + // Init vessel table filter + this.vesselsTable.filter = this.vesselFilter; + setTimeout(() => __awaiter(this, void 0, void 0, function* () { + // Load landings + this.landingsTable.onRefresh.next('modal'); + this.selectedTabIndex = 0; + this.tabGroup.realignInkBar(); + this.markForCheck(); + }), 200); + } + ngAfterViewInit() { + // Get default status by config + if (this.allowAddNewVessel && this.vesselForm) { + this._subscription.add(this.configService.config + .pipe(debounceTime(100), mergeMap((config) => __awaiter(this, void 0, void 0, function* () { + this.vesselForm.defaultStatus = config.getPropertyAsInt(VESSEL_CONFIG_OPTIONS.VESSEL_DEFAULT_STATUS); + this.vesselForm.enable(); + if (isNil(this.defaultRegistrationLocation)) { + const defaultRegistrationLocationId = config.getPropertyAsInt(VESSEL_CONFIG_OPTIONS.VESSEL_FILTER_DEFAULT_COUNTRY_ID); + if (defaultRegistrationLocationId) { + this.vesselForm.defaultRegistrationLocation = yield this.referentialRefService.loadById(defaultRegistrationLocationId, 'Location'); + } + } + if (isNil(this.withNameRequired)) { + this.withNameRequired = config.getPropertyAsBoolean(VESSEL_CONFIG_OPTIONS.VESSEL_NAME_REQUIRED); + this.vesselForm.withNameRequired = this.withNameRequired; + } + }))) + .subscribe()); + } + } + ngOnDestroy() { + this._subscription.unsubscribe(); + } + selectRow(row) { + return __awaiter(this, void 0, void 0, function* () { + const table = this.table; + if (row && table) { + if (!this.allowMultiple) { + table.selection.clear(); + table.selection.select(row); + yield this.close(); + } + else { + table.selection.select(row); + } + } + }); + } + close(event) { + return __awaiter(this, void 0, void 0, function* () { + try { + let vessels; + if (this.isNewVessel) { + const vessel = yield this.createVessel(); + if (!vessel) + return false; + vessels = [vessel]; + } + else if (this.hasSelection()) { + if (this.showLandings) { + vessels = (this.landingsTable.selection.selected || []) + .map(row => row.currentData) + .map(Landing.fromObject) + .filter(isNotNil) + .map(l => l.vesselSnapshot); + } + else if (this.showVessels) { + vessels = (this.vesselsTable.selection.selected || []) + .map(row => row.currentData) + .map(VesselSnapshot.fromVessel) + .filter(isNotNil); + } + } + if (isEmptyArray(vessels)) { + console.warn('[select-vessel-modal] no selection'); + } + this.viewCtrl.dismiss(vessels); + return true; + } + catch (err) { + // nothing to do + return false; + } + }); + } + createVessel() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.vesselForm) + throw Error('No Vessel Form'); + console.debug('[select-vessel-modal] Saving new vessel...'); + // Avoid multiple call + if (this.vesselForm.disabled) + return; + this.vesselForm.error = null; + yield AppFormUtils.waitWhilePending(this.vesselForm); + if (this.vesselForm.invalid) { + this.vesselForm.markAllAsTouched(); + AppFormUtils.logFormErrors(this.vesselForm.form); + return; + } + try { + const json = this.vesselForm.value; + const data = Vessel.fromObject(json); + this.vesselForm.disable(); + const savedData = yield this.vesselService.save(data); + return VesselSnapshot.fromVessel(savedData); + } + catch (err) { + this.vesselForm.error = err && err.message || err; + this.vesselForm.enable(); + return; + } + }); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.viewCtrl.dismiss(); + }); + } + hasSelection() { + if (this.isNewVessel) + return false; + const table = this.table; + return table && table.selection.hasValue() && (this.allowMultiple || table.selection.selected.length === 1); + } + get canValidate() { + return (this.isNewVessel && this.vesselForm && this.vesselForm.valid) || this.hasSelection(); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + ViewChild(LandingsTable, { static: true }), + __metadata("design:type", LandingsTable) +], SelectVesselsForDataModal.prototype, "landingsTable", void 0); +__decorate([ + ViewChild(VesselsTable, { static: true }), + __metadata("design:type", VesselsTable) +], SelectVesselsForDataModal.prototype, "vesselsTable", void 0); +__decorate([ + ViewChild(VesselForm, { static: false }), + __metadata("design:type", VesselForm) +], SelectVesselsForDataModal.prototype, "vesselForm", void 0); +__decorate([ + ViewChild('tabGroup', { static: true }), + __metadata("design:type", MatTabGroup) +], SelectVesselsForDataModal.prototype, "tabGroup", void 0); +__decorate([ + Input(), + __metadata("design:type", LandingFilter) +], SelectVesselsForDataModal.prototype, "landingFilter", void 0); +__decorate([ + Input(), + __metadata("design:type", VesselFilter) +], SelectVesselsForDataModal.prototype, "vesselFilter", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectVesselsForDataModal.prototype, "allowMultiple", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectVesselsForDataModal.prototype, "allowAddNewVessel", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectVesselsForDataModal.prototype, "showVesselTypeColumn", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectVesselsForDataModal.prototype, "showBasePortLocationColumn", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectVesselsForDataModal.prototype, "showSamplesCountColumn", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SelectVesselsForDataModal.prototype, "defaultVesselSynchronizationStatus", void 0); +__decorate([ + Input(), + __metadata("design:type", ReferentialRef) +], SelectVesselsForDataModal.prototype, "defaultRegistrationLocation", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectVesselsForDataModal.prototype, "withNameRequired", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SelectVesselsForDataModal.prototype, "maxDateVesselRegistration", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectVesselsForDataModal.prototype, "showOfflineVessels", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SelectVesselsForDataModal.prototype, "showLandings", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SelectVesselsForDataModal.prototype, "showVessels", null); +SelectVesselsForDataModal = __decorate([ + Component({ + selector: 'app-select-vessel-for-data-modal', + templateUrl: 'select-vessel-for-data.modal.html', + styleUrls: ['select-vessel-for-data.modal.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None + }), + __metadata("design:paramtypes", [VesselService, + ConfigService, + ModalController, + ReferentialRefService, + ChangeDetectorRef]) +], SelectVesselsForDataModal); +export { SelectVesselsForDataModal }; +//# sourceMappingURL=select-vessel-for-data.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/observedlocation/vessels/select-vessel-for-data.modal.js.map b/out-tsc/app/app/trip/observedlocation/vessels/select-vessel-for-data.modal.js.map new file mode 100644 index 000000000..dc4cc2d0f --- /dev/null +++ b/out-tsc/app/app/trip/observedlocation/vessels/select-vessel-for-data.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"select-vessel-for-data.modal.js","sourceRoot":"","sources":["../../../../../../src/app/trip/observedlocation/vessels/select-vessel-for-data.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/icon/operation-icon.component.js b/out-tsc/app/app/trip/operation/icon/operation-icon.component.js new file mode 100644 index 000000000..8b90f9d58 --- /dev/null +++ b/out-tsc/app/app/trip/operation/icon/operation-icon.component.js @@ -0,0 +1,174 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core'; +import { isNil, isNotNil } from '@sumaris-net/ngx-components'; +import { qualityFlagToColor, qualityFlagToIcon } from '@app/data/services/model/model.utils'; +import { Operation } from '@app/trip/trip/trip.model'; +import { QualityFlagIds } from '@app/referential/services/model/model.enum'; +import { TranslateService } from '@ngx-translate/core'; +let OperationIconComponent = class OperationIconComponent { + constructor(translate, cd) { + this.translate = translate; + this.cd = cd; + this.icon = null; + this.matSvgIcon = null; + this.color = null; + this.badgeIcon = null; + this.badgeColor = null; + this.badgeFill = 'clear'; + this.badgeSize = 'small'; + this.title = null; + this._showError = false; + } + set value(value) { + this.setValue(value); + } + get value() { + return this._value; + } + set allowParentOperation(value) { + if (this._allowParentOperation !== value) { + this._allowParentOperation = value; + if (this._value) + this.setValue(this._value); // Recompute + } + } + get allowParentOperation() { + return this._allowParentOperation; + } + set showError(value) { + if (this._showError !== value) { + this._showError = value; + if (this._value) + this.setValue(this._value); // Recompute + } + } + get showError() { + return this._showError; + } + setValue(value) { + if (!value) { + this.reset(); + return; + } + // DEBUG + //console.debug('[operation-icon] Computing icon for operation #' + value.id); + this.reset({ emitEvent: false }); + this._value = value; + // Is child + if (isNotNil(value.parentOperationId)) { + this.matSvgIcon = 'rollback-arrow'; + this.icon = undefined; + } + // Is parent, and has a child + else if (isNotNil(value.childOperationId) || value.qualityFlagId === QualityFlagIds.NOT_COMPLETED || this.allowParentOperation) { + this.matSvgIcon = 'down-arrow'; + this.icon = undefined; + this.badgeIcon = isNil(value.childOperationId) ? 'time-outline' : undefined; + this.badgeColor = this.badgeIcon && 'accent' || undefined; + } + // Other + else { + this.icon = 'navigate'; + this.matSvgIcon = undefined; + } + // Not controlled + if (isNil(value.controlDate)) { + this.color = this.color || 'secondary'; + // With error (stored in the qualification comments) + if (this.showError && value.qualificationComments) { + this.badgeIcon = 'alert'; + this.badgeColor = 'danger'; + this.badgeFill = 'solid'; + this.badgeSize = 'small'; + this.title = value.qualificationComments; + } + else { + this.badgeIcon = this.badgeIcon || undefined; + } + } + // Controlled, not qualified + else if (isNil(value.qualificationDate)) { + if (this.icon === 'navigate') { + this.icon = 'checkmark'; + this.color = 'tertiary'; + if (isNotNil(value.qualityFlagId) && value.qualificationComments) { + this.badgeIcon = qualityFlagToIcon(value.qualityFlagId); + this.badgeColor = qualityFlagToColor(value.qualityFlagId); + this.badgeFill = 'clear'; + this.badgeSize = 'medium'; + this.title = value.qualificationComments; + } + } + else { + this.badgeIcon = 'checkmark'; + this.badgeColor = 'tertiary'; + } + } + else if (isNil(value.qualityFlagId) || value.qualityFlagId === QualityFlagIds.NOT_QUALIFIED) { + this.badgeIcon = 'checkmark-circle'; + this.badgeColor = 'tertiary'; + } + else { + if (value.qualityFlagId === QualityFlagIds.BAD) { + this.badgeIcon = 'alert-circle'; + this.badgeColor = 'danger'; + this.badgeFill = 'clear'; + this.badgeSize = 'medium'; + } + else { + this.badgeIcon = 'flag'; + this.badgeColor = qualityFlagToColor(value.qualityFlagId); + } + } + // Abnormal operation + if (value.abnormal) { + this.badgeIcon = 'warning'; + this.badgeColor = 'tertiary'; + this.badgeFill = 'clear'; + this.badgeSize = 'small'; + this.title = this.translate.instant('TRIP.OPERATION.WARNING.ABNORMAL_PROGRESS', { comments: value.comments }); + } + this.color = this.color || 'primary'; + this.cd.markForCheck(); + } + reset(opts) { + this.icon = null; + this.matSvgIcon = null; + this.color = null; + this.badgeIcon = null; + this.badgeFill = 'clear'; + this.badgeColor = null; + this.badgeSize = 'small'; + this.title = null; + if (!opts || opts.emitEvent !== false) { + this.cd.markForCheck(); + } + } +}; +__decorate([ + Input(), + __metadata("design:type", Operation), + __metadata("design:paramtypes", [Operation]) +], OperationIconComponent.prototype, "value", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], OperationIconComponent.prototype, "allowParentOperation", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], OperationIconComponent.prototype, "showError", null); +OperationIconComponent = __decorate([ + Component({ + selector: 'app-operation-icon', + templateUrl: 'operation-icon.component.html', + styleUrls: ['./operation-icon.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [TranslateService, + ChangeDetectorRef]) +], OperationIconComponent); +export { OperationIconComponent }; +//# sourceMappingURL=operation-icon.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/icon/operation-icon.component.js.map b/out-tsc/app/app/trip/operation/icon/operation-icon.component.js.map new file mode 100644 index 000000000..1db81a5d2 --- /dev/null +++ b/out-tsc/app/app/trip/operation/icon/operation-icon.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"operation-icon.component.js","sourceRoot":"","sources":["../../../../../../src/app/trip/operation/icon/operation-icon.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAgB,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAkB,MAAM,sCAAsC,CAAC;AAC7G,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAG5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAWhD,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IA6CjC,YACU,SAA2B,EAC3B,EAAqB;QADrB,cAAS,GAAT,SAAS,CAAkB;QAC3B,OAAE,GAAF,EAAE,CAAmB;QA7C/B,SAAI,GAAqB,IAAI,CAAC;QAC9B,eAAU,GAAyB,IAAI,CAAC;QACxC,UAAK,GAAc,IAAI,CAAC;QACxB,cAAS,GAAmB,IAAI,CAAC;QACjC,eAAU,GAAc,IAAI,CAAC;QAC7B,cAAS,GAAiB,OAAO,CAAC;QAClC,cAAS,GAAiB,OAAO,CAAC;QAClC,UAAK,GAAW,IAAI,CAAC;QAkCb,eAAU,GAAG,KAAK,CAAC;IAK3B,CAAC;IArCD,IAAa,KAAK,CAAC,KAAgB;QACjC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAa,oBAAoB,CAAC,KAAc;QAC9C,IAAI,IAAI,CAAC,qBAAqB,KAAK,KAAK,EAAE;YACxC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;YACnC,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY;SAC1D;IACH,CAAC;IAED,IAAI,oBAAoB;QACtB,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;IAED,IAAa,SAAS,CAAC,KAAc;QACnC,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE;YAC7B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY;SAC1D;IACH,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAWS,QAAQ,CAAC,KAAgB;QACjC,IAAI,CAAC,KAAK,EAAE;YACV,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,OAAO;SACR;QAED,QAAQ;QACR,8EAA8E;QAE9E,IAAI,CAAC,KAAK,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,WAAW;QACX,IAAI,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE;YACrC,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC;YACnC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;SACvB;QACD,6BAA6B;aACxB,IAAI,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,aAAa,KAAK,cAAc,CAAC,aAAa,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC9H,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC;YAC/B,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;YACtB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5E,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,IAAI,QAAQ,IAAI,SAAS,CAAC;SAC3D;QACD,QAAQ;aACH;YACH,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;YACvB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;SAC7B;QAED,iBAAiB;QACjB,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;YAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC;YAEvC,oDAAoD;YACpD,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,qBAAqB,EAAE;gBACjD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;gBACzB,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;gBAC3B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;gBACzB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;gBACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,qBAAqB,CAAC;aAC1C;iBAAM;gBACL,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC;aAC9C;SACF;QACD,4BAA4B;aACvB,IAAI,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE;YACvC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;gBAC5B,IAAI,CAAC,IAAI,GAAG,WAA+B,CAAC;gBAC5C,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;gBACxB,IAAI,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,qBAAqB,EAAE;oBAChE,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;oBACxD,IAAI,CAAC,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;oBAC1D,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;oBACzB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;oBAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,qBAAqB,CAAC;iBAC1C;aACF;iBACI;gBACH,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC;gBAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;aAC9B;SACF;aACI,IAAI,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,aAAa,KAAK,cAAc,CAAC,aAAa,EAAE;YACzF,IAAI,CAAC,SAAS,GAAG,kBAAkB,CAAC;YACpC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;SAChC;aACI;YACH,IAAI,KAAK,CAAC,aAAa,KAAK,cAAc,CAAC,GAAG,EAAE;gBAC9C,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC;gBAChC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;gBAC3B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;gBACzB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;aAC3B;iBACI;gBACH,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;gBACxB,IAAI,CAAC,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;aAC3D;SACF;QAED,qBAAqB;QACrB,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;YACzB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,0CAA0C,EAAE,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAC,CAAC,CAAC;SAC7G;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,IAA2B;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;YACrC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;SACxB;IACH,CAAC;CACF,CAAA;AAjJC;IAAC,KAAK,EAAE;8BAAkB,SAAS;qCAAT,SAAS;mDAElC;AAMD;IAAC,KAAK,EAAE;;;kEAKP;AAMD;IAAC,KAAK,EAAE;;;uDAKP;AAnCU,sBAAsB;IANlC,SAAS,CAAC;QACT,QAAQ,EAAE,oBAAoB;QAC9B,WAAW,EAAE,+BAA+B;QAC5C,SAAS,EAAE,CAAC,iCAAiC,CAAC;QAC9C,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCA+CqB,gBAAgB;QACvB,iBAAiB;GA/CpB,sBAAsB,CA4JlC;SA5JY,sBAAsB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/map/operations-map.modal.js b/out-tsc/app/app/trip/operation/map/operations-map.modal.js new file mode 100644 index 000000000..731d8f64d --- /dev/null +++ b/out-tsc/app/app/trip/operation/map/operations-map.modal.js @@ -0,0 +1,70 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core'; +import { sleep } from '@sumaris-net/ngx-components'; +import { ModalController } from '@ionic/angular'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { environment } from '@environments/environment'; +let OperationsMapModal = class OperationsMapModal { + constructor(viewCtrl, cd, programRefService) { + this.viewCtrl = viewCtrl; + this.cd = cd; + this.programRefService = programRefService; + this.modalReady = false; // Need to be false. Will be set to true after a delay + this.showToolbar = true; + this.showTooltip = true; + this.debug = !environment.production; + } + get modalName() { + return this.constructor.name; + } + ngOnInit() { + sleep(500) + .then(() => { + console.debug('[operation-map-modal] Modal is ready: starting map...'); + this.modalReady = true; + this.cd.markForCheck(); + }); + } + cancel(_event) { + return __awaiter(this, void 0, void 0, function* () { + yield this.viewCtrl.dismiss(null, 'cancel'); + }); + } + onOperationClick(operation) { + console.log('CLICK', operation); + return this.viewCtrl.dismiss(operation); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationsMapModal.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationsMapModal.prototype, "showTooltip", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], OperationsMapModal.prototype, "data", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], OperationsMapModal.prototype, "latLongPattern", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], OperationsMapModal.prototype, "programLabel", void 0); +OperationsMapModal = __decorate([ + Component({ + selector: 'app-operations-map-modal', + templateUrl: './operations-map.modal.html', + styleUrls: ['./operations-map.modal.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [ModalController, + ChangeDetectorRef, + ProgramRefService]) +], OperationsMapModal); +export { OperationsMapModal }; +//# sourceMappingURL=operations-map.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/map/operations-map.modal.js.map b/out-tsc/app/app/trip/operation/map/operations-map.modal.js.map new file mode 100644 index 000000000..aa0f7f579 --- /dev/null +++ b/out-tsc/app/app/trip/operation/map/operations-map.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"operations-map.modal.js","sourceRoot":"","sources":["../../../../../../src/app/trip/operation/map/operations-map.modal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAgB,KAAK,EAAqC,MAAM,eAAe,CAAC;AAI9I,OAAO,EAeL,KAAK,EAEN,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAmB,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAMlE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAGlF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAoBjD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAe7B,YACY,QAAyB,EACzB,EAAqB,EACrB,iBAAoC;QAFpC,aAAQ,GAAR,QAAQ,CAAiB;QACzB,OAAE,GAAF,EAAE,CAAmB;QACrB,sBAAiB,GAAjB,iBAAiB,CAAmB;QAfhD,eAAU,GAAG,KAAK,CAAC,CAAC,sDAAsD;QAMjE,gBAAW,GAAG,IAAI,CAAC;QACnB,gBAAW,GAAG,IAAI,CAAC;QAW1B,IAAI,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;IACvC,CAAC;IAjBD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAiBD,QAAQ;QACN,KAAK,CAAC,GAAG,CAAC;aACP,IAAI,CAAC,GAAG,EAAE;YACT,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACvE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;IACP,CAAC;IAEK,MAAM,CAAC,MAAc;;YACzB,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;KAAA;IAED,gBAAgB,CAAC,SAAoB;QACnC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;CACF,CAAA;AAhCC;IAAC,KAAK,EAAE;;uDAAoB;AAC5B;IAAC,KAAK,EAAE;;uDAAoB;AAC5B;IAAC,KAAK,EAAE;;gDAA4B;AACpC;IAAC,KAAK,EAAE;;0DAAgC;AACxC;IAAC,KAAK,EAAE;;wDAAsB;AAbnB,kBAAkB;IAN9B,SAAS,CAAC;QACT,QAAQ,EAAE,0BAA0B;QACpC,WAAW,EAAE,6BAA6B;QAC1C,SAAS,EAAE,CAAC,6BAA6B,CAAC;QAC1C,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAiBsB,eAAe;QACrB,iBAAiB;QACF,iBAAiB;GAlBrC,kBAAkB,CAyC9B;SAzCY,kBAAkB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/map/operations.map.js b/out-tsc/app/app/trip/operation/map/operations.map.js new file mode 100644 index 000000000..8c1fce14f --- /dev/null +++ b/out-tsc/app/app/trip/operation/map/operations.map.js @@ -0,0 +1,436 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, NgZone, Output } from '@angular/core'; +import { BehaviorSubject, Subject, Subscription } from 'rxjs'; +import { L } from '@app/shared/map/leaflet'; +import { ConfigService, DateDiffDurationPipe, DateFormatService, EntityUtils, fadeInOutAnimation, firstNotNilPromise, isEmptyArray, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, joinPropertiesPath, LocalSettingsService, PlatformService, sleep, } from '@sumaris-net/ngx-components'; +import { ModalController } from '@ionic/angular'; +import { TranslateService } from '@ngx-translate/core'; +import { debounceTime, distinctUntilChanged, filter, switchMap, tap, throttleTime } from 'rxjs/operators'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { VesselPositionUtils } from '../../trip/trip.model'; +import { environment } from '@environments/environment'; +import { LocationUtils } from '@app/referential/location/location.utils'; +import { Geometries } from '@app/shared/geometries.utils'; +import { VesselSnapshotService } from '@app/referential/services/vessel-snapshot.service'; +import { MapGraticule } from '@app/shared/map/map.graticule'; +import { v4 as uuidv4 } from 'uuid'; +import { MapUtils } from '@app/shared/map/map.utils'; +const maxZoom = MapUtils.MAX_ZOOM; +let OperationsMap = class OperationsMap { + constructor(translate, platform, viewCtrl, dateFormat, dateDiffDurationPipe, settings, configService, vesselSnapshotService, zone, cd, programRefService) { + this.translate = translate; + this.platform = platform; + this.viewCtrl = viewCtrl; + this.dateFormat = dateFormat; + this.dateDiffDurationPipe = dateDiffDurationPipe; + this.settings = settings; + this.configService = configService; + this.vesselSnapshotService = vesselSnapshotService; + this.zone = zone; + this.cd = cd; + this.programRefService = programRefService; + this.$programLabel = new BehaviorSubject(undefined); + this.$program = new BehaviorSubject(undefined); + // -- Map Layers -- + this.osmBaseLayer = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + maxZoom, + attribution: 'Open Street Map' + }); + this.sextantBaseLayer = L.tileLayer('https://sextant.ifremer.fr/geowebcache/service/wmts' + + '?Service=WMTS&Layer=sextant&Style=&TileMatrixSet=EPSG:3857&Request=GetTile&Version=1.0.0&Format=image/png&TileMatrix=EPSG:3857:{z}&TileCol={x}&TileRow={y}', { maxZoom, attribution: 'Sextant' }); + this.options = { + layers: [this.sextantBaseLayer], + maxZoom, // max zoom to sextant layer + }; + this.layersControl = { + baseLayers: { + 'Sextant (Ifremer)': this.sextantBaseLayer, + 'Open Street Map': this.osmBaseLayer + }, + overlays: {} + }; + this.subscription = new Subscription(); + this.destroySubject = new Subject(); + this.loadingSubject = new BehaviorSubject(true); + this.$center = new BehaviorSubject(undefined); + this.$onOverFeature = new Subject(); + this.$onOutFeature = new Subject(); + this.$selectedFeature = new BehaviorSubject(null); + this.$fitToBounds = new Subject(); + this.flyToBoundsDelay = 450; + this.flyToBoundsDuration = 1; // seconds + this.showGraticule = false; + this.showTripLayer = true; + this.ready = new EventEmitter(); + this.operationClick = new EventEmitter(); + this.debug = !environment.production; + } + set programLabel(value) { + if (isNotNil(value) && this.$programLabel.value !== value) { + this.$programLabel.next(value); + } + } + get programLabel() { + return this.$programLabel.value; + } + ngOnInit() { + // Default values + this.latLongPattern = this.latLongPattern || this.settings.latLongFormat; + this.mapId = uuidv4(); + this.subscription.add(this.$programLabel + .pipe(filter(isNotNilOrBlank), distinctUntilChanged(), switchMap(programLabel => this.programRefService.watchByLabel(programLabel, { fetchPolicy: 'cache-first' })), tap(program => this.$program.next(program))) + .subscribe()); + this.subscription.add(this.configService.config.subscribe(config => this.$center.next(MapUtils.getMapCenter(config)))); + if (this.showTooltip) { + this.subscription.add(this.$onOverFeature + .pipe(throttleTime(200), filter(feature => feature !== this.$selectedFeature.value + // Exclude rectangle feature + && feature.geometry.type === 'LineString'), tap(feature => this.$selectedFeature.next(feature))).subscribe()); + this.subscription.add(this.$onOutFeature + .pipe(throttleTime(5000), filter(feature => feature === this.$selectedFeature.value), tap(_ => this.$selectedFeature.next(undefined))).subscribe()); + } + } + ngOnDestroy() { + this.subscription.unsubscribe(); + this.destroySubject.next(); + this.destroySubject.unsubscribe(); + } + onMapReady(map) { + return __awaiter(this, void 0, void 0, function* () { + console.info('[operations-map] Leaflet map is ready', map); + // Create graticule + if (this.showGraticule) { + this.graticule = new MapGraticule({ latLngPattern: this.latLongPattern }); + this.graticule.addTo(map); + } + // Center map + const { center, zoom } = yield firstNotNilPromise(this.$center, { stop: this.destroySubject }); + // Call ready in a timeout to let leaflet map to initialize + setTimeout(() => { + if (this.flyToBoundsDelay > 0 || this.flyToBoundsDuration > 0) { + if (center && (center.lat !== 0 || center.lng !== 0)) { + console.debug(`[extraction-map] Center: `, center); + map.setView(center, zoom); + } + else { + map.fitWorld(); + } + } + this.map = map; + this.load(); + }); + }); + } + /* -- protected functions -- */ + load() { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.debug('[operations-map] Loading...'); + this.loadingSubject.next(true); + this.error = null; + // Wait program to be loaded + const program = yield firstNotNilPromise(this.$program, { stop: this.destroySubject }); + // Applying program defaults (center, zoom) + yield this.setProgram(program, { + emitEvent: false // Refresh not need here, as not loading yet + }); + // Get vessel display mode + this.vesselSnapshotAttributes = (_a = (yield this.vesselSnapshotService.getAutocompleteFieldOptions())) === null || _a === void 0 ? void 0 : _a.attributes; + // Load layers + yield this.loadLayers(); + this.ready.next(); + this.loadingSubject.next(false); + }); + } + loadLayers() { + return __awaiter(this, void 0, void 0, function* () { + // Should never call load() without leaflet map + if (!this.map) + return; // Skip + if (this.debug) + console.debug('[operations-map] Creating layers...'); + try { + // Clean existing layers, if any + this.cleanMapLayers(); + (this.data || []).forEach(tripContent => { + let tripCoordinates = []; + const trip = !Array.isArray(tripContent) ? tripContent : undefined; + // Add trip layer to control + const tripTitle = trip + && this.translate.instant('TRIP.OPERATION.MAP.TRIP_LAYER_WITH_DETAILS', { + vessel: joinPropertiesPath(trip.vesselSnapshot, this.vesselSnapshotAttributes), + departureDateTime: this.dateFormat.transform(trip.departureDateTime, { time: false }) + }); + const operations = Array.isArray(tripContent) ? tripContent : trip.operations; + // Create a layer for all trip's operations + const operationLayer = L.geoJSON(null, { + onEachFeature: this.showTooltip ? this.onEachFeature.bind(this) : undefined, + style: (feature) => this.getOperationLayerStyle(feature) + }); + this.layers.push(operationLayer); + // Add each operation to layer + (operations || []) + .sort(EntityUtils.sortComparator('rankOrder', 'asc')) + .forEach((ope, index) => { + const feature = this.getOperationFeature(ope, index); + if (!feature) + return; // Skip if empty + // Add trip to feature + feature.properties.source = ope; + if (tripTitle) + feature.properties.trip = tripTitle; + // Add feature to layer + operationLayer.addData(feature); + // Add to all position array + if (this.showTripLayer && Geometries.isLineString(feature.geometry)) { + tripCoordinates = tripCoordinates.concat(feature.geometry.coordinates); + } + }); + // Add trip feature to layer + if (tripCoordinates.length) { + const tripLayer = L.geoJSON({ + type: 'Feature', + id: 'trip', + geometry: { + type: 'LineString', + coordinates: tripCoordinates + } + }, { + style: this.getTripLayerStyle() + }); + this.layers.push(tripLayer); + // Add trip layer to control + const tripLayerName = tripTitle || this.translate.instant('TRIP.OPERATION.MAP.TRIP_LAYER'); + this.layersControl.overlays[tripLayerName] = tripLayer; + } + // Add operations layer to control + const operationLayerName = tripTitle + ? this.translate.instant('TRIP.OPERATION.MAP.OPERATIONS_LAYER_WITH_DETAILS', { + trip: tripTitle + }) + : this.translate.instant('TRIP.OPERATION.MAP.OPERATIONS_LAYER'); + this.layersControl.overlays[operationLayerName] = operationLayer; + }); + this.layers.forEach(layer => layer.addTo(this.map)); + yield this.flyToBounds(); + } + catch (err) { + console.error('[operations-map] Error while load layers:', err); + this.error = err && err.message || err; + } + finally { + this.markForCheck(); + } + }); + } + onEachFeature(feature, layer) { + layer.on('mouseover', (_) => this.zone.run(() => this.$onOverFeature.next(feature))); + layer.on('mouseout', (_) => this.zone.run(() => this.$onOutFeature.next(feature))); + layer.on('click', (_) => this.zone.run(() => this.onFeatureClick(feature))); + } + onFeatureClick(feature) { + const operation = this.getOperationFromFeature(feature); + this.operationClick.emit(operation); + } + getOperationFromFeature(feature) { + if (isNil(feature === null || feature === void 0 ? void 0 : feature.id) || !this.data) + return undefined; + return this.data + .map(tripContent => { + const operations = Array.isArray(tripContent) ? tripContent : tripContent.operations; + return (operations || []).find(ope => ope.id === feature.id); + }) + .find(isNotNil) || undefined; + } + markForCheck() { + this.cd.markForCheck(); + } + getTripLayerStyle() { + return { + weight: 2, + opacity: 0.6, + color: 'green' + }; + } + getOperationLayerStyle(_feature) { + return { + weight: 10, + opacity: 0.8, + color: 'blue' + }; + } + setProgram(program, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!program) + return; // Skip + // Map center + const centerCoords = program.getPropertyAsNumbers(ProgramProperties.TRIP_MAP_CENTER); + if (isNotEmptyArray(centerCoords) && centerCoords.length === 2) { + try { + this.options.center = L.latLng(centerCoords); + } + catch (err) { + console.error(err); + } + } + // Map zoom + const zoom = program.getProperty(ProgramProperties.TRIP_MAP_ZOOM); + if (isNotNil(zoom)) { + this.options.zoom = +zoom; + } + // Emit event + if (!opts || opts.emitEvent !== false) { + this.markForCheck(); + } + }); + } + cleanMapLayers() { + (this.layers || []).forEach((layer) => this.map.removeLayer(layer)); + this.layers = []; + } + getOperationFeature(ope, index) { + // Create feature + const features = { + type: 'Feature', + geometry: null, + id: ope.id, + properties: Object.assign(Object.assign({ first: index === 0 }, ope), { + // Replace date with a formatted date + startDateTime: this.dateFormat.transform(ope.startDateTime || ope.fishingStartDateTime, { time: true }), endDateTime: this.dateFormat.transform(ope.endDateTime || ope.fishingEndDateTime, { time: true }), duration: this.dateDiffDurationPipe.transform({ startValue: ope.startDateTime || ope.fishingStartDateTime, endValue: ope.endDateTime || ope.fishingEndDateTime }), + // Add index + index }) + }; + // Use lat/long positions + const coordinates = [ope.startPosition, ope.fishingStartPosition, ope.fishingEndPosition, ope.endPosition] + .filter(VesselPositionUtils.isNoNilOrEmpty) + .map(pos => [pos.longitude, pos.latitude]); + features.geometry = coordinates.length && { type: 'LineString', coordinates }; + // Use Fishing Areas + if (!features.geometry) { + const rectangleLabels = (ope.fishingAreas || []) + .map(fa => { var _a; return fa && ((_a = fa.location) === null || _a === void 0 ? void 0 : _a.label); }) + .filter(LocationUtils.isStatisticalRectangleLabel); + features.geometry = rectangleLabels.length && { + type: 'MultiPolygon', + coordinates: rectangleLabels.map(rect => LocationUtils.getGeometryFromRectangleLabel(rect)) + .map(geometry => geometry === null || geometry === void 0 ? void 0 : geometry.coordinates) + }; + } + if (!features.geometry) + return undefined; // No geometry: skip + return features; + } + flyToBounds(opts = { skipDebounce: false }) { + return __awaiter(this, void 0, void 0, function* () { + if (!opts.skipDebounce && this.flyToBoundsDelay > 0) { + if (!this.$fitToBounds.observers.length) { + this.subscription.add(this.$fitToBounds + .pipe(debounceTime(this.flyToBoundsDelay)) + .subscribe(b => this.flyToBounds({ skipDebounce: true }))); + } + this.$fitToBounds.next(); + // Wait end of fit + return sleep(this.flyToBoundsDelay + this.flyToBoundsDuration); + } + if (isEmptyArray(this.layers)) { + console.debug('[operations-map] Skip fit to bounds (no layers)'); + return; + } + // Create bounds, from layers + let bounds; + this.layers + .filter((layer) => layer instanceof L.GeoJSON) + .forEach((layer) => { + const layerBounds = layer.getBounds(); + if (layerBounds.isValid()) { + bounds = !bounds ? layerBounds : bounds.extend(layerBounds); + } + }); + this.goTo(bounds); + }); + } + goTo(bounds) { + console.debug('[operations-map] Go to bounds:', bounds); + if (bounds && bounds.isValid()) { + if (this.flyToBoundsDuration <= 0) { + this.map.fitBounds(bounds, { maxZoom }); + return; + } + else { + try { + this.map.flyToBounds(bounds, { maxZoom, duration: this.flyToBoundsDuration }); + return; + } + catch (err) { + console.error('Cannot go to bounds: ' + (err && err.message || err), bounds); + } + } + } + this.map.fitWorld(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Boolean) +], OperationsMap.prototype, "showTooltip", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], OperationsMap.prototype, "data", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], OperationsMap.prototype, "latLongPattern", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationsMap.prototype, "flyToBoundsDelay", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationsMap.prototype, "flyToBoundsDuration", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationsMap.prototype, "showGraticule", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationsMap.prototype, "showTripLayer", void 0); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], OperationsMap.prototype, "programLabel", null); +__decorate([ + Output(), + __metadata("design:type", Object) +], OperationsMap.prototype, "ready", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], OperationsMap.prototype, "operationClick", void 0); +OperationsMap = __decorate([ + Component({ + selector: 'app-operations-map', + templateUrl: './operations.map.html', + styleUrls: ['./operations.map.scss'], + animations: [fadeInOutAnimation], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [TranslateService, + PlatformService, + ModalController, + DateFormatService, + DateDiffDurationPipe, + LocalSettingsService, + ConfigService, + VesselSnapshotService, + NgZone, + ChangeDetectorRef, + ProgramRefService]) +], OperationsMap); +export { OperationsMap }; +//# sourceMappingURL=operations.map.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/map/operations.map.js.map b/out-tsc/app/app/trip/operation/map/operations.map.js.map new file mode 100644 index 000000000..799b71e69 --- /dev/null +++ b/out-tsc/app/app/trip/operation/map/operations.map.js.map @@ -0,0 +1 @@ +{"version":3,"file":"operations.map.js","sourceRoot":"","sources":["../../../../../../src/app/trip/operation/map/operations.map.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/operation-routing.module.js b/out-tsc/app/app/trip/operation/operation-routing.module.js new file mode 100644 index 000000000..506418b2b --- /dev/null +++ b/out-tsc/app/app/trip/operation/operation-routing.module.js @@ -0,0 +1,41 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { OperationPage } from './operation.page'; +import { ComponentDirtyGuard } from '@sumaris-net/ngx-components'; +const routes = [ + { + path: 'selectivity', + loadChildren: () => import('./selectivity/selectivity-operation-routing.module').then(m => m.AppSelectivityOperationRoutingModule) + }, + { + path: ':operationId', + runGuardsAndResolvers: 'pathParamsChange', + pathMatch: 'full', + component: OperationPage, + canDeactivate: [ComponentDirtyGuard], + data: { + pathIdParam: 'operationId' + } + }, + // Not implemented yet + // { + // path: ':operationId/report', + // pathMatch: 'full', + // loadChildren:() => import('./report/operation-report-routing.module').then(m => m.OperationReportRoutingModule), + // } +]; +let AppOperationRoutingModule = class AppOperationRoutingModule { +}; +AppOperationRoutingModule = __decorate([ + NgModule({ + imports: [ + RouterModule.forChild(routes) + ], + exports: [ + RouterModule + ] + }) +], AppOperationRoutingModule); +export { AppOperationRoutingModule }; +//# sourceMappingURL=operation-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/operation-routing.module.js.map b/out-tsc/app/app/trip/operation/operation-routing.module.js.map new file mode 100644 index 000000000..72ce1e404 --- /dev/null +++ b/out-tsc/app/app/trip/operation/operation-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"operation-routing.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/operation/operation-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,aAAa;QACnB,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,oDAAoD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oCAAoC,CAAC;KACnI;IACD;QACE,IAAI,EAAE,cAAc;QACpB,qBAAqB,EAAE,kBAAkB;QACzC,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,aAAa;QACxB,aAAa,EAAE,CAAC,mBAAmB,CAAC;QACpC,IAAI,EAAE;YACJ,WAAW,EAAE,aAAa;SAC3B;KACF;IACD,sBAAsB;IACtB,IAAI;IACJ,iCAAiC;IACjC,uBAAuB;IACvB,qHAAqH;IACrH,IAAI;CACL,CAAC;AAWK,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;CACrC,CAAA;AADY,yBAAyB;IARrC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC9B;QACD,OAAO,EAAE;YACP,YAAY;SACb;KACF,CAAC;GACW,yBAAyB,CACrC;SADY,yBAAyB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/operation.filter.js b/out-tsc/app/app/trip/operation/operation.filter.js new file mode 100644 index 000000000..f4dbb7d70 --- /dev/null +++ b/out-tsc/app/app/trip/operation/operation.filter.js @@ -0,0 +1,148 @@ +import { __decorate } from "tslib"; +import { EntityClass, fromDateISOString, isNil, isNotEmptyArray, isNotNil, isNotNilOrNaN, toDateISOString, toNumber } from '@sumaris-net/ngx-components'; +import { DataEntityFilter } from '@app/data/services/model/data-filter.model'; +import { Geometries } from '@app/shared/geometries.utils'; +import { PositionUtils } from '@app/data/position/position.utils'; +import { FishingAreaUtils } from '@app/data/fishing-area/fishing-area.model'; +let OperationFilter = class OperationFilter extends DataEntityFilter { + fromObject(source, opts) { + var _a; + super.fromObject(source, opts); + this.tripId = source.tripId; + this.vesselId = source.vesselId; + this.excludeId = source.excludeId; + this.includedIds = source.includedIds; + this.excludedIds = source.excludedIds; + this.programLabel = source.programLabel || ((_a = source.program) === null || _a === void 0 ? void 0 : _a.label); + this.excludeChildOperation = source.excludeChildOperation; + this.hasNoChildOperation = source.hasNoChildOperation; + this.startDate = fromDateISOString(source.startDate); + this.endDate = fromDateISOString(source.endDate); + this.gearIds = source.gearIds; + this.physicalGearIds = source.physicalGearIds; + this.taxonGroupLabels = source.taxonGroupLabels; + this.dataQualityStatus = source.dataQualityStatus; + this.boundingBox = source.boundingBox; + this.excludedIds = source.excludedIds; + this.parentOperationIds = source.parentOperationIds; + } + asObject(opts) { + const target = super.asObject(opts); + target.startDate = toDateISOString(this.startDate); + target.endDate = toDateISOString(this.endDate); + if (opts && opts.minify) { + delete target.program; + delete target.excludeId; // Not include in Pod + delete target.synchronizationStatus; + } + return target; + } + buildFilter() { + const filterFns = super.buildFilter(); + // DEBUG + //console.debug('filtering operations...', this); + // Included ids + if (isNotEmptyArray(this.includedIds)) { + const includedIds = this.includedIds.slice(); + filterFns.push(o => includedIds.includes(o.id)); + } + // Exclude id + if (isNotNil(this.excludeId)) { + const excludeId = this.excludeId; + filterFns.push(o => o.id !== +excludeId); + } + // ExcludedIds + if (isNotEmptyArray(this.excludedIds)) { + const excludedIds = this.excludedIds.slice(); + filterFns.push(o => !excludedIds.includes(o.id)); + } + // Only operation with no parents + if (isNotNil(this.excludeChildOperation) && this.excludeChildOperation) { + filterFns.push(o => (isNil(o.parentOperationId) && isNil(o.parentOperation))); + } + // Only operation with no child + if (isNotNil(this.hasNoChildOperation) && this.hasNoChildOperation) { + filterFns.push(o => isNil(o.childOperationId) && isNil(o.childOperation)); + } + // StartDate + if (isNotNil(this.startDate)) { + const startDate = this.startDate; + filterFns.push(o => ((o.endDateTime && startDate.isSameOrBefore(o.endDateTime)) + || (o.fishingStartDateTime && startDate.isSameOrBefore(o.fishingStartDateTime)))); + } + // EndDate + if (isNotNil(this.endDate)) { + const endDate = this.endDate; + filterFns.push(o => ((o.endDateTime && endDate.isSameOrAfter(o.endDateTime)) + || (o.fishingStartDateTime && endDate.isSameOrAfter(o.fishingStartDateTime)))); + } + // GearIds; + if (isNotEmptyArray(this.gearIds) || (!Array.isArray(this.gearIds) && isNotNilOrNaN(this.gearIds))) { + const gearIds = Array.isArray(this.gearIds) ? this.gearIds : [this.gearIds]; + filterFns.push(o => { var _a; return isNotNil((_a = o.physicalGear) === null || _a === void 0 ? void 0 : _a.gear) && gearIds.indexOf(o.physicalGear.gear.id) !== -1; }); + } + // PhysicalGearIds; + if (isNotEmptyArray(this.physicalGearIds)) { + const physicalGearIds = this.physicalGearIds.slice(); + filterFns.push(o => { var _a; return isNotNil((_a = o.physicalGear) === null || _a === void 0 ? void 0 : _a.id) && physicalGearIds.indexOf(o.physicalGear.id) !== -1; }); + } + // taxonGroupIds + if (isNotEmptyArray(this.taxonGroupLabels)) { + const targetSpecieLabels = this.taxonGroupLabels; + filterFns.push(o => { var _a; return isNotNil((_a = o.metier) === null || _a === void 0 ? void 0 : _a.taxonGroup) && targetSpecieLabels.indexOf(o.metier.taxonGroup.label) !== -1; }); + } + // Filter on dataQualityStatus + if (isNotNil(this.dataQualityStatus)) { + if (this.dataQualityStatus === 'MODIFIED') { + filterFns.push(o => isNil(o.controlDate)); + } + if (this.dataQualityStatus === 'CONTROLLED') { + filterFns.push(o => isNotNil(o.controlDate)); + } + } + // Filter on position + if (Geometries.checkBBox(this.boundingBox)) { + const positionFilter = PositionUtils.createBBoxFilter(this.boundingBox); + const fishingAreaFilter = FishingAreaUtils.createBBoxFilter(this.boundingBox); + filterFns.push(o => (o.positions || []).some(positionFilter) + || (o.fishingAreas || []).some(fishingAreaFilter)); + } + // Filter on parent trip + { + // Trip + if (isNotNil(this.tripId)) { + const tripId = this.tripId; + filterFns.push(o => o.tripId === tripId); + } + // Vessel + if (isNotNil(this.vesselId)) { + const vesselId = this.vesselId; + filterFns.push(o => isNil(o.vesselId) || o.vesselId === vesselId); + } + // Program label + if (isNotNil(this.programLabel)) { + const programLabel = this.programLabel; + filterFns.push(o => isNil(o.programLabel) || o.programLabel === programLabel); + } + } + // Filter on parent operation + if (isNotEmptyArray(this.parentOperationIds)) { + const parentOperationIds = this.parentOperationIds.slice(); + filterFns.push(o => { var _a; return parentOperationIds.includes(toNumber(o.parentOperationId, (_a = o.parentOperation) === null || _a === void 0 ? void 0 : _a.id)); }); + } + return filterFns; + } + isCriteriaNotEmpty(key, value) { + switch (key) { + case 'tripId': + return false; // Ignore tripId + default: + return super.isCriteriaNotEmpty(key, value); + } + } +}; +OperationFilter = __decorate([ + EntityClass({ typename: 'OperationFilterVO' }) +], OperationFilter); +export { OperationFilter }; +//# sourceMappingURL=operation.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/operation.filter.js.map b/out-tsc/app/app/trip/operation/operation.filter.js.map new file mode 100644 index 000000000..6b2070643 --- /dev/null +++ b/out-tsc/app/app/trip/operation/operation.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"operation.filter.js","sourceRoot":"","sources":["../../../../../src/app/trip/operation/operation.filter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/operation.form.js b/out-tsc/app/app/trip/operation/operation.form.js new file mode 100644 index 000000000..a3b25b3fd --- /dev/null +++ b/out-tsc/app/app/trip/operation/operation.form.js @@ -0,0 +1,1156 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Injector, Input, Optional, Output, } from '@angular/core'; +import { OperationValidatorService } from './operation.validator'; +import moment from 'moment'; +import { AccountService, Alerts, AppForm, DateFormatService, DateUtils, EntityUtils, firstNotNilPromise, FormArrayHelper, fromDateISOString, getPropertyByPath, isEmptyArray, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, isNotNilOrNaN, ReferentialUtils, removeDuplicatesFromArray, selectInputContent, StatusIds, suggestFromArray, toBoolean, toNumber, } from '@sumaris-net/ngx-components'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; +import { Operation } from '../trip/trip.model'; +import { BehaviorSubject, combineLatest, merge } from 'rxjs'; +import { debounceTime, distinctUntilChanged, filter, map, startWith } from 'rxjs/operators'; +import { METIER_DEFAULT_FILTER } from '@app/referential/services/metier.service'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { OperationService } from '@app/trip/operation/operation.service'; +import { AlertController, ModalController } from '@ionic/angular'; +import { SelectOperationModal } from '@app/trip/operation/select-operation.modal'; +import { PmfmService } from '@app/referential/services/pmfm.service'; +import { Router } from '@angular/router'; +import { PositionUtils } from '@app/data/position/position.utils'; +import { FishingAreaValidatorService } from '@app/data/fishing-area/fishing-area.validator'; +import { LocationLevelGroups, PmfmIds, QualityFlagIds } from '@app/referential/services/model/model.enum'; +import { PhysicalGearService } from '@app/trip/physicalgear/physicalgear.service'; +import { TaxonGroupTypeIds } from '@app/referential/services/model/taxon-group.model'; +import { TEXT_SEARCH_IGNORE_CHARS_REGEXP } from '@app/referential/services/base-referential-service.class'; +import { PhysicalGear } from '@app/trip/physicalgear/physical-gear.model'; +import { DataEntityUtils } from '@app/data/services/model/data-entity.model'; +export const IS_CHILD_OPERATION_ITEMS = Object.freeze([ + { + value: false, + label: 'TRIP.OPERATION.EDIT.TYPE.PARENT' + }, + { + value: true, + label: 'TRIP.OPERATION.EDIT.TYPE.CHILD' + } +]); +let OperationForm = class OperationForm extends AppForm { + constructor(injector, router, dateFormat, validatorService, referentialRefService, modalCtrl, alertCtrl, accountService, operationService, physicalGearService, pmfmService, formBuilder, fishingAreaValidatorService, cd, geolocation) { + super(injector, validatorService.getFormGroup()); + this.router = router; + this.dateFormat = dateFormat; + this.validatorService = validatorService; + this.referentialRefService = referentialRefService; + this.modalCtrl = modalCtrl; + this.alertCtrl = alertCtrl; + this.accountService = accountService; + this.operationService = operationService; + this.physicalGearService = physicalGearService; + this.pmfmService = pmfmService; + this.formBuilder = formBuilder; + this.fishingAreaValidatorService = fishingAreaValidatorService; + this.cd = cd; + this.geolocation = geolocation; + this._$physicalGears = new BehaviorSubject(undefined); + this._$metiers = new BehaviorSubject(undefined); + this._showMetier = true; + this._showMetierFilter = false; + this._allowParentOperation = false; + this._showPosition = true; + this._showFishingArea = false; + this._requiredComment = false; + this._showGeolocationSpinner = true; + this.$parentOperationLabel = new BehaviorSubject(''); + this.fishingAreaFocusIndex = -1; + this.autocompleteFilters = { + metier: false, + fishingArea: false + }; + this.showError = true; + this.showComment = true; + this.fishingStartDateTimeEnable = false; + this.fishingEndDateTimeEnable = false; + this.endDateTimeEnable = true; + this.filteredFishingAreaLocations = null; + this.fishingAreaLocationLevelIds = LocationLevelGroups.FISHING_AREA; + this.metierTaxonGroupTypeIds = [TaxonGroupTypeIds.METIER_DCF_5]; + this.defaultIsParentOperation = true; + this.parentChanges = new EventEmitter(); + this.lastEndDateChanges = new EventEmitter(); + this.openParentOperation = new EventEmitter(); + this.selectInputContent = selectInputContent; + this.mobile = this.settings.mobile; + this.i18nFieldPrefix = 'TRIP.OPERATION.EDIT.'; + // A boolean control, to store if parent is a parent or child operation + this.isParentOperationControl = new UntypedFormControl(true, Validators.required); + } + set usageMode(usageMode) { + if (this._usageMode !== usageMode) { + this._usageMode = usageMode; + if (!this.loading) + this.updateFormGroup(); + } + } + get usageMode() { + return this._usageMode; + } + set showMetier(value) { + // Change metier filter button + if (this._showMetier !== value) { + this._showMetier = value; + if (!this.loading) + this.updateFormGroup(); + } + } + get showMetier() { + return this._showMetier; + } + set showMetierFilter(value) { + this._showMetierFilter = value; + // Change metier filter button + if (this._showMetierFilter !== this.autocompleteFilters.metier) { + this.toggleMetierFilter(null); + } + } + get showMetierFilter() { + return this._showMetierFilter; + } + set allowParentOperation(value) { + if (this._allowParentOperation !== value) { + this._allowParentOperation = value; + if (!this.loading) + this.updateFormGroup(); + } + } + get allowParentOperation() { + return this._allowParentOperation; + } + set showPosition(value) { + if (this._showPosition !== value) { + this._showPosition = value; + if (!this.loading) + this.updateFormGroup(); + } + } + get showPosition() { + return this._showPosition; + } + set boundingBox(value) { + if (this._boundingBox !== value) { + this._boundingBox = value; + console.debug('[operation-form] Position BBox: ' + value); + if (!this.loading) + this.updateFormGroup(); + } + } + get boundingBox() { + return this._boundingBox; + } + set showFishingArea(value) { + if (this._showFishingArea !== value) { + this._showFishingArea = value; + if (!this.loading) + this.updateFormGroup(); + } + } + get showFishingArea() { + return this._showFishingArea; + } + set requiredComment(value) { + if (this._requiredComment !== value) { + this._requiredComment = value; + const commentControl = this.form.get('comments'); + if (value) { + commentControl.setValidators(Validators.required); + commentControl.markAsPending({ onlySelf: true }); + } + else { + commentControl.clearValidators(); + } + commentControl.updateValueAndValidity({ emitEvent: !this.loading, onlySelf: true }); + if (this._requiredComment && !this.showComment) { + this.showComment = true; + this.markForCheck(); + } + } + } + get requiredComment() { + return this._requiredComment; + } + get trip() { + return this._trip; + } + set trip(value) { + this.setTrip(value); + } + get parentControl() { + var _a; + return (_a = this.form) === null || _a === void 0 ? void 0 : _a.controls.parentOperation; + } + get childControl() { + var _a; + return (_a = this.form) === null || _a === void 0 ? void 0 : _a.controls.childOperation; + } + get fishingAreasForm() { + var _a; + return (_a = this.form) === null || _a === void 0 ? void 0 : _a.controls.fishingAreas; + } + get qualityFlagControl() { + var _a; + return (_a = this.form) === null || _a === void 0 ? void 0 : _a.controls.qualityFlagId; + } + get physicalGearControl() { + var _a; + return (_a = this.form) === null || _a === void 0 ? void 0 : _a.controls.physicalGear; + } + get isParentOperation() { + return this._allowParentOperation && this.isParentOperationControl.value === true; + } + set isParentOperation(value) { + this.setIsParentOperation(value); + } + get isChildOperation() { + return this.isParentOperationControl.value !== true; + } + set isChildOperation(value) { + this.setIsParentOperation(!value); + } + enable(opts) { + super.enable(opts); + } + get formError() { + return this.getFormError(this.form); + } + get lastActivePositionControl() { + return this.endDateTimeEnable && this.form.get('endPosition') + || this.fishingEndDateTimeEnable && this.form.get('fishingEndPosition') + || this.fishingStartDateTimeEnable && this.form.get('fishingStartPosition') + || this.form.get('startPosition'); + } + get firstActivePositionControl() { + return this.form.get('startPosition') + || this.fishingStartDateTimeEnable && this.form.get('fishingStartPosition') + || this.fishingEndDateTimeEnable && this.form.get('fishingEndPosition') + || this.endDateTimeEnable && this.form.get('endPosition'); + } + get previousFishingEndDateTimeControl() { + return this.fishingStartDateTimeEnable && this.form.get('fishingStartDateTime') + || this.form.get('startDateTime'); + } + get lastStartDateTimeControl() { + return this.fishingStartDateTimeEnable && this.form.get('fishingStartDateTime') + || this.form.get('startDateTime'); + } + get previousEndDateTimeControl() { + return this.fishingEndDateTimeEnable && this.form.get('fishingEndDateTime') + || this.fishingStartDateTimeEnable && this.form.get('fishingStartDateTime') + || this.form.get('startDateTime'); + } + get isNewData() { + var _a; + return isNil((_a = this.form) === null || _a === void 0 ? void 0 : _a.controls.id.value); + } + ngOnInit() { + const isOnFieldMode = this.settings.isOnFieldMode(this.usageMode); + this.usageMode = isOnFieldMode ? 'FIELD' : 'DESK'; + this.latLongFormat = this.settings.latLongFormat; + this.enableGeolocation = isOnFieldMode && this.mobile; + this._allowParentOperation = toBoolean(this._allowParentOperation, false); + this.enableCopyPosition = !this.enableGeolocation; + super.ngOnInit(); + // Combo: physicalGears + const physicalGearAttributes = ['rankOrder'] + .concat(this.settings.getFieldDisplayAttributes('gear') + .map(key => 'gear.' + key)); + this.registerAutocompleteField('physicalGear', { + items: this._$physicalGears, + attributes: physicalGearAttributes, + mobile: this.mobile, + showAllOnFocus: true + }); + // Combo: fishingAreas + const fishingAreaAttributes = this.settings.getFieldDisplayAttributes('fishingAreaLocation', + // TODO: find a way to configure/change this array dynamically (by a set/get input + set by program's option) + // Est-ce que la SFA a besoin des deux info, label et name ? Par ACSOT/PIFIL non, sur les rect stats + ['label', 'name']); + this.registerAutocompleteField('fishingAreaLocation', { + suggestFn: (value, filter) => this.suggestFishingAreaLocations(value, Object.assign(Object.assign({}, filter), { levelIds: this.fishingAreaLocationLevelIds })), + filter: { + entityName: 'Location', + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE] + }, + attributes: fishingAreaAttributes, + suggestLengthThreshold: 2, + mobile: this.mobile + }); + // Taxon group combo + this.registerAutocompleteField('taxonGroup', { + suggestFn: (value, filter) => this.suggestMetiers(value, filter), + mobile: this.mobile + }); + // Listen physical gear, to enable/disable metier + this.registerSubscription(this.form.get('physicalGear').valueChanges + .pipe(distinctUntilChanged((o1, o2) => EntityUtils.equals(o1, o2, 'id'))) + .subscribe((physicalGear) => this.onPhysicalGearChanged(physicalGear))); + // Listen parent operation + this.registerSubscription(this.parentControl.valueChanges + .subscribe(value => this.onParentOperationChanged(value))); + const fishingEndDateTimeControl = this.form.get('fishingEndDateTime'); + const endDateTimeControl = this.form.get('endDateTime'); + this.registerSubscription(combineLatest([ + fishingEndDateTimeControl + .valueChanges + .pipe(filter(_ => this.fishingEndDateTimeEnable), startWith(fishingEndDateTimeControl.value) // Need by combineLatest (must be after filter) + ), + endDateTimeControl + .valueChanges + .pipe(filter(_ => this.endDateTimeEnable), startWith(endDateTimeControl.value) // Need by combineLatest (must be after filter) + ) + ]) + .pipe(debounceTime(250), map(([d1, d2]) => DateUtils.max(fromDateISOString(d1), fromDateISOString(d2))), distinctUntilChanged()) + .subscribe(max => this.lastEndDateChanges.next(max))); + this.registerSubscription(this.isParentOperationControl.valueChanges + .pipe(distinctUntilChanged()) + .subscribe(value => this.setIsParentOperation(value))); + } + ngOnReady() { + if (this.debug) + console.debug('[operation-form] Form is ready!'); + if (!this.allowParentOperation) + this.updateFormGroup(); + } + ngOnDestroy() { + var _a; + super.ngOnDestroy(); + this._$physicalGears.complete(); + this._$metiers.complete(); + this.$parentOperationLabel.complete(); + (_a = this._positionSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + } + reset(data, opts) { + this.setValue(data || new Operation(), opts); + } + setValue(data, opts) { + const _super = Object.create(null, { + setValue: { get: () => super.setValue } + }); + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + // Wait ready (= form group updated, by the parent page) + yield this.ready(); + const isNew = isNil(data === null || data === void 0 ? void 0 : data.id); + // Use trip physical gear Object (if possible) + const physicalGear = data.physicalGear; + const physicalGears = this._$physicalGears.value; + if (physicalGear && isNotNil(physicalGear.id) && isNotEmptyArray(physicalGears)) { + data.physicalGear = physicalGears.find(g => g.id === physicalGear.id) || physicalGear; + } + // If parent or child operation + const isChildOperation = data && isNotNil((_a = data.parentOperation) === null || _a === void 0 ? void 0 : _a.id) || !this.defaultIsParentOperation; + const isParentOperation = !isChildOperation && (isNotNil((_b = data.childOperation) === null || _b === void 0 ? void 0 : _b.id) || this.allowParentOperation); + if (isChildOperation || isParentOperation) { + this._allowParentOperation = true; // do not use setter to not update form group + this.setIsParentOperation(isParentOperation, { emitEvent: false }); + if (isChildOperation) + this.updateFormGroup({ emitEvent: false }); + } + // Use label and name from metier.taxonGroup + if (!isNew && (data === null || data === void 0 ? void 0 : data.metier)) { + data.metier = data.metier.clone(); // Leave original object unchanged + data.metier.label = data.metier.taxonGroup && data.metier.taxonGroup.label || data.metier.label; + data.metier.name = data.metier.taxonGroup && data.metier.taxonGroup.name || data.metier.name; + } + if (!isNew && !this._showPosition) { + data.positions = []; + data.startPosition = null; + data.endPosition = null; + } + if (!isNew && !this._showFishingArea) + data.fishingAreas = []; + if (!isNew && this._showFishingArea && data.fishingAreas.length) { + this.fishingAreasHelper.resize(Math.max(data.fishingAreas.length, 1)); + } + if (isParentOperation && DataEntityUtils.hasNoQualityFlag(data)) { + data.qualityFlagId = QualityFlagIds.NOT_COMPLETED; + } + this.canEditType = isNew; + setTimeout(() => { + this.lastEndDateChanges.emit(DateUtils.max(this.fishingEndDateTimeEnable && data.fishingEndDateTime, this.endDateTimeEnable && data.endDateTime)); + }); + // Send value for form + if (this.debug) + console.debug('[operation-form] Updating form (using entity)', data); + _super.setValue.call(this, data, opts); + }); + } + setTrip(trip) { + this._trip = trip; + if (trip) { + // Propagate physical gears + const gearLabelPath = 'measurementValues.' + PmfmIds.GEAR_LABEL; + const physicalGears = (trip.gears || []).map((pg, i) => { + const pgCopy = PhysicalGear.fromObject(pg).clone(); + // Keep children (need by selection operation page) + //physicalGear.children = null; + // Use physical gear label, if present (see issue #314) + const physicalGearLabel = getPropertyByPath(pg, gearLabelPath); + if (isNotNilOrBlank(physicalGearLabel)) { + pgCopy.gear.name = physicalGearLabel; + } + return pgCopy; + }); + this._$physicalGears.next(physicalGears); + // Use trip physical gear Object (if possible) + const physicalGearControl = this.form.get('physicalGear'); + let physicalGear = physicalGearControl.value; + if (physicalGear && isNotNil(physicalGear.id)) { + physicalGear = physicalGears.find(g => g.id === physicalGear.id) || physicalGear; + if (physicalGear) + physicalGearControl.patchValue(physicalGear); + } + // Update form group + if (!this.loading) + this.updateFormGroup(); + } + } + /** + * // Fill dates using the trip's dates + */ + fillWithTripDates() { + if (!this.trip) + return; + const endDateTime = fromDateISOString(this.trip.returnDateTime).clone(); + endDateTime.subtract(1, 'second'); + this.form.patchValue({ startDateTime: this.trip.departureDateTime, endDateTime }); + } + setChildOperation(value, opts) { + this.childControl.setValue(value, opts); + if (!opts || opts.emitEvent !== false) { + this.updateFormGroup(); + } + } + setParentOperation(value, opts) { + return __awaiter(this, void 0, void 0, function* () { + this.parentControl.setValue(value, opts); + yield this.onParentOperationChanged(value, { emitEvent: false }); + if (!opts || opts.emitEvent !== false) { + this.updateFormGroup(); + } + }); + } + /** + * Get the position by GPS sensor + * + * @param fieldName + */ + onFillPositionClick(event, fieldName) { + return __awaiter(this, void 0, void 0, function* () { + if (event) { + event.preventDefault(); + event.stopPropagation(); // Avoid focus into the longitude field + } + const positionGroup = this.form.controls[fieldName]; + if (positionGroup && positionGroup instanceof UntypedFormGroup) { + try { + // Show loading spinner, when first time + if (this._showGeolocationSpinner) + this.markAsLoading(); + // Get position + const coords = yield this.operationService.getCurrentPosition(); + positionGroup.patchValue(coords, { emitEvent: false, onlySelf: true }); + // OK, next time not need to show a spinner + this._showGeolocationSpinner = false; + } + catch (err) { + this._showGeolocationSpinner = true; + // Display error to user + let message = (err === null || err === void 0 ? void 0 : err.message) || err; + if (typeof message === 'object') + message = JSON.stringify(message); + this.setError(this.translate.instant('ERROR.GEOLOCATION_ERROR', { message: this.translate.instant(message) })); + return; // Stop here + } + finally { + // Hide loading spinner + if (this.loading) + this.markAsLoaded(); + } + } + // Set also the end date time + if (fieldName === 'endPosition') { + const endDateTimeControlName = this.isChildOperation ? 'endDateTime' : 'fishingStartDateTime'; + this.form.get(endDateTimeControlName).setValue(moment(), { emitEvent: false, onlySelf: true }); + } + this.form.markAsDirty({ onlySelf: true }); + this.form.updateValueAndValidity(); + this.updateDistance({ emitEvent: false /* done after */ }); + this.markForCheck(); + }); + } + copyPosition(event, source, target) { + if (event) { + event.preventDefault(); + event.stopPropagation(); + } + const value = this.form.get(source).value; + if (!target && source === 'startPosition') { + target = (this.fishingStartDateTimeEnable && 'fishingStartPosition') + || (this.fishingEndDateTimeEnable && 'fishingEndPosition') + || (this.endDateTimeEnable && 'endPosition') || undefined; + } + if (!target) + return; // Skip + this.distanceWarning = false; + this.distance = 0; + this.form.get(target).patchValue({ + latitude: value.latitude, + longitude: value.longitude + }, { emitEvent: true }); + this.markAsDirty(); + } + openSelectOperationModal() { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const currentOperation = this.form.value; + const parent = currentOperation.parentOperation; + const trip = this.trip; + const tripDate = trip && fromDateISOString(trip.departureDateTime).clone() || moment(); + const startDate = tripDate.add(-15, 'day').startOf('day'); + const gearIds = removeDuplicatesFromArray((this._$physicalGears.value || []).map(physicalGear => physicalGear.gear.id)); + const modal = yield this.modalCtrl.create({ + component: SelectOperationModal, + componentProps: { + filter: { + programLabel: this.programLabel, + vesselId: trip && ((_a = trip.vesselSnapshot) === null || _a === void 0 ? void 0 : _a.id), + excludedIds: isNotNil(currentOperation.id) ? [currentOperation.id] : null, + excludeChildOperation: true, + hasNoChildOperation: true, + startDate, + //endDate, // No end date + gearIds + }, + gearIds, + parent, + enableGeolocation: this.enableGeolocation + }, + keyboardClose: true, + cssClass: 'modal-large' + }); + yield modal.present(); + const { data } = yield modal.onDidDismiss(); + if (data && this.debug) + console.debug('[operation-form] Modal result: ', data); + return (data instanceof Operation) ? data : undefined; + }); + } + onParentOperationChanged(parentOperation, opts) { + return __awaiter(this, void 0, void 0, function* () { + parentOperation = parentOperation || this.parentControl.value; + if (this.debug) + console.debug('[operation-form] Parent operation changed: ', parentOperation); + if (!opts || opts.emitEvent !== false) { + this.parentChanges.emit(parentOperation); + } + // Compute parent operation label + let parentLabel = ''; + if (isNotNil(parentOperation === null || parentOperation === void 0 ? void 0 : parentOperation.id)) { + parentLabel = (yield this.translate.get(this.i18nFieldPrefix + 'TITLE_NO_RANK', { + startDateTime: parentOperation.startDateTime && this.dateFormat.transform(parentOperation.startDateTime, { time: true }) + }).toPromise()); + // Append end time + if (parentOperation.fishingStartDateTime && !parentOperation.startDateTime.isSame(parentOperation.fishingStartDateTime)) { + const endSuffix = this.dateFormat.transform(parentOperation.fishingStartDateTime, { pattern: 'HH:mm' }); + parentLabel += ' -> ' + endSuffix; + } + } + this.$parentOperationLabel.next(parentLabel); + }); + } + addParentOperation() { + return __awaiter(this, void 0, void 0, function* () { + const parentOperation = yield this.openSelectOperationModal(); + // User cancelled + if (!parentOperation) { + this.parentControl.markAsTouched(); + this.parentControl.markAsDirty(); + this.markForCheck(); + return; + } + // DEBUG + console.debug('[operation-form] Set parent operation', parentOperation); + const form = this.form; + const metierControl = form.get('metier'); + const physicalGearControl = form.get('physicalGear'); + const startPositionControl = form.get('startPosition'); + const fishingStartPositionControl = form.get('fishingStartPosition'); + const fishingEndPositionControl = form.get('fishingEndPosition'); + const endPositionControl = form.get('endPosition'); + const startDateTimeControl = form.get('startDateTime'); + const fishingStartDateTimeControl = form.get('fishingStartDateTime'); + const qualityFlagIdControl = form.get('qualityFlagId'); + const fishingAreasControl = this._showFishingArea && form.get('fishingAreas'); + this.parentControl.setValue(parentOperation); + if (this._trip.id === parentOperation.tripId) { + physicalGearControl.patchValue(parentOperation.physicalGear); + metierControl.patchValue(parentOperation.metier); + } + // Parent is not on the same trip + else { + // Load physical gear with measurements + let physicalGear = (yield this.physicalGearService.load(parentOperation.physicalGear.id, parentOperation.tripId)); + // Clean the local id, before searching (avoid false positive, because local ids are used many times, in different trips) + if (EntityUtils.isLocalId(physicalGear.id)) { + physicalGear.id = undefined; + } + // Find trip's similar gears + const physicalGearMatches = (yield firstNotNilPromise(this._$physicalGears, { stop: this.destroySubject })) + .filter(pg => PhysicalGear.equals(physicalGear, pg, { withMeasurementValues: true, withRankOrder: false })); + if (isEmptyArray(physicalGearMatches)) { + physicalGear.id = undefined; + physicalGear.trip = undefined; + physicalGear.tripId = this.trip.id; + physicalGear.rankOrder = null; // Will be computed when saving + physicalGear.synchronizationStatus = null; + physicalGear.updateDate = null; + // Use gear label, if any + const physicalGearLabel = getPropertyByPath(physicalGear, `measurementValues.${PmfmIds.GEAR_LABEL}`); + if (isNotNilOrBlank(physicalGearLabel)) { + physicalGear.gear.name = physicalGearLabel; + } + // Append this gear to the list + this._$physicalGears.next([...physicalGearMatches, physicalGear]); + } + else { + // Sort by score (desc) + if (physicalGearMatches.length > 1) { + physicalGearMatches.sort(PhysicalGear.scoreComparator(physicalGear, 'desc', { withMeasurementValues: true, withRankOrder: true })); + if (this.debug) + console.warn('[operation-form] Several matching physical gear on trip', physicalGearMatches); + } + // Keep the best match + physicalGear = physicalGearMatches[0]; + } + physicalGearControl.setValue(physicalGear); + // Use the parent metier + metierControl.patchValue(parentOperation.metier); + yield this.loadMetiers(physicalGear); + } + // Copy positions + if (this._showPosition) { + // Copy parent's positions + this.setPosition(startPositionControl, parentOperation.startPosition); + if (this.fishingStartDateTimeEnable) + this.setPosition(fishingStartPositionControl, parentOperation.fishingStartPosition); + // Init child default position + if (this.fishingEndDateTimeEnable) + this.setPosition(fishingEndPositionControl, parentOperation.startPosition); + if (this.endDateTimeEnable) + this.setPosition(endPositionControl, parentOperation.fishingStartPosition); + } + // Copy fishing area + if (this._showFishingArea && isNotEmptyArray(parentOperation.fishingAreas)) { + const fishingAreasCopy = parentOperation.fishingAreas + .filter(fa => ReferentialUtils.isNotEmpty(fa.location)) + .map(fa => ({ location: fa.location })); + if (isNotEmptyArray(fishingAreasCopy) && this.fishingAreasHelper.size() <= 1) { + this.fishingAreasHelper.resize(fishingAreasCopy.length); + fishingAreasControl.patchValue(fishingAreasCopy); + } + } + startDateTimeControl.patchValue(parentOperation.startDateTime); + fishingStartDateTimeControl.patchValue(parentOperation.fishingStartDateTime); + qualityFlagIdControl.patchValue(null); // Reset quality flag, on a child operation + this.markAsDirty(); + return parentOperation; + }); + } + addFishingArea() { + this.fishingAreasHelper.add(); + if (!this.mobile) { + this.fishingAreaFocusIndex = this.fishingAreasHelper.size() - 1; + } + } + toggleMetierFilter(event, field) { + return __awaiter(this, void 0, void 0, function* () { + if (event) + event.preventDefault(); + this.toggleFilter('metier'); + if (!this.loading) { + // Refresh metiers + const physicalGear = this.form.get('physicalGear').value; + yield this.loadMetiers(physicalGear, { showAlertIfFailed: true, reloadIfFailed: false }); + if (field) + field.reloadItems(); + } + }); + } + toggleFilter(fieldName, field) { + this.setFieldFilterEnable(fieldName, !this.isFieldFilterEnable(fieldName), field); + } + toggleComment() { + this.showComment = !this.showComment; + if (!this.showComment) { + this.form.get('comments').setValue(null); + } + this.markForCheck(); + } + translateControlPath(controlPath) { + return this.operationService.translateControlPath(controlPath, { i18nPrefix: this.i18nFieldPrefix }); + } + /* -- protected methods -- */ + updateFormGroup(opts) { + const validatorOpts = { + isOnFieldMode: this.usageMode === 'FIELD', + trip: this.trip, + isParent: this.allowParentOperation && this.isParentOperation, + isChild: this.allowParentOperation && this.isChildOperation, + withMetier: this._showMetier, + withPosition: this._showPosition, + withFishingAreas: this._showFishingArea, + withFishingStart: this.fishingStartDateTimeEnable, + withFishingEnd: this.fishingEndDateTimeEnable, + withEnd: this.endDateTimeEnable, + maxDistance: this.maxDistanceError, + boundingBox: this._boundingBox, + maxShootingDurationInHours: this.maxShootingDurationInHours, + maxTotalDurationInHours: this.maxTotalDurationInHours + }; + // DEBUG + console.debug(`[operation] Updating form group (validators)`, validatorOpts); + this.validatorService.updateFormGroup(this.form, validatorOpts); + if (validatorOpts.withFishingAreas) + this.initFishingAreas(this.form); + this.initPositionSubscription(); + if (!opts || opts.emitEvent !== false) { + this.form.updateValueAndValidity(); + this.markForCheck(); + } + } + onPhysicalGearChanged(physicalGear) { + return __awaiter(this, void 0, void 0, function* () { + const metierControl = this.form.get('metier'); + const physicalGearControl = this.form.get('physicalGear'); + const hasPhysicalGear = EntityUtils.isNotEmpty(physicalGear, 'id'); + const gears = this._$physicalGears.getValue() || this._trip && this._trip.gears; + // Use same trip's gear Object (if found) + if (hasPhysicalGear && isNotEmptyArray(gears)) { + physicalGear = (gears || []).find(g => g.id === physicalGear.id); + physicalGearControl.patchValue(physicalGear, { emitEvent: false }); + } + // Change metier status, if need + if (this._showMetier) { + const enableMetier = hasPhysicalGear && this.form.enabled && isNotEmptyArray(gears) || this.allowParentOperation; + if (enableMetier) { + if (metierControl.disabled) + metierControl.enable(); + // Refresh metiers + yield this.loadMetiers(physicalGear); + } + else { + if (metierControl.enabled) + metierControl.disable(); + } + } + }); + } + loadMetiers(physicalGear, opts = { + showAlertIfFailed: false, + reloadIfFailed: true + }) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + // Reset previous value + if (isNotNil(this._$metiers.value)) + this._$metiers.next(null); + // No gears selected: skip + if (EntityUtils.isEmpty(physicalGear, 'id') || !this._showMetier) + return; + yield this.ready(); + const gear = physicalGear === null || physicalGear === void 0 ? void 0 : physicalGear.gear; + console.debug('[operation-form] Loading Metier ref items for the gear: ' + (gear === null || gear === void 0 ? void 0 : gear.label)); + let res; + if (this.autocompleteFilters.metier) { + res = yield this.operationService.loadPracticedMetier(0, 30, null, null, Object.assign(Object.assign({}, METIER_DEFAULT_FILTER), { searchJoin: 'TaxonGroup', vesselId: this.trip.vesselSnapshot.id, startDate: this.startProgram, endDate: DateUtils.moment().add(1, 'day'), programLabel: this.programLabel, gearIds: gear && [gear.id], levelId: gear && gear.id || undefined })); + } + else { + res = yield this.referentialRefService.loadAll(0, 100, null, null, Object.assign(Object.assign({}, METIER_DEFAULT_FILTER), { searchJoin: 'TaxonGroup', searchJoinLevelIds: this.metierTaxonGroupTypeIds, levelId: gear && gear.id || undefined }), { withTotal: true }); + } + // No result in filtered metier: retry with all metiers + if (this.autocompleteFilters.metier && isEmptyArray(res.data)) { + // Warn the user + if (opts.showAlertIfFailed) { + yield Alerts.showError('TRIP.OPERATION.ERROR.CANNOT_ENABLE_FILTER_METIER_NO_DATA', this.alertCtrl, this.translate, { + titleKey: 'TRIP.OPERATION.ERROR.CANNOT_ENABLE_FILTER' + }, {}); + } + // Back to unfiltered list, then loop + this.toggleFilter('metier'); + if (opts.reloadIfFailed) { + return this.loadMetiers(physicalGear); + } + return; + } + const metierControl = this.form.get('metier'); + const metier = metierControl.value; + if (ReferentialUtils.isNotEmpty(metier)) { + // Find new reference, by ID + let updatedMetier = (res.data || []).find(m => m.id === metier.id); + // If not found : retry using the label (WARN: because of searchJoin, label = taxonGroup.label) + updatedMetier = updatedMetier || (res.data || []).find(m => m.label === metier.label); + // Check if update metier is need (e.g. ID changed) + if (updatedMetier && !ReferentialUtils.equals(metier, updatedMetier)) { + metierControl.patchValue(updatedMetier); + } + // Check if need to reset metier + else if (!updatedMetier && !this.loading && !this.isChildOperation) { + // Retry without filter + if (this.autocompleteFilters.metier) { + this.toggleFilter('metier'); + return this.loadMetiers(physicalGear); // Loop + } + // Or clean + console.warn('[operation-form] Cleaning metier, as it has not been found in metier'); + metierControl.patchValue(null); + } + } + if (((_a = res.data) === null || _a === void 0 ? void 0 : _a.length) === 1 && ReferentialUtils.isEmpty(metier)) { + metierControl.patchValue(res.data[0]); + } + this._$metiers.next(res); + }); + } + setIsParentOperation(isParent, opts) { + var _a; + if (this.debug) + console.debug('[operation-form] Is parent operation ? ', isParent); + if (this.isParentOperationControl.value !== isParent) { + this.isParentOperationControl.setValue(isParent, opts); + } + const emitEvent = (!opts || opts.emitEvent !== false); + // Parent operation (= Filage) (or parent not used) + if (isParent) { + if (emitEvent) { + // Clean child fields + this.form.patchValue({ + fishingEndDateTime: null, + endDateTime: null, + physicalGear: null, + metier: null, + parentOperation: null + }); + this.updateFormGroup(); + } + // Silent mode + else { + if (!this.childControl) + this.updateFormGroup({ emitEvent: false }); // Create the child control + // Make sure qualityFlag has been set + this.qualityFlagControl.reset(QualityFlagIds.NOT_COMPLETED, { emitEvent: false }); + } + } + // Child operation (=Virage) + else { + if (emitEvent) { + if (!this.parentControl.value) { + // Copy parent fields -> child fields + const dates = [this.form.get('startDateTime').value, this.form.get('fishingStartDateTime').value].filter(isNotNil); + if (this.fishingEndDateTimeEnable && isNotEmptyArray(dates)) { + this.form.get('fishingEndDateTime').patchValue(dates.shift()); + } + if (this.endDateTimeEnable && isNotEmptyArray(dates)) { + this.form.get('endDateTime').patchValue(dates.shift()); + } + if (this.showFishingArea) + (_a = this.form.get('fishingAreas')) === null || _a === void 0 ? void 0 : _a.patchValue(this.form.get('fishingAreas').value); + // Clean parent fields (should be filled after parent selection) + this.form.patchValue({ + startDateTime: null, + fishingStartDateTime: null, + physicalGear: null, + metier: null, + childOperation: null + }); + this.updateFormGroup(); + // Select a parent (or same if user cancelled) + this.addParentOperation(); + } + } + // Silent mode + else { + // Reset qualityFlag + this.qualityFlagControl.reset(null, { emitEvent: false }); + } + } + } + getI18nFieldName(path) { + // Replace 'metier' control name, by the UI field name + if (path === 'metier') + path = 'targetSpecies'; + return super.getI18nFieldName(path); + } + setPosition(positionControl, position) { + const latitudeControl = positionControl.get('latitude'); + const longitudeControl = positionControl.get('longitude'); + if (isNil(latitudeControl) || isNil(longitudeControl)) { + console.warn('[operation-form] This control does not contains longitude or latitude field'); + return; + } + latitudeControl.patchValue(toNumber(position === null || position === void 0 ? void 0 : position.latitude, null)); + longitudeControl.patchValue(toNumber(position === null || position === void 0 ? void 0 : position.longitude, null)); + } + updateDistance(opts = { emitEvent: true }) { + if (!this._showPosition) + return; // Skip + const startPosition = this.form.get('startPosition').value; + const endPositionControl = this.lastActivePositionControl; + const endPosition = endPositionControl === null || endPositionControl === void 0 ? void 0 : endPositionControl.value; + if (!startPosition || !endPosition) { + this.distance = undefined; + this.distanceWarning = false; + // Force to update the end control error + if (endPositionControl === null || endPositionControl === void 0 ? void 0 : endPositionControl.hasError('maxDistance')) { + endPositionControl.updateValueAndValidity({ emitEvent: false }); + } + } + else { + this.distance = PositionUtils.computeDistanceInMiles(startPosition, endPosition); + if (this.debug) + console.debug('[operation-form] Distance between position: ' + this.distance); + // Distance > max distance warn + const distanceError = isNotNilOrNaN(this.distance) && this.maxDistanceError > 0 && this.distance > this.maxDistanceError; + this.distanceWarning = isNotNilOrNaN(this.distance) && !distanceError + && this.maxDistanceWarning > 0 && this.distance > this.maxDistanceWarning; + // Force to update the end control error + if (distanceError || endPositionControl.hasError('maxDistance')) { + endPositionControl.updateValueAndValidity({ emitEvent: false }); + } + } + if (!opts || !opts.emitEvent !== false) { + this.markForCheck(); + } + } + suggestMetiers(value, filter) { + return __awaiter(this, void 0, void 0, function* () { + if (ReferentialUtils.isNotEmpty(value)) + return { data: [value] }; + // Replace '*' character by undefined + if (!value || value === '*') { + value = undefined; + } + // trim search text, and ignore some characters + else if (value && typeof value === 'string') { + value = value.trim().replace(TEXT_SEARCH_IGNORE_CHARS_REGEXP, '*'); + } + let res = this._$metiers.value; + if (isNil(res === null || res === void 0 ? void 0 : res.data)) { + console.debug('[operation-form] Waiting metier to be loaded...'); + res = yield firstNotNilPromise(this._$metiers, { stop: this.destroySubject }); + } + return suggestFromArray(res.data, value, filter); + }); + } + suggestFishingAreaLocations(value, filter) { + return __awaiter(this, void 0, void 0, function* () { + const currentControlValue = ReferentialUtils.isNotEmpty(value) ? value : null; + // Excluded existing locations, BUT keep the current control value + const excludedIds = (this.fishingAreasForm.value || []) + .map(fa => fa.location) + .filter(ReferentialUtils.isNotEmpty) + .filter(item => !currentControlValue || currentControlValue !== item) + .map(item => parseInt(item.id)); + if (this.autocompleteFilters.fishingArea && isNotNil(this.filteredFishingAreaLocations)) { + return suggestFromArray(this.filteredFishingAreaLocations, value, Object.assign(Object.assign({}, filter), { excludedIds })); + } + else { + return this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { excludedIds })); + } + }); + } + isFieldFilterEnable(fieldName) { + return this.autocompleteFilters[fieldName]; + } + setFieldFilterEnable(fieldName, value, field, forceReload) { + if (this.autocompleteFilters[fieldName] !== value || forceReload) { + this.autocompleteFilters[fieldName] = value; + this.markForCheck(); + if (field) + field.reloadItems(); + } + } + initFishingAreas(form) { + this.fishingAreasHelper = new FormArrayHelper(FormArrayHelper.getOrCreateArray(this.formBuilder, form, 'fishingAreas'), (fishingArea) => this.fishingAreaValidatorService.getFormGroup(fishingArea, { required: true }), (o1, o2) => isNil(o1) && isNil(o2) || (o1 && o1.equals(o2)), (fishingArea) => !fishingArea || ReferentialUtils.isEmpty(fishingArea.location), { allowEmptyArray: false }); + if (this.fishingAreasHelper.size() === 0) { + this.fishingAreasHelper.resize(1); + } + //this.fishingAreasHelper.formArray.setValidators(SharedFormArrayValidators.requiredArrayMinLength(1)); + } + initPositionSubscription() { + var _a; + (_a = this._positionSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + if (!this.showPosition) + return; + const subscription = merge(this.form.get('startPosition').valueChanges, this.lastActivePositionControl.valueChanges) + .pipe(debounceTime(200)) + .subscribe(_ => this.updateDistance()); + this.registerSubscription(subscription); + this._positionSubscription = subscription; + subscription.add(() => { + this.unregisterSubscription(subscription); + this._positionSubscription = null; + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", String) +], OperationForm.prototype, "programLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationForm.prototype, "showComment", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationForm.prototype, "fishingStartDateTimeEnable", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationForm.prototype, "fishingEndDateTimeEnable", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationForm.prototype, "endDateTimeEnable", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], OperationForm.prototype, "defaultLatitudeSign", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], OperationForm.prototype, "defaultLongitudeSign", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], OperationForm.prototype, "filteredFishingAreaLocations", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], OperationForm.prototype, "fishingAreaLocationLevelIds", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], OperationForm.prototype, "metierTaxonGroupTypeIds", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], OperationForm.prototype, "maxDistanceWarning", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], OperationForm.prototype, "maxDistanceError", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], OperationForm.prototype, "maxShootingDurationInHours", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], OperationForm.prototype, "maxTotalDurationInHours", void 0); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], OperationForm.prototype, "usageMode", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], OperationForm.prototype, "showMetier", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], OperationForm.prototype, "showMetierFilter", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], OperationForm.prototype, "allowParentOperation", null); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationForm.prototype, "defaultIsParentOperation", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], OperationForm.prototype, "showPosition", null); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], OperationForm.prototype, "boundingBox", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], OperationForm.prototype, "showFishingArea", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], OperationForm.prototype, "requiredComment", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], OperationForm.prototype, "isParentOperation", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], OperationForm.prototype, "isChildOperation", null); +__decorate([ + Output(), + __metadata("design:type", Object) +], OperationForm.prototype, "parentChanges", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], OperationForm.prototype, "lastEndDateChanges", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], OperationForm.prototype, "openParentOperation", void 0); +OperationForm = __decorate([ + Component({ + selector: 'app-form-operation', + templateUrl: './operation.form.html', + styleUrls: ['./operation.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __param(14, Optional()), + __metadata("design:paramtypes", [Injector, + Router, + DateFormatService, + OperationValidatorService, + ReferentialRefService, + ModalController, + AlertController, + AccountService, + OperationService, + PhysicalGearService, + PmfmService, + UntypedFormBuilder, + FishingAreaValidatorService, + ChangeDetectorRef, + Geolocation]) +], OperationForm); +export { OperationForm }; +//# sourceMappingURL=operation.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/operation.form.js.map b/out-tsc/app/app/trip/operation/operation.form.js.map new file mode 100644 index 000000000..be4087518 --- /dev/null +++ b/out-tsc/app/app/trip/operation/operation.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"operation.form.js","sourceRoot":"","sources":["../../../../../src/app/trip/operation/operation.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/operation.module.js b/out-tsc/app/app/trip/operation/operation.module.js new file mode 100644 index 000000000..88c2d3480 --- /dev/null +++ b/out-tsc/app/app/trip/operation/operation.module.js @@ -0,0 +1,70 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { OperationForm } from './operation.form'; +import { OperationPage } from './operation.page'; +import { OperationsTable } from './operations.table'; +import { LeafletModule } from '@asymmetrik/ngx-leaflet'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { AppDataModule } from '@app/data/data.module'; +import { OperationsMap } from './map/operations.map'; +import { TranslateModule } from '@ngx-translate/core'; +import { CommonModule } from '@angular/common'; +import { AppCoreModule } from '@app/core/core.module'; +import { SelectOperationModal } from '@app/trip/operation/select-operation.modal'; +import { SelectOperationByTripTable } from '@app/trip/operation/select-operation-by-trip.table'; +import { VesselModule } from '@app/vessel/vessel.module'; +import { AppBatchModule } from '@app/trip/batch/batch.module'; +import { AppMeasurementModule } from '@app/data/measurement/measurement.module'; +import { AppPhysicalGearModule } from '@app/trip/physicalgear/physical-gear.module'; +import { AppSampleModule } from '@app/trip/sample/sample.module'; +import { OperationIconComponent } from '@app/trip/operation/icon/operation-icon.component'; +import { OperationsMapModal } from '@app/trip/operation/map/operations-map.modal'; +import { AppExtractionButtonModule } from '@app/extraction/button/extraction-button.module'; +let AppOperationModule = class AppOperationModule { + constructor() { + console.debug('[operation] Creating module...'); + } +}; +AppOperationModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + LeafletModule, + TranslateModule.forChild(), + // App module + AppCoreModule, + AppReferentialModule, + AppDataModule, + VesselModule, + AppExtractionButtonModule, + // Functional modules + AppMeasurementModule, + AppBatchModule, + AppSampleModule, + AppPhysicalGearModule + ], + declarations: [ + OperationsTable, + OperationsMap, + OperationsMapModal, + OperationForm, + OperationPage, + SelectOperationModal, + SelectOperationByTripTable, + OperationIconComponent + ], + exports: [ + LeafletModule, + // Components + OperationsTable, + OperationsMap, + OperationsMapModal, + OperationForm, + OperationPage, + OperationIconComponent + ] + }), + __metadata("design:paramtypes", []) +], AppOperationModule); +export { AppOperationModule }; +//# sourceMappingURL=operation.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/operation.module.js.map b/out-tsc/app/app/trip/operation/operation.module.js.map new file mode 100644 index 000000000..fda9ccaff --- /dev/null +++ b/out-tsc/app/app/trip/operation/operation.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"operation.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/operation/operation.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mDAAmD,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AA0CrF,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAE7B;QACE,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAClD,CAAC;CACF,CAAA;AALY,kBAAkB;IAxC9B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAE1B,aAAa;YACb,aAAa;YACb,oBAAoB;YACpB,aAAa;YACb,YAAY;YACZ,yBAAyB;YAEzB,qBAAqB;YACrB,oBAAoB;YACpB,cAAc;YACd,eAAe;YACf,qBAAqB;SACtB;QACD,YAAY,EAAE;YACZ,eAAe;YACf,aAAa;YACb,kBAAkB;YAClB,aAAa;YACb,aAAa;YACb,oBAAoB;YACpB,0BAA0B;YAC1B,sBAAsB;SACvB;QACD,OAAO,EAAE;YACP,aAAa;YACb,aAAa;YACb,eAAe;YACf,aAAa;YACb,kBAAkB;YAClB,aAAa;YACb,aAAa;YACb,sBAAsB;SACvB;KACF,CAAC;;GACW,kBAAkB,CAK9B;SALY,kBAAkB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/operation.page.js b/out-tsc/app/app/trip/operation/operation.page.js new file mode 100644 index 000000000..b58d19fd8 --- /dev/null +++ b/out-tsc/app/app/trip/operation/operation.page.js @@ -0,0 +1,1433 @@ +var OperationPage_1; +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, Optional, ViewChild } from '@angular/core'; +import { OperationService } from './operation.service'; +import { OperationForm } from './operation.form'; +import { TripService } from '../trip/trip.service'; +import { MeasurementsForm } from '@app/data/measurement/measurements.form.component'; +import { AppEditorOptions, AppFormUtils, AppHelpModal, DateUtils, EntityUtils, fadeInOutAnimation, FilesUtils, firstNotNilPromise, fromDateISOString, Hotkeys, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, MINIFY_ENTITY_FOR_LOCAL_STORAGE, ReferentialUtils, sleep, toBoolean, toInt, toNumber, } from '@sumaris-net/ngx-components'; +import { debounceTime, distinctUntilChanged, filter, map, mergeMap, startWith, switchMap, takeUntil, tap, throttleTime } from 'rxjs/operators'; +import { Validators } from '@angular/forms'; +import { Operation, OperationUtils } from '../trip/trip.model'; +import { OperationPasteFlags, ProgramProperties } from '@app/referential/services/config/program.config'; +import { AcquisitionLevelCodes, PmfmIds, QualitativeLabels, QualityFlagIds } from '@app/referential/services/model/model.enum'; +import { environment } from '@environments/environment'; +import { from, merge, of, Subscription, timer } from 'rxjs'; +import { MeasurementUtils } from '@app/data/measurement/measurement.model'; +import { ModalController } from '@ionic/angular'; +import { SampleTreeComponent } from '@app/trip/sample/sample-tree.component'; +import { OperationValidators } from '@app/trip/operation/operation.validator'; +import { TripContextService } from '@app/trip/trip-context.service'; +import { ContextService } from '@app/shared/context.service'; +import { Geometries } from '@app/shared/geometries.utils'; +import { PhysicalGear } from '@app/trip/physicalgear/physical-gear.model'; +import { flagsToString, removeFlag } from '@app/shared/flags.utils'; +import { PositionUtils } from '@app/data/position/position.utils'; +import { RxState } from '@rx-angular/state'; +import { TripPage } from '@app/trip/trip/trip.page'; +import { DataEntityUtils } from '@app/data/services/model/data-entity.model'; +import { RootDataEntityUtils } from '@app/data/services/model/root-data-entity.model'; +import { ExtractionType } from '@app/extraction/type/extraction-type.model'; +import { ExtractionUtils } from '@app/extraction/common/extraction.utils'; +import { AppDataEntityEditor } from '@app/data/form/data-editor.class'; +import { APP_DATA_ENTITY_EDITOR } from '@app/data/form/data-editor.utils'; +let OperationPage = OperationPage_1 = class OperationPage extends AppDataEntityEditor { + constructor(injector, dataService, options) { + var _a; + super(injector, Operation, dataService, Object.assign({ pathIdAttribute: 'operationId', tabCount: 3, i18nPrefix: 'TRIP.OPERATION.EDIT.', acquisitionLevel: AcquisitionLevelCodes.OPERATION }, options)); + this._forceMeasurementAsOptionalOnFieldMode = false; + this.hasIndividualMeasures$ = this._state.select('hasIndividualMeasures'); + this.physicalGear$ = this._state.select('physicalGear'); + this.gearId$ = this._state.select('gearId'); + this.lastOperations$ = this._state.select('lastOperations'); + this.lastEndDate$ = this._state.select('lastEndDate'); + this.saveOptions = {}; + this.selectedSubTabIndex = 0; + this.allowParentOperation = false; + this.autoFillBatch = false; + this.autoFillDatesFromTrip = false; + this.displayAttributes = {}; + this.toolbarColor = 'primary'; + this.canDownload = false; + // All second tabs components are disabled, by default (waiting PMFM measurements to decide that to show) + this.showCatchTab = false; + this.showSamplesTab = false; + this.showBatchTables = false; + this.showBatchTablesByProgram = true; + this.showSampleTablesByProgram = false; + this.isDuplicatedData = false; + this._defaultIsParentOperation = true; + this.tripService = injector.get(TripService); + this.context = injector.get(TripContextService); + this.modalCtrl = injector.get(ModalController); + this.dateTimePattern = this.translate.instant('COMMON.DATE_TIME_PATTERN'); + this.displayAttributes.gear = this.settings.getFieldDisplayAttributes('gear'); + this.hotkeys = injector.get(Hotkeys); + // Init defaults + this.showLastOperations = this.settings.isUsageMode('FIELD'); + this.tripId = toInt(this.route.snapshot.params['tripId']); + this.forceOptionalExcludedPmfmIds = [ + PmfmIds.SURVIVAL_SAMPLING_TYPE, + PmfmIds.HAS_ACCIDENTAL_CATCHES, + // Let the user save OP, even if not set + //PmfmIds.HAS_INDIVIDUAL_MEASURES + ]; + this._defaultIsParentOperation = this.route.snapshot.queryParams['type'] !== 'child'; + // Get paste flags from clipboard, if related to Operation + const clipboard = (_a = this.context) === null || _a === void 0 ? void 0 : _a.clipboard; + this.operationPasteFlags = toNumber(clipboard === null || clipboard === void 0 ? void 0 : clipboard.pasteFlags, 0); + // Add shortcut + if (!this.mobile) { + this.registerSubscription(this.hotkeys + .addShortcut({ keys: 'f1', description: 'COMMON.BTN_SHOW_HELP', preventDefault: true }) + .subscribe((event) => this.openHelpModal(event))); + this.registerSubscription(this.hotkeys + .addShortcut({ keys: 'control.+', description: 'COMMON.BTN_ADD', preventDefault: true }) + .pipe(filter((_) => !this.disabled && this.showFabButton)) + .subscribe((event) => this.onNewFabButtonClick(event))); + } + // Watch program, to configure tables from program properties + this._state.connect('program', this._state.select('programLabel').pipe(filter(isNotNilOrBlank), switchMap((programLabel) => { + var _a; + // Try to load by context + const contextualProgram = (_a = this.context) === null || _a === void 0 ? void 0 : _a.program; + if ((contextualProgram === null || contextualProgram === void 0 ? void 0 : contextualProgram.label) === programLabel) { + return of(contextualProgram); + } + // Load by service + return this.programRefService.watchByLabel(programLabel, { debug: this.debug }); + }))); + // Apply program + this._state.hold(this._state.select('program'), (program) => { + // Update the context (to avoid a reload, when opening the another operation) + if (this.context && this.context.program !== program) { + this.context.setValue('program', program); + } + return this.setProgram(program); + }); + // Watch trip + this._state.connect('lastOperations', this._state.select('tripId').pipe( + // Only if tripId changes + filter((tripId) => isNotNil(tripId) && this._lastOperationsTripId !== tripId), + // Update default back Href + tap((tripId) => { + this._lastOperationsTripId = tripId; // Remember new trip id + // Update back href + const tripHref = `/trips/${tripId}?tab=${TripPage.TABS.OPERATIONS}`; + if (this.defaultBackHref !== tripHref) { + this.defaultBackHref = tripHref; + this.markForCheck(); + } + }), + // Load last operations (if enabled) + //filter(_ => this.showLastOperations), + filter(isNotNil), + //debounceTime(500), + switchMap((tripId) => this.dataService.watchAll(0, 5, 'startDateTime', 'desc', { tripId }, { + withBatchTree: false, + withSamples: false, + computeRankOrder: false, + withTotal: true, + fetchPolicy: 'cache-and-network', + })), map((res) => (res && res.data) || []))); + // FOR DEV ONLY ---- + this.debug = !environment.production; + } + get form() { + return this.opeForm.form; + } + get showFabButton() { + if (!this._enabled) + return false; + switch (this._selectedTabIndex) { + case OperationPage_1.TABS.CATCH: + return this.showBatchTables; + case OperationPage_1.TABS.SAMPLE: + return this.showSamplesTab; + default: + return false; + } + } + get forceMeasurementAsOptional() { + return this._forceMeasurementAsOptionalOnFieldMode && this.isOnFieldMode; + } + /** + * Allow to override function from OperationService, by passing the trip into options + */ + get entityQualityService() { + return this; + } + get canDuplicate() { + return this.operationPasteFlags !== 0; + } + get physicalGear() { + return this._state.get('physicalGear'); + } + set physicalGear(value) { + this._state.set('physicalGear', () => value); + } + get tripId() { + return this._state.get('tripId'); + } + set tripId(value) { + this._state.set('tripId', () => value); + } + get lastEndDate() { + return this._state.get('lastEndDate'); + } + set lastEndDate(value) { + this._state.set('lastEndDate', () => value); + } + // TODO Hide lastOperation on to small screen + /*@HostListener('window:resize', ['$event']) + onResize(event?: Event) { + this.showLastOperations = window.innerWidth < ; // XS screen + console.debug('[menu] Screen size (px): ' + this._screenWidth); + }*/ + saveAndControl(event, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (event === null || event === void 0 ? void 0 : event.defaultPrevented) + return false; // Skip + event === null || event === void 0 ? void 0 : event.preventDefault(); // Avoid propagation to + // Avoid reloading while saving or still loading + yield this.waitIdle(); + const saved = (this.mobile || this.isOnFieldMode) && this.dirty && this.valid + ? // If on field mode AND valid: save silently + yield this.save(event, { openTabIndex: -1 }) + : // Else If desktop mode: ask before save + yield this.saveIfDirtyAndConfirm(null, { openTabIndex: -1 }); + if (!saved) + return; // not saved + // Control (using a clone) + const data = this.data.clone(); + const errors = yield this.control(data); + const valid = isNil(errors); + if (!valid) { + // Force the desktop mode (to enable strict validation) + this.usageMode = 'DESK'; + // Load data with error (e.g. quality flags) + yield this.updateView(data, opts); + errors.message = errors.message || 'COMMON.FORM.HAS_ERROR'; + this.setError(errors, opts); + this.markAllAsTouched(opts); + this.scrollToTop(); + } + else { + // Clean previous error + this.resetError(opts); + yield this.updateView(data); + } + }); + } + control(data, opts) { + return __awaiter(this, void 0, void 0, function* () { + const errors = yield this.service.control(data, Object.assign(Object.assign({}, opts), { trip: this.trip })); + if (errors) { + const pmfms = yield firstNotNilPromise(this.measurementsForm.pmfms$, { stop: this.destroySubject }); + const errorMessage = this.errorTranslator.translateErrors(errors, { + controlPathTranslator: { + translateControlPath: (path) => this.service.translateControlPath(path, { + i18nPrefix: this.i18nContext.prefix, + pmfms, + }), + }, + }); + return { + details: { + errors, + message: errorMessage, + }, + }; + } + // Show success toast + if (!opts || opts.emitEvent !== false) { + yield this.showToast({ message: 'TRIP.OPERATION.INFO.CONTROL_SUCCEED', type: 'info' }); + } + return; // No errors + }); + } + translateControlPath(controlPath) { + return this.dataService.translateControlPath(controlPath, { i18nPrefix: this.i18nContext.prefix, pmfms: this.measurementsForm.pmfms }); + } + canUserWrite(data, opts) { + var _a; + return (isNil((_a = this.trip) === null || _a === void 0 ? void 0 : _a.validationDate) && + this.dataService.canUserWrite(data, Object.assign(Object.assign({}, opts), { trip: this.trip, program: this.program }))); + } + qualify(data, qualityFlagId) { + return this.dataService.qualify(data, qualityFlagId); + } + openHelpModal(event) { + return __awaiter(this, void 0, void 0, function* () { + if (event) + event.preventDefault(); + if (!this.helpUrl) + return; + console.debug(`[operation-page] Open help page {${this.helpUrl}}...`); + const modal = yield this.modalCtrl.create({ + component: AppHelpModal, + componentProps: { + title: this.translate.instant('COMMON.HELP.TITLE'), + markdownUrl: this.helpUrl, + }, + backdropDismiss: true, + }); + return modal.present(); + }); + } + ngOnInit() { + super.ngOnInit(); + // Update the data context + this.registerSubscription(merge(this.selectedTabIndexChange.pipe(filter((tabIndex) => tabIndex === OperationPage_1.TABS.CATCH && this.showBatchTables)), from(this.ready())) + .pipe(debounceTime(500), throttleTime(500)) + .subscribe((_) => this.updateDataContext())); + // Get physical gear by form + this._state.connect('physicalGear', this.opeForm.physicalGearControl.valueChanges.pipe( + // skip if loading (when opening an existing operation, physicalGear will be set inside onEntityLoaded() ) + filter((_) => !this.loading))); + this._state.connect('gearId', this.physicalGear$, (_, physicalGear) => { var _a; return toNumber((_a = physicalGear === null || physicalGear === void 0 ? void 0 : physicalGear.gear) === null || _a === void 0 ? void 0 : _a.id, null); }); + this._state.hold(this.gearId$.pipe(filter((gearId) => isNotNil(gearId) && this.loaded), debounceTime(450)), () => this.markForCheck()); + } + ngAfterViewInit() { + super.ngAfterViewInit(); + if (this.measurementsForm) { + this.registerSubscription(this.measurementsForm.pmfms$ + .pipe(filter(isNotNil), mergeMap((_) => this.measurementsForm.ready$), filter((ready) => ready === true)) + .subscribe((_) => this.onMeasurementsFormReady())); + } + const queryParams = this.route.snapshot.queryParams; + // Manage tab group + { + this.selectedSubTabIndex = (queryParams['subtab'] && parseInt(queryParams['subtab'])) || 0; + } + // Manage toolbar color + if (isNotNilOrBlank(queryParams['color'])) { + this.toolbarColor = queryParams['color']; + } + } + /** + * Configure specific behavior + */ + onMeasurementsFormReady() { + var _a, _b, _c; + return __awaiter(this, void 0, void 0, function* () { + // Wait program to be loaded + //await this.ready(); + // DEBUG + console.debug('[operation-page] Measurement form is ready'); + // Clean existing subscription (e.g. when acquisition level change, this function can= be called many times) + (_a = this._measurementSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + this._measurementSubscription = new Subscription(); + const formGroup = this.measurementsForm.form; + let defaultTableStates = true; + // If PMFM "Sampling type" exists (e.g. SUMARiS), then use to enable/disable some tables + const samplingTypeControl = formGroup === null || formGroup === void 0 ? void 0 : formGroup.controls[PmfmIds.SURVIVAL_SAMPLING_TYPE]; + if (isNotNil(samplingTypeControl) && this.batchTree) { + defaultTableStates = false; + this.showCatchTab = (_b = this.batchTree) === null || _b === void 0 ? void 0 : _b.showCatchForm; + this._measurementSubscription.add(samplingTypeControl.valueChanges + .pipe(debounceTime(400), startWith(samplingTypeControl.value), filter(ReferentialUtils.isNotEmpty), map((qv) => qv.label), distinctUntilChanged()) + .subscribe((qvLabel) => { + var _a; + switch (qvLabel) { + case QualitativeLabels.SURVIVAL_SAMPLING_TYPE.SURVIVAL: + if (this.debug) + console.debug('[operation] Enable samples tables'); + this.showBatchTablesByProgram = false; + this.showSampleTablesByProgram = true; + break; + case QualitativeLabels.SURVIVAL_SAMPLING_TYPE.CATCH_HAUL: + if (this.debug) + console.debug('[operation] Enable batches tables'); + this.showBatchTablesByProgram = true; + this.showSampleTablesByProgram = false; + break; + case QualitativeLabels.SURVIVAL_SAMPLING_TYPE.UNSAMPLED: + if (this.debug) + console.debug('[operation] Disable samples and batches tables'); + this.showBatchTablesByProgram = false; + this.showSampleTablesByProgram = false; + } + this.showBatchTables = this.showBatchTablesByProgram; + this.showCatchTab = this.showBatchTables || ((_a = this.batchTree) === null || _a === void 0 ? void 0 : _a.showCatchForm) || false; + this.showSamplesTab = this.showSampleTablesByProgram; + this.tabCount = this.showSamplesTab ? 3 : this.showCatchTab ? 2 : 1; + // Force first sub tab index, if modification was done from the form + // This condition avoid to change subtab, when reloading the page + if (this.selectedTabIndex === OperationPage_1.TABS.GENERAL) { + this.selectedSubTabIndex = 0; + } + this.updateTablesState(); + this.markForCheck(); + })); + } + // If PMFM "Has accidental catches ?" exists, then use to enable/disable sample tables + const hasAccidentalCatchesControl = formGroup === null || formGroup === void 0 ? void 0 : formGroup.controls[PmfmIds.HAS_ACCIDENTAL_CATCHES]; + if (isNotNil(hasAccidentalCatchesControl)) { + defaultTableStates = true; // Applying defaults (because will not manage the catch) + hasAccidentalCatchesControl.setValidators(Validators.required); + this._measurementSubscription.add(hasAccidentalCatchesControl.valueChanges + .pipe(debounceTime(400), startWith(hasAccidentalCatchesControl.value), filter(isNotNil), distinctUntilChanged()) + .subscribe((hasAccidentalCatches) => { + var _a; + if (this.debug) + console.debug('[operation] Enable/Disable samples table, because HAS_ACCIDENTAL_CATCHES=' + hasAccidentalCatches); + // Enable samples, when has accidental catches + this.showSampleTablesByProgram = hasAccidentalCatches; + this.showSamplesTab = this.showSampleTablesByProgram; + this.showCatchTab = this.showBatchTables || ((_a = this.batchTree) === null || _a === void 0 ? void 0 : _a.showCatchForm) || false; + this.tabCount = this.showSamplesTab ? 3 : this.showCatchTab ? 2 : 1; + // Force first tab index + if (this.selectedTabIndex === OperationPage_1.TABS.GENERAL) { + this.selectedSubTabIndex = 0; + } + this.updateTablesState(); + this.markForCheck(); + })); + } + if (this.allowParentOperation) { + defaultTableStates = false; + this._measurementSubscription.add(this.opeForm.parentChanges + .pipe(startWith(this.opeForm.parentControl.value), map((parent) => !!parent), // Convert to boolean + distinctUntilChanged()) + .subscribe((hasParent) => __awaiter(this, void 0, void 0, function* () { + var _d; + let acquisitionLevel; + if (hasParent) { + if (this.debug) + console.debug('[operation] Enable batch tables'); + this.showBatchTables = this.showBatchTablesByProgram; + this.showCatchTab = this.showBatchTables || ((_d = this.batchTree) === null || _d === void 0 ? void 0 : _d.showCatchForm) || false; + this.showSamplesTab = this.showSampleTablesByProgram; + this.tabCount = this.showSamplesTab ? 3 : this.showCatchTab ? 2 : 1; + acquisitionLevel = AcquisitionLevelCodes.CHILD_OPERATION; + } + else { + if (this.debug) + console.debug('[operation] Disable batch tables'); + this.showBatchTables = false; + this.showSamplesTab = false; + this.showCatchTab = false; + this.tabCount = 1; + acquisitionLevel = AcquisitionLevelCodes.OPERATION; + } + // Propagate acquisition level + this.acquisitionLevel = acquisitionLevel; + // Force first tab index + if (this.selectedTabIndex === OperationPage_1.TABS.GENERAL) { + this.selectedSubTabIndex = 0; + } + // Auto fill batches (if new data) + if (this.showBatchTables && this.autoFillBatch && this.batchTree && this.isNewData) { + yield this.batchTree.autoFill({ skipIfDisabled: false, skipIfNotEmpty: true }); + } + this.updateTablesState(); + this.markForCheck(); + }))); + } + const hasIndividualMeasuresControl = formGroup === null || formGroup === void 0 ? void 0 : formGroup.controls[PmfmIds.HAS_INDIVIDUAL_MEASURES]; + if (isNotNil(hasIndividualMeasuresControl) && this.batchTree) { + this._measurementSubscription.add(hasIndividualMeasuresControl.valueChanges + .pipe(startWith(hasIndividualMeasuresControl.value), filter(isNotNil)) + .subscribe((value) => this._state.set('hasIndividualMeasures', (_) => value))); + this._measurementSubscription.add(this.hasIndividualMeasures$.subscribe((value) => { + // Will be done by the template + this.batchTree.allowSpeciesSampling = value; + this.batchTree.defaultHasSubBatches = value; + this.batchTree.allowSubBatches = value; + // Hide button to toggle hasSubBatches (yes/no) when value if forced + this.batchTree.setModalOption('showHasSubBatchesButton', !value); + if (!this.allowParentOperation) { + this.showCatchTab = this.showBatchTables || this.batchTree.showCatchForm; + this.tabCount = 1 + (this.showCatchTab ? 1 : 0) + (this.showSamplesTab ? 1 : 0); + } + this.updateTablesState(); + })); + } + else { + this._state.set('hasIndividualMeasures', (_) => true); + } + // Show default tables state + if (defaultTableStates) { + if (this.debug) + console.debug('[operation] Enable default tables (Nor SUMARiS nor ADAP pmfms were found)'); + this.showBatchTables = this.showBatchTablesByProgram; + this.showCatchTab = this.showBatchTables || ((_c = this.batchTree) === null || _c === void 0 ? void 0 : _c.showCatchForm) || false; + this.showSamplesTab = this.showSampleTablesByProgram; + this.tabCount = this.showSamplesTab ? 3 : this.showCatchTab ? 2 : 1; + this.updateTablesState(); + this.markForCheck(); + // Auto fill batches (if new data) + if (this.showBatchTables && this.autoFillBatch && this.batchTree && this.isNewData) { + this.batchTree.autoFill({ skipIfDisabled: false, skipIfNotEmpty: true }); + } + } + // Anormal trip => Change comments as required + const tripProgressControl = formGroup === null || formGroup === void 0 ? void 0 : formGroup.controls[PmfmIds.TRIP_PROGRESS]; + if (isNotNil(tripProgressControl)) { + this._measurementSubscription.add(tripProgressControl.valueChanges + .pipe(debounceTime(400), startWith(tripProgressControl.value), filter(isNotNilOrBlank), distinctUntilChanged()) + .subscribe((normalProgress) => { + if (!normalProgress) + console.debug('[operation] abnormal progress: force comment as required'); + this.opeForm.requiredComment = !normalProgress; + this.markForCheck(); + })); + } + }); + } + ngOnDestroy() { + var _a, _b; + super.ngOnDestroy(); + (_a = this._measurementSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + (_b = this._sampleRowSubscription) === null || _b === void 0 ? void 0 : _b.unsubscribe(); + } + setProgram(program) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!program) + return; // Skip + if (this.debug) + console.debug(`[operation] Program ${program.label} loaded, with properties: `, program.properties); + let i18nSuffix = program.getProperty(ProgramProperties.I18N_SUFFIX); + i18nSuffix = i18nSuffix !== 'legacy' ? i18nSuffix : ''; + this.i18nContext.suffix = i18nSuffix; + this.allowParentOperation = program.getPropertyAsBoolean(ProgramProperties.TRIP_ALLOW_PARENT_OPERATION); + this.autoFillBatch = program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_AUTO_FILL); + this.autoFillDatesFromTrip = program.getPropertyAsBoolean(ProgramProperties.TRIP_APPLY_DATE_ON_NEW_OPERATION); + this._forceMeasurementAsOptionalOnFieldMode = program.getPropertyAsBoolean(ProgramProperties.TRIP_OPERATION_MEASUREMENTS_OPTIONAL_ON_FIELD_MODE); + const isGPSUsed = toBoolean(MeasurementUtils.asBooleanValue((_a = this.trip) === null || _a === void 0 ? void 0 : _a.measurements, PmfmIds.GPS_USED), true); + const enablePosition = isGPSUsed && program.getPropertyAsBoolean(ProgramProperties.TRIP_POSITION_ENABLE); + this.opeForm.trip = this.trip; + this.opeForm.showPosition = enablePosition; + this.opeForm.boundingBox = enablePosition && Geometries.parseAsBBox(program.getProperty(ProgramProperties.TRIP_POSITION_BOUNDING_BOX)); + // TODO: make possible to have both showPosition and showFishingArea at true (ex SFA artisanal logbook program) + this.opeForm.showFishingArea = !enablePosition; // Trip has gps in use, so active positions controls else active fishing area control + this.opeForm.fishingAreaLocationLevelIds = program.getPropertyAsNumbers(ProgramProperties.TRIP_OPERATION_FISHING_AREA_LOCATION_LEVEL_IDS); + const defaultLatitudeSign = program.getProperty(ProgramProperties.TRIP_LATITUDE_SIGN); + const defaultLongitudeSign = program.getProperty(ProgramProperties.TRIP_LONGITUDE_SIGN); + this.opeForm.defaultLatitudeSign = defaultLatitudeSign; + this.opeForm.defaultLongitudeSign = defaultLongitudeSign; + this.opeForm.metierTaxonGroupTypeIds = program.getPropertyAsNumbers(ProgramProperties.TRIP_OPERATION_METIER_TAXON_GROUP_TYPE_IDS); + this.opeForm.maxDistanceWarning = program.getPropertyAsInt(ProgramProperties.TRIP_DISTANCE_MAX_WARNING); + this.opeForm.maxDistanceError = program.getPropertyAsInt(ProgramProperties.TRIP_DISTANCE_MAX_ERROR); + this.opeForm.allowParentOperation = this.allowParentOperation; + this.opeForm.startProgram = program.creationDate; + this.opeForm.showMetier = program.getPropertyAsBoolean(ProgramProperties.TRIP_OPERATION_METIER_ENABLE); + this.opeForm.showMetierFilter = this.opeForm.showMetier && program.getPropertyAsBoolean(ProgramProperties.TRIP_OPERATION_METIER_FILTER); + this.opeForm.programLabel = program.label; + this.opeForm.fishingStartDateTimeEnable = program.getPropertyAsBoolean(ProgramProperties.TRIP_OPERATION_FISHING_START_DATE_ENABLE); + this.opeForm.fishingEndDateTimeEnable = program.getPropertyAsBoolean(ProgramProperties.TRIP_OPERATION_FISHING_END_DATE_ENABLE); + this.opeForm.endDateTimeEnable = program.getPropertyAsBoolean(ProgramProperties.TRIP_OPERATION_END_DATE_ENABLE); + this.opeForm.maxShootingDurationInHours = program.getPropertyAsInt(ProgramProperties.TRIP_OPERATION_MAX_SHOOTING_DURATION_HOURS); + this.opeForm.maxTotalDurationInHours = program.getPropertyAsInt(ProgramProperties.TRIP_OPERATION_MAX_TOTAL_DURATION_HOURS); + this.opeForm.defaultIsParentOperation = this._defaultIsParentOperation; + this.operationPasteFlags = program.getPropertyAsInt(ProgramProperties.TRIP_OPERATION_PASTE_FLAGS); + if (this.debug && this.operationPasteFlags !== 0) { + console.debug(`[operation-page] Enable duplication with paste flags: ${flagsToString(this.operationPasteFlags, OperationPasteFlags)}`); + } + this.helpUrl = program.getProperty(ProgramProperties.TRIP_OPERATION_HELP_URL) || program.getProperty(ProgramProperties.TRIP_HELP_URL); + this.measurementsForm.i18nSuffix = i18nSuffix; + this.measurementsForm.forceOptional = this.forceMeasurementAsOptional; + this.measurementsForm.maxVisibleButtons = program.getPropertyAsInt(ProgramProperties.MEASUREMENTS_MAX_VISIBLE_BUTTONS); + this.measurementsForm.maxItemCountForButtons = program.getPropertyAsInt(ProgramProperties.MEASUREMENTS_MAX_VISIBLE_BUTTONS); + this.saveOptions.computeBatchRankOrder = program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_MEASURE_RANK_ORDER_COMPUTE); + this.saveOptions.computeBatchIndividualCount = + !this.mobile && program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_INDIVIDUAL_COUNT_COMPUTE); + this.saveOptions.computeBatchWeight = !this.mobile && program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_LENGTH_WEIGHT_CONVERSION_ENABLE); + // NOT need here, while 'updateLinkedOperation' is forced in save() + //this.saveOptions.updateLinkedOperation = this.allowParentOperation; + this.showBatchTablesByProgram = program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_ENABLE); + this.showSampleTablesByProgram = program.getPropertyAsBoolean(ProgramProperties.TRIP_SAMPLE_ENABLE); + if (!this.allowParentOperation) { + this.acquisitionLevel = AcquisitionLevelCodes.OPERATION; + } + // When route ask for a child operation + else if (!this._defaultIsParentOperation) { + this.acquisitionLevel = AcquisitionLevelCodes.CHILD_OPERATION; + } + if (this.batchTree) + this.batchTree.program = program; + if (this.sampleTree) + this.sampleTree.program = program; + // Load available taxon groups (e.g. with taxon groups found in strategies) + yield this.initAvailableTaxonGroups(program.label); + this.markAsReady(); + }); + } + load(id, opts) { + return super.load(id, Object.assign(Object.assign({}, opts), { withLinkedOperation: true })); + } + onNewEntity(data, options) { + var _a, _b, _c, _d; + return __awaiter(this, void 0, void 0, function* () { + const tripId = options && isNotNil(options.tripId) ? +options.tripId : isNotNil(this.trip && this.trip.id) ? this.trip.id : data && data.tripId; + if (isNil(tripId)) + throw new Error("Missing argument 'options.tripId'!"); + data.tripId = tripId; + // Load parent trip + const trip = yield this.loadTrip(tripId); + // Use the default gear, if only one + if (trip && trip.gears && trip.gears.length === 1) { + data.physicalGear = trip.gears[0]; + } + // Copy some trip's properties (need by filter) + data.programLabel = (_a = trip.program) === null || _a === void 0 ? void 0 : _a.label; + data.vesselId = (_b = trip.vesselSnapshot) === null || _b === void 0 ? void 0 : _b.id; + // Paste clipboard, if not already a duplicated operation + const clipboard = (_c = this.context) === null || _c === void 0 ? void 0 : _c.clipboard; + if (OperationUtils.isOperation(clipboard === null || clipboard === void 0 ? void 0 : clipboard.data)) { + // Do NOT copy dates, when in the on field mode (will be filled later) + if (this.isOnFieldMode) { + data.paste(clipboard === null || clipboard === void 0 ? void 0 : clipboard.data, removeFlag(this.operationPasteFlags, OperationPasteFlags.DATE)); + } + else { + data.paste(clipboard === null || clipboard === void 0 ? void 0 : clipboard.data, this.operationPasteFlags); + } + // Reset clipboard + (_d = this.context) === null || _d === void 0 ? void 0 : _d.setValue('clipboard', { + data: null, + pasteFlags: this.operationPasteFlags, // Keep flags + }); + this.isDuplicatedData = true; + } + // If is on field mode, then fill default values + if (this.isOnFieldMode) { + data.startDateTime = DateUtils.moment(); + if (!this.isDuplicatedData) { + // Wait last operations to be loaded + const previousOperations = yield firstNotNilPromise(this.lastOperations$, { stop: this.destroySubject }); + // Copy from previous operation only if is not a duplicated operation + const previousOperation = (previousOperations || []).find((ope) => ope && ope !== data && ReferentialUtils.isNotEmpty(ope.metier)); + if (previousOperation) { + data.physicalGear = (trip.gears || []).find((g) => EntityUtils.equals(g, previousOperation.physicalGear, 'id')) || data.physicalGear; + data.metier = previousOperation.metier; + data.rankOrder = previousOperation.rankOrder + 1; + } + else { + data.rankOrder = 1; + } + } + } + // Propagate program + if (data.programLabel) + this.programLabel = data.programLabel; + // Propagate physical gear + if (data.physicalGear) + this.physicalGear = data.physicalGear; + this.opeForm.showComment = !this.mobile; + }); + } + onEntityLoaded(data, options) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const tripId = options && isNotNil(options.tripId) ? +options.tripId : isNotNil(this.trip && this.trip.id) ? this.trip.id : data && data.tripId; + if (isNil(tripId)) + throw new Error("Missing argument 'options.tripId'!"); + data.tripId = tripId; + const trip = yield this.loadTrip(tripId); + // Replace physical gear by the real entity + data.physicalGear = (trip.gears || []).find((g) => EntityUtils.equals(g, data.physicalGear, 'id')) || data.physicalGear; + data.programLabel = (_a = trip.program) === null || _a === void 0 ? void 0 : _a.label; + data.vesselId = (_b = trip.vesselSnapshot) === null || _b === void 0 ? void 0 : _b.id; + yield this.loadLinkedOperation(data); + // Propagate program + if (data.programLabel) + this.programLabel = data.programLabel; + // Propagate physical gear + if (data.physicalGear) + this.physicalGear = data.physicalGear; + this.opeForm.showComment = !this.mobile || isNotNilOrBlank(data.comments); + this.canDownload = !this.mobile && EntityUtils.isRemoteId(data === null || data === void 0 ? void 0 : data.id); + }); + } + onNewFabButtonClick(event) { + switch (this.selectedTabIndex) { + case OperationPage_1.TABS.CATCH: + if (this.showBatchTables && this.batchTree) + this.batchTree.addRow(event); + break; + case OperationPage_1.TABS.SAMPLE: + if (this.showSamplesTab && this.sampleTree) + this.sampleTree.addRow(event); + break; + } + } + /** + * Compute the title + * + * @param data + * @param opts + */ + computeTitle(data, opts) { + var _a, _b, _c; + return __awaiter(this, void 0, void 0, function* () { + // Trip exists + const titlePrefix = ((!opts || opts.withPrefix !== false) && + this.trip && + (yield this.translate + .get('TRIP.OPERATION.TITLE_PREFIX', { + vessel: (this.trip && this.trip.vesselSnapshot && (this.trip.vesselSnapshot.exteriorMarking || this.trip.vesselSnapshot.name)) || '', + departureDateTime: (this.trip && this.trip.departureDateTime && this.dateFormat.transform(this.trip.departureDateTime)) || '', + }) + .toPromise())) || + ''; + // new ope + if (!data || isNil(data.id)) { + return titlePrefix + (yield this.translate.get('TRIP.OPERATION.NEW.TITLE').toPromise()); + } + // Select the date to use for title + let titleDateTime = data.startDateTime || data.fishingStartDateTime; + if (OperationUtils.hasParentOperation(data)) { + titleDateTime = DateUtils.min(fromDateISOString(data.endDateTime), fromDateISOString(data.fishingEndDateTime)) || titleDateTime; + } + // Format date: + // - if mobile: display time only if today + const startDateTime = titleDateTime && + (this.mobile && DateUtils.moment().isSame(titleDateTime, 'day') + ? this.dateFormat.transform(titleDateTime, { pattern: 'HH:mm' }) + : this.dateFormat.transform(titleDateTime, { time: true })); + // Get rankOrder from context, or compute it (if NOT mobile to avoid additional processing time) + let rankOrder = !this.mobile && ((_b = (_a = this.context) === null || _a === void 0 ? void 0 : _a.operation) === null || _b === void 0 ? void 0 : _b.rankOrder); + if (isNil(rankOrder) && !this.mobile) { + // Compute the rankOrder + const now = this.debug && Date.now(); + if (this.debug) + console.debug('[operation-page] Computing rankOrder...'); + rankOrder = yield this.service.computeRankOrder(data, { fetchPolicy: 'cache-first' }); + if (this.debug) + console.debug(`[operation-page] Computing rankOrder [OK] #${rankOrder} - in ${Date.now() - now}ms`); + // Update data, and form + data.rankOrder = rankOrder; + (_c = this.opeForm) === null || _c === void 0 ? void 0 : _c.form.patchValue({ rankOrder }, { emitEvent: false }); + } + if (rankOrder) { + return (titlePrefix + (yield this.translate.get('TRIP.OPERATION.EDIT.TITLE', { startDateTime, rankOrder }).toPromise())); + } + // No rankOrder (e.g. if mobile) + else { + return (titlePrefix + (yield this.translate.get('TRIP.OPERATION.EDIT.TITLE_NO_RANK', { startDateTime }).toPromise())); + } + }); + } + computePageHistory(title) { + const _super = Object.create(null, { + computePageHistory: { get: () => super.computePageHistory } + }); + return __awaiter(this, void 0, void 0, function* () { + if (this.mobile) + return; // Skip if mobile + return Object.assign(Object.assign({}, (yield _super.computePageHistory.call(this, title))), { icon: 'navigate' }); + }); + } + onTabChange(event, queryParamName) { + const changed = super.onTabChange(event, queryParamName); + if (changed) { + switch (this.selectedTabIndex) { + case OperationPage_1.TABS.CATCH: + if (this.showBatchTables && this.batchTree) + this.batchTree.realignInkBar(); + this.markForCheck(); + break; + case OperationPage_1.TABS.SAMPLE: + if (this.showSamplesTab && this.sampleTree) + this.sampleTree.realignInkBar(); + this.markForCheck(); + break; + } + } + return changed; + } + waitIdle(opts) { + return AppFormUtils.waitIdle(this, opts); + } + onLastOperationClick(event, id) { + return __awaiter(this, void 0, void 0, function* () { + if (event === null || event === void 0 ? void 0 : event.defaultPrevented) + return; // Skip + if (isNil(id) || this.data.id === id) + return; // skip + // Avoid reloading while saving or still loading + yield this.waitIdle(); + const saved = (this.mobile || this.isOnFieldMode) && (!this.dirty || this.valid) + ? // If on field mode: try to save silently + yield this.save(event, { openTabIndex: -1 }) + : // If desktop mode: ask before save + yield this.saveIfDirtyAndConfirm(null, { openTabIndex: -1 }); + if (!saved) + return; // Skip + return this.navigateTo(+id); + }); + } + saveAndNew(event) { + return __awaiter(this, void 0, void 0, function* () { + if (event === null || event === void 0 ? void 0 : event.defaultPrevented) + return false; // Skip + event === null || event === void 0 ? void 0 : event.preventDefault(); // Avoid propagation to + // Avoid reloading while saving or still loading + yield this.waitIdle(); + const saved = (this.mobile || this.isOnFieldMode) && (!this.dirty || this.valid) + ? // If on field mode AND valid: save silently + yield this.save(event, { openTabIndex: -1 }) + : // Else If desktop mode: ask before save + yield this.saveIfDirtyAndConfirm(null, { openTabIndex: -1 }); + if (!saved) + return; // not saved + // Redirect to /new + return yield this.navigateTo('new'); + }); + } + duplicate(event) { + return __awaiter(this, void 0, void 0, function* () { + if ((event === null || event === void 0 ? void 0 : event.defaultPrevented) || !this.context) + return; // Skip + event === null || event === void 0 ? void 0 : event.preventDefault(); // Avoid propagation to + // Avoid reloading while saving or still loading + yield this.waitIdle(); + const saved = (this.mobile || this.isOnFieldMode) && this.dirty && this.valid + ? // If on field mode AND valid: save silently + yield this.save(event, { openTabIndex: -1 }) + : // Else If desktop mode: ask before save + yield this.saveIfDirtyAndConfirm(null, { openTabIndex: -1 }); + if (!saved) + return; // User cancelled, or cannot saved => skip + // Fill context's clipboard + this.context.setValue('clipboard', { + data: this.data, + pasteFlags: this.operationPasteFlags, + }); + // Open new operation + return this.navigateTo('new'); + }); + } + setValue(data) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + try { + const isNewData = isNil(data === null || data === void 0 ? void 0 : data.id); + const jobs = [this.opeForm.setValue(data)]; + // Get gear, from the physical gear + const gearId = toNumber((_b = (_a = data === null || data === void 0 ? void 0 : data.physicalGear) === null || _a === void 0 ? void 0 : _a.gear) === null || _b === void 0 ? void 0 : _b.id, null); + // Set measurements form + this.measurementsForm.gearId = gearId; + this.measurementsForm.programLabel = this.programLabel; + const isChildOperation = data.parentOperation || isNotNil(data.parentOperationId) || !this._defaultIsParentOperation; + const acquisitionLevel = isChildOperation ? AcquisitionLevelCodes.CHILD_OPERATION : AcquisitionLevelCodes.OPERATION; + // Propagate acquisition level, if changed + if (this.acquisitionLevel !== acquisitionLevel) { + this.measurementsForm.unload(); + this.measurementsForm.acquisitionLevel = acquisitionLevel; + this.measurementsForm.markAsReady(); + this.acquisitionLevel = acquisitionLevel; + } + jobs.push(this.measurementsForm.setValue((data && data.measurements) || [])); + // Set batch tree + if (this.batchTree) { + //this.batchTree.programLabel = this.programLabel; + this.batchTree.physicalGear = data.physicalGear; + this.batchTree.gearId = gearId; + jobs.push(this.batchTree.setValue((data && data.catchBatch) || null)); + } + // Set sample tree + if (this.sampleTree) + jobs.push(this.sampleTree.setValue((data && data.samples) || [])); + yield Promise.all(jobs); + console.debug('[operation] setValue() [OK]'); + // If new data, auto fill the table + if (isNewData) { + if (this.autoFillDatesFromTrip && !this.isDuplicatedData) + this.opeForm.fillWithTripDates(); + } + } + catch (err) { + const error = (err === null || err === void 0 ? void 0 : err.message) || err; + console.debug('[operation] Error during setValue(): ' + error, err); + this.setError(error); + } + }); + } + cancel(event) { + // Avoid to reload/unload if page destroyed + timer(500) + .pipe(takeUntil(this.destroySubject)) + .subscribe(() => super.cancel(event)); + // nothing + return Promise.resolve(); + } + unload() { + return super.unload(); + } + updateViewState(data, opts) { + super.updateViewState(data, opts); + // Display form error, if has errors from context, applies it on form. + const errorMessage = this.enabled && this.usageMode === 'DESK' && isNil(data.controlDate) ? data.qualificationComments : undefined; + if (isNotNilOrBlank(errorMessage)) { + console.info('[operation-page] Restore error from qualificationComments : ', errorMessage); + // Clean error + this.form.get('qualificationComments').reset(); + setTimeout(() => { + var _a, _b; + this.markAllAsTouched(); + this.form.updateValueAndValidity(); + const error = { details: { message: errorMessage } }; + if (isNil((_a = data.catchBatch) === null || _a === void 0 ? void 0 : _a.controlDate) && ((_b = data.catchBatch) === null || _b === void 0 ? void 0 : _b.qualificationComments)) { + error.details.errors = { catch: { invalidOrIncomplete: true } }; + } + this.setError(Object.assign({ message: 'COMMON.FORM.HAS_ERROR' }, error), { detailsCssClass: 'error-details' }); + }); + } + } + save(event, opts) { + const _super = Object.create(null, { + save: { get: () => super.save } + }); + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + if (this.loading || this.saving) { + console.debug('[data-editor] Skip save: editor is busy (loading or saving)'); + return false; + } + if (!this.dirty) { + console.debug('[data-editor] Skip save: editor not dirty'); + return true; + } + // Workaround to avoid the option menu to be selected + if (this.mobile) + yield sleep(50); + // Save new gear to the trip + const physicalGear = yield this.getOrAddPhysicalGear({ emitEvent: false }); + if (!physicalGear) { + this.markForCheck(); + return false; // Stop if failed + } + // Force to pass specific saved options to dataService.save() + const saved = yield _super.save.call(this, event, Object.assign(Object.assign(Object.assign({}, this.saveOptions), { updateLinkedOperation: this.opeForm.isParentOperation || this.opeForm.isChildOperation }), opts)); + // Continue to mark as saving, to avoid option menu to open + this.markAsSaving(); + try { + // Display form error on top + if (!saved) { + // DEBUG + console.debug('[operation] Computing form error...'); + let error = ''; + if (this.opeForm.invalid) { + error = this.opeForm.formError; + } + if (this.measurementsForm.invalid) { + error += (isNotNilOrBlank(error) ? ',' : '') + this.measurementsForm.formError; + } + this.setError(error); + this.scrollToTop(); + } + else { + // Workaround, to make sure the editor is not dirty anymore + // => mark components as pristine + if (this.dirty) { + console.warn('[operation] FIXME: manually mark children to pristine, but it should be done by editor save()!'); + (_a = this.batchTree) === null || _a === void 0 ? void 0 : _a.markAsPristine(); + (_b = this.sampleTree) === null || _b === void 0 ? void 0 : _b.markAsPristine(); + } + // Mark trip as dirty + if (RootDataEntityUtils.isReadyToSync(this.trip)) { + RootDataEntityUtils.markAsDirty(this.trip); + this.trip = yield this.tripService.save(this.trip); + // Update the context + this.context.setValue('trip', this.trip); + } + } + return saved; + } + finally { + this.markAsSaved(); + } + }); + } + saveIfDirtyAndConfirm(event, opts) { + const _super = Object.create(null, { + saveIfDirtyAndConfirm: { get: () => super.saveIfDirtyAndConfirm } + }); + return __awaiter(this, void 0, void 0, function* () { + return _super.saveIfDirtyAndConfirm.call(this, event, Object.assign(Object.assign({}, this.saveOptions), opts)); + }); + } + getOrAddPhysicalGear(opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (this.loading || this.saving) + return false; + if (!this.dirty) + return true; // Skip + const physicalGear = this.opeForm.physicalGearControl.value; + if (!physicalGear || isNotNil(physicalGear.id)) + return true; // Skip + // DEBUG + console.debug('[operation-page] Saving new physical gear...'); + this.markAsSaving(); + this.resetError(); + try { + const savedPhysicalGear = yield this.tripService.getOrAddGear(this.trip.id, physicalGear); + // Update form with the new gear + this.opeForm.physicalGearControl.patchValue(savedPhysicalGear, { emitEvent: false }); + // Update the current trip object + if (!((_a = this.trip.gears) === null || _a === void 0 ? void 0 : _a.some((g) => PhysicalGear.equals(g, savedPhysicalGear)))) { + this.trip.gears.push(savedPhysicalGear); + } + return true; + } + catch (err) { + this.setError(err); + return false; + } + finally { + this.markAsSaved(opts); + } + }); + } + onPrepareSampleForm(pmfmForm) { + var _a; + console.debug('[operation-page] Initializing sample form (validators...)'); + (_a = this._sampleRowSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + this._sampleRowSubscription = this.computeSampleRowValidator(pmfmForm); + } + markAsLoaded(opts) { + var _a; + super.markAsLoaded(opts); + (_a = this.children) === null || _a === void 0 ? void 0 : _a.forEach((c) => c.markAsLoaded(opts)); + } + setError(error, opts) { + var _a, _b; + // If errors in operations + if (typeof error === 'object' && ((_b = (_a = error === null || error === void 0 ? void 0 : error.details) === null || _a === void 0 ? void 0 : _a.errors) === null || _b === void 0 ? void 0 : _b.catch)) { + // Show error in batch tree + this.batchTree.setError('ERROR.INVALID_OR_INCOMPLETE_FILL', { + //showOnlyInvalidRows: true + }); + // Open the operation tab + this.tabGroup.selectedIndex = OperationPage_1.TABS.CATCH; + // Reset other errors + super.setError(undefined, opts); + } + else { + super.setError(error, opts); + // Reset batch tree error + this.batchTree.resetError(opts); + } + } + // change visibility to public + resetError(opts) { + this.setError(undefined, opts); + } + /* -- protected method -- */ + computeSampleRowValidator(pmfmForm) { + return OperationValidators.addSampleValidators(pmfmForm); + } + loadTrip(tripId) { + return __awaiter(this, void 0, void 0, function* () { + // Update trip id (will cause last operations to be watched, if need) + this.tripId = +tripId; + let trip = this.context.getValue('trip'); + // If not the expected trip: reload + if ((trip === null || trip === void 0 ? void 0 : trip.id) !== tripId) { + trip = yield this.tripService.load(tripId, { fullLoad: true }); + // Update the context + this.context.setValue('trip', trip); + } + this.trip = trip; + this.saveOptions.trip = trip; + return trip; + }); + } + /** + * Open the first tab that is invalid + */ + getFirstInvalidTabIndex() { + var _a, _b, _c, _d; + // find invalids tabs (keep order) + const invalidTabs = [ + this.opeForm.invalid || this.measurementsForm.invalid, + (this.showCatchTab && ((_a = this.batchTree) === null || _a === void 0 ? void 0 : _a.invalid)) || false, + (this.showSamplesTab && ((_b = this.sampleTree) === null || _b === void 0 ? void 0 : _b.invalid)) || false, + ]; + // Open the first invalid tab + const invalidTabIndex = invalidTabs.indexOf(true); + // If catch tab, open the invalid sub tab + if (invalidTabIndex === OperationPage_1.TABS.CATCH) { + this.selectedSubTabIndex = (_c = this.batchTree) === null || _c === void 0 ? void 0 : _c.getFirstInvalidTabIndex(); + this.updateTablesState(); + } + // If sample tab, open the invalid sub tab + else if (invalidTabIndex === OperationPage_1.TABS.SAMPLE) { + this.selectedSubTabIndex = (_d = this.sampleTree) === null || _d === void 0 ? void 0 : _d.getFirstInvalidTabIndex(); + this.updateTablesState(); + } + return invalidTabIndex; + } + computeUsageMode(operation) { + var _a; + // Allow to override the usageMode, by context (e.g. when control a trip) + const contextualUsageMode = (_a = this.context) === null || _a === void 0 ? void 0 : _a.getValue('usageMode'); + if (contextualUsageMode) + return contextualUsageMode; + // Read the settings + return this.settings.isUsageMode('FIELD') && + (isNil(this.trip) || + (isNotNil(this.trip.departureDateTime) && fromDateISOString(this.trip.departureDateTime).diff(DateUtils.moment(), 'day') < 15)) + ? 'FIELD' + : 'DESK'; + } + registerForms() { + // Register sub forms & table + this.addChildForms([this.opeForm, this.measurementsForm, this.batchTree, this.sampleTree]); + } + waitWhilePending() { + this.form.updateValueAndValidity(); + return super.waitWhilePending(); + } + saveDirtyChildren() { + return super.saveDirtyChildren(); + } + getValue() { + const _super = Object.create(null, { + getValue: { get: () => super.getValue } + }); + return __awaiter(this, void 0, void 0, function* () { + const data = yield _super.getValue.call(this); + // Batches + if (this.showCatchTab && this.batchTree) { + // Do not need to save here, because editor should do it + //await this.batchTree.save(); + // Get batch tree,rom the batch tree component + data.catchBatch = this.batchTree.value; + // Make sure to clean species groups, if not batch enable + if (!this.showBatchTables) { + data.catchBatch.children = undefined; + } + } + else { + data.catchBatch = undefined; + } + // Samples + if (this.showSamplesTab && this.sampleTree) { + yield this.sampleTree.save(); + data.samples = this.sampleTree.value; + } + else { + data.samples = undefined; + } + return data; + }); + } + getJsonValueToSave() { + const json = this.opeForm.value; + // Mark as not controlled (remove control date, etc.) + // BUT keep qualityFlag (e.g. need to keep it when = NOT_COMPLETED - see below) + DataEntityUtils.markAsNotControlled(json, { keepQualityFlag: true }); + // Make sure parent operation has quality flag + if (this.allowParentOperation && EntityUtils.isEmpty(json.parentOperation, 'id') && DataEntityUtils.hasNoQualityFlag(json)) { + console.warn('[operation-page] Parent operation does not have quality flag id. Changing to NOT_COMPLETED '); + json.qualityFlagId = QualityFlagIds.NOT_COMPLETED; + // Propage this change to the form + this.opeForm.qualityFlagControl.patchValue(QualityFlagIds.NOT_COMPLETED, { emitEvent: false }); + } + // Clean childOperation if empty + if (EntityUtils.isEmpty(json.childOperation, 'id')) { + delete json.childOperation; + } + json.measurements = this.measurementsForm.value; + json.tripId = this.trip.id; + return json; + } + initAvailableTaxonGroups(programLabel) { + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.debug('[operation] Setting available taxon groups...'); + // Load program's taxon groups + let availableTaxonGroups = yield this.programRefService.loadTaxonGroups(programLabel); + // Retrieve the trip measurements on SELF_SAMPLING_PROGRAM, if any + const qvMeasurement = (this.trip.measurements || []).find((m) => m.pmfmId === PmfmIds.SELF_SAMPLING_PROGRAM); + if (qvMeasurement && ReferentialUtils.isNotEmpty(qvMeasurement.qualitativeValue)) { + // Retrieve QV from the program pmfm (because measurement's QV has only the 'id' attribute) + const tripPmfms = yield this.programRefService.loadProgramPmfms(programLabel, { acquisitionLevel: AcquisitionLevelCodes.TRIP }); + const pmfm = (tripPmfms || []).find((p) => p.id === PmfmIds.SELF_SAMPLING_PROGRAM); + const qualitativeValue = ((pmfm === null || pmfm === void 0 ? void 0 : pmfm.qualitativeValues) || []).find((qv) => qv.id === qvMeasurement.qualitativeValue.id); + // Transform QV.label has a list of TaxonGroup.label + const contextualTaxonGroupLabels = qualitativeValue === null || qualitativeValue === void 0 ? void 0 : qualitativeValue.label.split(/[^\w]+/).filter(isNotNilOrBlank).map((label) => label.trim().toUpperCase()); + // Limit the program list, using the restricted list + if (isNotEmptyArray(contextualTaxonGroupLabels)) { + availableTaxonGroups = availableTaxonGroups.filter((tg) => contextualTaxonGroupLabels.some((label) => label === tg.label || + // Contextual 'RJB' must match RJB_1, RJB_2 + tg.label.startsWith(label))); + } + } + // Set table's default taxon groups + if (this.batchTree) + this.batchTree.availableTaxonGroups = availableTaxonGroups; + if (this.sampleTree) + this.sampleTree.availableTaxonGroups = availableTaxonGroups; + }); + } + updateTablesState() { + var _a, _b, _c, _d; + if (this.enabled) { + if (this.showCatchTab) { + if ((_a = this.batchTree) === null || _a === void 0 ? void 0 : _a.disabled) { + this.batchTree.enable(); + this.batchTree.realignInkBar(); + } + } + if (this.showSamplesTab) { + if ((_b = this.sampleTree) === null || _b === void 0 ? void 0 : _b.disabled) { + this.sampleTree.enable(); + this.sampleTree.realignInkBar(); + } + } + } + else { + if (this.showCatchTab && ((_c = this.batchTree) === null || _c === void 0 ? void 0 : _c.enabled)) { + this.batchTree.disable(); + } + if (this.showSamplesTab && ((_d = this.sampleTree) === null || _d === void 0 ? void 0 : _d.enabled)) { + this.sampleTree.disable(); + } + } + // Force expected sub tab index + if (this.showBatchTables && this.batchTree && this.batchTree.selectedTabIndex !== this.selectedSubTabIndex) { + this.batchTree.setSelectedTabIndex(this.selectedSubTabIndex); + } + else if (this.showSamplesTab && this.sampleTree && this.sampleTree.selectedTabIndex !== this.selectedSubTabIndex) { + this.sampleTree.setSelectedTabIndex(this.selectedSubTabIndex); + } + } + loadLinkedOperation(data) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const childOperationId = toNumber(data.childOperationId, (_a = data.childOperation) === null || _a === void 0 ? void 0 : _a.id); + // Load child operation + if (isNotNil(childOperationId)) { + try { + data.childOperation = yield this.dataService.load(childOperationId, { fetchPolicy: 'cache-first' }); + data.childOperationId = undefined; + } + catch (err) { + console.error('Cannot load child operation: reset', err); + data.childOperation = undefined; + data.childOperationId = undefined; + data.parentOperation = undefined; + } + } + else { + // Load parent operation + const parentOperationId = toNumber(data.parentOperationId, (_b = data.parentOperation) === null || _b === void 0 ? void 0 : _b.id); + if (isNotNil(parentOperationId)) { + let validParent = true; + try { + data.parentOperation = yield this.dataService.load(parentOperationId, { fullLoad: false, fetchPolicy: 'cache-first' }); + data.parentOperationId = undefined; + // Check parent operation is not already associated to another remote child operation + if (data.parentOperation && + EntityUtils.isRemoteId(data.parentOperation.childOperationId) && + data.parentOperation.childOperationId !== data.id) { + console.error(`Parent operation exists, but already linked to another remote operation: #${data.parentOperation.childOperationId}: mark parent has missing, to force user to fix it`); + validParent = false; + } + } + catch (err) { + console.error('Cannot load parent operation: keep existing, to force user to fix it', err); + validParent = false; + } + if (!validParent) { + data.parentOperationId = undefined; + // We create a fake Operation, with a qualityFlag = MISSING + // This is required to detect error at validation time (see OperationValidators.existsParent) + data.parentOperation = Operation.fromObject({ + id: parentOperationId, + startDateTime: data.startDateTime, + fishingStartDateTime: data.fishingStartDateTime, + qualityFlagId: QualityFlagIds.MISSING, + }); + } + } + } + }); + } + computePageUrl(id) { + const parentUrl = this.getParentPageUrl(); + return parentUrl && `${parentUrl}/operation/${id}`; + } + markForCheck() { + this.cd.markForCheck(); + } + computeNextTabIndex() { + if (this.selectedTabIndex > 0) + return undefined; // Already on the next tab + return this.showCatchTab ? OperationPage_1.TABS.CATCH : this.showSamplesTab ? OperationPage_1.TABS.SAMPLE : undefined; + } + startListenChanges() { + if (EntityUtils.isLocal(this.data)) + return; // Skip if local entity + super.startListenChanges(); + } + /** + * Update context, for batch validator + * + * @protected + */ + updateDataContext() { + var _a, _b, _c, _d, _e; + console.debug('[operation-page] Updating data context...'); + // Date + const date = this.lastEndDate || ((_a = this.opeForm.lastStartDateTimeControl) === null || _a === void 0 ? void 0 : _a.value); + this.context.setValue('date', fromDateISOString(date)); + // Fishing area + if (this.opeForm.showFishingArea) { + const fishingAreas = (this.opeForm.fishingAreasHelper && ((_b = this.opeForm.fishingAreasHelper.formArray) === null || _b === void 0 ? void 0 : _b.value)) || ((_c = this.data) === null || _c === void 0 ? void 0 : _c.fishingAreas); + this.context.setValue('fishingAreas', fishingAreas); + this.context.resetValue('vesselPositions'); + } + // Or vessel positions + else if (this.opeForm.showPosition) { + const positions = [(_d = this.opeForm.firstActivePositionControl) === null || _d === void 0 ? void 0 : _d.value, (_e = this.opeForm.lastActivePositionControl) === null || _e === void 0 ? void 0 : _e.value].filter((position) => PositionUtils.isNotNilAndValid(position)); + this.context.setValue('vesselPositions', positions); + this.context.resetValue('fishingAreas'); + } + } + /** + * Navigate to other operation + * + * @param id + * @param opts + * @protected + */ + navigateTo(id, opts) { + return __awaiter(this, void 0, void 0, function* () { + const path = this.computePageUrl(id); + const commands = path && typeof path === 'string' ? path.split('/').slice(1) : path; + if (isNotEmptyArray(commands)) { + // Change the trip id in path + if (isNotNil(opts === null || opts === void 0 ? void 0 : opts.tripId) && commands[0] === 'trips' && +commands[1] === this.tripId) { + commands[1] = opts.tripId; + } + // Should replace the current page in history ? (default: true) + let replaceUrl = !opts || opts.replaceUrl !== false; + const queryParams = (opts === null || opts === void 0 ? void 0 : opts.queryParams) || {}; + // Workaround, to force angular to reload a new page + if (id === 'new') { + const ok = yield this.goBack(); + if (!ok) + return; + yield sleep(450); + replaceUrl = false; // No more need to replace the current page in history + } + else { + queryParams[this.pathIdAttribute] = '' + id; + } + return yield this.router.navigate(commands, { + replaceUrl, + queryParams, + }); + } + return Promise.reject('Missing page URL'); + }); + } + openParentOperation(parent) { + return __awaiter(this, void 0, void 0, function* () { + const saved = (this.mobile || this.isOnFieldMode) && (!this.dirty || this.valid) + ? // If on field mode: try to save silently + yield this.save(null, { openTabIndex: -1 }) + : // If desktop mode: ask before save + yield this.saveIfDirtyAndConfirm(null, { + openTabIndex: -1, + }); + if (!saved) + return; // Skip + // Not same trips + if (this.tripId !== parent.tripId) { + return this.navigateTo(parent.id, { + replaceUrl: false, + tripId: parent.tripId, + queryParams: { color: 'secondary' }, + }); + } + else { + // Open, and replace the current OP + return this.navigateTo(parent.id); + } + }); + } + downloadAsJson(event) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const confirmed = yield this.saveIfDirtyAndConfirm(event); + if (confirmed === false) + return; + if (!EntityUtils.isRemoteId((_a = this.data) === null || _a === void 0 ? void 0 : _a.id)) + return; // Skip + // Create file content + const data = yield this.dataService.load(this.data.id, { fullLoad: true }); + const json = data.asObject(MINIFY_ENTITY_FOR_LOCAL_STORAGE); + const content = JSON.stringify([json]); + // Write to file + FilesUtils.writeTextToFile(content, { + filename: this.translate.instant('TRIP.OPERATION.LIST.DOWNLOAD_JSON_FILENAME'), + type: 'application/json', + }); + }); + } + openDownloadPage(type) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const confirmed = yield this.saveIfDirtyAndConfirm(); + if (confirmed === false) + return; + const trip = this.trip; + if (!EntityUtils.isRemoteId(trip === null || trip === void 0 ? void 0 : trip.id) || !EntityUtils.isRemoteId((_a = this.data) === null || _a === void 0 ? void 0 : _a.id)) + return; // Skip + // Create extraction type and filter + type = type || ExtractionType.fromLiveLabel('PMFM_TRIP'); + const programLabel = (_b = trip.program) === null || _b === void 0 ? void 0 : _b.label; + const tripId = trip.id; + const operationId = this.data.id; + const filter = ExtractionUtils.createTripFilter(programLabel, [tripId], [operationId]); + const queryParams = ExtractionUtils.asQueryParams(type, filter); + // Open extraction + yield this.router.navigate(['extraction', 'data'], { queryParams }); + }); + } +}; +OperationPage.TABS = { + GENERAL: 0, + CATCH: 1, + SAMPLE: 2, +}; +__decorate([ + ViewChild('opeForm', { static: true }), + __metadata("design:type", OperationForm) +], OperationPage.prototype, "opeForm", void 0); +__decorate([ + ViewChild('measurementsForm', { static: true }), + __metadata("design:type", MeasurementsForm) +], OperationPage.prototype, "measurementsForm", void 0); +__decorate([ + ViewChild('batchTree', { static: true }), + __metadata("design:type", Object) +], OperationPage.prototype, "batchTree", void 0); +__decorate([ + ViewChild('sampleTree', { static: true }), + __metadata("design:type", SampleTreeComponent) +], OperationPage.prototype, "sampleTree", void 0); +OperationPage = OperationPage_1 = __decorate([ + Component({ + selector: 'app-operation-page', + templateUrl: './operation.page.html', + styleUrls: ['./operation.page.scss'], + animations: [fadeInOutAnimation], + providers: [{ provide: APP_DATA_ENTITY_EDITOR, useExisting: OperationPage_1 }, { provide: ContextService, useExisting: TripContextService }, RxState], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __param(2, Optional()), + __metadata("design:paramtypes", [Injector, + OperationService, + AppEditorOptions]) +], OperationPage); +export { OperationPage }; +//# sourceMappingURL=operation.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/operation.page.js.map b/out-tsc/app/app/trip/operation/operation.page.js.map new file mode 100644 index 000000000..777a083c6 --- /dev/null +++ b/out-tsc/app/app/trip/operation/operation.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"operation.page.js","sourceRoot":"","sources":["../../../../../src/app/trip/operation/operation.page.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAiB,uBAAuB,EAAE,SAAS,EAAE,QAAQ,EAAqB,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACpI,OAAO,EAAwB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAC;AACrF,OAAO,EACL,gBAAgB,EAEhB,YAAY,EACZ,YAAY,EAEZ,SAAS,EAET,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EAEjB,OAAO,EACP,KAAK,EACL,eAAe,EACf,QAAQ,EACR,eAAe,EACf,+BAA+B,EAC/B,gBAAgB,EAChB,KAAK,EACL,SAAS,EACT,KAAK,EACL,QAAQ,GAGT,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/I,OAAO,EAAoB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG9D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAQ,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACzG,OAAO,EAAE,qBAAqB,EAAwB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAErJ,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC5D,OAAO,EAAe,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAa,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAmB,MAAM,kCAAkC,CAAC;AACxF,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAmBnE,IAAM,aAAa,qBAAnB,MAAM,aACX,SAAQ,mBAA2D;IAkHnE,YAAY,QAAkB,EAC5B,WAA6B,EACjB,OAA0B;;QAEtC,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,kBACpC,eAAe,EAAE,aAAa,EAC9B,QAAQ,EAAE,CAAC,EACX,UAAU,EAAE,sBAAsB,EAClC,gBAAgB,EAAE,qBAAqB,CAAC,SAAS,IAC9C,OAAO,EACV,CAAC;QAhHG,2CAAsC,GAAG,KAAK,CAAC;QAEpC,2BAAsB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACrE,kBAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACnD,YAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QASjD,oBAAe,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACvD,iBAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAI1D,gBAAW,GAAyB,EAAE,CAAC;QACvC,wBAAmB,GAAG,CAAC,CAAC;QACxB,yBAAoB,GAAG,KAAK,CAAC;QAC7B,kBAAa,GAAG,KAAK,CAAC;QACtB,0BAAqB,GAAG,KAAK,CAAC;QAC9B,sBAAiB,GAGb,EAAE,CAAC;QACP,iBAAY,GAAqB,SAAS,CAAC;QAC3C,gBAAW,GAAG,KAAK,CAAC;QAEpB,yGAAyG;QACzG,iBAAY,GAAG,KAAK,CAAC;QACrB,mBAAc,GAAG,KAAK,CAAC;QACvB,oBAAe,GAAG,KAAK,CAAC;QACxB,6BAAwB,GAAG,IAAI,CAAC;QAChC,8BAAyB,GAAG,KAAK,CAAC;QAClC,qBAAgB,GAAG,KAAK,CAAC;QAGzB,8BAAyB,GAAG,IAAI,CAAC;QA2E/B,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC/C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAC1E,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;QAC9E,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAErC,gBAAgB;QAChB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,4BAA4B,GAAG;YAClC,OAAO,CAAC,sBAAsB;YAC9B,OAAO,CAAC,sBAAsB;YAC9B,wCAAwC;YACxC,iCAAiC;SAClC,CAAC;QACF,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC;QAErF,0DAA0D;QAC1D,MAAM,SAAS,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,SAAS,CAAC;QAC1C,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QAE9D,eAAe;QACf,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,OAAO;iBACT,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;iBACtF,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CACnD,CAAC;YACF,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,OAAO;iBACT,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;iBACvF,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;iBACzD,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CACzD,CAAC;SACH;QAED,6DAA6D;QAC7D,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,SAAS,EACT,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CACrC,MAAM,CAAC,eAAe,CAAC,EACvB,SAAS,CAAC,CAAC,YAAoB,EAAE,EAAE;;YACjC,yBAAyB;YACzB,MAAM,iBAAiB,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,CAAC;YAChD,IAAI,CAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,KAAK,MAAK,YAAY,EAAE;gBAC7C,OAAO,EAAE,CAAC,iBAAiB,CAAC,CAAC;aAC9B;YACD,kBAAkB;YAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAClF,CAAC,CAAC,CACH,CACF,CAAC;QAEF,gBAAgB;QAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE;YAC1D,6EAA6E;YAC7E,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE;gBACpD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;aAC3C;YAED,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,aAAa;QACb,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,gBAAgB,EAChB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI;QAC/B,yBAAyB;QACzB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,qBAAqB,KAAK,MAAM,CAAC;QAE7E,2BAA2B;QAC3B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACb,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,CAAC,uBAAuB;YAC5D,mBAAmB;YACnB,MAAM,QAAQ,GAAG,UAAU,MAAM,QAAQ,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACpE,IAAI,IAAI,CAAC,eAAe,KAAK,QAAQ,EAAE;gBACrC,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;gBAChC,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;QACH,CAAC,CAAC;QAEF,oCAAoC;QACpC,uCAAuC;QAEvC,MAAM,CAAC,QAAQ,CAAC;QAChB,oBAAoB;QACpB,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CACnB,IAAI,CAAC,WAAW,CAAC,QAAQ,CACvB,CAAC,EACD,CAAC,EACD,eAAe,EACf,MAAM,EACN,EAAE,MAAM,EAAE,EACV;YACE,aAAa,EAAE,KAAK;YACpB,WAAW,EAAE,KAAK;YAClB,gBAAgB,EAAE,KAAK;YACvB,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,mBAAmB;SACjC,CACF,CACF,EACD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CACtC,CACF,CAAC;QAEF,oBAAoB;QACpB,IAAI,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;IACvC,CAAC;IA5KD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,IAAI,aAAa;QACf,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QACjC,QAAQ,IAAI,CAAC,iBAAiB,EAAE;YAC9B,KAAK,eAAa,CAAC,IAAI,CAAC,KAAK;gBAC3B,OAAO,IAAI,CAAC,eAAe,CAAC;YAC9B,KAAK,eAAa,CAAC,IAAI,CAAC,MAAM;gBAC5B,OAAO,IAAI,CAAC,cAAc,CAAC;YAC7B;gBACE,OAAO,KAAK,CAAC;SAChB;IACH,CAAC;IAED,IAAI,0BAA0B;QAC5B,OAAO,IAAI,CAAC,sCAAsC,IAAI,IAAI,CAAC,aAAa,CAAC;IAC3E,CAAC;IAED;;OAEG;IACH,IAAI,oBAAoB;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,mBAAmB,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,YAAY,CAAC,KAAmB;QAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,MAAM,CAAC,KAAa;QACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,WAAW,CAAC,KAAa;QAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IA6HD,6CAA6C;IAC7C;;;;OAIG;IAEG,cAAc,CAAC,KAAa,EAAE,IAA4B;;YAC9D,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,gBAAgB;gBAAE,OAAO,KAAK,CAAC,CAAC,OAAO;YAClD,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,EAAE,CAAC,CAAC,kCAAkC;YAE3D,gDAAgD;YAChD,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEtB,MAAM,KAAK,GACT,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK;gBAC7D,CAAC,CAAC,4CAA4C;oBAC5C,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC9C,CAAC,CAAC,wCAAwC;oBACxC,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACnE,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,YAAY;YAEhC,0BAA0B;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAwB,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YAE5B,IAAI,CAAC,KAAK,EAAE;gBACV,uDAAuD;gBACvD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;gBAExB,4CAA4C;gBAC5C,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAElC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,uBAAuB,CAAC;gBAE3D,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;aACpB;iBAAM;gBACL,uBAAuB;gBACvB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAEtB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aAC7B;QACH,CAAC;KAAA;IAEK,OAAO,CAAC,IAAe,EAAE,IAAU;;YACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,kCACzC,IAAI,KACP,IAAI,EAAE,IAAI,CAAC,IAAI,IACf,CAAC;YAEH,IAAI,MAAM,EAAE;gBACV,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;gBACpG,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,EAAE;oBAChE,qBAAqB,EAAE;wBACrB,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE,CAC7B,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,EAAE;4BACtC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;4BACnC,KAAK;yBACN,CAAC;qBACL;iBACF,CAAC,CAAC;gBACH,OAAO;oBACL,OAAO,EAAE;wBACP,MAAM;wBACN,OAAO,EAAE,YAAY;qBACtB;iBACF,CAAC;aACH;YAED,qBAAqB;YACrB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;gBACrC,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,qCAAqC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;aACxF;YAED,OAAO,CAAC,YAAY;QACtB,CAAC;KAAA;IAED,oBAAoB,CAAC,WAAmB;QACtC,OAAO,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,WAAW,EAAE,EAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAC,CAAC,CAAC;IACvI,CAAC;IAED,YAAY,CAAC,IAAe,EAAE,IAAU;;QACtC,OAAO,CACL,KAAK,CAAC,MAAA,IAAI,CAAC,IAAI,0CAAE,cAAc,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,kCAC7B,IAAI,KACP,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,OAAO,EAAE,IAAI,CAAC,OAAO,IACrB,CACH,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,IAAe,EAAE,aAAqB;QAC5C,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACvD,CAAC;IAEK,aAAa,CAAC,KAAY;;YAC9B,IAAI,KAAK;gBAAE,KAAK,CAAC,cAAc,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAE1B,OAAO,CAAC,KAAK,CAAC,oCAAoC,IAAI,CAAC,OAAO,MAAM,CAAC,CAAC;YACtE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBACxC,SAAS,EAAE,YAAY;gBACvB,cAAc,EAAuB;oBACnC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC;oBAClD,WAAW,EAAE,IAAI,CAAC,OAAO;iBAC1B;gBACD,eAAe,EAAE,IAAI;aACtB,CAAC,CAAC;YACH,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;KAAA;IAED,QAAQ;QACN,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEjB,0BAA0B;QAC1B,IAAI,CAAC,oBAAoB,CACvB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,eAAa,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;aAC7I,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;aAC1C,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAC9C,CAAC;QAEF,4BAA4B;QAC5B,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,cAAc,EACd,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI;QAChD,0GAA0G;QAC1G,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAC7B,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,WAAC,OAAA,QAAQ,CAAC,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,IAAI,0CAAE,EAAE,EAAE,IAAI,CAAC,CAAA,EAAA,CAAC,CAAC;QAE/G,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EACnD,YAAY,CAAC,GAAG,CAAC,CAClB,EACD,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAC1B,CAAC;IACJ,CAAC;IAED,eAAe;QACb,KAAK,CAAC,eAAe,EAAE,CAAC;QAExB,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,gBAAgB,CAAC,MAAM;iBACzB,IAAI,CACH,MAAM,CAAC,QAAQ,CAAC,EAChB,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAC7C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAClC;iBACA,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,CACpD,CAAC;SACH;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;QACpD,mBAAmB;QACnB;YACE,IAAI,CAAC,mBAAmB,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC5F;QACD,uBAAuB;QACvB,IAAI,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE;YACzC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;SAC1C;IACH,CAAC;IAED;;OAEG;IACa,uBAAuB;;;YACrC,4BAA4B;YAC5B,qBAAqB;YAErB,QAAQ;YACR,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAE5D,4GAA4G;YAC5G,MAAA,IAAI,CAAC,wBAAwB,0CAAE,WAAW,EAAE,CAAC;YAC7C,IAAI,CAAC,wBAAwB,GAAG,IAAI,YAAY,EAAE,CAAC;YAEnD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAwB,CAAC;YACjE,IAAI,kBAAkB,GAAG,IAAI,CAAC;YAE9B,wFAAwF;YACxF,MAAM,mBAAmB,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;YAChF,IAAI,QAAQ,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;gBACnD,kBAAkB,GAAG,KAAK,CAAC;gBAC3B,IAAI,CAAC,YAAY,GAAG,MAAA,IAAI,CAAC,SAAS,0CAAE,aAAa,CAAC;gBAClD,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAC/B,mBAAmB,CAAC,YAAY;qBAC7B,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CAAW,mBAAmB,CAAC,KAAK,CAAC,EAC9C,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,EACnC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EACrB,oBAAoB,EAAE,CACvB;qBACA,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;;oBACrB,QAAQ,OAAiB,EAAE;wBACzB,KAAK,iBAAiB,CAAC,sBAAsB,CAAC,QAAQ;4BACpD,IAAI,IAAI,CAAC,KAAK;gCAAE,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;4BACnE,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;4BACtC,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;4BACtC,MAAM;wBACR,KAAK,iBAAiB,CAAC,sBAAsB,CAAC,UAAU;4BACtD,IAAI,IAAI,CAAC,KAAK;gCAAE,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;4BACnE,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;4BACrC,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;4BACvC,MAAM;wBACR,KAAK,iBAAiB,CAAC,sBAAsB,CAAC,SAAS;4BACrD,IAAI,IAAI,CAAC,KAAK;gCAAE,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;4BAChF,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;4BACtC,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;qBAC1C;oBAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,wBAAwB,CAAC;oBACrD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,KAAI,MAAA,IAAI,CAAC,SAAS,0CAAE,aAAa,CAAA,IAAI,KAAK,CAAC;oBACnF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,yBAAyB,CAAC;oBACrD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEpE,oEAAoE;oBACpE,iEAAiE;oBACjE,IAAI,IAAI,CAAC,gBAAgB,KAAK,eAAa,CAAC,IAAI,CAAC,OAAO,EAAE;wBACxD,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;qBAC9B;oBACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACzB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,CAAC,CAAC,CACL,CAAC;aACH;YAED,sFAAsF;YACtF,MAAM,2BAA2B,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;YACxF,IAAI,QAAQ,CAAC,2BAA2B,CAAC,EAAE;gBACzC,kBAAkB,GAAG,IAAI,CAAC,CAAC,wDAAwD;gBACnF,2BAA2B,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAC/D,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAC/B,2BAA2B,CAAC,YAAY;qBACrC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,SAAS,CAAW,2BAA2B,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;qBACzH,SAAS,CAAC,CAAC,oBAAoB,EAAE,EAAE;;oBAClC,IAAI,IAAI,CAAC,KAAK;wBAAE,OAAO,CAAC,KAAK,CAAC,2EAA2E,GAAG,oBAAoB,CAAC,CAAC;oBAElI,8CAA8C;oBAC9C,IAAI,CAAC,yBAAyB,GAAG,oBAAoB,CAAC;oBACtD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,yBAAyB,CAAC;oBACrD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,KAAI,MAAA,IAAI,CAAC,SAAS,0CAAE,aAAa,CAAA,IAAI,KAAK,CAAC;oBACnF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEpE,wBAAwB;oBACxB,IAAI,IAAI,CAAC,gBAAgB,KAAK,eAAa,CAAC,IAAI,CAAC,OAAO,EAAE;wBACxD,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;qBAC9B;oBACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACzB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,CAAC,CAAC,CACL,CAAC;aACH;YAED,IAAI,IAAI,CAAC,oBAAoB,EAAE;gBAC7B,kBAAkB,GAAG,KAAK,CAAC;gBAC3B,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAC/B,IAAI,CAAC,OAAO,CAAC,aAAa;qBACvB,IAAI,CACH,SAAS,CAAY,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAkB,CAAC,EACnE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,qBAAqB;gBAChD,oBAAoB,EAAE,CACvB;qBACA,SAAS,CAAC,CAAO,SAAS,EAAE,EAAE;;oBAC7B,IAAI,gBAAsC,CAAC;oBAC3C,IAAI,SAAS,EAAE;wBACb,IAAI,IAAI,CAAC,KAAK;4BAAE,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;wBACjE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,wBAAwB,CAAC;wBACrD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,KAAI,MAAA,IAAI,CAAC,SAAS,0CAAE,aAAa,CAAA,IAAI,KAAK,CAAC;wBACnF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,yBAAyB,CAAC;wBACrD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACpE,gBAAgB,GAAG,qBAAqB,CAAC,eAAe,CAAC;qBAC1D;yBAAM;wBACL,IAAI,IAAI,CAAC,KAAK;4BAAE,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;wBAClE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;wBAC7B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;wBAC5B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;wBAC1B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;wBAClB,gBAAgB,GAAG,qBAAqB,CAAC,SAAS,CAAC;qBACpD;oBAED,8BAA8B;oBAC9B,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;oBAEzC,wBAAwB;oBACxB,IAAI,IAAI,CAAC,gBAAgB,KAAK,eAAa,CAAC,IAAI,CAAC,OAAO,EAAE;wBACxD,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;qBAC9B;oBAED,kCAAkC;oBAClC,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;wBAClF,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;qBAChF;oBAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACzB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,CAAC,CAAA,CAAC,CACL,CAAC;aACH;YAED,MAAM,4BAA4B,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YAC1F,IAAI,QAAQ,CAAC,4BAA4B,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;gBAC5D,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAC/B,4BAA4B,CAAC,YAAY;qBACtC,IAAI,CAAC,SAAS,CAAW,4BAA4B,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;qBAC/E,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAChF,CAAC;gBACF,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAC/B,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;oBAC9C,+BAA+B;oBAC/B,IAAI,CAAC,SAAS,CAAC,oBAAoB,GAAG,KAAK,CAAC;oBAC5C,IAAI,CAAC,SAAS,CAAC,oBAAoB,GAAG,KAAK,CAAC;oBAC5C,IAAI,CAAC,SAAS,CAAC,eAAe,GAAG,KAAK,CAAC;oBAEvC,oEAAoE;oBACpE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,yBAAyB,EAAE,CAAC,KAAK,CAAC,CAAC;oBACjE,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;wBAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;wBACzE,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBACjF;oBACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,CAAC,CAAC,CACH,CAAC;aACH;iBAAM;gBACL,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;aACvD;YAED,4BAA4B;YAC5B,IAAI,kBAAkB,EAAE;gBACtB,IAAI,IAAI,CAAC,KAAK;oBAAE,OAAO,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;gBAC3G,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,wBAAwB,CAAC;gBACrD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,KAAI,MAAA,IAAI,CAAC,SAAS,0CAAE,aAAa,CAAA,IAAI,KAAK,CAAC;gBACnF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,yBAAyB,CAAC;gBACrD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpE,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,IAAI,CAAC,YAAY,EAAE,CAAC;gBAEpB,kCAAkC;gBAClC,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;oBAClF,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC1E;aACF;YAED,8CAA8C;YAC9C,MAAM,mBAAmB,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YACvE,IAAI,QAAQ,CAAC,mBAAmB,CAAC,EAAE;gBACjC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAC/B,mBAAmB,CAAC,YAAY;qBAC7B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,SAAS,CAAW,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,oBAAoB,EAAE,CAAC;qBACxH,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE;oBAC5B,IAAI,CAAC,cAAc;wBAAE,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;oBAC/F,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,CAAC,cAAc,CAAC;oBAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,CAAC,CAAC,CACL,CAAC;aACH;;KACF;IAED,WAAW;;QACT,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,MAAA,IAAI,CAAC,wBAAwB,0CAAE,WAAW,EAAE,CAAC;QAC7C,MAAA,IAAI,CAAC,sBAAsB,0CAAE,WAAW,EAAE,CAAC;IAC7C,CAAC;IAEe,UAAU,CAAC,OAAgB;;;YACzC,IAAI,CAAC,OAAO;gBAAE,OAAO,CAAC,OAAO;YAC7B,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,KAAK,CAAC,uBAAuB,OAAO,CAAC,KAAK,4BAA4B,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;YAEpH,IAAI,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACpE,UAAU,GAAG,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,UAAU,CAAC;YAErC,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,CAAC;YACxG,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;YAC1F,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,CAAC;YAC9G,IAAI,CAAC,sCAAsC,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,kDAAkD,CAAC,CAAC;YACjJ,MAAM,SAAS,GAAG,SAAS,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAA,IAAI,CAAC,IAAI,0CAAE,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;YAC9G,MAAM,cAAc,GAAG,SAAS,IAAI,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;YACzG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,cAAc,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,cAAc,IAAI,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACvI,+GAA+G;YAC/G,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,CAAC,cAAc,CAAC,CAAC,qFAAqF;YACrI,IAAI,CAAC,OAAO,CAAC,2BAA2B,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,8CAA8C,CAAC,CAAC;YAC1I,MAAM,mBAAmB,GAAc,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;YACjG,MAAM,oBAAoB,GAAc,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;YACnG,IAAI,CAAC,OAAO,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;YACvD,IAAI,CAAC,OAAO,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,uBAAuB,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,0CAA0C,CAAC,CAAC;YAClI,IAAI,CAAC,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;YACxG,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;YACpG,IAAI,CAAC,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAC9D,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,4BAA4B,CAAC,CAAC;YACvG,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,4BAA4B,CAAC,CAAC;YACxI,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,0BAA0B,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,wCAAwC,CAAC,CAAC;YACnI,IAAI,CAAC,OAAO,CAAC,wBAAwB,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,sCAAsC,CAAC,CAAC;YAC/H,IAAI,CAAC,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,CAAC;YAChH,IAAI,CAAC,OAAO,CAAC,0BAA0B,GAAG,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,0CAA0C,CAAC,CAAC;YACjI,IAAI,CAAC,OAAO,CAAC,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,uCAAuC,CAAC,CAAC;YAC3H,IAAI,CAAC,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,yBAAyB,CAAC;YACvE,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,0BAA0B,CAAC,CAAC;YAClG,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,mBAAmB,KAAK,CAAC,EAAE;gBAChD,OAAO,CAAC,KAAK,CAAC,yDAAyD,aAAa,CAAC,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;aACxI;YACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAEtI,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,UAAU,CAAC;YAC9C,IAAI,CAAC,gBAAgB,CAAC,aAAa,GAAG,IAAI,CAAC,0BAA0B,CAAC;YACtE,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,CAAC;YACvH,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,CAAC;YAE5H,IAAI,CAAC,WAAW,CAAC,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,qCAAqC,CAAC,CAAC;YAC/H,IAAI,CAAC,WAAW,CAAC,2BAA2B;gBAC1C,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,mCAAmC,CAAC,CAAC;YACtG,IAAI,CAAC,WAAW,CAAC,kBAAkB,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,0CAA0C,CAAC,CAAC;YAEjJ,mEAAmE;YACnE,qEAAqE;YAErE,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;YAClG,IAAI,CAAC,yBAAyB,GAAG,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;YAEpG,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;gBAC9B,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,SAAS,CAAC;aACzD;YACD,uCAAuC;iBAClC,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;gBACxC,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,eAAe,CAAC;aAC/D;YAED,IAAI,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;YACrD,IAAI,IAAI,CAAC,UAAU;gBAAE,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;YAEvD,2EAA2E;YAC3E,MAAM,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAEnD,IAAI,CAAC,WAAW,EAAE,CAAC;;KACpB;IAED,IAAI,CACF,EAAW,EACX,IAAyH;QAEzH,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,kCAAO,IAAI,KAAE,mBAAmB,EAAE,IAAI,IAAG,CAAC;IAChE,CAAC;IAEK,WAAW,CAAC,IAAe,EAAE,OAAkC;;;YACnE,MAAM,MAAM,GAAG,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC;YAChJ,IAAI,KAAK,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACzE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YAErB,mBAAmB;YACnB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAEzC,oCAAoC;YACpC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACjD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACnC;YAED,+CAA+C;YAC/C,IAAI,CAAC,YAAY,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAK,CAAC;YACxC,IAAI,CAAC,QAAQ,GAAG,MAAA,IAAI,CAAC,cAAc,0CAAE,EAAE,CAAC;YAExC,yDAAyD;YACzD,MAAM,SAAS,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,SAAS,CAAC;YAC1C,IAAI,cAAc,CAAC,WAAW,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,CAAC,EAAE;gBAC/C,sEAAsE;gBACtE,IAAI,IAAI,CAAC,aAAa,EAAE;oBACtB,IAAI,CAAC,KAAK,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC7F;qBAAM;oBACL,IAAI,CAAC,KAAK,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;iBACvD;gBAED,kBAAkB;gBAClB,MAAA,IAAI,CAAC,OAAO,0CAAE,QAAQ,CAAC,WAAW,EAAE;oBAClC,IAAI,EAAE,IAAI;oBACV,UAAU,EAAE,IAAI,CAAC,mBAAmB,EAAE,aAAa;iBACpD,CAAC,CAAC;gBAEH,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;aAC9B;YAED,gDAAgD;YAChD,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;gBAExC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;oBAC1B,oCAAoC;oBACpC,MAAM,kBAAkB,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;oBAEzG,qEAAqE;oBACrE,MAAM,iBAAiB,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;oBACnI,IAAI,iBAAiB,EAAE;wBACrB,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,iBAAiB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC;wBACrI,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC;wBACvC,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC,SAAS,GAAG,CAAC,CAAC;qBAClD;yBAAM;wBACL,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;qBACpB;iBACF;aACF;YAED,oBAAoB;YACpB,IAAI,IAAI,CAAC,YAAY;gBAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YAE7D,0BAA0B;YAC1B,IAAI,IAAI,CAAC,YAAY;gBAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YAE7D,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;;KACzC;IAEK,cAAc,CAAC,IAAe,EAAE,OAAkC;;;YACtE,MAAM,MAAM,GAAG,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC;YAChJ,IAAI,KAAK,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACzE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YAErB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAEzC,2CAA2C;YAC3C,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC;YACxH,IAAI,CAAC,YAAY,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAK,CAAC;YACxC,IAAI,CAAC,QAAQ,GAAG,MAAA,IAAI,CAAC,cAAc,0CAAE,EAAE,CAAC;YAExC,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAErC,oBAAoB;YACpB,IAAI,IAAI,CAAC,YAAY;gBAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YAE7D,0BAA0B;YAC1B,IAAI,IAAI,CAAC,YAAY;gBAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YAE7D,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE1E,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,EAAE,CAAC,CAAC;;KACrE;IAED,mBAAmB,CAAC,KAAY;QAC9B,QAAQ,IAAI,CAAC,gBAAgB,EAAE;YAC7B,KAAK,eAAa,CAAC,IAAI,CAAC,KAAK;gBAC3B,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,SAAS;oBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzE,MAAM;YACR,KAAK,eAAa,CAAC,IAAI,CAAC,MAAM;gBAC5B,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU;oBAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1E,MAAM;SACT;IACH,CAAC;IAED;;;;;OAKG;IACa,YAAY,CAC1B,IAAe,EACf,IAEC;;;YAED,cAAc;YACd,MAAM,WAAW,GACf,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC;gBACnC,IAAI,CAAC,IAAI;gBACT,CAAC,MAAM,IAAI,CAAC,SAAS;qBAClB,GAAG,CAAC,6BAA6B,EAAE;oBAClC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;oBACpI,iBAAiB,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAK,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAY,CAAC,IAAI,EAAE;iBAC1I,CAAC;qBACD,SAAS,EAAE,CAAC,CAAC;gBAClB,EAAE,CAAC;YAEL,UAAU;YACV,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBAC3B,OAAO,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;aACzF;YAED,mCAAmC;YACnC,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,oBAAoB,CAAC;YACpE,IAAI,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;gBAC3C,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,aAAa,CAAC;aACjI;YAED,eAAe;YACf,0CAA0C;YAC1C,MAAM,aAAa,GACjB,aAAa;gBACZ,CAAC,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC;oBAC9D,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;oBAChE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAY,CAAC;YAE3E,gGAAgG;YAChG,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,KAAI,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,SAAS,0CAAE,SAAS,CAAA,CAAC;YACnE,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBACpC,wBAAwB;gBACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBACrC,IAAI,IAAI,CAAC,KAAK;oBAAE,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBACzE,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;gBACtF,IAAI,IAAI,CAAC,KAAK;oBAAE,OAAO,CAAC,KAAK,CAAC,8CAA8C,SAAS,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC;gBAEpH,wBAAwB;gBACxB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;gBAC3B,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;aACpE;YACD,IAAI,SAAS,EAAE;gBACb,OAAO,CAAC,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,2BAA2B,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAW,CAAC;aACpI;YACD,gCAAgC;iBAC3B;gBACH,OAAO,CAAC,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,mCAAmC,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAW,CAAC;aACjI;;KACF;IAEe,kBAAkB,CAAC,KAAa;;;;;YAC9C,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,iBAAiB;YAE1C,uCACK,CAAC,MAAM,OAAM,kBAAkB,YAAC,KAAK,CAAC,CAAC,KAC1C,IAAI,EAAE,UAAU,IAChB;QACJ,CAAC;KAAA;IAED,WAAW,CAAC,KAAwB,EAAE,cAAuB;QAC3D,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACzD,IAAI,OAAO,EAAE;YACX,QAAQ,IAAI,CAAC,gBAAgB,EAAE;gBAC7B,KAAK,eAAa,CAAC,IAAI,CAAC,KAAK;oBAC3B,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,SAAS;wBAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;oBAC3E,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,MAAM;gBACR,KAAK,eAAa,CAAC,IAAI,CAAC,MAAM;oBAC5B,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU;wBAAE,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;oBAC5E,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,MAAM;aACT;SACF;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,QAAQ,CAAC,IAAqB;QAC5B,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEK,oBAAoB,CAAC,KAAY,EAAE,EAAU;;YACjD,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,gBAAgB;gBAAE,OAAO,CAAC,OAAO;YAE5C,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE;gBAAE,OAAO,CAAC,OAAO;YAErD,gDAAgD;YAChD,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEtB,MAAM,KAAK,GACT,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;gBAChE,CAAC,CAAC,yCAAyC;oBACzC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC9C,CAAC,CAAC,mCAAmC;oBACnC,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAEnE,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,OAAO;YAE3B,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC;KAAA;IAEK,UAAU,CAAC,KAAY;;YAC3B,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,gBAAgB;gBAAE,OAAO,KAAK,CAAC,CAAC,OAAO;YAClD,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,EAAE,CAAC,CAAC,kCAAkC;YAE3D,gDAAgD;YAChD,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEtB,MAAM,KAAK,GACT,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;gBAChE,CAAC,CAAC,4CAA4C;oBAC5C,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC9C,CAAC,CAAC,wCAAwC;oBACxC,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACnE,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,YAAY;YAEhC,mBAAmB;YACnB,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;KAAA;IAEK,SAAS,CAAC,KAAY;;YAC1B,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,gBAAgB,KAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO,CAAC,OAAO;YAC7D,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,EAAE,CAAC,CAAC,kCAAkC;YAE3D,gDAAgD;YAChD,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEtB,MAAM,KAAK,GACT,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK;gBAC7D,CAAC,CAAC,4CAA4C;oBAC5C,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC9C,CAAC,CAAC,wCAAwC;oBACxC,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAEnE,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,0CAA0C;YAE9D,2BAA2B;YAC3B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE;gBACjC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,UAAU,EAAE,IAAI,CAAC,mBAAmB;aACrC,CAAC,CAAC;YAEH,qBAAqB;YACrB,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;KAAA;IAEK,QAAQ,CAAC,IAAe;;;YAC5B,IAAI;gBACF,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,EAAE,CAAC,CAAC;gBAClC,MAAM,IAAI,GAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;gBAE3D,mCAAmC;gBACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,0CAAE,IAAI,0CAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gBAE5D,wBAAwB;gBACxB,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC;gBACtC,IAAI,CAAC,gBAAgB,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;gBACvD,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,IAAI,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC;gBACrH,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC;gBAEpH,0CAA0C;gBAC1C,IAAI,IAAI,CAAC,gBAAgB,KAAK,gBAAgB,EAAE;oBAC9C,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;oBAC/B,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;oBAC1D,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;oBACpC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;iBAC1C;gBAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAE7E,iBAAiB;gBACjB,IAAI,IAAI,CAAC,SAAS,EAAE;oBAClB,kDAAkD;oBAClD,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;oBAChD,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC;oBAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;iBACvE;gBAED,kBAAkB;gBAClB,IAAI,IAAI,CAAC,UAAU;oBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAEvF,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAExB,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;gBAE7C,mCAAmC;gBACnC,IAAI,SAAS,EAAE;oBACb,IAAI,IAAI,CAAC,qBAAqB,IAAI,CAAC,IAAI,CAAC,gBAAgB;wBAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;iBAC5F;aACF;YAAC,OAAO,GAAG,EAAE;gBACZ,MAAM,KAAK,GAAG,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,KAAI,GAAG,CAAC;gBAClC,OAAO,CAAC,KAAK,CAAC,uCAAuC,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC;gBACpE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aACtB;;KACF;IAED,MAAM,CAAC,KAAK;QACV,2CAA2C;QAC3C,KAAK,CAAC,GAAG,CAAC;aACP,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;aACpC,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAExC,UAAU;QACV,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM;QACJ,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;IACxB,CAAC;IAED,eAAe,CAAC,IAAe,EAAE,IAAkD;QACjF,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAElC,sEAAsE;QACtE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;QACnI,IAAI,eAAe,CAAC,YAAY,CAAC,EAAE;YACjC,OAAO,CAAC,IAAI,CAAC,8DAA8D,EAAE,YAAY,CAAC,CAAC;YAE3F,cAAc;YACd,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;YAE/C,UAAU,CAAC,GAAG,EAAE;;gBACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAEnC,MAAM,KAAK,GAAwB,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC;gBAC1E,IAAI,KAAK,CAAC,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,CAAC,KAAI,MAAA,IAAI,CAAC,UAAU,0CAAE,qBAAqB,CAAA,EAAE;oBACjF,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,CAAC;iBACjE;gBAED,IAAI,CAAC,QAAQ,iBAAG,OAAO,EAAE,uBAAuB,IAAK,KAAK,GAAI,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC,CAAC;YACtG,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAEK,IAAI,CAAC,KAAY,EAAE,IAAmG;;;;;;YAC1H,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC/B,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;gBAC7E,OAAO,KAAK,CAAC;aACd;YACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACf,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAC3D,OAAO,IAAI,CAAC;aACb;YAED,qDAAqD;YACrD,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAEjC,4BAA4B;YAC5B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,YAAY,EAAE;gBACjB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,OAAO,KAAK,CAAC,CAAC,iBAAiB;aAChC;YAED,6DAA6D;YAC7D,MAAM,KAAK,GAAG,MAAM,OAAM,IAAI,YAAC,KAAK,EAAE,8CACjC,IAAI,CAAC,WAAW,KACnB,qBAAqB,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,KACnF,IAAI,CACR,CAAC,CAAC;YAEH,2DAA2D;YAC3D,IAAI,CAAC,YAAY,EAAE,CAAC;YAEpB,IAAI;gBACF,4BAA4B;gBAC5B,IAAI,CAAC,KAAK,EAAE;oBACV,QAAQ;oBACR,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;oBAErD,IAAI,KAAK,GAAG,EAAE,CAAC;oBACf,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;wBACxB,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;qBAChC;oBACD,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;wBACjC,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;qBAChF;oBAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACrB,IAAI,CAAC,WAAW,EAAE,CAAC;iBACpB;qBAAM;oBACL,2DAA2D;oBAC3D,iCAAiC;oBACjC,IAAI,IAAI,CAAC,KAAK,EAAE;wBACd,OAAO,CAAC,IAAI,CAAC,gGAAgG,CAAC,CAAC;wBAC/G,MAAA,IAAI,CAAC,SAAS,0CAAE,cAAc,EAAE,CAAC;wBACjC,MAAA,IAAI,CAAC,UAAU,0CAAE,cAAc,EAAE,CAAC;qBACnC;oBAED,qBAAqB;oBACrB,IAAI,mBAAmB,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBAChD,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC3C,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACnD,qBAAqB;wBACrB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;qBAC1C;iBACF;gBAED,OAAO,KAAK,CAAC;aACd;oBAAS;gBACR,IAAI,CAAC,WAAW,EAAE,CAAC;aACpB;;KACF;IAEK,qBAAqB,CAAC,KAAa,EAAE,IAAqD;;;;;YAC9F,OAAO,OAAM,qBAAqB,YAAC,KAAK,kCAAO,IAAI,CAAC,WAAW,GAAK,IAAI,GAAI;QAC9E,CAAC;KAAA;IAEK,oBAAoB,CAAC,IAA6B;;;YACtD,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,CAAC,OAAO;YAErC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC;YAC5D,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAAE,OAAO,IAAI,CAAC,CAAC,OAAO;YAEpE,QAAQ;YACR,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAE9D,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,EAAE,CAAC;YAElB,IAAI;gBACF,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;gBAE1F,gCAAgC;gBAChC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;gBAErF,iCAAiC;gBACjC,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,KAAK,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAA,EAAE;oBAC5E,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;iBACzC;gBAED,OAAO,IAAI,CAAC;aACb;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACnB,OAAO,KAAK,CAAC;aACd;oBAAS;gBACR,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aACxB;;KACF;IAED,mBAAmB,CAAC,QAAmB;;QACrC,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC3E,MAAA,IAAI,CAAC,sBAAsB,0CAAE,WAAW,EAAE,CAAC;QAC3C,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACzE,CAAC;IAED,YAAY,CAAC,IAA8B;;QACzC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACzB,MAAA,IAAI,CAAC,QAAQ,0CAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,QAAQ,CAAC,KAAmC,EAAE,IAAwD;;QACpG,0BAA0B;QAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,KAAI,MAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,MAAM,0CAAE,KAAK,CAAA,EAAE;YAC9D,2BAA2B;YAC3B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,kCAAkC,EAAE;YAC1D,2BAA2B;aAC5B,CAAC,CAAC;YAEH,yBAAyB;YACzB,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,eAAa,CAAC,IAAI,CAAC,KAAK,CAAC;YAEvD,qBAAqB;YACrB,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SACjC;aAAM;YACL,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAE5B,yBAAyB;YACzB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACjC;IACH,CAAC;IAED,8BAA8B;IAC9B,UAAU,CAAC,IAA8B;QACvC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,4BAA4B;IAElB,yBAAyB,CAAC,QAAmB;QACrD,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAEe,QAAQ,CAAC,MAAc;;YACrC,qEAAqE;YACrE,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC;YAEtB,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS,CAAC;YAEjD,mCAAmC;YACnC,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,EAAE,MAAK,MAAM,EAAE;gBACvB,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/D,qBAAqB;gBACrB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;aACrC;YACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAED;;OAEG;IACO,uBAAuB;;QAC/B,kCAAkC;QAClC,MAAM,WAAW,GAAG;YAClB,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO;YACrD,CAAC,IAAI,CAAC,YAAY,KAAI,MAAA,IAAI,CAAC,SAAS,0CAAE,OAAO,CAAA,CAAC,IAAI,KAAK;YACvD,CAAC,IAAI,CAAC,cAAc,KAAI,MAAA,IAAI,CAAC,UAAU,0CAAE,OAAO,CAAA,CAAC,IAAI,KAAK;SAC3D,CAAC;QAEF,6BAA6B;QAC7B,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAElD,yCAAyC;QACzC,IAAI,eAAe,KAAK,eAAa,CAAC,IAAI,CAAC,KAAK,EAAE;YAChD,IAAI,CAAC,mBAAmB,GAAG,MAAA,IAAI,CAAC,SAAS,0CAAE,uBAAuB,EAAE,CAAC;YACrE,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B;QACD,0CAA0C;aACrC,IAAI,eAAe,KAAK,eAAa,CAAC,IAAI,CAAC,MAAM,EAAE;YACtD,IAAI,CAAC,mBAAmB,GAAG,MAAA,IAAI,CAAC,UAAU,0CAAE,uBAAuB,EAAE,CAAC;YACtE,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B;QACD,OAAO,eAAe,CAAC;IACzB,CAAC;IAES,gBAAgB,CAAC,SAAoB;;QAC7C,yEAAyE;QACzE,MAAM,mBAAmB,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,QAAQ,CAAC,WAAW,CAAc,CAAC;QAC7E,IAAI,mBAAmB;YAAE,OAAO,mBAAmB,CAAC;QAEpD,oBAAoB;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC;YACvC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBACf,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;YACjI,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,MAAM,CAAC;IACb,CAAC;IAES,aAAa;QACrB,6BAA6B;QAC7B,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7F,CAAC;IAES,gBAAgB;QACxB,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC,gBAAgB,EAAE,CAAC;IAClC,CAAC;IAES,iBAAiB;QACzB,OAAO,KAAK,CAAC,iBAAiB,EAAE,CAAC;IACnC,CAAC;IAEe,QAAQ;;;;;YACtB,MAAM,IAAI,GAAG,MAAM,OAAM,QAAQ,WAAE,CAAC;YAEpC,UAAU;YACV,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;gBACvC,wDAAwD;gBACxD,8BAA8B;gBAE9B,8CAA8C;gBAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBAEvC,yDAAyD;gBACzD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;oBACzB,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,SAAS,CAAC;iBACtC;aACF;iBAAM;gBACL,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;aAC7B;YAED,UAAU;YACV,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,EAAE;gBAC1C,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;gBAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;aACtC;iBAAM;gBACL,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;aAC1B;YAED,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAES,kBAAkB;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAEhC,qDAAqD;QACrD,+EAA+E;QAC/E,eAAe,CAAC,mBAAmB,CAAC,IAAiB,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAElF,8CAA8C;QAC9C,IAAI,IAAI,CAAC,oBAAoB,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC1H,OAAO,CAAC,IAAI,CAAC,6FAA6F,CAAC,CAAC;YAC5G,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC,aAAa,CAAC;YAElD,kCAAkC;YAClC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;SAChG;QAED,gCAAgC;QAChC,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE;YAClD,OAAO,IAAI,CAAC,cAAc,CAAC;SAC5B;QACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAChD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAE3B,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,wBAAwB,CAAC,YAAoB;;YAC3D,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAE/E,8BAA8B;YAC9B,IAAI,oBAAoB,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAEtF,kEAAkE;YAClE,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;YAC7G,IAAI,aAAa,IAAI,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE;gBAChF,2FAA2F;gBAC3F,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,YAAY,EAAE,EAAE,gBAAgB,EAAE,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC;gBAChI,MAAM,IAAI,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;gBACnF,MAAM,gBAAgB,GAAG,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,iBAAiB,KAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,aAAa,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBAEnH,oDAAoD;gBACpD,MAAM,0BAA0B,GAAG,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,KAAK,CACvD,KAAK,CAAC,QAAQ,EACd,MAAM,CAAC,eAAe,EACtB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;gBAE9C,oDAAoD;gBACpD,IAAI,eAAe,CAAC,0BAA0B,CAAC,EAAE;oBAC/C,oBAAoB,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CACxD,0BAA0B,CAAC,IAAI,CAC7B,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,KAAK,EAAE,CAAC,KAAK;wBAClB,2CAA2C;wBAC3C,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAC7B,CACF,CAAC;iBACH;aACF;YAED,mCAAmC;YACnC,IAAI,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,SAAS,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;YAC/E,IAAI,IAAI,CAAC,UAAU;gBAAE,IAAI,CAAC,UAAU,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACnF,CAAC;KAAA;IAES,iBAAiB;;QACzB,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,IAAI,MAAA,IAAI,CAAC,SAAS,0CAAE,QAAQ,EAAE;oBAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;oBACxB,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;iBAChC;aACF;YACD,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,MAAA,IAAI,CAAC,UAAU,0CAAE,QAAQ,EAAE;oBAC7B,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;oBACzB,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;iBACjC;aACF;SACF;aAAM;YACL,IAAI,IAAI,CAAC,YAAY,KAAI,MAAA,IAAI,CAAC,SAAS,0CAAE,OAAO,CAAA,EAAE;gBAChD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;aAC1B;YACD,IAAI,IAAI,CAAC,cAAc,KAAI,MAAA,IAAI,CAAC,UAAU,0CAAE,OAAO,CAAA,EAAE;gBACnD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;aAC3B;SACF;QACD,+BAA+B;QAC/B,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,gBAAgB,KAAK,IAAI,CAAC,mBAAmB,EAAE;YAC1G,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;SAC9D;aAAM,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,KAAK,IAAI,CAAC,mBAAmB,EAAE;YAClH,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;SAC/D;IACH,CAAC;IAEe,mBAAmB,CAAC,IAAe;;;YACjD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAA,IAAI,CAAC,cAAc,0CAAE,EAAE,CAAC,CAAC;YAClF,uBAAuB;YACvB,IAAI,QAAQ,CAAC,gBAAgB,CAAC,EAAE;gBAC9B,IAAI;oBACF,IAAI,CAAC,cAAc,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;oBACpG,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;iBACnC;gBAAC,OAAO,GAAG,EAAE;oBACZ,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;oBACzD,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;oBAChC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;oBAClC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;iBAClC;aACF;iBAAM;gBACL,wBAAwB;gBACxB,MAAM,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAA,IAAI,CAAC,eAAe,0CAAE,EAAE,CAAC,CAAC;gBACrF,IAAI,QAAQ,CAAC,iBAAiB,CAAC,EAAE;oBAC/B,IAAI,WAAW,GAAG,IAAI,CAAC;oBACvB,IAAI;wBACF,IAAI,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;wBACvH,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;wBAEnC,qFAAqF;wBACrF,IACE,IAAI,CAAC,eAAe;4BACpB,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC;4BAC7D,IAAI,CAAC,eAAe,CAAC,gBAAgB,KAAK,IAAI,CAAC,EAAE,EACjD;4BACA,OAAO,CAAC,KAAK,CACX,6EAA6E,IAAI,CAAC,eAAe,CAAC,gBAAgB,oDAAoD,CACvK,CAAC;4BACF,WAAW,GAAG,KAAK,CAAC;yBACrB;qBACF;oBAAC,OAAO,GAAG,EAAE;wBACZ,OAAO,CAAC,KAAK,CAAC,sEAAsE,EAAE,GAAG,CAAC,CAAC;wBAC3F,WAAW,GAAG,KAAK,CAAC;qBACrB;oBACD,IAAI,CAAC,WAAW,EAAE;wBAChB,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;wBACnC,2DAA2D;wBAC3D,6FAA6F;wBAC7F,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,UAAU,CAAC;4BAC1C,EAAE,EAAE,iBAAiB;4BACrB,aAAa,EAAE,IAAI,CAAC,aAAa;4BACjC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;4BAC/C,aAAa,EAAE,cAAc,CAAC,OAAO;yBACtC,CAAC,CAAC;qBACJ;iBACF;aACF;;KACF;IAES,cAAc,CAAC,EAAkB;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1C,OAAO,SAAS,IAAI,GAAG,SAAS,cAAc,EAAE,EAAE,CAAC;IACrD,CAAC;IAES,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;IAES,mBAAmB;QAC3B,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC,CAAC,0BAA0B;QAE3E,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,eAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,eAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACpH,CAAC;IAED,kBAAkB;QAChB,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,uBAAuB;QAEnE,KAAK,CAAC,kBAAkB,EAAE,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACO,iBAAiB;;QACzB,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC3D,OAAO;QACP,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,KAAI,MAAA,IAAI,CAAC,OAAO,CAAC,wBAAwB,0CAAE,KAAK,CAAA,CAAC;QAC9E,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QAEvD,eAAe;QACf,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YAChC,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAI,MAAA,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,0CAAE,KAAK,CAAA,CAAC,KAAI,MAAA,IAAI,CAAC,IAAI,0CAAE,YAAY,CAAA,CAAC;YACtI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;SAC5C;QAED,sBAAsB;aACjB,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;YAClC,MAAM,SAAS,GAAG,CAAC,MAAA,IAAI,CAAC,OAAO,CAAC,0BAA0B,0CAAE,KAAK,EAAE,MAAA,IAAI,CAAC,OAAO,CAAC,yBAAyB,0CAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CACpI,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CACzC,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;SACzC;IACH,CAAC;IAED;;;;;;OAMG;IACa,UAAU,CAAC,EAAkB,EAAE,IAAmE;;YAChH,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,QAAQ,GAAU,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,IAAc,CAAC;YACtG,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE;gBAC7B,6BAA6B;gBAC7B,IAAI,QAAQ,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;oBACrF,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;iBAC3B;gBAED,+DAA+D;gBAC/D,IAAI,UAAU,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC;gBACpD,MAAM,WAAW,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,KAAI,EAAE,CAAC;gBAE5C,oDAAoD;gBACpD,IAAI,EAAE,KAAK,KAAK,EAAE;oBAChB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC/B,IAAI,CAAC,EAAE;wBAAE,OAAO;oBAChB,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;oBACjB,UAAU,GAAG,KAAK,CAAC,CAAC,sDAAsD;iBAC3E;qBAAM;oBACL,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;iBAC7C;gBAED,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE;oBAC1C,UAAU;oBACV,WAAW;iBACZ,CAAC,CAAC;aACJ;YACD,OAAO,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC5C,CAAC;KAAA;IAEK,mBAAmB,CAAC,MAAiB;;YACzC,MAAM,KAAK,GACT,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;gBAChE,CAAC,CAAC,yCAAyC;oBACzC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC7C,CAAC,CAAC,mCAAmC;oBACnC,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE;wBACrC,YAAY,EAAE,CAAC,CAAC;qBACjB,CAAC,CAAC;YAET,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,OAAO;YAE3B,iBAAiB;YACjB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;gBACjC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE;oBAChC,UAAU,EAAE,KAAK;oBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,WAAW,EAAE,EAAE,KAAK,EAAoB,WAAW,EAAE;iBACtD,CAAC,CAAC;aACJ;iBAAM;gBACL,mCAAmC;gBACnC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;aACnC;QACH,CAAC;KAAA;IAEe,cAAc,CAAC,KAAe;;;YAC5C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC1D,IAAI,SAAS,KAAK,KAAK;gBAAE,OAAO;YAEhC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAA,IAAI,CAAC,IAAI,0CAAE,EAAE,CAAC;gBAAE,OAAO,CAAC,OAAO;YAE3D,sBAAsB;YACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAEvC,gBAAgB;YAChB,UAAU,CAAC,eAAe,CAAC,OAAO,EAAE;gBAClC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,4CAA4C,CAAC;gBAC9E,IAAI,EAAE,kBAAkB;aACzB,CAAC,CAAC;;KACJ;IAEe,gBAAgB,CAAC,IAAoB;;;YACnD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACrD,IAAI,SAAS,KAAK,KAAK;gBAAE,OAAO;YAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAA,IAAI,CAAC,IAAI,0CAAE,EAAE,CAAC;gBAAE,OAAO,CAAC,OAAO;YAEhG,oCAAoC;YACpC,IAAI,GAAG,IAAI,IAAI,cAAc,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACzD,MAAM,YAAY,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAK,CAAC;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,eAAe,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YACvF,MAAM,WAAW,GAAG,eAAe,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAEhE,kBAAkB;YAClB,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;;KACrE;;AAjjDgB,kBAAI,GAAG;IACtB,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;CACV,CAAC;AA+CF;IAAC,SAAS,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;8BAAU,aAAa;8CAAC;AAC/D;IAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;8BAAmB,gBAAgB;uDAAC;AAGpF;IAAC,SAAS,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;gDAAgC;AAGzE;IAAC,SAAS,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;8BAAa,mBAAmB;iDAAC;AA9DhE,aAAa;IARzB,SAAS,CAAC;QACT,QAAQ,EAAE,oBAAoB;QAC9B,WAAW,EAAE,uBAAuB;QACpC,SAAS,EAAE,CAAC,uBAAuB,CAAC;QACpC,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,eAAa,EAAE,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,kBAAkB,EAAE,EAAE,OAAO,CAAC;QACnJ,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;IAsHG,WAAA,QAAQ,EAAE,CAAA;qCAFS,QAAQ;QACf,gBAAgB;QACP,gBAAgB;GArH7B,aAAa,CAsjDzB;SAtjDY,aAAa"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/operation.service.js b/out-tsc/app/app/trip/operation/operation.service.js new file mode 100644 index 000000000..0947c608b --- /dev/null +++ b/out-tsc/app/app/trip/operation/operation.service.js @@ -0,0 +1,1617 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { Injectable, Optional } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { combineLatest, EMPTY, from } from 'rxjs'; +import { filter, first, map, mergeMap } from 'rxjs/operators'; +import { AccountService, AppFormUtils, BaseGraphqlService, chainPromises, collectByProperty, DateUtils, EntitiesStorage, EntityUtils, firstNotNilPromise, FormErrorTranslator, GraphqlService, isEmptyArray, isNil, isNilOrBlank, isNotEmptyArray, isNotNil, JobUtils, LocalSettingsService, MINIFY_ENTITY_FOR_LOCAL_STORAGE, NetworkService, PlatformService, ProgressBarService, toBoolean, toNumber, } from '@sumaris-net/ngx-components'; +import { MEASUREMENT_PMFM_ID_REGEXP, MeasurementUtils } from '@app/data/measurement/measurement.model'; +import { DataEntityUtils, SAVE_AS_OBJECT_OPTIONS, SERIALIZE_FOR_OPTIMISTIC_RESPONSE } from '@app/data/services/model/data-entity.model'; +import { FISHING_AREAS_LOCATION_REGEXP, MINIFY_OPERATION_FOR_LOCAL_STORAGE, Operation, POSITIONS_REGEXP, Trip, VesselPositionUtils, } from '../trip/trip.model'; +import { Sample } from '../sample/sample.model'; +import { ReferentialFragments } from '@app/referential/services/referential.fragments'; +import { AcquisitionLevelCodes, PmfmIds, QualityFlagIds } from '@app/referential/services/model/model.enum'; +import { environment } from '@environments/environment'; +import { OperationFilter } from '@app/trip/operation/operation.filter'; +import { RootDataEntityUtils } from '@app/data/services/model/root-data-entity.model'; +import { VesselSnapshotFragments } from '@app/referential/services/vessel-snapshot.service'; +import { Metier } from '@app/referential/metier/metier.model'; +import { MetierService } from '@app/referential/services/metier.service'; +import { PositionUtils } from '@app/data/position/position.utils'; +import { DataErrorCodes } from '@app/data/services/errors'; +import { mergeLoadResult } from '@app/shared/functions'; +import { TripErrorCodes } from '@app/trip/trip.errors'; +import { OperationValidatorService } from '@app/trip/operation/operation.validator'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { TranslateService } from '@ngx-translate/core'; +import { MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +import { VesselPosition } from '@app/data/position/vessel/vessel-position.model'; +import { BatchUtils } from '@app/trip/batch/common/batch.utils'; +import { Geometries } from '@app/shared/geometries.utils'; +import { BatchService } from '@app/trip/batch/common/batch.service'; +import { TRIP_LOCAL_SETTINGS_OPTIONS } from '@app/trip/trip.config'; +import { ProgressionModel } from '@app/shared/progression/progression.model'; +import { DataCommonFragments, DataFragments } from '@app/trip/common/data.fragments'; +export const OperationFragments = { + lightOperation: gql `fragment LightOperationFragment on OperationVO { + id + startDateTime + endDateTime + fishingStartDateTime + fishingEndDateTime + rankOrder + rankOrderOnPeriod + tripId + comments + hasCatch + updateDate + controlDate + qualificationComments + qualityFlagId + physicalGearId + physicalGear { + id + rankOrder + gear { + ...LightReferentialFragment + } + } + metier { + ...MetierFragment + } + recorderDepartment { + ...LightDepartmentFragment + } + positions { + ...PositionFragment + } + fishingAreas { + id + location { + ...LocationFragment + } + } + parentOperationId + childOperationId + } + ${ReferentialFragments.lightDepartment} + ${ReferentialFragments.metier} + ${ReferentialFragments.lightReferential} + ${DataCommonFragments.position}, + ${DataCommonFragments.location}`, + operation: gql ` + fragment OperationFragment on OperationVO { + id + startDateTime + endDateTime + fishingStartDateTime + fishingEndDateTime + rankOrder + rankOrderOnPeriod + controlDate + qualificationComments + qualityFlagId + physicalGearId + physicalGear { + id + rankOrder + gear { + ...LightReferentialFragment + } + } + tripId + comments + hasCatch + updateDate + metier { + ...MetierFragment + } + recorderDepartment { + ...LightDepartmentFragment + } + positions { + ...PositionFragment + } + measurements { + ...MeasurementFragment + } + gearMeasurements { + ...MeasurementFragment + } + samples { + ...SampleFragment + } + batches { + ...BatchFragment + } + fishingAreas { + ...FishingAreaFragment + } + parentOperationId + childOperationId + } + ${ReferentialFragments.lightDepartment} + ${ReferentialFragments.metier} + ${ReferentialFragments.lightReferential} + ${DataCommonFragments.position} + ${DataCommonFragments.measurement} + ${DataFragments.sample} + ${DataFragments.batch} + ${DataFragments.fishingArea} + `, +}; +export const OperationQueries = { + // Load many operations (with total) + loadAllWithTotal: gql `query Operations($filter: OperationFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $pmfmIds: [Int]){ + data: operations(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + ...LightOperationFragment + measurements(pmfmIds: $pmfmIds) { + ...MeasurementFragment + } + } + total: operationsCount(filter: $filter) + } + ${OperationFragments.lightOperation} + ${DataCommonFragments.measurement}`, + loadAllWithTripAndTotal: gql `query Operations($filter: OperationFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String){ + data: operations(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + ...LightOperationFragment + trip { + id + program { + id + label + } + departureDateTime + returnDateTime + creationDate + updateDate + controlDate + validationDate + qualificationDate + qualityFlagId + comments + departureLocation { + ...LocationFragment + } + returnLocation { + ...LocationFragment + } + vesselSnapshot { + ...LightVesselSnapshotFragment + } + recorderDepartment { + ...LightDepartmentFragment + } + recorderPerson { + ...LightPersonFragment + } + observers { + ...LightPersonFragment + } + } + } + total: operationsCount(filter: $filter) + } + ${OperationFragments.lightOperation} + ${DataCommonFragments.location} + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + ${VesselSnapshotFragments.lightVesselSnapshot} + ${DataCommonFragments.referential}`, + // Load many operations + loadAll: gql `query Operations($filter: OperationFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String){ + data: operations(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + ...LightOperationFragment + } + } + ${OperationFragments.lightOperation}`, + // Load one + load: gql `query Operation($id: Int!) { + data: operation(id: $id) { + ...OperationFragment + } + } + ${OperationFragments.operation}`, + // Load one light + loadLight: gql `query Operation($id: Int!) { + data: operation(id: $id) { + ...LightOperationFragment + } + } + ${OperationFragments.lightOperation}` +}; +const OperationMutations = { + // Save many operations + saveAll: gql `mutation saveOperations($data:[OperationVOInput]!) { + data: saveOperations(operations: $data){ + ...OperationFragment + } + } + ${OperationFragments.operation}`, + // Delete many operations + deleteAll: gql `mutation deleteOperations($ids:[Int]!) { + deleteOperations(ids: $ids) + }`, + terminate: gql `mutation controlOperation($data:OperationVOInput!) { + data: controlOperation(operation: $data) { + ...OperationFragment + } + } + ${OperationFragments.operation}` +}; +const OperationSubscriptions = { + listenChanges: gql `subscription UpdateOperation($id: Int!, $interval: Int){ + data: updateOperation(id: $id, interval: $interval) { + ...LightOperationFragment + } + } + ${OperationFragments.lightOperation}` +}; +let OperationService = class OperationService extends BaseGraphqlService { + constructor(graphql, network, platform, accountService, settings, metierService, entities, validatorService, batchService, progressBarService, programRefService, translate, formErrorTranslator, geolocation) { + super(graphql, environment); + this.graphql = graphql; + this.network = network; + this.platform = platform; + this.accountService = accountService; + this.settings = settings; + this.metierService = metierService; + this.entities = entities; + this.validatorService = validatorService; + this.batchService = batchService; + this.progressBarService = progressBarService; + this.programRefService = programRefService; + this.translate = translate; + this.formErrorTranslator = formErrorTranslator; + this.geolocation = geolocation; + this.loading = false; + this._mutableWatchQueriesMaxCount = 3; + this._watchQueriesUpdatePolicy = 'update-cache'; + this._logPrefix = '[operation-service] '; + // -- For DEV only + this._debug = !environment.production; + } + set tripService(value) { + this._tripService = value; + } + get tripService() { + return this._tripService; + } + loadAll(offset, size, sortBy, sortDirection, dataFilter, opts) { + return __awaiter(this, void 0, void 0, function* () { + return firstNotNilPromise(this.watchAll(offset, size, sortBy, sortDirection, dataFilter, opts)); + }); + } + loadAllLocally(offset, size, sortBy, sortDirection, dataFilter, opts) { + return firstNotNilPromise(this.watchAllLocally(offset, size, sortBy, sortDirection, dataFilter, opts)); + } + loadAllByTrip(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + return firstNotNilPromise(this.watchAllByTrip(filter, opts)); + }); + } + watchAllByTrip(filter, opts) { + return this.watchAll(0, -1, null, null, filter, opts); + } + /** + * Load many operations + * + * @param offset + * @param size + * @param sortBy + * @param sortDirection + * @param dataFilter + * @param opts + */ + watchAll(offset, size, sortBy, sortDirection, dataFilter, opts) { + const forceOffline = this.network.offline || (dataFilter && dataFilter.tripId < 0); + const offline = forceOffline || (opts === null || opts === void 0 ? void 0 : opts.withOffline) || false; + const online = !forceOffline; + // When filtering in data quality status, avoid to compute rankOrder + if (isNotNil(dataFilter === null || dataFilter === void 0 ? void 0 : dataFilter.dataQualityStatus)) { + opts = Object.assign(Object.assign({}, opts), { computeRankOrder: false }); + } + // If we have both online and offline, watch all options has to be apply when all results are merged + let tempOpts = opts; + if (offline && online) { + tempOpts = Object.assign(Object.assign({}, opts), { mapFn: undefined, toEntity: false, computeRankOrder: false, sortByDistance: false }); + } + const offline$ = offline && this.watchAllLocally(offset, size, sortBy, sortDirection, dataFilter, tempOpts); + const online$ = online && this.watchAllRemotely(offset, size, sortBy, sortDirection, dataFilter, tempOpts); + // Merge local and remote + if (offline$ && online$) { + return combineLatest([offline$, online$]) + .pipe(map(([res1, res2]) => mergeLoadResult(res1, res2)), mergeMap(({ data, total }) => this.applyWatchOptions({ data, total }, offset, size, sortBy, sortDirection, dataFilter, opts))); + } + return offline$ || online$; + } + load(id, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (isNil(id)) + throw new Error('Missing argument \'id\' '); + const now = this._debug && Date.now(); + if (this._debug) + console.debug(`[operation-service] Loading operation #${id}...`); + this.loading = true; + try { + let json; + // Load locally + if (id < 0) { + json = yield this.entities.load(id, Operation.TYPENAME, opts); + if (!json) + throw { code: DataErrorCodes.LOAD_ENTITY_ERROR, message: 'ERROR.LOAD_ENTITY_ERROR' }; + } + // Load from pod + else { + const query = (opts === null || opts === void 0 ? void 0 : opts.query) || (opts && opts.fullLoad === false ? OperationQueries.loadLight : OperationQueries.load); + const res = yield this.graphql.query({ + query, + variables: { id }, + error: { code: DataErrorCodes.LOAD_ENTITY_ERROR, message: 'ERROR.LOAD_ENTITY_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || undefined + }); + json = res && res.data; + } + // Transform to entity + const data = (!opts || opts.toEntity !== false) + ? Operation.fromObject(json) + : json; + if (data && this._debug) + console.debug(`[operation-service] Operation #${id} loaded in ${Date.now() - now}ms`, data); + return data; + } + finally { + this.loading = false; + } + }); + } + canUserWrite(data, opts) { + const trip = opts === null || opts === void 0 ? void 0 : opts.trip; + if (!trip) + throw new Error('Missing required \'opts.trip\' argument'); + return !!data && trip && this.tripService.canUserWrite(trip, { program: opts === null || opts === void 0 ? void 0 : opts.program }); + } + controlAllByTrip(trip, opts) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const maxProgression = toNumber(opts === null || opts === void 0 ? void 0 : opts.maxProgression, 100); + opts = Object.assign(Object.assign({}, opts), { maxProgression }); + opts.progression = opts.progression || new ProgressionModel({ total: maxProgression }); + const endProgression = opts.progression.current + maxProgression; + // Increment + this.progressBarService.increase(); + try { + // Load all (light) operations + const { data } = yield this.loadAllByTrip({ tripId: trip.id }, { computeRankOrder: false, fullLoad: false, toEntity: false }); + if (isEmptyArray(data)) + return undefined; // Skip if empty + // Prepare control options + opts = yield this.fillControlOptionsForTrip(trip.id, Object.assign({ trip }, opts)); + const progressionStep = maxProgression / data.length / 2; // 2 steps by operation: control, then save + let errorsById = null; + // For each entity + for (let entity of data) { + // Load full entity + entity = yield this.load(entity.id); + const errors = yield this.control(entity, Object.assign(Object.assign({}, opts), { maxProgression: progressionStep })); + // Control failed: save error + if (errors) { + errorsById = errorsById || {}; + errorsById[entity.id] = errors; + // translate, then save normally + const errorMessage = this.formErrorTranslator.translateErrors(errors, opts.translatorOptions); + entity.controlDate = null; + entity.qualificationComments = errorMessage; + if ((_a = opts.progression) === null || _a === void 0 ? void 0 : _a.cancelled) + return; // Cancel + // Save entity + yield this.save(entity); + } + // OK succeed: terminate + else { + if ((_b = opts.progression) === null || _b === void 0 ? void 0 : _b.cancelled) + return; // Cancel + yield this.terminate(entity); + } + // increament, after save/terminate + opts.progression.increment(progressionStep); + } + return errorsById; + } + catch (err) { + console.error(err && err.message || err); + throw err; + } + finally { + this.progressBarService.decrease(); + if (opts.progression.current < endProgression) { + opts.progression.current = endProgression; + } + } + }); + } + /** + * Control the validity of an operation + * + * @param entity + * @param opts + */ + control(entity, opts) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const maxProgression = toNumber(opts === null || opts === void 0 ? void 0 : opts.maxProgression, 100); + opts = Object.assign(Object.assign({}, opts), { maxProgression }); + opts.progression = opts.progression || new ProgressionModel({ total: maxProgression }); + const progressionStep = maxProgression / 3; // 3 steps: operation control, control batches, and save + const incrementProgression = () => opts.progression.increment(progressionStep); + const now = this._debug && Date.now(); + if (this._debug) + console.debug(`[operation-service] Control #${entity.id}...`, entity); + // Fill options (trip, program, pmfms, etc. ) + opts = yield this.fillControlOptionsForOperation(entity, opts); + // Create validator + const form = this.validatorService.getFormGroup(entity, opts); + if (!form.valid) { + // Wait end of validation (e.g. async validators) + yield AppFormUtils.waitWhilePending(form); + // Get form errors + if (form.invalid) { + const errors = AppFormUtils.getFormErrors(form); + console.info(`[operation-service] Control #${entity.id} [INVALID] in ${Date.now() - now}ms`, errors); + incrementProgression(); // Increment progression + return errors; + } + } + incrementProgression(); // Increment progression + let dirty = false; + // Control batches (skip if abnormal operation) + if (!entity.abnormal && entity.catchBatch && (opts === null || opts === void 0 ? void 0 : opts.program)) { + const hasIndividualMeasures = MeasurementUtils.asBooleanValue(entity.measurements, PmfmIds.HAS_INDIVIDUAL_MEASURES); + const physicalGear = (_a = entity.physicalGear) === null || _a === void 0 ? void 0 : _a.clone(); + const wasInvalid = BatchUtils.isInvalid(entity.catchBatch); + // Control batches + const errors = yield this.batchService.control(entity.catchBatch, { + program: opts.program, + allowSamplingBatches: hasIndividualMeasures, + physicalGear, + gearId: (_b = physicalGear === null || physicalGear === void 0 ? void 0 : physicalGear.gear) === null || _b === void 0 ? void 0 : _b.id, + controlName: 'catch', + isOnFieldMode: opts.isOnFieldMode, + progression: opts.progression, + maxProgression: progressionStep + }); + if (errors) { + yield this.save(entity); + } + else { + // Mark as dirty, if invalid changed + dirty = (wasInvalid !== BatchUtils.isInvalid(entity.catchBatch)); + } + incrementProgression(); + if (errors) { + console.info(`[operation-service] Control operation {${entity.id}} catch batch [INVALID] in ${Date.now() - now}ms`, errors); + // Keep only a simple error message + // Detail error should have been saved into batch + return { catch: { invalidOrIncomplete: true } }; + } + } + console.info(`[operation-service] Control operation {${entity.id}} [OK] in ${Date.now() - now}ms`); + // Mark local operation has controlled (to have a checkmark icon in the operation table) + if (entity.tripId < 0) { + DataEntityUtils.markAsControlled(entity); + dirty = true; + } + if (dirty) + yield this.save(entity); + return undefined; + }); + } + terminate(entity) { + return __awaiter(this, void 0, void 0, function* () { + // Clean error + entity.qualificationComments = null; + // Flag anormal operation + const isAnormalOperation = entity.measurements + .some(m => m.pmfmId === PmfmIds.TRIP_PROGRESS && m.numericalValue === 0 /*normal = false*/); + if (isAnormalOperation && entity.qualityFlagId === QualityFlagIds.NOT_QUALIFIED) { + entity.qualityFlagId = QualityFlagIds.BAD; + entity.qualificationComments = entity.comments; + } + // Save locally if need + if (entity.tripId < 0) { + entity.controlDate = entity.controlDate || DateUtils.moment(); + return this.saveLocally(entity); + } + const json = this.asObject(entity); + // Or save remotely (using a specific mutation) + yield this.graphql.mutate({ + mutation: OperationMutations.terminate, + variables: { + data: json + }, + error: { code: DataErrorCodes.CONTROL_ENTITY_ERROR, message: 'ERROR.CONTROL_ENTITY_ERROR' }, + update: (cache, { data }) => { + const savedEntity = data && data.data; + // Update (id and updateDate, and controlDate) + EntityUtils.copyIdAndUpdateDate(savedEntity, entity); + DataEntityUtils.copyControlDate(savedEntity, entity); + // Reset qualification comments, if clean by pod + DataEntityUtils.copyQualificationDateAndFlag(savedEntity, entity); + } + }); + return entity; + }); + } + qualify(data, qualityFlagId) { + return __awaiter(this, void 0, void 0, function* () { + console.warn('[operation-service] qualify() not implemented yet !'); + return data; + }); + } + delete(data, options) { + return __awaiter(this, void 0, void 0, function* () { + yield this.deleteAll([data]); + }); + } + listenChanges(id, opts) { + if (isNil(id)) + throw new Error('Missing argument \'id\' '); + // Skip listening local operation (should not be need) + if (EntityUtils.isLocalId(id)) { + return EMPTY; + } + if (this._debug) + console.debug(`[operation-service] [WS] Listening changes for operation {${id}}...`); + return this.graphql.subscribe({ + query: OperationSubscriptions.listenChanges, + fetchPolicy: opts && opts.fetchPolicy || undefined, + variables: { id, interval: toNumber(opts && opts.interval, 10) }, + error: { + code: DataErrorCodes.SUBSCRIBE_ENTITY_ERROR, + message: 'ERROR.SUBSCRIBE_ENTITY_ERROR' + } + }) + .pipe(map(({ data }) => { + const entity = data && Operation.fromObject(data); + if (entity && this._debug) + console.debug(`[operation-service] Operation {${id}} updated on server!`, entity); + return entity; + })); + } + /** + * Save many operations + * + * @param entities + * @param opts + */ + saveAll(entities, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (isEmptyArray(entities)) + return entities; + if (this._debug) + console.debug(`[operation-service] Saving ${entities.length} operations...`); + const jobsFactories = (entities || []).map(entity => () => this.save(entity, Object.assign({}, opts))); + return chainPromises(jobsFactories); + }); + } + /** + * Save an operation + * + * @param entity + * @param opts + */ + save(entity, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + // If parent is a local entity: force to save locally + const tripId = toNumber(entity.tripId, opts && (opts.tripId || ((_a = opts.trip) === null || _a === void 0 ? void 0 : _a.id))); + if (tripId < 0) { + return yield this.saveLocally(entity, opts); + } + const now = Date.now(); + // Fill default properties (as recorder department and person) + this.fillDefaultProperties(entity, opts); + // If new, create a temporary if (for offline mode) + const isNew = isNil(entity.id); + // Transform into json + const json = this.asObject(entity, SAVE_AS_OBJECT_OPTIONS); + if (this._debug) + console.debug('[operation-service] Saving operation remotely...', json); + yield this.graphql.mutate({ + mutation: OperationMutations.saveAll, + variables: { + data: [json] + }, + error: { code: DataErrorCodes.SAVE_ENTITIES_ERROR, message: 'ERROR.SAVE_ENTITIES_ERROR' }, + offlineResponse: (context) => __awaiter(this, void 0, void 0, function* () { + // Make sure to fill id, with local ids + yield this.fillOfflineDefaultProperties(entity); + // For the query to be tracked (see tracked query link) with a unique serialization key + context.tracked = (entity.tripId >= 0); + if (isNotNil(entity.id)) + context.serializationKey = `${Operation.TYPENAME}:${entity.id}`; + return { data: [this.asObject(entity, SERIALIZE_FOR_OPTIMISTIC_RESPONSE)] }; + }), + refetchQueries: this.getRefetchQueriesForMutation(opts), + awaitRefetchQueries: opts && opts.awaitRefetchQueries, + update: (cache, { data }) => __awaiter(this, void 0, void 0, function* () { + const savedEntity = data && data.data && data.data[0]; + // Local entity (from an optimistic response): save it + if (savedEntity.id < 0) { + if (this._debug) + console.debug('[operation-service] [offline] Saving operation locally...', savedEntity); + // Save response locally + yield this.entities.save(savedEntity.asObject(MINIFY_ENTITY_FOR_LOCAL_STORAGE)); + } + // Update the entity and update GraphQL cache + else { + // Remove existing entity from the local storage + if (entity.id < 0 && savedEntity.updateDate) { + yield this.entities.delete(entity); + } + // Copy id and update Date + this.copyIdAndUpdateDate(savedEntity, entity); + // Reset qualification comments, if clean by pod + DataEntityUtils.copyControlDate(savedEntity, entity); + DataEntityUtils.copyQualificationDateAndFlag(savedEntity, entity); + // Copy gear + if (savedEntity.metier && !savedEntity.metier.gear) { + savedEntity.metier.gear = savedEntity.metier.gear || (entity.physicalGear && entity.physicalGear.gear && entity.physicalGear.gear.asObject()); + } + // Update parent/child operation + if (opts === null || opts === void 0 ? void 0 : opts.updateLinkedOperation) { + yield this.updateLinkedOperation(entity, opts); + } + if (isNew && this._watchQueriesUpdatePolicy === 'update-cache') { + this.insertIntoMutableCachedQueries(cache, { + queryNames: this.getLoadQueryNames(), + data: savedEntity + }); + } + if (opts && opts.update) { + opts.update(cache, { data }); + } + if (this._debug) + console.debug(`[operation-service] Operation saved in ${Date.now() - now}ms`, entity); + } + }) + }); + return entity; + }); + } + /** + * Save many operations + * + * @param entities + * @param opts + */ + deleteAll(entities, opts) { + return __awaiter(this, void 0, void 0, function* () { + // Delete local entities + const localEntities = entities === null || entities === void 0 ? void 0 : entities.filter(EntityUtils.isLocal); + if (isNotEmptyArray(localEntities)) { + return this.deleteAllLocally(localEntities, opts); + } + // Get remote ids, then delete remotely + const remoteEntities = (entities || []).filter(EntityUtils.isRemote); + if (isNotEmptyArray(remoteEntities)) { + const ids = remoteEntities.map(e => e.id); + const now = Date.now(); + if (this._debug) + console.debug('[operation-service] Deleting operations... ids:', ids); + yield this.graphql.mutate({ + mutation: OperationMutations.deleteAll, + variables: { ids }, + refetchQueries: this.getRefetchQueriesForMutation(opts), + awaitRefetchQueries: opts && opts.awaitRefetchQueries, + update: (cache, res) => { + // Remove from cached queries + if (this._watchQueriesUpdatePolicy === 'update-cache') { + this.removeFromMutableCachedQueriesByIds(cache, { + queryNames: this.getLoadQueryNames(), + ids + }); + } + if (opts && opts.update) { + opts.update(cache, res); + } + if (this._debug) + console.debug(`[operation-service] Operations deleted in ${Date.now() - now}ms`); + } + }); + } + }); + } + deleteAllLocally(entities, opts) { + return __awaiter(this, void 0, void 0, function* () { + // Get local ids + const localIds = entities.map(e => e.id).filter(id => id < 0); + if (isEmptyArray(localIds)) + return; // Skip if empty + const parentOperationIds = entities.filter(o => o.parentOperation || o.parentOperationId) + .map(o => o.parentOperation && o.parentOperation.id || o.parentOperationId); + if (parentOperationIds && parentOperationIds.length > 0) { + yield this.removeChildOperationLocally(parentOperationIds); + } + const trash = !opts || opts.trash !== false; + if (this._debug) + console.debug(`[operation-service] Deleting local operations... {trash: ${trash}}`); + if (trash) { + yield this.entities.moveManyToTrash(localIds, { entityName: Operation.TYPENAME }); + } + else { + yield this.entities.deleteMany(localIds, { entityName: Operation.TYPENAME }); + } + }); + } + /** + * Delete many operation locally (from the entity storage) + * + * @param filter + */ + deleteAllLocallyByFilter(filter) { + return __awaiter(this, void 0, void 0, function* () { + // Check filter, to avoid too many deletion, of local operations + if (!filter || (isNil(filter.tripId) && (isEmptyArray(filter.includedIds) || !filter.includedIds.some(id => id < 0)))) { + throw new Error('Missing arguments \'filter.tripId\' or \'filter.includedIds\' with only includedIds > 0'); + } + const dataFilter = this.asFilter(filter); + try { + // Find operations to delete + const { data } = yield this.entities.loadAll(Operation.TYPENAME, { + filter: dataFilter.asFilterFn() + }, { fullLoad: false }); + const parentOperationIds = (data || []).filter(o => o.parentOperation || o.parentOperationId) + .map(o => o.parentOperation && o.parentOperation.id || o.parentOperationId); + if (parentOperationIds && parentOperationIds.length > 0) { + yield this.removeChildOperationLocally(parentOperationIds); + } + const ids = (data || []).map(o => o.id); + if (isEmptyArray(ids)) + return undefined; // Skip + // Apply deletion + return yield this.entities.deleteMany(ids, { entityName: Operation.TYPENAME }); + } + catch (err) { + console.error(`[operation-service] Failed to delete operations ${JSON.stringify(filter)}`, err); + throw err; + } + }); + } + /** + * Load many remote operations + * + * @param offset + * @param size + * @param sortBy + * @param sortDirection + * @param dataFilter + * @param opts + */ + watchAllRemotely(offset, size, sortBy, sortDirection, dataFilter, opts) { + if (!dataFilter || (isNil(dataFilter.tripId) && isNil(dataFilter.programLabel))) { + console.warn('[operation-service] Trying to load operations without \'filter.tripId\' or \'filter.programLabel\'. Skipping.'); + return EMPTY; + } + if (opts && opts.fullLoad) { + throw new Error('Loading full operation (opts.fullLoad) is only available for local trips'); + } + dataFilter = this.asFilter(dataFilter); + const variables = { + offset: offset || 0, + size: size >= 0 ? size : 1000, + sortBy: (sortBy !== 'id' && sortBy) || (opts && opts.trash ? 'updateDate' : 'endDateTime'), + sortDirection: sortDirection || (opts && opts.trash ? 'desc' : 'asc'), + trash: opts && opts.trash || false, + filter: dataFilter.asPodObject(), + pmfmIds: [PmfmIds.TRIP_PROGRESS] + }; + let now = this._debug && Date.now(); + if (this._debug) + console.debug('[operation-service] Loading operations... using options:', variables); + const withTotal = !opts || opts.withTotal !== false; + const query = (opts === null || opts === void 0 ? void 0 : opts.query) || (withTotal ? OperationQueries.loadAllWithTotal : OperationQueries.loadAll); + const mutable = (!opts || opts.mutable !== false) && ((opts === null || opts === void 0 ? void 0 : opts.fetchPolicy) !== 'no-cache'); + const result$ = mutable + ? this.mutableWatchQuery({ + queryName: withTotal ? 'LoadAllWithTotal' : 'LoadAll', + query, + arrayFieldName: 'data', + totalFieldName: withTotal ? 'total' : undefined, + insertFilterFn: dataFilter.asFilterFn(), + variables, + error: { code: DataErrorCodes.LOAD_ENTITIES_ERROR, message: 'ERROR.LOAD_ENTITIES_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || 'cache-and-network' + }) + : from(this.graphql.query({ + query, + variables, + error: { code: DataErrorCodes.LOAD_ENTITIES_ERROR, message: 'ERROR.LOAD_ENTITIES_ERROR' }, + fetchPolicy: (opts && opts.fetchPolicy) || 'no-cache' + })); + return result$ + .pipe( + // Skip update during load() + //tap(() => this.loading && console.debug('SKIP loading OP')), + filter(() => !this.loading), mergeMap(({ data, total }) => __awaiter(this, void 0, void 0, function* () { + if (now) { + console.debug(`[operation-service] Loaded ${data.length} operations in ${Date.now() - now}ms`); + now = undefined; + } + return yield this.applyWatchOptions({ data, total }, offset, size, sortBy, sortDirection, dataFilter, opts); + }))); + } + /** + * Watch many local operations + */ + watchAllLocally(offset, size, sortBy, sortDirection, filter, opts) { + if (!filter || (isNil(filter.tripId) && isNil(filter.programLabel) && isNil(filter.vesselId) && isEmptyArray(filter.includedIds))) { + console.warn('[operation-service] Trying to load operations without filter \'tripId\', \'programLabel\', \'vesselId\' or \'includedIds\'. Skipping.'); + return EMPTY; + } + if (filter.tripId >= 0) + throw new Error('Invalid \'filter.tripId\': must be a local ID (id<0)!'); + filter = this.asFilter(filter); + const variables = { + offset: offset || 0, + size: size >= 0 ? size : 1000, + sortBy: (sortBy !== 'id' && sortBy) || (opts && opts.trash ? 'updateDate' : 'endDateTime'), + sortDirection: sortDirection || (opts && opts.trash ? 'desc' : 'asc'), + trash: opts && opts.trash || false, + filter: filter.asFilterFn() + }; + if (this._debug) + console.debug('[operation-service] Loading operations locally... using options:', variables); + return this.entities.watchAll(Operation.TYPENAME, variables, { fullLoad: opts && opts.fullLoad }) + .pipe(mergeMap(({ data, total }) => __awaiter(this, void 0, void 0, function* () { return yield this.applyWatchOptions({ data, total }, offset, size, sortBy, sortDirection, filter, opts); }))); + } + loadPracticedMetier(offset, size, sortBy, sortDirection, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + const online = !(this.network.offline && (!opts || opts.fetchPolicy !== 'network-only')); + if (online) { + return this.metierService.loadAll(offset, size, sortBy, sortDirection, filter, opts); + } + const { data, total } = yield firstNotNilPromise(this.watchAllLocally(offset, size, sortBy, sortDirection, { + vesselId: filter.vesselId, + startDate: filter.startDate, + endDate: filter.endDate, + gearIds: filter.gearIds, + programLabel: filter.programLabel + }, { + toEntity: false, + fullLoad: false, + withTotal: opts === null || opts === void 0 ? void 0 : opts.withTotal + })); + const useChildAttributes = filter && (filter.searchJoin === 'TaxonGroup' || filter.searchJoin === 'Gear') ? filter.searchJoin : undefined; + const entities = (data || []).map(source => source.metier) + .filter((metier, i, res) => res.findIndex(m => m.id === metier.id) === i) + .map(metier => Metier.fromObject(metier, { useChildAttributes })); + return { data: entities, total }; + }); + } + /** + * Compute rank order of the given operation. This function will load all operations, to compute the rank order. + * Please use opts={fetchPolicy: 'cache-first'} when possible + * + * @param source + * @param opts + */ + computeRankOrder(source, opts) { + return this.watchRankOrder(source, opts) + .pipe(first()) + .toPromise(); + } + /** + * Compute rank order of the operation + * + * @param source + * @param opts + */ + watchRankOrder(source, opts) { + console.debug(`[operation-service] Loading rankOrder of operation #${source.id}...`); + const tripId = source.tripId; + return this.watchAllByTrip({ tripId }, Object.assign({ fetchPolicy: 'cache-first', fullLoad: false, withSamples: false, withBatchTree: false, mutable: false }, opts)) + .pipe(map(res => { + const existingOperation = (res && res.data || []).find(o => o.id === source.id); + return existingOperation ? existingOperation.rankOrder : null; + })); + } + asFilter(source) { + return OperationFilter.fromObject(source); + } + /** + * Get the position by geo loc sensor + */ + getCurrentPosition(options) { + return __awaiter(this, void 0, void 0, function* () { + const timeout = (options === null || options === void 0 ? void 0 : options.timeout) + || this.settings.getPropertyAsInt(TRIP_LOCAL_SETTINGS_OPTIONS.OPERATION_GEOLOCATION_TIMEOUT) * 1000; + const maximumAge = (options === null || options === void 0 ? void 0 : options.maximumAge) || timeout * 2; + return PositionUtils.getCurrentPosition(this.platform, Object.assign({ maximumAge, + timeout, enableHighAccuracy: false }, options)); + }); + } + executeImport(filter, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const maxProgression = opts && opts.maxProgression || 100; + // Load program + const program = (opts === null || opts === void 0 ? void 0 : opts.program) || ((filter === null || filter === void 0 ? void 0 : filter.programLabel) && (yield this.programRefService.loadByLabel(filter.programLabel))); + const allowParentOperation = program && program.getPropertyAsBoolean(ProgramProperties.TRIP_ALLOW_PARENT_OPERATION); + // No parent/child operation: skip (offline mode not need any historical data) + if (!program || !allowParentOperation) { + if (opts === null || opts === void 0 ? void 0 : opts.progression) + opts.progression.next(maxProgression); + console.debug(`${this._logPrefix}Importing operation: disabled by program. Skipping`); + return; + } + filter = Object.assign(Object.assign({ + // Can be overwriting by filter + startDate: DateUtils.moment().add(-15, 'day') }, filter), { + // Fixed values + qualityFlagId: QualityFlagIds.NOT_COMPLETED, excludeChildOperation: true, hasNoChildOperation: true }); + const programLabel = program === null || program === void 0 ? void 0 : program.label; + console.info(`[operation-service] Importing parent operations, from program '${programLabel}'...`); + const res = yield JobUtils.fetchAllPages((offset, size) => this.loadAll(offset, size, 'id', null, filter, { + fetchPolicy: 'no-cache', + withTotal: (offset === 0), + toEntity: false, + computeRankOrder: false, + query: OperationQueries.loadAllWithTripAndTotal + }), { + progression: opts === null || opts === void 0 ? void 0 : opts.progression, + maxProgression: maxProgression * 0.9, + logPrefix: this._logPrefix, + fetchSize: 100 + }); + // Collected ids + const importedOperations = (res === null || res === void 0 ? void 0 : res.data) || []; + const importedIds = importedOperations.map(ope => +ope.id); + // Find data imported previously, that not exists in new imported data + // Make sure to filter on the filter program (to keep other ope) + const unusedRemoteOperations = (_a = (yield this.entities.loadAll(Operation.TYPENAME, { + filter: (ope) => EntityUtils.isRemoteId(ope.id) && !importedIds.includes(+ope.id) + && (!ope.programLabel || ope.programLabel === programLabel) // /!\ keep other program + }, { fullLoad: false }))) === null || _a === void 0 ? void 0 : _a.data; + // Remove from the local storage + if (unusedRemoteOperations === null || unusedRemoteOperations === void 0 ? void 0 : unusedRemoteOperations.length) { + const ids = unusedRemoteOperations.map(o => +o.id); + yield this.entities.deleteMany(ids, { entityName: Operation.TYPENAME, emitEvent: false }); + } + if (isNotEmptyArray(res === null || res === void 0 ? void 0 : res.data)) { + // Patch imported operations (add some attribute from the trip) + const operationsByTripId = collectByProperty(importedOperations, 'tripId'); + yield chainPromises(Object.keys(operationsByTripId).map(tripId => () => __awaiter(this, void 0, void 0, function* () { + const trip = yield this._tripService.load(+tripId, { fullLoad: false, fetchPolicy: 'cache-first', toEntity: false }); + operationsByTripId[tripId].forEach(o => { + var _a; + o.vesselId = (_a = trip.vesselSnapshot) === null || _a === void 0 ? void 0 : _a.id; + o.programLabel = trip.program.label; + o.trip = { + id: trip.id, + departureDateTime: trip.departureDateTime, + returnDateTime: trip.returnDateTime, + vesselSnapshot: trip.vesselSnapshot + }; + }); + }))); + // Save result locally + yield this.entities.saveAll(res.data, { entityName: Operation.TYPENAME, reset: false /* /!\ keep local operations */ }); + console.info(`[operation-service] Successfully import ${res.data.length} parent operations, from program '${programLabel}'`); + } + }); + } + /** + * Save many operations + * + * @param entities + * @param opts + */ + saveAllLocally(entities, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (isEmptyArray(entities)) + return entities; + if (this._debug) + console.debug(`[operation-service] Saving locally ${entities.length} operations...`); + const jobsFactories = (entities || []).map(entity => () => this.saveLocally(entity, Object.assign({}, opts))); + return chainPromises(jobsFactories); + }); + } + /** + * Save an operation on the local storage + * + * @param entity + * @param opts + */ + saveLocally(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (entity.tripId >= 0 && entity.qualityFlagId !== QualityFlagIds.NOT_COMPLETED) + throw new Error('Must be a local entity'); + // Fill default properties (as recorder department and person) + this.fillDefaultProperties(entity, opts); + // Make sure to fill id, with local ids + yield this.fillOfflineDefaultProperties(entity, opts); + const json = this.asObject(entity, MINIFY_OPERATION_FOR_LOCAL_STORAGE); + if (this._debug) + console.debug('[operation-service] [offline] Saving operation locally...', json); + // Save response locally + yield this.entities.save(json); + // Update parent/child operation + if (opts === null || opts === void 0 ? void 0 : opts.updateLinkedOperation) { + try { + yield this.updateLinkedOperation(entity, opts); + } + catch (err) { + // Child not exists anymore + if ((err === null || err === void 0 ? void 0 : err.code) === TripErrorCodes.CHILD_OPERATION_NOT_FOUND) { + // Remove link to child operation, then save + entity.childOperationId = null; + entity.childOperation = null; + entity.qualityFlagId = QualityFlagIds.NOT_COMPLETED; + json.childOperationId = null; + json.childOperation = null; + json.qualityFlagId = QualityFlagIds.NOT_COMPLETED; + yield this.entities.save(json); + } + else if ((err === null || err === void 0 ? void 0 : err.code) === TripErrorCodes.PARENT_OPERATION_NOT_FOUND) { + console.error('[operation-service] [offline] Cannot found the parent operation: ' + (err && err.message || err), err); + } + else { + console.error('[operation-service] [offline] Cannot update linked operation: ' + (err && err.message || err), err); + } + } + } + return entity; + }); + } + updateLinkedOperation(entity, opts) { + var _a, _b, _c; + return __awaiter(this, void 0, void 0, function* () { + // DEBUG + //console.debug('[operation-service] Updating linked operation of op #' + entity.id); + // Update the child operation + const childOperationId = toNumber((_a = entity.childOperation) === null || _a === void 0 ? void 0 : _a.id, entity.childOperationId); + if (isNotNil(childOperationId)) { + const cachedChild = isNotNil((_b = entity.childOperation) === null || _b === void 0 ? void 0 : _b.id) ? entity.childOperation : undefined; + let child = cachedChild || (yield this.load(childOperationId)); + const needUpdateChild = + // Check dates + !entity.startDateTime.isSame(child.startDateTime) + || (entity.fishingStartDateTime && !entity.fishingStartDateTime.isSame(child.fishingStartDateTime)) + // Check positions + || (entity.startPosition && !entity.startPosition.isSamePoint(child.startPosition)) + || (entity.fishingStartPosition && !entity.fishingStartPosition.isSamePoint(child.fishingStartPosition)); + // Update the child operation, if need + if (needUpdateChild) { + console.info('[operation-service] Updating child operation...'); + // Replace cached entity by a full entity + if (child === cachedChild) { + try { + child = yield this.load(childOperationId); + } + catch (err) { + // Child not exists + if (err.code === DataErrorCodes.LOAD_ENTITY_ERROR) { + throw { code: TripErrorCodes.CHILD_OPERATION_NOT_FOUND, message: err.message }; + } + throw err; + } + } + // Update the child + child.parentOperationId = entity.id; + child.startDateTime = entity.startDateTime; + child.fishingStartDateTime = entity.fishingStartDateTime; + if (entity.startPosition && isNotNil(entity.startPosition.id)) { + child.startPosition = child.startPosition || new VesselPosition(); + child.startPosition.copyPoint(entity.startPosition); + } + else { + child.startPosition = undefined; + } + if (entity.fishingStartPosition && isNotNil(entity.fishingStartPosition.id)) { + child.fishingStartPosition = child.fishingStartPosition || new VesselPosition(); + child.fishingStartPosition.copyPoint(entity.fishingStartPosition); + } + else { + child.fishingStartPosition = undefined; + } + child.updateDate = entity.updateDate; + const savedChild = yield this.save(child, Object.assign(Object.assign({}, opts), { updateLinkedOperation: false })); + // Update the cached entity + if (cachedChild) { + cachedChild.startDateTime = savedChild.startDateTime; + cachedChild.fishingStartDateTime = savedChild.fishingStartDateTime; + cachedChild.updateDate = savedChild.updateDate; + } + } + } + else { + // Update the parent operation (only if parent is a local entity) + const parentOperationId = toNumber((_c = entity.parentOperation) === null || _c === void 0 ? void 0 : _c.id, entity.parentOperationId); + if (isNotNil(parentOperationId)) { + const cachedParent = entity.parentOperation; + let parent = cachedParent || (yield this.load(parentOperationId, { fetchPolicy: 'cache-only' })); + let savedParent; + if (parent && parent.childOperationId !== entity.id) { + console.info('[operation-service] Updating parent operation...'); + if (EntityUtils.isLocal(parent)) { + // Replace cached entity by a full entity + if (parent === cachedParent) { + try { + parent = yield this.load(parentOperationId); + } + catch (err) { + // Parent not exists + if (err.code === DataErrorCodes.LOAD_ENTITY_ERROR) { + throw { code: TripErrorCodes.PARENT_OPERATION_NOT_FOUND, message: err.message }; + } + throw err; + } + } + // Update the parent + parent.childOperationId = entity.id; + savedParent = yield this.save(parent, Object.assign(Object.assign({}, opts), { updateLinkedOperation: false })); + // Update the cached entity + if (cachedParent && savedParent) { + cachedParent.updateDate = savedParent.updateDate; + cachedParent.childOperationId = savedParent.childOperationId; + } + } + // Remote AND on same trip + else if (parent.tripId === entity.tripId) { + // FIXME: find to wait to update parent operation, WITHOUT refecthing queries + // (to avoid duplication, if child is insert manually in cache) + // savedParent = await this.load(parentOperationId, {fetchPolicy: 'network-only'}); + } + } + } + } + }); + } + sortByDistance(sources, sortDirection, sortBy) { + return __awaiter(this, void 0, void 0, function* () { + // Get current operation + const currentPosition = yield this.getCurrentPosition(); + if (!currentPosition) { + console.warn('[operation-service] Cannot sort by position. Cannot get the current position'); + return sources; // Unable to sort + } + const propertyName = sortBy === 'startPosition' ? 'startPosition' : 'endPosition'; + const sortedOperations = sources + // Compute distance on each operation (default distance = 0) + .map(operation => { + const position = this.getPosition(operation, propertyName); + return { + distance: PositionUtils.computeDistanceInMiles(currentPosition, position) || 0, + operation + }; + }) + // Sort by distance + .sort((sortDirection === 'asc') + ? (d1, d2) => d1.distance - d2.distance + : (d1, d2) => d2.distance - d1.distance) + // Extract operations + .map(d => d.operation); + return sortedOperations; + }); + } + getPosition(operation, propertyName) { + if (propertyName === 'startPosition') { + return operation.startPosition || operation.fishingStartPosition + || (operation.positions.length === 2 && operation.positions[0]); + } + else { + return operation.endPosition || operation.fishingEndPosition + || (operation.positions.length === 2 && operation.positions[1]); + } + } + areUsedPhysicalGears(tripId, physicalGearIds) { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this.loadAll(0, 1, null, null, { + tripId, + physicalGearIds + }, { + withTotal: false + }); + const usedGearIds = res.data.map(physicalGear => physicalGear.id); + return (usedGearIds.length === 0); + }); + } + translateControlPath(controlPath, opts) { + opts = opts || {}; + if (isNilOrBlank(opts.i18nPrefix)) + opts.i18nPrefix = 'TRIP.OPERATION.EDIT.'; + // Translate PMFM field + if (MEASUREMENT_PMFM_ID_REGEXP.test(controlPath) && opts.pmfms) { + const pmfmId = parseInt(controlPath.split('.').pop()); + const pmfm = opts.pmfms.find(p => p.id === pmfmId); + return PmfmUtils.getPmfmName(pmfm); + } + // Translate location, inside any fishing areas + if (FISHING_AREAS_LOCATION_REGEXP.test(controlPath)) { + return this.translate.instant(opts.i18nPrefix + 'FISHING_AREAS'); + } + // Translate location, inside any fishing areas + if (POSITIONS_REGEXP.test(controlPath)) { + return this.translate.instant(opts.i18nPrefix + 'POSITIONS'); + } + // Default translation + return this.formErrorTranslator.translateControlPath(controlPath, opts); + } + /* -- protected methods -- */ + asObject(entity, opts) { + opts = Object.assign(Object.assign({}, MINIFY_OPTIONS), opts); + const copy = entity.asObject(opts); + // Full json optimisation + if (opts.minify && !opts.keepTypename && !opts.keepEntityName) { + // Clean metier object, before saving + copy.metier = { id: entity.metier && entity.metier.id }; + } + return copy; + } + fillDefaultProperties(entity, opts) { + var _a, _b; + const department = this.accountService.department; + // Fill Recorder department + this.fillRecorderDepartment(entity, department); + this.fillRecorderDepartment(entity.startPosition, department); + this.fillRecorderDepartment(entity.endPosition, department); + // Measurements + (entity.measurements || []).forEach(m => this.fillRecorderDepartment(m, department)); + // Fill position dates + if (entity.startPosition) + entity.startPosition.dateTime = entity.fishingStartDateTime || entity.startDateTime; + if (entity.endPosition) + entity.endPosition.dateTime = entity.fishingEndDateTime || entity.endDateTime || ((_a = entity.startPosition) === null || _a === void 0 ? void 0 : _a.dateTime); + // Fill trip ID + if (isNil(entity.tripId) && opts) { + entity.tripId = opts.tripId || ((_b = opts.trip) === null || _b === void 0 ? void 0 : _b.id); + } + // Fill catch batch label + if (entity.catchBatch) { + // Fill catch batch label + if (isNilOrBlank(entity.catchBatch.label)) { + entity.catchBatch.label = AcquisitionLevelCodes.CATCH_BATCH; + } + // Fill batch tree default (rank order, sum, etc.) + this.fillBatchTreeDefaults(entity.catchBatch, opts); + } + } + fillRecorderDepartment(entity, department) { + if (entity && (!entity.recorderDepartment || !entity.recorderDepartment.id)) { + department = department || this.accountService.department; + // Recorder department + if (department) { + entity.recorderDepartment = department; + } + } + } + fillOfflineDefaultProperties(entity, opts) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const isNew = isNil(entity.id); + // If new, generate a local id + if (isNew) { + entity.id = yield this.entities.nextValue(entity); + } + // Fill all sample ids + const samples = entity.samples && EntityUtils.listOfTreeToArray(entity.samples) || []; + yield EntityUtils.fillLocalIds(samples, (_, count) => this.entities.nextValues(Sample.TYPENAME, count)); + // Fill all batches id + const batches = entity.catchBatch && EntityUtils.treeToArray(entity.catchBatch) || []; + if (isNotEmptyArray(batches)) { + yield EntityUtils.fillLocalIds(batches, (_, count) => this.entities.nextValues('BatchVO', count)); + if (this._debug) { + console.debug('[operation-service] Preparing batches to be saved locally:'); + BatchUtils.logTree(entity.catchBatch); + } + } + // Load trip, if need + const trip = (opts === null || opts === void 0 ? void 0 : opts.trip) || (isNotNil(entity.tripId) && (yield this.entities.load(entity.tripId, Trip.TYPENAME, { fullLoad: false }))); + // Copy some properties from trip - see OperationFilter + // Keep entity.tripId if exist because entity.tripId and trip.id can be different when linked operation is updated (opts.trip come from child operation) + // In any case, program and vessel are same for child and parent so we can keep opts.trip values. + if (trip) { + entity.tripId = entity.tripId || trip.id; + entity.programLabel = (_a = trip.program) === null || _a === void 0 ? void 0 : _a.label; + entity.vesselId = (_b = trip.vesselSnapshot) === null || _b === void 0 ? void 0 : _b.id; + } + }); + } + fillBatchTreeDefaults(catchBatch, opts) { + if (!opts) + return; + // CLean empty + if (opts.cleanBatchTree) + BatchUtils.cleanTree(catchBatch); + // Compute rankOrder (and label) + if (opts.computeBatchRankOrder) + BatchUtils.computeRankOrder(catchBatch); + // Compute individual count (e.g. refresh individual count of BatchGroups) + if (opts.computeBatchIndividualCount) + BatchUtils.computeIndividualCount(catchBatch); + // Compute weight + if (opts.computeBatchWeight) + BatchUtils.computeWeight(catchBatch); + } + copyIdAndUpdateDate(source, target) { + var _a; + if (!source) + return; + // Update (id and updateDate) + EntityUtils.copyIdAndUpdateDate(source, target); + // Update parent operation + if (target.parentOperation && source.parentOperation) { + EntityUtils.copyIdAndUpdateDate(source.parentOperation, target.parentOperation); + } + // Update child operation + if (target.childOperation && source.childOperation) { + EntityUtils.copyIdAndUpdateDate(source.childOperation, target.childOperation); + } + // Update positions (id and updateDate) + const sortedSourcePositions = (_a = source.positions) === null || _a === void 0 ? void 0 : _a.map(VesselPosition.fromObject).sort(VesselPositionUtils.dateTimeComparator()); + if (isNotEmptyArray(sortedSourcePositions)) { + [target.startPosition, target.fishingStartPosition, target.fishingEndPosition, target.endPosition] + .filter(p => p && p.dateTime) + .forEach(targetPos => { + targetPos.operationId = source.id; + // Get the source position, by date + const sourcePos = VesselPositionUtils.findByDate(sortedSourcePositions, targetPos.dateTime, true); + EntityUtils.copyIdAndUpdateDate(sourcePos, targetPos); + }); + if (sortedSourcePositions.length) { + // Should never append + console.warn('[operation] Some positions sent by Pod have an unknown dateTime: ', sortedSourcePositions); + } + } + // Update fishing area + if (target.fishingAreas && source.fishingAreas) { + target.fishingAreas.forEach(targetFishArea => { + const sourceFishArea = source.fishingAreas.find(json => targetFishArea.equals(json)); + EntityUtils.copyIdAndUpdateDate(sourceFishArea, targetFishArea); + }); + } + // Update measurements + if (target.measurements && source.measurements) { + target.measurements.forEach(targetMeas => { + const sourceMeas = source.measurements.find(json => targetMeas.equals(json)); + EntityUtils.copyIdAndUpdateDate(sourceMeas, targetMeas); + }); + } + // Update samples (recursively) + if (target.samples && source.samples) { + this.copyIdAndUpdateDateOnSamples(source.samples, target.samples, source); + } + // Update batches (recursively) + if (target.catchBatch && source.batches) { + this.copyIdAndUpdateDateOnBatch(source.batches, [target.catchBatch]); + } + } + /** + * Copy Id and update, in sample tree (recursively) + * + * @param sources + * @param targets + * @param savedOperation + * @param parentSample + */ + copyIdAndUpdateDateOnSamples(sources, targets, savedOperation, parentSample) { + // DEBUG + //console.debug("[operation-service] Calling copyIdAndUpdateDateOnSamples()"); + // Update samples + if (sources && targets) { + // Copy source, to be able to use splice() if array is a readonly (apollo cache) + sources = [...sources]; + targets.forEach(target => { + var _a; + // Set the operation id (required by equals function) + target.operationId = savedOperation.id; + // Try to set parent id (need by equals, when new entity) + target.parentId = (parentSample === null || parentSample === void 0 ? void 0 : parentSample.id) || target.parentId; + const index = sources.findIndex(json => target.equals(json)); + if (index !== -1) { + // Remove from sources list, as it has been found + const source = sources.splice(index, 1)[0]; + EntityUtils.copyIdAndUpdateDate(source, target); + RootDataEntityUtils.copyControlAndValidationDate(source, target); + // Copy parent Id (need for link to parent) + target.parentId = source.parentId; + target.parent = null; + } + else { + console.warn('Missing a sample, equals to this target: ', target); + // Apply to children + if ((_a = target.children) === null || _a === void 0 ? void 0 : _a.length) { + this.copyIdAndUpdateDateOnSamples(sources, target.children, savedOperation, target); + } + } + }); + } + } + /** + * Copy Id and update, in batch tree (recursively) + * + * @param sources + * @param targets + */ + copyIdAndUpdateDateOnBatch(sources, targets) { + if (sources && targets) { + // Copy source, to be able to use splice() if array is a readonly (apollo cache) + sources = [...sources]; + targets.forEach(target => { + var _a; + const index = sources.findIndex(json => target.equals(json)); + if (index !== -1) { + // Remove from sources list, as it has been found + const source = sources.splice(index, 1)[0]; + EntityUtils.copyIdAndUpdateDate(source, target); + } + else { + console.error('Missing a Batch, equals to this target:', target); + } + // Loop on children + if ((_a = target.children) === null || _a === void 0 ? void 0 : _a.length) { + this.copyIdAndUpdateDateOnBatch(sources, target.children); + } + }); + } + } + computeRankOrderAndSort(data, offset, total, sortBy, sortDirection = 'asc', filter) { + // Compute rankOrderOnPeriod, by tripId + if (filter && isNotNil(filter.tripId)) { + const asc = (!sortDirection || sortDirection !== 'desc'); + let rankOrder = asc ? 1 + offset : (total - offset - data.length + 1); + // apply a sorted copy (do NOT change original order), then compute rankOrder + data.slice() + .sort(Operation.sortByEndDateOrStartDate) + .forEach(o => o.rankOrder = rankOrder++); + // sort by rankOrderOnPeriod (received as 'id') + if (!sortBy || sortBy === 'id' || sortBy === 'rankOrder' || sortBy === 'endDateTime') { + data.sort(Operation.rankOrderComparator(sortDirection)); + } + } + } + getRefetchQueriesForMutation(opts) { + if (opts && opts.refetchQueries) + return opts.refetchQueries; + // Skip if update policy not used refecth queries + if (this._watchQueriesUpdatePolicy !== 'refetch-queries') + return undefined; + // Find the refetch queries definition + return this.findRefetchQueries({ queryNames: this.getLoadQueryNames() }); + } + getLoadQueryNames() { + return ['LoadAllWithTotal', 'LoadAll']; + } + removeChildOperationLocally(parentOperationIds) { + return __awaiter(this, void 0, void 0, function* () { + const { data } = yield this.entities.loadAll(Operation.TYPENAME, { + filter: (this.asFilter({ + includedIds: parentOperationIds + }).asFilterFn()) + }, { fullLoad: true }); + if (isEmptyArray(data)) + return; // no operation to update + const operations = (data || []).map(json => + // Convert to entity (required because entities use readonly objects) + Operation.fromObject(Object.assign(Object.assign({}, json), { + // Clean link to child + childOperationId: null, childOperation: null }))); + return this.saveAllLocally(operations, {}); + }); + } + applyWatchOptions({ data, total }, offset, size, sortBy, sortDirection, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + let entities = (!opts || opts.toEntity !== false) ? + (data || []).map(source => Operation.fromObject(source, opts)) + : (data || []); + if (opts === null || opts === void 0 ? void 0 : opts.mapFn) { + entities = yield opts.mapFn(entities); + } + if (opts === null || opts === void 0 ? void 0 : opts.sortByDistance) { + entities = yield this.sortByDistance(entities, sortDirection, sortBy); + } + // Compute rankOrder and re-sort (if enable AND total has been fetched) + if (!opts || opts.computeRankOrder !== false) { + this.computeRankOrderAndSort(entities, offset, total, sortBy, sortDirection, filter); + } + return { data: entities, total }; + }); + } + fillControlOptionsForOperation(entity, opts) { + var _a, _b, _c; + return __awaiter(this, void 0, void 0, function* () { + opts = opts || {}; + // Fill acquisition level, BEFORE loading pmfms + opts.isChild = opts.allowParentOperation !== false && (isNotNil(entity.parentOperationId) || isNotNil((_a = entity.parentOperation) === null || _a === void 0 ? void 0 : _a.id)); + opts.acquisitionLevel = opts.isChild ? AcquisitionLevelCodes.CHILD_OPERATION : AcquisitionLevelCodes.OPERATION; + opts.initialPmfms = null; // Force to reload pmfms, on the same acquisition level + opts = yield this.fillControlOptionsForTrip(entity.tripId, opts); + // Adapt options to the current operation + if (opts.allowParentOperation) { + opts.isParent = !opts.isChild; + } + else { + opts.isChild = false; + opts.isParent = false; + } + // Filter pmfms for the operation's gear + const gearId = (_c = (_b = entity.physicalGear) === null || _b === void 0 ? void 0 : _b.gear) === null || _c === void 0 ? void 0 : _c.id; + if (isNotNil(gearId)) { + opts.pmfms = (opts.initialPmfms || []) + .filter(p => isEmptyArray(p.gearIds) || p.gearIds.includes(gearId)); + } + else { + opts.pmfms = (opts.initialPmfms || []); + } + return opts; + }); + } + fillControlOptionsForTrip(tripId, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + // Fill options need by the operation validator + opts = yield this.fillValidatorOptionsForTrip(tripId, opts); + // Prepare pmfms (the full list, not filtered by gearId) + if (!opts.initialPmfms) { + const programLabel = (_a = opts.program) === null || _a === void 0 ? void 0 : _a.label; + const acquisitionLevel = opts.acquisitionLevel || (opts.isChild ? AcquisitionLevelCodes.CHILD_OPERATION : AcquisitionLevelCodes.OPERATION); + opts.initialPmfms = programLabel && (yield this.programRefService.loadProgramPmfms(programLabel, { acquisitionLevel })) || []; + } + // Prepare error translator + if (!opts.translatorOptions) { + opts.translatorOptions = { + controlPathTranslator: { + translateControlPath: (path) => this.translateControlPath(path, { pmfms: opts.initialPmfms }) + } + }; + } + return opts; + }); + } + fillValidatorOptionsForTrip(tripId, opts) { + return __awaiter(this, void 0, void 0, function* () { + opts = opts || {}; + // Skip - already loaded + if (opts.trip && opts.program && isNotNil(opts.withPosition)) + return opts; + // Load trip, if missing + if (!opts.trip) { + opts.trip = yield this.tripService.load(tripId); + } + // Load program, if missing + if (!opts.program) { + const programLabel = opts.trip.program && opts.trip.program.label || null; + if (!programLabel) + throw new Error('Missing trip\'s program. Unable to control trip\'s operation'); + opts.program = yield this.programRefService.loadByLabel(programLabel); + } + const showPosition = toBoolean(MeasurementUtils.asBooleanValue(opts.trip.measurements, PmfmIds.GPS_USED), true) + && opts.program.getPropertyAsBoolean(ProgramProperties.TRIP_POSITION_ENABLE); + return Object.assign(Object.assign({}, opts), { withPosition: showPosition, withFishingAreas: !showPosition, allowParentOperation: opts.program.getPropertyAsBoolean(ProgramProperties.TRIP_ALLOW_PARENT_OPERATION), withFishingStart: opts.program.getPropertyAsBoolean(ProgramProperties.TRIP_OPERATION_FISHING_START_DATE_ENABLE), withFishingEnd: opts.program.getPropertyAsBoolean(ProgramProperties.TRIP_OPERATION_FISHING_END_DATE_ENABLE), withEnd: opts.program.getPropertyAsBoolean(ProgramProperties.TRIP_OPERATION_END_DATE_ENABLE), maxDistance: opts.program.getPropertyAsInt(ProgramProperties.TRIP_DISTANCE_MAX_ERROR), boundingBox: Geometries.parseAsBBox(opts.program.getProperty(ProgramProperties.TRIP_POSITION_BOUNDING_BOX)), maxTotalDurationInHours: opts.program.getPropertyAsInt(ProgramProperties.TRIP_OPERATION_MAX_TOTAL_DURATION_HOURS), maxShootingDurationInHours: opts.program.getPropertyAsInt(ProgramProperties.TRIP_OPERATION_MAX_SHOOTING_DURATION_HOURS), isOnFieldMode: false, withMeasurements: true // Need by full validation + }); + }); + } +}; +OperationService = __decorate([ + Injectable({ providedIn: 'root' }), + __param(13, Optional()), + __metadata("design:paramtypes", [GraphqlService, + NetworkService, + PlatformService, + AccountService, + LocalSettingsService, + MetierService, + EntitiesStorage, + OperationValidatorService, + BatchService, + ProgressBarService, + ProgramRefService, + TranslateService, + FormErrorTranslator, + Geolocation]) +], OperationService); +export { OperationService }; +//# sourceMappingURL=operation.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/operation.service.js.map b/out-tsc/app/app/trip/operation/operation.service.js.map new file mode 100644 index 000000000..865fdfbd6 --- /dev/null +++ b/out-tsc/app/app/trip/operation/operation.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"operation.service.js","sourceRoot":"","sources":["../../../../../src/app/trip/operation/operation.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/operation.validator.js b/out-tsc/app/app/trip/operation/operation.validator.js new file mode 100644 index 000000000..d492f55e0 --- /dev/null +++ b/out-tsc/app/app/trip/operation/operation.validator.js @@ -0,0 +1,642 @@ +var OperationValidatorService_1; +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators, } from '@angular/forms'; +import { PositionValidatorService } from '@app/data/position/position.validator'; +import { AppFormArray, AppFormUtils, equals, fromDateISOString, isNil, isNotNil, LocalSettingsService, SharedFormArrayValidators, SharedFormGroupValidators, SharedValidators, toBoolean, toNumber, } from '@sumaris-net/ngx-components'; +import { DataEntityValidatorService } from '@app/data/services/validator/data-entity.validator'; +import { AcquisitionLevelCodes, PmfmIds, QualityFlagIds } from '@app/referential/services/model/model.enum'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { Operation } from '../trip/trip.model'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { FishingAreaValidatorService } from '@app/data/fishing-area/fishing-area.validator'; +import { merge } from 'rxjs'; +import { map, startWith } from 'rxjs/operators'; +import { PositionUtils } from '@app/data/position/position.utils'; +import { VesselPosition } from '@app/data/position/vessel/vessel-position.model'; +import { Geometries } from '@app/shared/geometries.utils'; +import { TranslateService } from '@ngx-translate/core'; +import { getFormOptions, setFormOptions } from '@app/trip/batch/common/batch.validator'; +import { FishingArea } from '@app/data/fishing-area/fishing-area.model'; +let OperationValidatorService = OperationValidatorService_1 = class OperationValidatorService extends DataEntityValidatorService { + constructor(formBuilder, translate, settings, positionValidator, fishingAreaValidator, measurementsValidatorService) { + super(formBuilder, translate, settings); + this.positionValidator = positionValidator; + this.fishingAreaValidator = fishingAreaValidator; + this.measurementsValidatorService = measurementsValidatorService; + } + getFormGroup(data, opts) { + var _a, _b; + opts = opts || {}; + const form = super.getFormGroup(data, opts); + // Do not store options here - will be done in updateFormGroup() + //setFormOptions(form, opts); + // Add measurement form + if (opts.withMeasurements) { + if (!opts.pmfms) { + const acquisitionLevel = opts.isChild ? AcquisitionLevelCodes.CHILD_OPERATION : AcquisitionLevelCodes.OPERATION; + opts.pmfms = (((_b = (_a = opts.program) === null || _a === void 0 ? void 0 : _a.strategies) === null || _b === void 0 ? void 0 : _b[0]) && opts.program.strategies[0].denormalizedPmfms || []) + .filter(p => p.acquisitionLevel === acquisitionLevel); + } + form.addControl('measurements', this.measurementsValidatorService.getFormGroup(data && data.measurements, { + forceOptional: opts.isOnFieldMode, + pmfms: opts.pmfms + })); + } + // Add position + if (opts.withPosition) { + form.addControl('startPosition', this.positionValidator.getFormGroup((data === null || data === void 0 ? void 0 : data.startPosition) || null, { + __typename: VesselPosition.TYPENAME, + required: true, + boundingBox: opts === null || opts === void 0 ? void 0 : opts.boundingBox + })); + if (opts.withFishingStart) { + form.addControl('fishingStartPosition', this.positionValidator.getFormGroup((data === null || data === void 0 ? void 0 : data.fishingStartPosition) || null, { + __typename: VesselPosition.TYPENAME, + required: opts && !opts.isOnFieldMode, + boundingBox: opts === null || opts === void 0 ? void 0 : opts.boundingBox + })); + } + if (opts.withFishingEnd) { + form.addControl('fishingEndPosition', this.positionValidator.getFormGroup((data === null || data === void 0 ? void 0 : data.fishingEndPosition) || null, { + __typename: VesselPosition.TYPENAME, + required: opts && !opts.isOnFieldMode, + boundingBox: opts === null || opts === void 0 ? void 0 : opts.boundingBox + })); + } + if (opts.withEnd) { + form.addControl('endPosition', this.positionValidator.getFormGroup((data === null || data === void 0 ? void 0 : data.endPosition) || null, { + __typename: VesselPosition.TYPENAME, + required: opts && !opts.isOnFieldMode, + boundingBox: opts === null || opts === void 0 ? void 0 : opts.boundingBox + })); + } + } + // Add fishing Ares + if (opts.withFishingAreas) { + form.addControl('fishingAreas', this.getFishingAreasArray(data === null || data === void 0 ? void 0 : data.fishingAreas, { required: true })); + } + // Add child operation + if (opts.withChildOperation) { + form.addControl('childOperation', this.createChildOperationControl(data === null || data === void 0 ? void 0 : data.childOperation)); + } + // Execute once, to be sure validators are same + this.updateFormGroup(form, opts); + return form; + } + getFormGroupConfig(data, opts) { + const formConfig = Object.assign(super.getFormGroupConfig(data, opts), { + __typename: [Operation.TYPENAME], + startDateTime: [data && data.startDateTime || null, Validators.required], + fishingStartDateTime: [data && data.fishingStartDateTime || null], + fishingEndDateTime: [data && data.fishingEndDateTime || null], + endDateTime: [data && data.endDateTime || null, SharedValidators.copyParentErrors(['dateRange', 'dateMaxDuration'])], + tripId: [toNumber(data === null || data === void 0 ? void 0 : data.tripId, null)], + rankOrder: [toNumber(data === null || data === void 0 ? void 0 : data.rankOrder, null)], + rankOrderOnPeriod: [toNumber(data === null || data === void 0 ? void 0 : data.rankOrderOnPeriod, null)], + // Use object validator instead of entity because physical gear may have no id when it's adding from parent operation and doesn't exist yet on trip + physicalGear: [data && data.physicalGear || null, Validators.compose([Validators.required, SharedValidators.object])], + comments: [data && data.comments || null, Validators.maxLength(2000)], + // Parent / child + parentOperation: [data && data.parentOperation || null], + parentOperationId: [toNumber(data && data.parentOperationId, null)], + childOperationId: [toNumber(data && data.childOperationId, null)] + }); + // Add metier + if (opts.withMetier) { + formConfig['metier'] = [data && data.metier || null, Validators.compose([Validators.required, SharedValidators.entity])]; + } + return formConfig; + } + getFormGroupOptions(data, opts) { + // Parent operation (=Filage) + if ((opts === null || opts === void 0 ? void 0 : opts.isParent) || (data === null || data === void 0 ? void 0 : data.childOperation)) { + return { + validators: Validators.compose([ + // Make sure date range + SharedFormGroupValidators.dateRange('startDateTime', 'fishingStartDateTime'), + // Check shooting (=Filage) max duration + SharedFormGroupValidators.dateMaxDuration('startDateTime', 'fishingStartDateTime', (opts === null || opts === void 0 ? void 0 : opts.maxShootingDurationInHours) || OperationValidatorService_1.DEFAULT_MAX_SHOOTING_DURATION_HOURS, 'hour') + ]) + }; + } + // Child operation (=Virage) + else if ((opts === null || opts === void 0 ? void 0 : opts.isChild) || (data === null || data === void 0 ? void 0 : data.parentOperation)) { + return { + validators: Validators.compose([ + // Make sure date range + SharedFormGroupValidators.dateRange('fishingEndDateTime', 'endDateTime'), + // Check shooting (=Virage) max duration + SharedFormGroupValidators.dateMaxDuration('fishingEndDateTime', 'endDateTime', (opts === null || opts === void 0 ? void 0 : opts.maxShootingDurationInHours) || OperationValidatorService_1.DEFAULT_MAX_SHOOTING_DURATION_HOURS, 'hour'), + // Check total max duration + SharedFormGroupValidators.dateMaxDuration('startDateTime', 'endDateTime', (opts === null || opts === void 0 ? void 0 : opts.maxTotalDurationInHours) || OperationValidatorService_1.DEFAULT_MAX_TOTAL_DURATION_HOURS, 'hour'), + ]) + }; + } + // Default case + else { + return { + validators: Validators.compose([ + SharedFormGroupValidators.dateRange('startDateTime', 'endDateTime'), + // Check total max duration + SharedFormGroupValidators.dateMaxDuration('startDateTime', 'endDateTime', (opts === null || opts === void 0 ? void 0 : opts.maxTotalDurationInHours) || OperationValidatorService_1.DEFAULT_MAX_TOTAL_DURATION_HOURS, 'hour') + ]) + }; + } + } + /** + * Update form group, with new options + * + * @param form + * @param opts + */ + updateFormGroup(form, opts) { + var _a; + opts = this.fillDefaultOptions(opts); + const previousOptions = getFormOptions(form); + // Skip if same options + if (equals(previousOptions, opts)) { + console.debug('[operation-validator] Skipping form update (same options)'); + return; + } + // DEBUG + console.debug(`[operation-validator] Updating form group validators`); + // Remember options, for next call + setFormOptions(form, opts); + const enabled = form.enabled; + // Metier control + if (opts.withMetier) { + if (!form.controls.metier) + form.addControl('metier', this.formBuilder.control(null, [Validators.required, SharedValidators.entity])); + } + else { + if (form.controls.metier) + form.removeControl('metier'); + } + const positionOpts = { + __typename: VesselPosition.TYPENAME, + boundingBox: opts === null || opts === void 0 ? void 0 : opts.boundingBox + }; + // Start position + if (opts.withPosition) { + if (!form.controls.startPosition) { + form.addControl('startPosition', this.positionValidator.getFormGroup(null, Object.assign(Object.assign({}, positionOpts), { required: true }))); + } + else { + this.positionValidator.updateFormGroup(form.controls.startPosition, Object.assign(Object.assign({}, positionOpts), { required: true })); + } + } + else { + if (form.controls.startPosition) + form.removeControl('startPosition'); + } + // Fishing start position + if (opts.withPosition && opts.withFishingStart) { + if (!form.controls.fishingStartPosition) { + form.addControl('fishingStartPosition', this.positionValidator.getFormGroup(null, Object.assign(Object.assign({}, positionOpts), { boundingBox: opts === null || opts === void 0 ? void 0 : opts.boundingBox }))); + } + else { + this.positionValidator.updateFormGroup(form.controls.fishingStartPosition, Object.assign(Object.assign({}, positionOpts), { required: opts && !opts.isOnFieldMode })); + } + } + else { + if (form.controls.fishingStartPosition) + form.removeControl('fishingStartPosition'); + } + // Fishing end position + if (opts.withPosition && opts.withFishingEnd && !opts.isParent) { + if (!form.controls.fishingEndPosition) { + form.addControl('fishingEndPosition', this.positionValidator.getFormGroup(null, Object.assign(Object.assign({}, positionOpts), { required: opts && !opts.isOnFieldMode }))); + } + else { + this.positionValidator.updateFormGroup(form.controls.fishingEndPosition, Object.assign(Object.assign({}, positionOpts), { required: opts && !opts.isOnFieldMode })); + } + } + else { + if (form.controls.fishingEndPosition) + form.removeControl('fishingEndPosition'); + } + // End position + if (opts.withPosition && opts.withEnd && !opts.isParent) { + if (!form.controls.endPosition) { + form.addControl('endPosition', this.positionValidator.getFormGroup(null, Object.assign(Object.assign({}, positionOpts), { required: opts && !opts.isOnFieldMode }))); + } + else { + this.positionValidator.updateFormGroup(form.controls.endPosition, Object.assign(Object.assign({}, positionOpts), { required: opts && !opts.isOnFieldMode })); + } + } + else { + if (form.controls.endPosition) + form.removeControl('endPosition'); + } + // Add fishing areas + if (opts.withFishingAreas) { + if (!form.controls.fishingAreas) + form.addControl('fishingAreas', this.getFishingAreasArray(null, { required: true })); + } + else { + if (form.controls.fishingAreas) + form.removeControl('fishingAreas'); + } + const parentControl = form.get('parentOperation'); + let childControl = form.get('childOperation'); + const qualityFlagControl = form.get('qualityFlagId'); + const fishingStartDateTimeControl = form.get('fishingStartDateTime'); + const fishingEndDateTimeControl = form.get('fishingEndDateTime'); + const startDateTimeControl = form.get('startDateTime'); + const endDateTimeControl = form.get('endDateTime'); + const fishingStartPositionControl = form.get('fishingStartPosition'); + const fishingEndPositionControl = form.get('fishingEndPosition'); + const endPositionControl = form.get('endPosition'); + // Validator to date inside the trip + const tripDatesValidators = (opts === null || opts === void 0 ? void 0 : opts.trip) && [this.createTripDatesValidator(opts.trip)] || []; + // Is a parent + if (opts.isParent) { + console.info('[operation-validator] Updating validator -> Parent operation'); + parentControl.clearValidators(); + parentControl.disable(); + if (!childControl) { + console.info('[operation-validator] Updating validator -> Add childOperation control'); + childControl = this.createChildOperationControl(null); + form.addControl('childOperation', childControl); + } + childControl.enable(); + // Set Quality flag, to mark as parent operation + qualityFlagControl.setValidators(Validators.required); + qualityFlagControl.patchValue(QualityFlagIds.NOT_COMPLETED, { emitEvent: false }); + // startDateTime = START + // fishingStartDateTime = END + if (opts.withFishingStart) { + const fishingStartDateTimeValidators = [ + ...tripDatesValidators, + SharedValidators.dateRangeEnd('startDateTime'), + opts.withFishingEnd + ? SharedValidators.dateRangeStart('childOperation.fishingEndDateTime', 'TRIP.OPERATION.ERROR.FIELD_DATE_AFTER_CHILD_OPERATION') + : SharedValidators.dateRangeStart('childOperation.endDateTime', 'TRIP.OPERATION.ERROR.FIELD_DATE_AFTER_CHILD_OPERATION'), + ]; + fishingStartDateTimeControl.setValidators((opts === null || opts === void 0 ? void 0 : opts.isOnFieldMode) + ? Validators.compose(fishingStartDateTimeValidators) + : Validators.compose([Validators.required, ...fishingStartDateTimeValidators])); + fishingStartDateTimeControl.enable(); + // Enable position + fishingStartPositionControl === null || fishingStartPositionControl === void 0 ? void 0 : fishingStartPositionControl.enable(); + } + else { + //If not fishing start, make control on start + startDateTimeControl.setValidators(Validators.compose([ + ...tripDatesValidators, + Validators.required, + SharedValidators.dateRangeStart('childOperation.fishingEndDateTime', 'TRIP.OPERATION.ERROR.FIELD_DATE_AFTER_CHILD_OPERATION') + ])); + startDateTimeControl.enable(); + fishingStartDateTimeControl.disable(); + fishingStartDateTimeControl.clearValidators(); + // Disable position + fishingStartPositionControl === null || fishingStartPositionControl === void 0 ? void 0 : fishingStartPositionControl.clearValidators(); + fishingStartPositionControl === null || fishingStartPositionControl === void 0 ? void 0 : fishingStartPositionControl.disable(); + } + // Disable unused controls + fishingEndDateTimeControl.disable(); + fishingEndDateTimeControl.clearValidators(); + endDateTimeControl.disable(); + endDateTimeControl.clearValidators(); + fishingEndPositionControl === null || fishingEndPositionControl === void 0 ? void 0 : fishingEndPositionControl.clearValidators(); + fishingEndPositionControl === null || fishingEndPositionControl === void 0 ? void 0 : fishingEndPositionControl.disable(); + endPositionControl === null || endPositionControl === void 0 ? void 0 : endPositionControl.clearValidators(); + endPositionControl === null || endPositionControl === void 0 ? void 0 : endPositionControl.disable(); + } + // Is a child + else if (opts.isChild) { + console.info('[operation-validator] Updating validator -> Child operation'); + const tripIdControl = form.controls.tripId; + const parentValidators = [Validators.required, + opts && !opts.isOnFieldMode ? OperationValidators.remoteParent(tripIdControl) : SharedValidators.entity, + OperationValidators.existsParent + ]; + parentControl.setValidators(Validators.compose(parentValidators)); + parentControl.enable(); + if (childControl) { + form.removeControl('childOperation'); + } + // Clear quality flag + qualityFlagControl.clearValidators(); + if (isNil(qualityFlagControl.value) || qualityFlagControl.value === QualityFlagIds.NOT_COMPLETED) { + qualityFlagControl.patchValue(QualityFlagIds.NOT_QUALIFIED, { emitEvent: false }); + } + // fishingEndDateTime = START + if (opts.withFishingEnd) { + const fishingEndDateTimeValidators = [ + Validators.required, + // Should be after parent dates + opts.withFishingStart + ? SharedValidators.dateRangeEnd('fishingStartDateTime', 'TRIP.OPERATION.ERROR.FIELD_DATE_BEFORE_PARENT_OPERATION') + : SharedValidators.dateRangeEnd('startDateTime', 'TRIP.OPERATION.ERROR.FIELD_DATE_BEFORE_PARENT_OPERATION') + ]; + fishingEndDateTimeControl.setValidators(opts.withEnd + ? fishingEndDateTimeValidators + // If no endDateTime, add trip dates validator + : [...tripDatesValidators, ...fishingEndDateTimeValidators]); + if (enabled) { + fishingEndDateTimeControl.enable(); + // Enable position + fishingEndPositionControl === null || fishingEndPositionControl === void 0 ? void 0 : fishingEndPositionControl.enable(); + } + } + else { + fishingEndDateTimeControl.clearValidators(); + fishingEndDateTimeControl.disable(); + // Disable position + fishingEndPositionControl === null || fishingEndPositionControl === void 0 ? void 0 : fishingEndPositionControl.clearValidators(); + fishingEndPositionControl === null || fishingEndPositionControl === void 0 ? void 0 : fishingEndPositionControl.disable(); + } + if (opts.withEnd) { + // endDateTime = END + const endDateTimeValidators = [ + ...tripDatesValidators, + SharedValidators.copyParentErrors(['dateRange', 'dateMaxDuration']) + ]; + endDateTimeControl.setValidators(opts.isOnFieldMode + ? endDateTimeValidators + : [Validators.required, ...endDateTimeValidators]); + if (enabled) { + endDateTimeControl.enable(); + // Enable position + endPositionControl === null || endPositionControl === void 0 ? void 0 : endPositionControl.enable(); + } + } + else { + endDateTimeControl.clearValidators(); + endDateTimeControl.disable(); + // Disable position + endPositionControl === null || endPositionControl === void 0 ? void 0 : endPositionControl.clearValidators(); + endPositionControl === null || endPositionControl === void 0 ? void 0 : endPositionControl.disable(); + } + // Disable unused controls + // Remove tripDatesValidators set on these controls on first page load as parent operation (allow startDateTime and fishingStartDateTime to be before tripDepartureDateTime) + startDateTimeControl.clearValidators(); + fishingStartDateTimeControl.clearValidators(); + startDateTimeControl.enable(); + fishingStartDateTimeControl.enable(); + fishingStartDateTimeControl.updateValueAndValidity({ emitEvent: false }); + } + // Default case + else { + console.info('[operation-validator] Applying default validator'); + parentControl.clearValidators(); + parentControl.disable(); + if (childControl) { + form.removeControl('childOperation'); + } + // Clear quality flag + qualityFlagControl.clearValidators(); + if (isNil(qualityFlagControl.value) || qualityFlagControl.value === QualityFlagIds.NOT_COMPLETED) { + qualityFlagControl.patchValue(QualityFlagIds.NOT_QUALIFIED, { emitEvent: false }); + } + if (opts.withEnd) { + // = END DATE + const endDateTimeValidators = [ + ...tripDatesValidators, + SharedValidators.copyParentErrors(['dateRange', 'dateMaxDuration']) + ]; + endDateTimeControl.setValidators((opts === null || opts === void 0 ? void 0 : opts.isOnFieldMode) + ? Validators.compose(endDateTimeValidators) + : Validators.compose([Validators.required, ...endDateTimeValidators])); + if (enabled) { + endDateTimeControl.enable(); + // Enable position + endPositionControl === null || endPositionControl === void 0 ? void 0 : endPositionControl.enable(); + } + } + else { + endDateTimeControl.clearValidators(); + endDateTimeControl.disable(); + // Disable position + endPositionControl === null || endPositionControl === void 0 ? void 0 : endPositionControl.clearValidators(); + endPositionControl === null || endPositionControl === void 0 ? void 0 : endPositionControl.disable(); + } + // Disable unused controls + // TODO: use program options xxx.enable + fishingStartDateTimeControl.disable(); + fishingStartDateTimeControl.clearValidators(); + fishingEndDateTimeControl.disable(); + fishingEndDateTimeControl.clearValidators(); + fishingEndPositionControl === null || fishingEndPositionControl === void 0 ? void 0 : fishingEndPositionControl.disable(); + fishingEndPositionControl === null || fishingEndPositionControl === void 0 ? void 0 : fishingEndPositionControl.clearValidators(); + } + // Max distance validators + if (opts.withPosition) { + if (opts.maxDistance > 0) { + const startPositionControl = form.controls.startPosition; + const lastEndPositionControl = [endPositionControl, fishingEndPositionControl, fishingStartPositionControl] + .find(c => c === null || c === void 0 ? void 0 : c.enabled); + if (lastEndPositionControl) { + lastEndPositionControl.setValidators(OperationValidators.maxDistance(startPositionControl, opts.maxDistance)); + lastEndPositionControl.updateValueAndValidity({ emitEvent: false }); + } + } + } + // Update form group validators + const formValidators = (_a = this.getFormGroupOptions(null, opts)) === null || _a === void 0 ? void 0 : _a.validators; + form.setValidators(formValidators); + } + /* -- protected methods -- */ + fillDefaultOptions(opts) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; + opts = super.fillDefaultOptions(opts); + opts.withMeasurements = toBoolean(opts.withMeasurements, toBoolean(!!opts.program, false)); + opts.withMetier = toBoolean(opts.withMetier, toBoolean((_a = opts.program) === null || _a === void 0 ? void 0 : _a.getPropertyAsBoolean(ProgramProperties.TRIP_OPERATION_METIER_ENABLE), true)); + opts.withPosition = toBoolean(opts.withPosition, toBoolean((_b = opts.program) === null || _b === void 0 ? void 0 : _b.getPropertyAsBoolean(ProgramProperties.TRIP_POSITION_ENABLE), true)); + opts.withFishingAreas = toBoolean(opts.withFishingAreas, !opts.withPosition); + opts.withChildOperation = toBoolean(opts.withChildOperation, toBoolean((_c = opts.program) === null || _c === void 0 ? void 0 : _c.getPropertyAsBoolean(ProgramProperties.TRIP_ALLOW_PARENT_OPERATION), false)); + opts.withFishingStart = toBoolean(opts.withFishingStart, toBoolean((_d = opts.program) === null || _d === void 0 ? void 0 : _d.getPropertyAsBoolean(ProgramProperties.TRIP_OPERATION_FISHING_START_DATE_ENABLE), false)); + opts.withFishingEnd = toBoolean(opts.withFishingEnd, toBoolean((_e = opts.program) === null || _e === void 0 ? void 0 : _e.getPropertyAsBoolean(ProgramProperties.TRIP_OPERATION_FISHING_END_DATE_ENABLE), false)); + opts.withEnd = toBoolean(opts.withEnd, toBoolean((_f = opts.program) === null || _f === void 0 ? void 0 : _f.getPropertyAsBoolean(ProgramProperties.TRIP_OPERATION_END_DATE_ENABLE), true)); + opts.maxDistance = toNumber(opts.maxDistance, (_g = opts.program) === null || _g === void 0 ? void 0 : _g.getPropertyAsInt(ProgramProperties.TRIP_DISTANCE_MAX_ERROR)); + opts.boundingBox = opts.boundingBox || Geometries.parseAsBBox((_h = opts.program) === null || _h === void 0 ? void 0 : _h.getProperty(ProgramProperties.TRIP_POSITION_BOUNDING_BOX)); + opts.maxTotalDurationInHours = toNumber(opts.maxTotalDurationInHours, (_j = opts.program) === null || _j === void 0 ? void 0 : _j.getPropertyAsInt(ProgramProperties.TRIP_OPERATION_MAX_TOTAL_DURATION_HOURS)); + opts.maxShootingDurationInHours = toNumber(opts.maxShootingDurationInHours, (_k = opts.program) === null || _k === void 0 ? void 0 : _k.getPropertyAsInt(ProgramProperties.TRIP_OPERATION_MAX_SHOOTING_DURATION_HOURS)); + // DEBUG + //console.debug("[operation-validator] Ope Validator will use options:", opts); + return opts; + } + composeToAsync(validators) { + return (control) => __awaiter(this, void 0, void 0, function* () { + if (!control.touched && !control.dirty) + return null; + const errors = validators + .map(validator => validator(control)) + .find(isNotNil) || null; + // Clear unused errors + if (!errors || !errors.msg) + SharedValidators.clearError(control, 'msg'); + if (!errors || !errors.required) + SharedValidators.clearError(control, 'required'); + return errors; + }); + } + createTripDatesValidator(trip) { + return (control) => { + const dateTime = fromDateISOString(control.value); + const tripDepartureDateTime = fromDateISOString(trip.departureDateTime); + const tripReturnDateTime = fromDateISOString(trip.returnDateTime); + // Make sure trip.departureDateTime < operation.endDateTime + if (dateTime && tripDepartureDateTime && tripDepartureDateTime.isBefore(dateTime) === false) { + console.warn(`[operation] Invalid operation: before the trip`, dateTime, tripDepartureDateTime); + return { msg: 'TRIP.OPERATION.ERROR.FIELD_DATE_BEFORE_TRIP' }; + } + // Make sure operation.endDateTime < trip.returnDateTime + else if (dateTime && tripReturnDateTime && dateTime.isBefore(tripReturnDateTime) === false) { + console.warn(`[operation] Invalid operation: after the trip`, dateTime, tripReturnDateTime); + return { msg: 'TRIP.OPERATION.ERROR.FIELD_DATE_AFTER_TRIP' }; + } + }; + } + getFishingAreasArray(data, opts) { + const required = !opts || opts.required !== false; + const formArray = new AppFormArray((fa) => this.fishingAreaValidator.getFormGroup(fa, { required }), FishingArea.equals, FishingArea.isEmpty, { + allowEmptyArray: false, + validators: required ? SharedFormArrayValidators.requiredArrayMinLength(1) : undefined + }); + if (data) + formArray.patchValue(data); + return formArray; + } + createChildOperationControl(data) { + return this.formBuilder.group({ + id: [toNumber(data && data.id, null)], + startDateTime: [data && data.startDateTime || null], + fishingStartDateTime: [data && data.fishingStartDateTime || null], + fishingEndDateTime: [data && data.fishingEndDateTime || null], + endDateTime: [data && data.endDateTime || null] + }); + } +}; +OperationValidatorService.DEFAULT_MAX_TOTAL_DURATION_HOURS = 100 * 24; // 100 days +OperationValidatorService.DEFAULT_MAX_SHOOTING_DURATION_HOURS = 12; // 12 hours +OperationValidatorService = OperationValidatorService_1 = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + LocalSettingsService, + PositionValidatorService, + FishingAreaValidatorService, + MeasurementsValidatorService]) +], OperationValidatorService); +export { OperationValidatorService }; +export class OperationValidators { + static requiredArrayMinLength(minLength) { + minLength = minLength || 1; + return (array) => { + if (!array || array.length < minLength) { + return { required: true }; + } + return null; + }; + } + static addSampleValidators(pmfmForm) { + const { form, pmfms } = pmfmForm; + if (!form) { + console.warn('Argument \'form\' required'); + return null; + } + // Disable computed pmfms + AppFormUtils.disableControls(form, pmfms + .filter(p => p.isComputed) + .map(p => `measurementValues.${p.id}`), { onlySelf: true, emitEvent: false }); + const observables = [ + OperationValidators.listenIndividualOnDeck(pmfmForm) + ].filter(isNotNil); + if (!observables.length) + return null; + if (observables.length === 1) + return observables[0].subscribe(); + return merge(observables).subscribe(); + } + /** + * Validate and compute + * + * @param event + */ + static listenIndividualOnDeck(event) { + const { form, pmfms, markForCheck } = event; + const measFormGroup = form.controls['measurementValues']; + // Create listener on column 'INDIVIDUAL_ON_DECK' value changes + const individualOnDeckPmfm = pmfms.find(pmfm => pmfm.id === PmfmIds.INDIVIDUAL_ON_DECK); + const individualOnDeckControl = individualOnDeckPmfm && measFormGroup.controls[individualOnDeckPmfm.id]; + if (individualOnDeckControl) { + console.debug('[operation-validator] Listening if on deck...'); + return individualOnDeckControl.valueChanges + .pipe(startWith(individualOnDeckControl.value), map((individualOnDeck) => { + if (individualOnDeck) { + if (form.enabled) { + pmfms.filter(pmfm => pmfm.rankOrder > individualOnDeckPmfm.rankOrder && pmfm.id !== PmfmIds.TAG_ID) + .map(pmfm => { + const control = measFormGroup.controls[pmfm.id]; + if (pmfm.required) { + control.setValidators(Validators.required); + } + control.enable(); + }); + if (markForCheck) + markForCheck(); + } + } + else { + if (form.enabled) { + pmfms.filter(pmfm => pmfm.rankOrder > individualOnDeckPmfm.rankOrder && pmfm.id !== PmfmIds.TAG_ID) + .map(pmfm => { + const control = measFormGroup.controls[pmfm.id]; + control.disable(); + control.reset(null, { emitEvent: false }); + control.setValidators(null); + }); + if (markForCheck) + markForCheck(); + } + } + return null; + })); + } + return null; + } + static maxDistance(otherPositionForm, maxInMiles) { + return (control) => { + const distance = PositionUtils.computeDistanceInMiles(otherPositionForm.value, control.value); + if (distance > maxInMiles) { + return { maxDistance: { distance, max: maxInMiles } }; + } + return undefined; + }; + } + static remoteParent(tripIdControl) { + return (control) => { + const parent = control.value; + const parentId = parent === null || parent === void 0 ? void 0 : parent.id; + // Error if the parent is a local operation, defined in another trip + // Same trip should be OK + if (isNotNil(parentId) && parentId < 0) { + const tripId = toNumber(tripIdControl.value); + const parentTripId = parent === null || parent === void 0 ? void 0 : parent.tripId; + if (isNotNil(parentTripId) && parentTripId !== tripId) { + return { remoteParent: true }; + } + } + return null; + }; + } + static existsParent(control) { + const parent = control.value; + const qualityFlagId = parent === null || parent === void 0 ? void 0 : parent.qualityFlagId; + if (qualityFlagId === QualityFlagIds.MISSING) { + return { existsParent: true }; + } + return null; + } +} +export const OPERATION_VALIDATOR_I18N_ERROR_KEYS = { + maxDistance: 'TRIP.OPERATION.ERROR.TOO_LONG_DISTANCE', + remoteParent: 'TRIP.OPERATION.ERROR.LOCAL_PARENT_OPERATION', + existsParent: 'TRIP.OPERATION.ERROR.MISSING_PARENT_OPERATION', + invalidOrIncomplete: 'ERROR.INVALID_OR_INCOMPLETE_FILL' +}; +//# sourceMappingURL=operation.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/operation.validator.js.map b/out-tsc/app/app/trip/operation/operation.validator.js.map new file mode 100644 index 000000000..e95f63a39 --- /dev/null +++ b/out-tsc/app/app/trip/operation/operation.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"operation.validator.js","sourceRoot":"","sources":["../../../../../src/app/trip/operation/operation.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/operations.table.js b/out-tsc/app/app/trip/operation/operations.table.js new file mode 100644 index 000000000..447fb5a21 --- /dev/null +++ b/out-tsc/app/app/trip/operation/operations.table.js @@ -0,0 +1,424 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Injector, Input, Output, ViewChild, } from '@angular/core'; +import { ValidatorService } from '@e-is/ngx-material-table'; +import { OperationValidatorService } from './operation.validator'; +import { OperationService } from './operation.service'; +import { AccountService, AppFormUtils, isNotNil, LocalSettingsService, toBoolean } from '@sumaris-net/ngx-components'; +import { OperationsMapModal } from './map/operations-map.modal'; +import { environment } from '@environments/environment'; +import { Operation } from '../trip/trip.model'; +import { OperationFilter } from '@app/trip/operation/operation.filter'; +import { from, merge } from 'rxjs'; +import { UntypedFormBuilder } from '@angular/forms'; +import { MatExpansionPanel } from '@angular/material/expansion'; +import { debounceTime, filter, tap } from 'rxjs/operators'; +import { AppRootTableSettingsEnum } from '@app/data/table/root-table.class'; +import { DataQualityStatusEnum, DataQualityStatusIds, DataQualityStatusList } from '@app/data/services/model/model.utils'; +import { AppBaseTable } from '@app/shared/table/base.table'; +let OperationsTable = class OperationsTable extends AppBaseTable { + constructor(injector, settings, validatorService, _dataService, accountService, formBuilder, cd) { + super(injector, Operation, OperationFilter, settings.mobile + ? ['quality', 'physicalGear', 'targetSpecies', 'startDateTime', 'endDateTime', 'fishingEndDateTime', 'fishingArea'] + : [ + 'quality', + 'physicalGear', + 'targetSpecies', + 'startDateTime', + 'startPosition', + 'endDateTime', + 'fishingEndDateTime', + 'endPosition', + 'fishingArea', + 'comments', + ], _dataService, null, + // DataSource options + { + i18nColumnPrefix: 'TRIP.OPERATION.LIST.', + prependNewElements: false, + suppressErrors: environment.production, + readOnly: false, + watchAllOptions: { + withBatchTree: false, + withSamples: false, + withTotal: true, + }, + }); + this.settings = settings; + this.validatorService = validatorService; + this._dataService = _dataService; + this.accountService = accountService; + this.formBuilder = formBuilder; + this.cd = cd; + this.statusList = DataQualityStatusList.filter((s) => s.id !== DataQualityStatusIds.VALIDATED); + this.statusById = DataQualityStatusEnum; + this.filterForm = this.formBuilder.group({ + tripId: [null], + dataQualityStatus: [null], + }); + this.useSticky = true; + this.allowParentOperation = false; + this.showQuality = true; + this.showRowError = false; + // eslint-disable-next-line @angular-eslint/no-output-on-prefix + this.onDuplicateRow = new EventEmitter(); + this.inlineEdition = false; + this.confirmBeforeDelete = true; + this.saveBeforeSort = false; + this.saveBeforeFilter = false; + this.saveBeforeDelete = false; + this.autoLoad = false; // waiting parent to be loaded + this.defaultPageSize = -1; // Do not use paginator + this.defaultSortBy = this.mobile ? 'startDateTime' : 'endDateTime'; + this.defaultSortDirection = this.mobile ? 'desc' : 'asc'; + this.loadingSubject.next(false); + // Listen settings changed + this.registerSubscription(merge(from(this.settings.ready()), this.settings.onChange).subscribe((_) => this.configureFromSettings())); + } + set tripId(tripId) { + this.setTripId(tripId); + } + get tripId() { + return this.filterForm.get('tripId').value; + } + set showQualityColumn(value) { + this.setShowColumn('quality', value); + } + get showQualityColumn() { + return this.getShowColumn('quality'); + } + get sortActive() { + const sortActive = super.sortActive; + // Local sort + if (this.tripId < 0) { + switch (sortActive) { + case 'physicalGear': + //return 'physicalGear.gear.' + this.displayAttributes.gear[0]; + case 'targetSpecies': + //return 'metier.taxonGroup.' + this.displayAttributes.taxonGroup[0]; + case 'fishingArea': + //return 'fishingAreas.location.' + this.displayAttributes.fishingArea[0]; + // Fix issue on rankOrder computation + return 'id'; + default: + return sortActive; + } + } + // Remote sort + else { + switch (sortActive) { + case 'targetSpecies': + //return 'metier'; + case 'fishingArea': + //return 'fishingAreas.location.' + this.displayAttributes.fishingArea[0]; + case 'physicalGear': + // Fix issue on rankOrder computation + return 'id'; + default: + return sortActive; + } + } + } + set showPosition(show) { + this.setShowColumn('startPosition', show); + this.setShowColumn('endPosition', show); + } + get showPosition() { + return this.getShowColumn('startPosition') && this.getShowColumn('endPosition'); + } + set showFishingArea(show) { + this.setShowColumn('fishingArea', show); + } + get showFishingArea() { + return this.getShowColumn('fishingArea'); + } + set showEndDateTime(show) { + this.setShowColumn('endDateTime', show); + } + get showEndDateTime() { + return this.getShowColumn('endDateTime'); + } + set showFishingEndDateTime(show) { + this.setShowColumn('fishingEndDateTime', show); + } + get showFishingEndDateTime() { + return this.getShowColumn('fishingEndDateTime'); + } + get filterIsEmpty() { + return this.filterCriteriaCount === 0; + } + get filterDataQualityControl() { + return this.filterForm.controls.dataQualityStatus; + } + ngOnInit() { + super.ngOnInit(); + // Default values + this.showMap = toBoolean(this.showMap, false); + // Mark filter form as pristine + this.registerSubscription(this.onRefresh.subscribe(() => { + this.filterForm.markAsUntouched(); + this.filterForm.markAsPristine(); + })); + // Update filter when changes + this.registerSubscription(this.filterForm.valueChanges + .pipe(debounceTime(250), filter((_) => { + const valid = this.filterForm.valid; + if (!valid && this.debug) + AppFormUtils.logFormErrors(this.filterForm); + return valid && !this.loading; + }), + // Update the filter, without reloading the content + tap((json) => this.setFilter(json, { emitEvent: false })), + // Save filter in settings (after a debounce time) + debounceTime(500), tap((json) => this.settings.savePageSetting(this.settingsId, json, AppRootTableSettingsEnum.FILTER_KEY))) + .subscribe()); + // Apply trip id, if already set + if (isNotNil(this.tripId)) { + this.setTripId(this.tripId); + } + } + ngOnDestroy() { + super.ngOnDestroy(); + this.onDuplicateRow.unsubscribe(); + } + setTripId(tripId, opts) { + this.setFilter(Object.assign(Object.assign({}, this.filterForm.value), { tripId }), opts); + } + openMapModal(event) { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this._dataService.loadAllByTrip({ + tripId: this.tripId, + }, { fetchPolicy: 'cache-first', fullLoad: false, withTotal: true /*to make sure cache has been filled*/ }); + if (!res.total) + return; // No data + const modal = yield this.modalCtrl.create({ + component: OperationsMapModal, + componentProps: { + data: [res.data], + latLongPattern: this.latLongPattern, + programLabel: this.programLabel, + }, + keyboardClose: true, + cssClass: 'modal-large', + }); + // Open the modal + yield modal.present(); + // Wait until closed + const { data } = yield modal.onDidDismiss(); + if (data instanceof Operation) { + console.info('[operation-table] User select an operation from the map:', data); + // Open the row + let row = this.dataSource.getRows().find((r) => r.currentData.id === data.id); + if (row) { + this.clickRow(null, row); + } + else { + // Create a fake row + row = yield this.dataSource.createNew(null, { editing: true }); + try { + row.currentData = data; + yield this.openRow(data.id, row); + } + finally { + row.cancelOrDelete(); + } + } + } + }); + } + duplicateRow(event, row) { + return __awaiter(this, void 0, void 0, function* () { + event === null || event === void 0 ? void 0 : event.stopPropagation(); + row = row || this.singleSelectedRow; + if (!row || !this.confirmEditCreate(event, row)) { + return false; + } + this.onDuplicateRow.emit({ data: row.currentData }); + this.selection.clear(); + }); + } + getUsedPhysicalGearIds() { + return __awaiter(this, void 0, void 0, function* () { + return this.dataSource + .getRows() + .map((ope) => ope.currentData.physicalGear) + .filter(isNotNil) + .map((gear) => gear.id) + .reduce((res, id) => (res.includes(id) ? res : res.concat(id)), []); + }); + } + // Changed as public + getI18nColumnName(columnName) { + return super.getI18nColumnName(columnName); + } + resetFilter(value, opts) { + super.resetFilter(Object.assign(Object.assign({}, value), { tripId: this.tripId }), opts); + this.resetError(); + } + toggleFilterPanelFloating() { + this.filterPanelFloating = !this.filterPanelFloating; + this.markForCheck(); + } + closeFilterPanel() { + if (this.filterExpansionPanel) + this.filterExpansionPanel.close(); + this.filterPanelFloating = true; + } + clearFilterValue(key, event) { + if (event) { + event.preventDefault(); + event.stopPropagation(); + } + this.filterForm.get(key).reset(null); + } + // Change visibility to public + setError(error, opts) { + super.setError(error, opts); + // If error + if (error) { + // Add filter on invalid rows (= not controlled) + if (!opts || opts.showOnlyInvalidRows !== false) { + this.showRowError = true; + const filter = this.filter || new OperationFilter(); + filter.dataQualityStatus = 'MODIFIED'; // = not controlled operations + this.setFilter(filter); + } + } + // No errors + else { + // Remove filter on invalid rows + if (!opts || opts.showOnlyInvalidRows !== true) { + this.showRowError = false; + const filter = this.filter || new OperationFilter(); + if (filter.dataQualityStatus === 'MODIFIED') { + filter.dataQualityStatus = undefined; + this.setFilter(filter); + } + } + } + } + // Change visibility to public + resetError(opts) { + this.setError(undefined, opts); + } + trackByFn(index, row) { + return row.currentData.id; + } + /* -- protected methods -- */ + asFilter(source) { + source = source || this.filterForm.value; + return OperationFilter.fromObject(source); + } + configureFromSettings(settings) { + console.debug('[operation-table] Configure from local settings (latLong format, display attributes)...'); + settings = settings || this.settings.settings; + if (settings.accountInheritance) { + const account = this.accountService.account; + this.latLongPattern = (account && account.settings && account.settings.latLongFormat) || this.settings.latLongFormat; + } + else { + this.latLongPattern = this.settings.latLongFormat; + } + this.displayAttributes = { + gear: this.settings.getFieldDisplayAttributes('gear'), + physicalGear: this.settings.getFieldDisplayAttributes('gear', ['rankOrder', 'gear.label', 'gear.name']), + taxonGroup: this.settings.getFieldDisplayAttributes('taxonGroup'), + fishingArea: this.settings.getFieldDisplayAttributes('fishingArea', ['label']), + }; + this.markForCheck(); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", String) +], OperationsTable.prototype, "latLongPattern", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], OperationsTable.prototype, "showMap", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], OperationsTable.prototype, "programLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationsTable.prototype, "useSticky", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationsTable.prototype, "allowParentOperation", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationsTable.prototype, "showQuality", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationsTable.prototype, "showRowError", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], OperationsTable.prototype, "detailEditor", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], OperationsTable.prototype, "canDuplicate", void 0); +__decorate([ + Input(), + __metadata("design:type", Number), + __metadata("design:paramtypes", [Number]) +], OperationsTable.prototype, "tripId", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], OperationsTable.prototype, "showQualityColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], OperationsTable.prototype, "showPosition", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], OperationsTable.prototype, "showFishingArea", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], OperationsTable.prototype, "showEndDateTime", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], OperationsTable.prototype, "showFishingEndDateTime", null); +__decorate([ + Output('duplicateRow'), + __metadata("design:type", Object) +], OperationsTable.prototype, "onDuplicateRow", void 0); +__decorate([ + ViewChild(MatExpansionPanel, { static: true }), + __metadata("design:type", MatExpansionPanel) +], OperationsTable.prototype, "filterExpansionPanel", void 0); +OperationsTable = __decorate([ + Component({ + selector: 'app-operations-table', + templateUrl: 'operations.table.html', + styleUrls: ['operations.table.scss'], + providers: [{ provide: ValidatorService, useExisting: OperationValidatorService }], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + LocalSettingsService, + ValidatorService, + OperationService, + AccountService, + UntypedFormBuilder, + ChangeDetectorRef]) +], OperationsTable); +export { OperationsTable }; +//# sourceMappingURL=operations.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/operations.table.js.map b/out-tsc/app/app/trip/operation/operations.table.js.map new file mode 100644 index 000000000..1cbc490e5 --- /dev/null +++ b/out-tsc/app/app/trip/operation/operations.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"operations.table.js","sourceRoot":"","sources":["../../../../../src/app/trip/operation/operations.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/select-operation-by-trip.table.js b/out-tsc/app/app/trip/operation/select-operation-by-trip.table.js new file mode 100644 index 000000000..0a11b120c --- /dev/null +++ b/out-tsc/app/app/trip/operation/select-operation-by-trip.table.js @@ -0,0 +1,299 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { ValidatorService } from '@e-is/ngx-material-table'; +import { OperationValidatorService } from './operation.validator'; +import { OperationService } from './operation.service'; +import { AccountService, AppTable, collectByProperty, EntitiesTableDataSource, isEmptyArray, isNotEmptyArray, NetworkService, removeDuplicatesFromArray, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS } from '@sumaris-net/ngx-components'; +import { environment } from '@environments/environment'; +import { Operation, Trip } from '../trip/trip.model'; +import { TripService } from '@app/trip/trip/trip.service'; +import { debounceTime, filter } from 'rxjs/operators'; +import { UntypedFormBuilder } from '@angular/forms'; +import moment from 'moment/moment'; +import { METIER_DEFAULT_FILTER } from '@app/referential/services/metier.service'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { BehaviorSubject, from, merge } from 'rxjs'; +import { mergeLoadResult } from '@app/shared/functions'; +class OperationDivider extends Operation { +} +let SelectOperationByTripTable = class SelectOperationByTripTable extends AppTable { + constructor(injector, formBuilder, validatorService, dataService, referentialRefService, tripService, accountService, network, cd) { + super(injector, RESERVED_START_COLUMNS + .concat(['tripId', + 'physicalGear', + 'targetSpecies', + 'startDateTime', + 'startPosition', + 'fishingStartDateTime', + 'endPosition']) + .concat(RESERVED_END_COLUMNS), new EntitiesTableDataSource(Operation, dataService, null, + // DataSource options + { + prependNewElements: false, + suppressErrors: environment.production, + readOnly: true, + watchAllOptions: { + withBatchTree: false, + withSamples: false, + withTotal: true, + mapFn: (operations) => this.mapOperations(operations), + computeRankOrder: false, + mutable: false, + withOffline: true + } + })); + this.validatorService = validatorService; + this.dataService = dataService; + this.referentialRefService = referentialRefService; + this.tripService = tripService; + this.accountService = accountService; + this.network = network; + this.cd = cd; + this.limitDateForLostOperation = moment().add(-4, 'day'); + this.trips = new Array(); + this.$taxonGroups = new BehaviorSubject(undefined); + this.$gears = new BehaviorSubject(undefined); + this.showToolbar = true; + this.showPaginator = false; + this.showFilter = true; + this.useSticky = true; + this.enableGeolocation = false; + this.i18nColumnPrefix = 'TRIP.OPERATION.LIST.'; + this.readOnly = true; + this.inlineEdition = false; + this.confirmBeforeDelete = true; + this.saveBeforeSort = false; + this.saveBeforeFilter = false; + this.saveBeforeDelete = false; + this.autoLoad = false; // waiting parent to be loaded + this.defaultPageSize = -1; // Do not use paginator + this.defaultSortBy = this.mobile ? 'startDateTime' : 'endDateTime'; + this.defaultSortDirection = this.mobile ? 'desc' : 'asc'; + this.excludesColumns = ['select']; + this.filterForm = formBuilder.group({ + startDate: null, + gearIds: [null], + taxonGroupLabels: [null] + }); + // Update filter when changes + this.registerSubscription(this.filterForm.valueChanges + .pipe(debounceTime(250), filter(() => this.filterForm.valid)) + // Applying the filter + .subscribe((json) => this.setFilter(Object.assign(Object.assign({}, this.filter), json), { emitEvent: true /*always apply*/ }))); + // Listen settings changed + this.registerSubscription(merge(from(this.settings.ready()), this.settings.onChange) + .subscribe(value => this.configureFromSettings(value))); + } + get sortActive() { + const sortActive = super.sortActive; + // Local sort + if (this.tripId < 0) { + switch (sortActive) { + case 'physicalGear': + return 'physicalGear.gear.' + this.displayAttributes.gear[0]; + case 'targetSpecies': + return 'metier.taxonGroup.' + this.displayAttributes.taxonGroup[0]; + case 'tripId': + return 'trip'; + default: + return sortActive; + } + } + // Remote sort + else { + switch (sortActive) { + case 'targetSpecies': + return 'metier'; + case 'tripId': + return 'trip'; + default: + return sortActive; + } + } + } + get sortByDistance() { + return this.enableGeolocation && (this.sortActive === 'startPosition' || this.sortActive === 'endPosition'); + } + ngOnInit() { + super.ngOnInit(); + // Apply filter value + const filter = this.filter; + if (filter === null || filter === void 0 ? void 0 : filter.startDate) { + this.filterForm.get('startDate').setValue(filter.startDate, { emitEvent: false }); + } + if ((filter === null || filter === void 0 ? void 0 : filter.gearIds.length) === 1) { + this.filterForm.get('gearIds').setValue(filter.gearIds[0], { emitEvent: false }); + } + // Load taxon groups, and gears + this.loadTaxonGroups(); + this.loadGears(); + } + clickRow(event, row) { + this.highlightedRow = row; + return super.clickRow(event, row); + } + isDivider(index, item) { + return item.currentData instanceof OperationDivider; + } + isOperation(index, item) { + return !(item.currentData instanceof OperationDivider); + } + clearControlValue(event, formControl) { + if (event) + event.stopPropagation(); // Avoid to enter input the field + formControl.setValue(null); + return false; + } + isCurrentData(row) { + return this.parent && row.currentData.id === this.parent.id; + } + /* -- protected methods -- */ + configureFromSettings(settings) { + console.debug('[operation-table] Configure from local settings (latLong format, display attributes)...'); + settings = settings || this.settings.settings; + if (settings.accountInheritance) { + const account = this.accountService.account; + this.latLongPattern = account && account.settings && account.settings.latLongFormat || this.settings.latLongFormat; + } + else { + this.latLongPattern = this.settings.latLongFormat; + } + this.displayAttributes = { + gear: this.settings.getFieldDisplayAttributes('gear'), + taxonGroup: this.settings.getFieldDisplayAttributes('taxonGroup'), + }; + this.markForCheck(); + } + loadTaxonGroups() { + return __awaiter(this, void 0, void 0, function* () { + const { data } = yield this.referentialRefService.loadAll(0, 100, null, null, Object.assign(Object.assign({ entityName: 'Metier' }, METIER_DEFAULT_FILTER), { searchJoin: 'TaxonGroup', levelIds: this.gearIds }), { + withTotal: false + }); + const items = removeDuplicatesFromArray(data || [], 'label'); + this.$taxonGroups.next(items); + }); + } + loadGears() { + return __awaiter(this, void 0, void 0, function* () { + const { data } = yield this.referentialRefService.loadAll(0, 100, null, null, { + entityName: 'Gear', + includedIds: this.gearIds, + }, { + withTotal: false + }); + this.$gears.next(data || []); + }); + } + mapOperations(data) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + data = removeDuplicatesFromArray(data, 'id'); + // Add existing parent operation + if (this.parent && data.findIndex(o => o.id === this.parent.id) === -1) { + data.push(this.parent); + } + if (isEmptyArray((data))) + return data; + // Not done on watch all to apply filter on parent operation + if (this.sortByDistance) { + data = yield this.dataService.sortByDistance(data, this.sortDirection, this.sortActive); + } + // Load trips (remote and local) + const operationByTripIds = collectByProperty(data, 'tripId'); + const tripIds = Object.keys(operationByTripIds).map(tripId => +tripId); + const localTripIds = tripIds.filter(id => id < 0); + const remoteTripIds = tripIds.filter(id => id >= 0); + let trips; + if (isNotEmptyArray(localTripIds) && isNotEmptyArray(remoteTripIds)) { + trips = yield Promise.all([ + this.tripService.loadAll(0, remoteTripIds.length, null, null, { includedIds: remoteTripIds }, { mutable: false }), + this.tripService.loadAll(0, localTripIds.length, null, null, { includedIds: localTripIds, synchronizationStatus: 'DIRTY' }), + ]).then(([res1, res2]) => { var _a; return (_a = mergeLoadResult(res1, res2)) === null || _a === void 0 ? void 0 : _a.data; }); + } + else if (isNotEmptyArray(localTripIds)) { + trips = (_a = (yield this.tripService.loadAll(0, localTripIds.length, null, null, { includedIds: localTripIds, synchronizationStatus: 'DIRTY' }))) === null || _a === void 0 ? void 0 : _a.data; + } + else { + trips = (_b = (yield this.tripService.loadAll(0, remoteTripIds.length, null, null, { includedIds: remoteTripIds }, { mutable: false }))) === null || _b === void 0 ? void 0 : _b.data; + } + // Remove duplicated trips + //trips = removeDuplicatesFromArray(trips, 'id'); + // Insert a divider (between operations) for each trip + data = tripIds.reduce((res, tripId) => { + var _a; + const childrenOperations = operationByTripIds[tripId]; + const divider = new OperationDivider(); + divider.id = tripId; + divider.tripId = tripId; + divider.trip = trips.find(t => t.id === tripId); + if (!divider.trip) { + divider.trip = ((_a = childrenOperations.find(o => o.trip && o.trip.id === tripId)) === null || _a === void 0 ? void 0 : _a.trip) + || Trip.fromObject({ id: tripId, tripId }); + } + return res.concat(divider).concat(...childrenOperations); + }, []); + return data; + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", String) +], SelectOperationByTripTable.prototype, "latLongPattern", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], SelectOperationByTripTable.prototype, "tripId", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SelectOperationByTripTable.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SelectOperationByTripTable.prototype, "showPaginator", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SelectOperationByTripTable.prototype, "showFilter", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SelectOperationByTripTable.prototype, "useSticky", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SelectOperationByTripTable.prototype, "enableGeolocation", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], SelectOperationByTripTable.prototype, "gearIds", void 0); +__decorate([ + Input(), + __metadata("design:type", Operation) +], SelectOperationByTripTable.prototype, "parent", void 0); +SelectOperationByTripTable = __decorate([ + Component({ + selector: 'app-select-operation-by-trip-table', + templateUrl: 'select-operation-by-trip.table.html', + styleUrls: ['select-operation-by-trip.table.scss'], + providers: [ + { provide: ValidatorService, useExisting: OperationValidatorService } + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + UntypedFormBuilder, + ValidatorService, + OperationService, + ReferentialRefService, + TripService, + AccountService, + NetworkService, + ChangeDetectorRef]) +], SelectOperationByTripTable); +export { SelectOperationByTripTable }; +//# sourceMappingURL=select-operation-by-trip.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/select-operation-by-trip.table.js.map b/out-tsc/app/app/trip/operation/select-operation-by-trip.table.js.map new file mode 100644 index 000000000..2f09ef1dc --- /dev/null +++ b/out-tsc/app/app/trip/operation/select-operation-by-trip.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"select-operation-by-trip.table.js","sourceRoot":"","sources":["../../../../../src/app/trip/operation/select-operation-by-trip.table.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAqB,MAAM,eAAe,CAAC;AAC1H,OAAO,EAAgB,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAwB,gBAAgB,EAAgC,MAAM,qBAAqB,CAAC;AAC3G,OAAO,EACL,cAAc,EACd,QAAQ,EAAE,iBAAiB,EAC3B,uBAAuB,EACvB,YAAY,EACZ,eAAe,EAGf,cAAc,EAEd,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAmB,kBAAkB,EAAoB,MAAM,gBAAgB,CAAC;AACvF,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,gBAAiB,SAAQ,SAAS;CAEvC;AAWM,IAAM,0BAA0B,GAAhC,MAAM,0BAA2B,SAAQ,QAAoC;IAsDlF,YACE,QAAkB,EAClB,WAA+B,EACrB,gBAAkC,EAClC,WAA6B,EAC7B,qBAA4C,EAC5C,WAAwB,EACxB,cAA8B,EAC9B,OAAuB,EACvB,EAAqB;QAE/B,KAAK,CAAC,QAAQ,EACZ,sBAAsB;aACnB,MAAM,CACL,CAAC,QAAQ;YACP,cAAc;YACd,eAAe;YACf,eAAe;YACf,eAAe;YACf,sBAAsB;YACtB,aAAa,CAAC,CAAC;aAClB,MAAM,CAAC,oBAAoB,CAAC,EAC/B,IAAI,uBAAuB,CAAmE,SAAS,EACrG,WAAW,EACX,IAAI;QACJ,qBAAqB;QACrB;YACE,kBAAkB,EAAE,KAAK;YACzB,cAAc,EAAE,WAAW,CAAC,UAAU;YACtC,QAAQ,EAAE,IAAI;YACd,eAAe,EAAE;gBACf,aAAa,EAAE,KAAK;gBACpB,WAAW,EAAE,KAAK;gBAClB,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;gBACrD,gBAAgB,EAAE,KAAK;gBACvB,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,IAAI;aAClB;SACF,CAAC,CACL,CAAC;QArCQ,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,gBAAW,GAAX,WAAW,CAAkB;QAC7B,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,gBAAW,GAAX,WAAW,CAAa;QACxB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,YAAO,GAAP,OAAO,CAAgB;QACvB,OAAE,GAAF,EAAE,CAAmB;QA7DjC,8BAAyB,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACpD,UAAK,GAAG,IAAI,KAAK,EAAQ,CAAC;QAM1B,iBAAY,GAAG,IAAI,eAAe,CAAmB,SAAS,CAAC,CAAC;QAChE,WAAM,GAAG,IAAI,eAAe,CAAmB,SAAS,CAAC,CAAC;QAIjD,gBAAW,GAAG,IAAI,CAAC;QACnB,kBAAa,GAAG,KAAK,CAAC;QACtB,eAAU,GAAG,IAAI,CAAC;QAClB,cAAS,GAAG,IAAI,CAAC;QACjB,sBAAiB,GAAG,KAAK,CAAC;QA6EjC,IAAI,CAAC,gBAAgB,GAAG,sBAAsB,CAAC;QAE/C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,8BAA8B;QAErD,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,uBAAuB;QAClD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC;QACnE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QACzD,IAAI,CAAC,eAAe,GAAG,CAAC,QAAQ,CAAC,CAAC;QAElC,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC;YAClC,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,CAAC,IAAI,CAAC;YACf,gBAAgB,EAAE,CAAC,IAAI,CAAC;SACzB,CAAC,CAAC;QAEH,6BAA6B;QAC7B,IAAI,CAAC,oBAAoB,CACvB,IAAI,CAAC,UAAU,CAAC,YAAY;aACzB,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CACpC;YACD,sBAAsB;aACrB,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,iCAC5B,IAAI,CAAC,MAAM,GACX,IAAI,GAET,EAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAC,CAAC,CAAC,CACzC,CAAC;QAEF,0BAA0B;QAC1B,IAAI,CAAC,oBAAoB,CACvB,KAAK,CACH,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAC3B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB;aACA,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CACvD,CAAC;IACJ,CAAC;IArHD,IAAI,UAAU;QACZ,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACpC,aAAa;QACb,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACnB,QAAQ,UAAU,EAAE;gBAClB,KAAK,cAAc;oBACjB,OAAO,oBAAoB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC/D,KAAK,eAAe;oBAClB,OAAO,oBAAoB,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACrE,KAAK,QAAQ;oBACX,OAAO,MAAM,CAAC;gBAChB;oBACE,OAAO,UAAU,CAAC;aACrB;SACF;QACD,cAAc;aACT;YACH,QAAQ,UAAU,EAAE;gBAClB,KAAK,eAAe;oBAClB,OAAO,QAAQ,CAAC;gBAClB,KAAK,QAAQ;oBACX,OAAO,MAAM,CAAC;gBAChB;oBACE,OAAO,UAAU,CAAC;aACrB;SACF;IACH,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,eAAe,IAAI,IAAI,CAAC,UAAU,KAAK,aAAa,CAAC,CAAC;IAC9G,CAAC;IAyFD,QAAQ;QACN,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEjB,qBAAqB;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,EAAE;YACrB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;SACjF;QACD,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,CAAC,MAAM,MAAK,CAAC,EAAE;YAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;SAChF;QAED,+BAA+B;QAC/B,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,QAAQ,CAAC,KAA6B,EAAE,GAA4B;QAClE,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;QAC1B,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAGD,SAAS,CAAC,KAAK,EAAE,IAA6B;QAC5C,OAAO,IAAI,CAAC,WAAW,YAAY,gBAAgB,CAAC;IACtD,CAAC;IAED,WAAW,CAAC,KAAK,EAAE,IAA6B;QAC9C,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,YAAY,gBAAgB,CAAC,CAAC;IACzD,CAAC;IAED,iBAAiB,CAAC,KAAY,EAAE,WAA4B;QAC1D,IAAI,KAAK;YAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,iCAAiC;QACrE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,aAAa,CAAC,GAAQ;QACpB,OAAO,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IAC9D,CAAC;IAED,6BAA6B;IAEnB,qBAAqB,CAAC,QAAuB;QACrD,OAAO,CAAC,KAAK,CAAC,yFAAyF,CAAC,CAAC;QACzG,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAE9C,IAAI,QAAQ,CAAC,kBAAkB,EAAE;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YAC5C,IAAI,CAAC,cAAc,GAAG,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;SACpH;aACI;YACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;SACnD;QAED,IAAI,CAAC,iBAAiB,GAAG;YACvB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,MAAM,CAAC;YACrD,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,YAAY,CAAC;SAClE,CAAC;QAEF,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEe,eAAe;;YAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,gCAExE,UAAU,EAAE,QAAQ,IACjB,qBAAqB,KACxB,UAAU,EAAE,YAAY,EACxB,QAAQ,EAAE,IAAI,CAAC,OAAO,KAExB;gBACE,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;YAEL,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;YAE7D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;KAAA;IAEe,SAAS;;YACvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAC1E;gBACE,UAAU,EAAE,MAAM;gBAClB,WAAW,EAAE,IAAI,CAAC,OAAO;aAC1B,EACD;gBACE,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;YAEL,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC/B,CAAC;KAAA;IAEe,aAAa,CAAC,IAAiB;;;YAE7C,IAAI,GAAG,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAE7C,gCAAgC;YAChC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAC;gBACrE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACxB;YAED,IAAI,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEtC,4DAA4D;YAC5D,IAAI,IAAI,CAAC,cAAc,EAAC;gBACtB,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;aACzF;YAED,gCAAgC;YAChC,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YACvE,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAClD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAEpD,IAAI,KAAa,CAAC;YAClB,IAAI,eAAe,CAAC,YAAY,CAAC,IAAI,eAAe,CAAC,aAAa,CAAC,EAAE;gBACnE,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBACxB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAC,WAAW,EAAE,aAAa,EAAC,EAAE,EAAC,OAAO,EAAE,KAAK,EAAC,CAAC;oBAC7G,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAC,WAAW,EAAE,YAAY,EAAE,qBAAqB,EAAE,OAAO,EAAC,CAAC;iBAC1H,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,0CAAE,IAAI,CAAA,EAAA,CAAC,CAAC;aAC9D;iBACI,IAAI,eAAe,CAAC,YAAY,CAAC,EAAE;gBACtC,KAAK,GAAG,MAAA,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAC,WAAW,EAAE,YAAY,EAAE,qBAAqB,EAAE,OAAO,EAAC,CAAC,CAAC,0CAAE,IAAI,CAAC;aACjJ;iBACI;gBACH,KAAK,GAAG,MAAA,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAC,WAAW,EAAE,aAAa,EAAC,EAAE,EAAC,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC,0CAAE,IAAI,CAAC;aACrI;YAED,0BAA0B;YAC1B,iDAAiD;YAEjD,sDAAsD;YACtD,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;;gBACpC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBACtD,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;gBACvC,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC;gBACpB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;gBACxB,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;gBAChD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;oBACjB,OAAO,CAAC,IAAI,GAAG,CAAA,MAAA,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,0CAAE,IAAI;2BAC5E,IAAI,CAAC,UAAU,CAAC,EAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAC,CAAC,CAAC;iBAC5C;gBACD,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,kBAAkB,CAAC,CAAC;YAC3D,CAAC,EAAE,EAAE,CAAC,CAAC;YAEP,OAAO,IAAI,CAAC;;KACb;IAES,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;CAEF,CAAA;AA1RC;IAAC,KAAK,EAAE;;kEAAgC;AACxC;IAAC,KAAK,EAAE;;0DAAgB;AACxB;IAAC,KAAK,EAAE;;+DAAoB;AAC5B;IAAC,KAAK,EAAE;;iEAAuB;AAC/B;IAAC,KAAK,EAAE;;8DAAmB;AAC3B;IAAC,KAAK,EAAE;;6DAAkB;AAC1B;IAAC,KAAK,EAAE;;qEAA2B;AACnC;IAAC,KAAK,EAAE;;2DAAmB;AAC3B;IAAC,KAAK,EAAE;8BAAS,SAAS;0DAAC;AApBhB,0BAA0B;IATtC,SAAS,CAAC;QACT,QAAQ,EAAE,oCAAoC;QAC9C,WAAW,EAAE,qCAAqC;QAClD,SAAS,EAAE,CAAC,qCAAqC,CAAC;QAClD,SAAS,EAAE;YACT,EAAC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,yBAAyB,EAAC;SACpE;QACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAwDY,QAAQ;QACL,kBAAkB;QACH,gBAAgB;QACrB,gBAAgB;QACN,qBAAqB;QAC/B,WAAW;QACR,cAAc;QACrB,cAAc;QACnB,iBAAiB;GA/DtB,0BAA0B,CAsStC;SAtSY,0BAA0B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/select-operation.modal.js b/out-tsc/app/app/trip/operation/select-operation.modal.js new file mode 100644 index 000000000..0b25f0a33 --- /dev/null +++ b/out-tsc/app/app/trip/operation/select-operation.modal.js @@ -0,0 +1,105 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, ViewChild } from '@angular/core'; +import { ModalController } from '@ionic/angular'; +import { isNotNil } from '@sumaris-net/ngx-components'; +import { Operation } from '@app/trip/trip/trip.model'; +import { OperationFilter } from '@app/trip/operation/operation.filter'; +import { SelectOperationByTripTable } from '@app/trip/operation/select-operation-by-trip.table'; +let SelectOperationModal = class SelectOperationModal { + constructor(viewCtrl, cd) { + this.viewCtrl = viewCtrl; + this.cd = cd; + this.selectedTabIndex = 0; + } + get loading() { + return this.table && this.table.loading; + } + ngOnInit() { + // Init table + if (!this.table) + throw new Error('Missing table child component'); + if (!this.filter) + throw new Error('Missing argument \'filter\''); + this.filter = OperationFilter.fromObject(this.filter); + this.table.filter = this.filter; + this.loadData(); + } + loadData() { + // Load data + setTimeout(() => { + this.table.onRefresh.next('modal'); + this.markForCheck(); + }, 200); + } + selectRow(row) { + return __awaiter(this, void 0, void 0, function* () { + if (row && this.table) { + // Select the clicked row, then close + this.table.selection.clear(); + this.table.selection.select(row); + yield this.close(); + } + }); + } + close(event) { + return __awaiter(this, void 0, void 0, function* () { + try { + if (this.hasSelection()) { + const items = (this.table.selection.selected || []) + .map(row => row.currentData) + .map(source => Operation.fromObject(source, { withBatchTree: false, withSamples: false })) + .filter(isNotNil); + yield this.viewCtrl.dismiss(items[0] || null); + } + return true; + } + catch (err) { + // nothing to do + return false; + } + }); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.viewCtrl.dismiss(); + }); + } + hasSelection() { + const table = this.table; + return table && table.selection.hasValue() && table.selection.selected.length === 1; + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + ViewChild('table', { static: true }), + __metadata("design:type", SelectOperationByTripTable) +], SelectOperationModal.prototype, "table", void 0); +__decorate([ + Input(), + __metadata("design:type", OperationFilter) +], SelectOperationModal.prototype, "filter", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectOperationModal.prototype, "enableGeolocation", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], SelectOperationModal.prototype, "gearIds", void 0); +__decorate([ + Input(), + __metadata("design:type", Operation) +], SelectOperationModal.prototype, "parent", void 0); +SelectOperationModal = __decorate([ + Component({ + selector: 'app-select-operation-modal', + templateUrl: './select-operation.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [ModalController, + ChangeDetectorRef]) +], SelectOperationModal); +export { SelectOperationModal }; +//# sourceMappingURL=select-operation.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/select-operation.modal.js.map b/out-tsc/app/app/trip/operation/select-operation.modal.js.map new file mode 100644 index 000000000..af728e0c6 --- /dev/null +++ b/out-tsc/app/app/trip/operation/select-operation.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"select-operation.modal.js","sourceRoot":"","sources":["../../../../../src/app/trip/operation/select-operation.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/selectivity/selectivity-operation-routing.module.js b/out-tsc/app/app/trip/operation/selectivity/selectivity-operation-routing.module.js new file mode 100644 index 000000000..54b0a767b --- /dev/null +++ b/out-tsc/app/app/trip/operation/selectivity/selectivity-operation-routing.module.js @@ -0,0 +1,41 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { ComponentDirtyGuard } from '@sumaris-net/ngx-components'; +import { SelectivityOperationPage } from '@app/trip/operation/selectivity/selectivity-operation.page'; +import { AppSelectivityOperationModule } from '@app/trip/operation/selectivity/selectivity-operation.module'; +const routes = [ + { + path: ':selectivityOperationId', + runGuardsAndResolvers: 'pathParamsChange', + data: { + pathIdParam: 'selectivityOperationId' + }, + children: [ + { + path: '', + pathMatch: 'full', + component: SelectivityOperationPage, + canDeactivate: [ComponentDirtyGuard], + data: { + pathIdParam: 'selectivityOperationId' + }, + } + ], + } +]; +let AppSelectivityOperationRoutingModule = class AppSelectivityOperationRoutingModule { +}; +AppSelectivityOperationRoutingModule = __decorate([ + NgModule({ + imports: [ + AppSelectivityOperationModule, + RouterModule.forChild(routes) + ], + exports: [ + RouterModule + ] + }) +], AppSelectivityOperationRoutingModule); +export { AppSelectivityOperationRoutingModule }; +//# sourceMappingURL=selectivity-operation-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/selectivity/selectivity-operation-routing.module.js.map b/out-tsc/app/app/trip/operation/selectivity/selectivity-operation-routing.module.js.map new file mode 100644 index 000000000..3cdb0cb74 --- /dev/null +++ b/out-tsc/app/app/trip/operation/selectivity/selectivity-operation-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"selectivity-operation-routing.module.js","sourceRoot":"","sources":["../../../../../../src/app/trip/operation/selectivity/selectivity-operation-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4DAA4D,CAAC;AACtG,OAAO,EAAE,6BAA6B,EAAE,MAAM,8DAA8D,CAAC;AAE7G,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,yBAAyB;QAC/B,qBAAqB,EAAE,kBAAkB;QACzC,IAAI,EAAE;YACJ,WAAW,EAAE,wBAAwB;SACtC;QACD,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,EAAE;gBACR,SAAS,EAAE,MAAM;gBACjB,SAAS,EAAE,wBAAwB;gBACnC,aAAa,EAAE,CAAC,mBAAmB,CAAC;gBACpC,IAAI,EAAE;oBACJ,WAAW,EAAE,wBAAwB;iBACtC;aACF;SACF;KACF;CACF,CAAC;AAYK,IAAM,oCAAoC,GAA1C,MAAM,oCAAoC;CAAG,CAAA;AAAvC,oCAAoC;IAThD,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,6BAA6B;YAC7B,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC9B;QACD,OAAO,EAAE;YACP,YAAY;SACb;KACF,CAAC;GACW,oCAAoC,CAAG;SAAvC,oCAAoC"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/selectivity/selectivity-operation.module.js b/out-tsc/app/app/trip/operation/selectivity/selectivity-operation.module.js new file mode 100644 index 000000000..f4cc3f6c6 --- /dev/null +++ b/out-tsc/app/app/trip/operation/selectivity/selectivity-operation.module.js @@ -0,0 +1,52 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { LeafletModule } from '@asymmetrik/ngx-leaflet'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { AppDataModule } from '@app/data/data.module'; +import { TranslateModule } from '@ngx-translate/core'; +import { CommonModule } from '@angular/common'; +import { AppCoreModule } from '@app/core/core.module'; +import { VesselModule } from '@app/vessel/vessel.module'; +import { AppBatchModule } from '@app/trip/batch/batch.module'; +import { AppMeasurementModule } from '@app/data/measurement/measurement.module'; +import { AppPhysicalGearModule } from '@app/trip/physicalgear/physical-gear.module'; +import { SelectivityOperationPage } from '@app/trip/operation/selectivity/selectivity-operation.page'; +import { AppSampleModule } from '@app/trip/sample/sample.module'; +import { AppOperationModule } from '@app/trip/operation/operation.module'; +import { AppExtractionButtonModule } from '@app/extraction/button/extraction-button.module'; +let AppSelectivityOperationModule = class AppSelectivityOperationModule { + constructor() { + console.debug('[selectivity-operation] Creating module...'); + } +}; +AppSelectivityOperationModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + LeafletModule, + TranslateModule.forChild(), + // App module + AppCoreModule, + AppReferentialModule, + AppDataModule, + VesselModule, + // Functional modules + AppMeasurementModule, + AppBatchModule, + AppSampleModule, + AppPhysicalGearModule, + AppOperationModule, + AppExtractionButtonModule + ], + declarations: [ + SelectivityOperationPage + ], + exports: [ + // Components + SelectivityOperationPage + ] + }), + __metadata("design:paramtypes", []) +], AppSelectivityOperationModule); +export { AppSelectivityOperationModule }; +//# sourceMappingURL=selectivity-operation.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/selectivity/selectivity-operation.module.js.map b/out-tsc/app/app/trip/operation/selectivity/selectivity-operation.module.js.map new file mode 100644 index 000000000..5e4675822 --- /dev/null +++ b/out-tsc/app/app/trip/operation/selectivity/selectivity-operation.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"selectivity-operation.module.js","sourceRoot":"","sources":["../../../../../../src/app/trip/operation/selectivity/selectivity-operation.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,wBAAwB,EAAE,MAAM,4DAA4D,CAAC;AACtG,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AA8BrF,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;IAExC;QACE,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC9D,CAAC;CACF,CAAA;AALY,6BAA6B;IA5BzC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAE1B,aAAa;YACb,aAAa;YACb,oBAAoB;YACpB,aAAa;YACb,YAAY;YAEZ,qBAAqB;YACrB,oBAAoB;YACpB,cAAc;YACd,eAAe;YACf,qBAAqB;YACrB,kBAAkB;YAClB,yBAAyB;SAC1B;QACD,YAAY,EAAE;YACZ,wBAAwB;SACzB;QACD,OAAO,EAAE;YACP,aAAa;YACb,wBAAwB;SACzB;KACF,CAAC;;GACW,6BAA6B,CAKzC;SALY,6BAA6B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/selectivity/selectivity-operation.page.js b/out-tsc/app/app/trip/operation/selectivity/selectivity-operation.page.js new file mode 100644 index 000000000..81a1abafd --- /dev/null +++ b/out-tsc/app/app/trip/operation/selectivity/selectivity-operation.page.js @@ -0,0 +1,127 @@ +var SelectivityOperationPage_1; +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector } from '@angular/core'; +import { DateUtils, fadeInOutAnimation } from '@sumaris-net/ngx-components'; +import { TripContextService } from '@app/trip/trip-context.service'; +import { OperationPage } from '@app/trip/operation/operation.page'; +import { OperationService } from '@app/trip/operation/operation.service'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import moment from 'moment'; +import { environment } from '@environments/environment'; +import { RxState } from '@rx-angular/state'; +import { ContextService } from '@app/shared/context.service'; +import { APP_DATA_ENTITY_EDITOR } from '@app/data/form/data-editor.utils'; +let SelectivityOperationPage = SelectivityOperationPage_1 = class SelectivityOperationPage extends OperationPage { + get invalid() { + var _a, _b; + // Allow batchTree to be invalid, if on field mode + return ((_a = this.opeForm) === null || _a === void 0 ? void 0 : _a.invalid) || ((_b = this.measurementsForm) === null || _b === void 0 ? void 0 : _b.invalid) || (!this.isOnFieldMode && this.batchTree.invalid) || false; + } + constructor(injector, dataService) { + super(injector, dataService, { + pathIdAttribute: 'selectivityOperationId', + tabCount: 2, + }); + // FOR DEV ONLY ---- + this.debug = !environment.production; + } + registerForms() { + // Register sub forms & table + this.addChildForms([this.opeForm, this.measurementsForm, this.batchTree]); + } + mapPmfms(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!event || !event.detail.success) + return; // Skip (missing callback) + let pmfms = event.detail.pmfms; + // If PMFM date/time, set default date, in on field mode + if (this.isNewData && this.isOnFieldMode && (pmfms === null || pmfms === void 0 ? void 0 : pmfms.some(PmfmUtils.isDate))) { + pmfms = pmfms.map((p) => { + if (PmfmUtils.isDate(p)) { + p = p.clone(); + p.defaultValue = DateUtils.markNoTime(DateUtils.resetTime(moment())); + } + return p; + }); + } + event.detail.success(pmfms); + }); + } + updateFormGroup(event) { + event.detail.success(); + } + onNewFabButtonClick(event) { + const selectedTabIndex = this.selectedTabIndex; + if (selectedTabIndex === OperationPage.TABS.CATCH) { + this.batchTree.addRow(event); + } + else { + super.onNewFabButtonClick(event); + } + } + get showFabButton() { + return false; + } + saveAndControl(event, opts) { + const _super = Object.create(null, { + saveAndControl: { get: () => super.saveAndControl } + }); + return __awaiter(this, void 0, void 0, function* () { + if (this.batchTree.dirty) { + yield this.batchTree.save(); + } + return _super.saveAndControl.call(this, event, opts); + }); + } + updateTablesState() { + this.tabCount = this.showCatchTab ? 2 : 1; + super.updateTablesState(); + } + setProgram(program) { + const _super = Object.create(null, { + setProgram: { get: () => super.setProgram } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.setProgram.call(this, program); + // Force suffix + this.i18nContext.suffix = 'TRAWL_SELECTIVITY.'; + // Force rankOrder to be recompute + // this is required because batch tree container can generate same batch label, for individual sorting batch + this.saveOptions.computeBatchRankOrder = true; + }); + } + computePageUrl(id, tripId) { + const parentUrl = this.getParentPageUrl(); + return parentUrl && `${parentUrl}/operation/selectivity/${id}`; + } + getFirstInvalidTabIndex() { + var _a, _b; + // find invalids tabs (keep order) + const invalidTabs = [this.opeForm.invalid || this.measurementsForm.invalid, (this.showCatchTab && ((_a = this.batchTree) === null || _a === void 0 ? void 0 : _a.invalid)) || false]; + // Open the first invalid tab + const invalidTabIndex = invalidTabs.indexOf(true); + // If catch tab, open the invalid sub tab + if (invalidTabIndex === OperationPage.TABS.CATCH) { + this.selectedSubTabIndex = (_b = this.batchTree) === null || _b === void 0 ? void 0 : _b.getFirstInvalidTabIndex(); + this.updateTablesState(); + } + return invalidTabIndex; + } +}; +SelectivityOperationPage = SelectivityOperationPage_1 = __decorate([ + Component({ + selector: 'app-selectivity-operation-page', + templateUrl: './selectivity-operation.page.html', + styleUrls: ['../operation.page.scss'], + animations: [fadeInOutAnimation], + providers: [ + { provide: APP_DATA_ENTITY_EDITOR, useExisting: SelectivityOperationPage_1 }, + { provide: ContextService, useExisting: TripContextService }, + RxState, + ], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, OperationService]) +], SelectivityOperationPage); +export { SelectivityOperationPage }; +//# sourceMappingURL=selectivity-operation.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operation/selectivity/selectivity-operation.page.js.map b/out-tsc/app/app/trip/operation/selectivity/selectivity-operation.page.js.map new file mode 100644 index 000000000..bddf7c428 --- /dev/null +++ b/out-tsc/app/app/trip/operation/selectivity/selectivity-operation.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"selectivity-operation.page.js","sourceRoot":"","sources":["../../../../../../src/app/trip/operation/selectivity/selectivity-operation.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operationgroup/operation-group.filter.js b/out-tsc/app/app/trip/operationgroup/operation-group.filter.js new file mode 100644 index 000000000..53b97bba4 --- /dev/null +++ b/out-tsc/app/app/trip/operationgroup/operation-group.filter.js @@ -0,0 +1,93 @@ +import { __decorate } from "tslib"; +import { EntityClass, isNil, isNotEmptyArray, isNotNil, isNotNilOrNaN } from '@sumaris-net/ngx-components'; +import { DataEntityFilter } from '@app/data/services/model/data-filter.model'; +import { Geometries } from '@app/shared/geometries.utils'; +import { FishingAreaUtils } from '@app/data/fishing-area/fishing-area.model'; +let OperationGroupFilter = class OperationGroupFilter extends DataEntityFilter { + fromObject(source, opts) { + var _a; + super.fromObject(source, opts); + this.tripId = source.tripId; + this.vesselId = source.vesselId; + this.excludeId = source.excludeId; + this.includedIds = source.includedIds; + this.excludedIds = source.excludedIds; + this.programLabel = source.programLabel || ((_a = source.program) === null || _a === void 0 ? void 0 : _a.label); + this.gearIds = source.gearIds; + this.physicalGearIds = source.physicalGearIds; + this.taxonGroupLabels = source.taxonGroupLabels; + this.dataQualityStatus = source.dataQualityStatus; + this.boundingBox = source.boundingBox; + } + asObject(opts) { + const target = super.asObject(opts); + if (opts && opts.minify) { + delete target.program; + delete target.excludeId; // Not include in Pod + } + return target; + } + buildFilter() { + const filterFns = super.buildFilter(); + // DEBUG + //console.debug('filtering operations...', this); + // Included ids + if (isNotNil(this.includedIds)) { + const includedIds = this.includedIds; + filterFns.push(o => includedIds.includes(o.id)); + } + // Exclude id + if (isNotNil(this.excludeId)) { + const excludeId = this.excludeId; + filterFns.push(o => o.id !== excludeId); + } + // Excluded ids + if (isNotNil(this.excludedIds) && this.excludedIds.length > 0) { + const excludedIds = this.excludedIds; + filterFns.push(o => !excludedIds.includes(o.id)); + } + // GearIds; + if (isNotEmptyArray(this.gearIds) || (!Array.isArray(this.gearIds) && isNotNilOrNaN(this.gearIds))) { + const gearIds = Array.isArray(this.gearIds) ? this.gearIds : [this.gearIds]; + filterFns.push(o => { var _a; return o.metier && isNotNil((_a = o.metier.gear) === null || _a === void 0 ? void 0 : _a.id) && gearIds.indexOf(o.metier.gear.id) !== -1; }); + } + // PhysicalGearIds; + if (isNotEmptyArray(this.physicalGearIds)) { + const physicalGearIds = this.physicalGearIds; + filterFns.push(o => isNotNil(o.physicalGearId) && physicalGearIds.indexOf(o.physicalGearId) !== -1); + } + // taxonGroupIds + if (isNotEmptyArray(this.taxonGroupLabels)) { + const targetSpecieLabels = this.taxonGroupLabels; + filterFns.push(o => { var _a; return isNotNil((_a = o.metier) === null || _a === void 0 ? void 0 : _a.taxonGroup) && targetSpecieLabels.indexOf(o.metier.taxonGroup.label) !== -1; }); + } + // Filter on dataQualityStatus + if (isNotNil(this.dataQualityStatus)) { + if (this.dataQualityStatus === 'MODIFIED') { + filterFns.push(o => isNil(o.controlDate)); + } + if (this.dataQualityStatus === 'CONTROLLED') { + filterFns.push(o => isNotNil(o.controlDate)); + } + } + // Filter on position + if (Geometries.checkBBox(this.boundingBox)) { + const fishingAreaFilter = FishingAreaUtils.createBBoxFilter(this.boundingBox); + filterFns.push(o => (o.fishingAreas || []).some(fishingAreaFilter)); + } + // Filter on parent trip + { + // Trip + if (isNotNil(this.tripId)) { + const tripId = this.tripId; + filterFns.push(o => o.tripId === tripId); + } + } + return filterFns; + } +}; +OperationGroupFilter = __decorate([ + EntityClass({ typename: 'OperationGroupFilterVO' }) +], OperationGroupFilter); +export { OperationGroupFilter }; +//# sourceMappingURL=operation-group.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operationgroup/operation-group.filter.js.map b/out-tsc/app/app/trip/operationgroup/operation-group.filter.js.map new file mode 100644 index 000000000..b22ca4375 --- /dev/null +++ b/out-tsc/app/app/trip/operationgroup/operation-group.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"operation-group.filter.js","sourceRoot":"","sources":["../../../../../src/app/trip/operationgroup/operation-group.filter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operationgroup/operation-group.form.js b/out-tsc/app/app/trip/operationgroup/operation-group.form.js new file mode 100644 index 000000000..9a183f339 --- /dev/null +++ b/out-tsc/app/app/trip/operationgroup/operation-group.form.js @@ -0,0 +1,110 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, Input } from '@angular/core'; +import { AccountService, isNotNil, PlatformService, referentialToString } from '@sumaris-net/ngx-components'; +import { UntypedFormBuilder } from '@angular/forms'; +import { MetierService } from '@app/referential/services/metier.service'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { MeasurementValuesForm } from '@app/data/measurement/measurement-values.form.class'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { OperationGroupValidatorService } from '@app/trip/operationgroup/operation-group.validator'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { environment } from '@environments/environment'; +let OperationGroupForm = class OperationGroupForm extends MeasurementValuesForm { + constructor(injector, measurementsValidatorService, formBuilder, programRefService, platform, validatorService, referentialRefService, metierService, accountService) { + super(injector, measurementsValidatorService, formBuilder, programRefService, validatorService.getFormGroup(null, { + withMeasurements: false + })); + this.measurementsValidatorService = measurementsValidatorService; + this.formBuilder = formBuilder; + this.programRefService = programRefService; + this.platform = platform; + this.validatorService = validatorService; + this.referentialRefService = referentialRefService; + this.metierService = metierService; + this.accountService = accountService; + this.showComment = true; + this.showError = true; + this.referentialToString = referentialToString; + // Set defaults + this.acquisitionLevel = AcquisitionLevelCodes.OPERATION; + this.debug = !environment.production; + } + ; + ngOnInit() { + var _a; + super.ngOnInit(); + // Default values + this.tabindex = isNotNil(this.tabindex) ? this.tabindex : 1; + // From data + this.gear = (_a = this.data.metier) === null || _a === void 0 ? void 0 : _a.gear; + this.metier = this.data.metier; + this.displayAttributes = { + gear: this.settings.getFieldDisplayAttributes('gear'), + taxonGroup: ['taxonGroup.label', 'taxonGroup.name'] + }; + // Metier combo + const metierAttributes = this.settings.getFieldDisplayAttributes('metier'); + this.registerAutocompleteField('metier', { + items: this.metiers, + attributes: metierAttributes, + columnSizes: metierAttributes.map(attr => attr === 'label' ? 3 : undefined), + mobile: this.mobile + }); + this.registerSubscription(this.form.get('metier').valueChanges + .subscribe(metier => this.updateGearAndTargetSpecies(metier))); + } + updateGearAndTargetSpecies(metier) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[operation-group.form] Update Gear and Target Species', metier); + if (metier && metier.id) { + this.data.metier = yield this.metierService.load(metier.id); + this.metier = this.data.metier; + console.debug('[operation-group.form] Taxon group : ', this.metier.taxonGroup); + if (this.data.physicalGearId !== this.data.metier.gear.id) { + this.data.physicalGearId = this.data.physicalGearId || null; + this.gear = this.data.metier.gear; + } + } + }); + } + /* -- protected methods -- */ + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Number) +], OperationGroupForm.prototype, "tabindex", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationGroupForm.prototype, "showComment", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationGroupForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationGroupForm.prototype, "metiers", void 0); +OperationGroupForm = __decorate([ + Component({ + selector: 'app-operation-group-form', + templateUrl: './operation-group.form.html', + styleUrls: ['./operation-group.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + MeasurementsValidatorService, + UntypedFormBuilder, + ProgramRefService, + PlatformService, + OperationGroupValidatorService, + ReferentialRefService, + MetierService, + AccountService]) +], OperationGroupForm); +export { OperationGroupForm }; +//# sourceMappingURL=operation-group.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operationgroup/operation-group.form.js.map b/out-tsc/app/app/trip/operationgroup/operation-group.form.js.map new file mode 100644 index 000000000..e6e157ddd --- /dev/null +++ b/out-tsc/app/app/trip/operationgroup/operation-group.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"operation-group.form.js","sourceRoot":"","sources":["../../../../../src/app/trip/operationgroup/operation-group.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operationgroup/operation-group.modal.js b/out-tsc/app/app/trip/operationgroup/operation-group.modal.js new file mode 100644 index 000000000..85eb0f945 --- /dev/null +++ b/out-tsc/app/app/trip/operationgroup/operation-group.modal.js @@ -0,0 +1,212 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input, ViewChild } from '@angular/core'; +import { Alerts, isNil, LocalSettingsService, toBoolean } from '@sumaris-net/ngx-components'; +import { AlertController, ModalController } from '@ionic/angular'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { TranslateService } from '@ngx-translate/core'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { environment } from '@environments/environment'; +import { OperationGroup } from '@app/trip/trip/trip.model'; +import { OperationGroupForm } from '@app/trip/operationgroup/operation-group.form'; +let OperationGroupModal = class OperationGroupModal { + constructor(injector, alertCtrl, modalCtrl, settings, translate, cd) { + this.injector = injector; + this.alertCtrl = alertCtrl; + this.modalCtrl = modalCtrl; + this.settings = settings; + this.translate = translate; + this.cd = cd; + this._subscription = new Subscription(); + this.debug = !environment.production; + this.loading = false; + this.$title = new BehaviorSubject(undefined); + this.mobile = this.settings.mobile; + // Default value + this.acquisitionLevel = AcquisitionLevelCodes.OPERATION; + } + get dirty() { + return this.form.dirty; + } + get invalid() { + return this.form.invalid; + } + get valid() { + return this.form.valid; + } + get pending() { + return this.form.pending; + } + get enabled() { + return !this.disabled; + } + enable(opts) { + this.form.enable(opts); + } + disable(opts) { + this.form.disable(opts); + } + ngOnInit() { + this.isNew = toBoolean(this.isNew, !this.data); + this.data = this.data || new OperationGroup(); + this.form.setValue(this.data); + this.disabled = toBoolean(this.disabled, false); + if (this.disabled) { + this.disable(); + } + else { + this.enable(); + } + // Compute the title + this.computeTitle(); + this.form.markAsReady(); + if (!this.isNew) { + // Update title each time value changes + this.form.valueChanges.subscribe(operationGroup => this.computeTitle(operationGroup)); + } + } + ngOnDestroy() { + this._subscription.unsubscribe(); + } + cancel(event) { + return __awaiter(this, void 0, void 0, function* () { + yield this.saveIfDirtyAndConfirm(event); + // Continue (if event not cancelled) + if (!event.defaultPrevented) { + yield this.modalCtrl.dismiss(); + } + }); + } + save(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.form.valid || this.loading) + return false; + this.loading = true; + // Nothing to save: just leave + if (!this.isNew && !this.form.dirty) { + yield this.modalCtrl.dismiss(); + return false; + } + try { + this.form.error = null; + const operationGroup = this.form.value; + if (operationGroup.metier && !operationGroup.metier.taxonGroup) { + operationGroup.metier.taxonGroup = this.form.metier.taxonGroup; + } + if (operationGroup.metier && !operationGroup.metier.gear) { + operationGroup.metier.gear = this.form.metier.gear; + } + return yield this.modalCtrl.dismiss(operationGroup); + } + catch (err) { + this.loading = false; + this.form.error = err && err.message || err; + return false; + } + }); + } + delete(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.onDelete) + return; // Skip + const result = yield this.onDelete(event, this.data); + if (isNil(result) || (event && event.defaultPrevented)) + return; // User cancelled + if (result) { + yield this.modalCtrl.dismiss(this.data, 'delete'); + } + }); + } + /* -- protected methods -- */ + saveIfDirtyAndConfirm(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.form.dirty) + return; // skip, if nothing to save + const confirmation = yield Alerts.askSaveBeforeLeave(this.alertCtrl, this.translate, event); + // User cancelled + if (isNil(confirmation) || event && event.defaultPrevented) { + return; + } + if (confirmation === false) { + return; + } + // If user confirm: save + const saved = yield this.save(event); + // Error while saving: avoid to close + if (!saved) + event.preventDefault(); + }); + } + computeTitle(data) { + return __awaiter(this, void 0, void 0, function* () { + data = data || this.data; + if (this.isNew) { + this.$title.next(yield this.translate.get('TRIP.OPERATION_GROUP.NEW.TITLE').toPromise()); + } + else { + this.$title.next(yield this.translate.get('TRIP.OPERATION_GROUP.EDIT.TITLE', this.data).toPromise()); + } + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationGroupModal.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], OperationGroupModal.prototype, "acquisitionLevel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], OperationGroupModal.prototype, "programLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], OperationGroupModal.prototype, "disabled", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], OperationGroupModal.prototype, "isNew", void 0); +__decorate([ + Input(), + __metadata("design:type", OperationGroup) +], OperationGroupModal.prototype, "data", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], OperationGroupModal.prototype, "pmfms", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], OperationGroupModal.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], OperationGroupModal.prototype, "onDelete", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationGroupModal.prototype, "metiers", void 0); +__decorate([ + ViewChild('form', { static: true }), + __metadata("design:type", OperationGroupForm) +], OperationGroupModal.prototype, "form", void 0); +OperationGroupModal = __decorate([ + Component({ + selector: 'app-operation-group-modal', + templateUrl: 'operation-group.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + AlertController, + ModalController, + LocalSettingsService, + TranslateService, + ChangeDetectorRef]) +], OperationGroupModal); +export { OperationGroupModal }; +//# sourceMappingURL=operation-group.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operationgroup/operation-group.modal.js.map b/out-tsc/app/app/trip/operationgroup/operation-group.modal.js.map new file mode 100644 index 000000000..0037c4129 --- /dev/null +++ b/out-tsc/app/app/trip/operationgroup/operation-group.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"operation-group.modal.js","sourceRoot":"","sources":["../../../../../src/app/trip/operationgroup/operation-group.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operationgroup/operation-group.module.js b/out-tsc/app/app/trip/operationgroup/operation-group.module.js new file mode 100644 index 000000000..f29aa1c88 --- /dev/null +++ b/out-tsc/app/app/trip/operationgroup/operation-group.module.js @@ -0,0 +1,37 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { OperationGroupTable } from './operation-groups.table'; +import { TranslateModule } from '@ngx-translate/core'; +import { OperationGroupModal } from './operation-group.modal'; +import { OperationGroupForm } from './operation-group.form'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppMeasurementModule } from '@app/data/measurement/measurement.module'; +import { AppReferentialModule } from '@app/referential/referential.module'; +let AppOperationGroupModule = class AppOperationGroupModule { + constructor() { + console.debug('[operation-group] Creating module...'); + } +}; +AppOperationGroupModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + TranslateModule.forChild(), + // Functional modules + AppReferentialModule, + AppMeasurementModule, + ], + declarations: [ + OperationGroupTable, + OperationGroupModal, + OperationGroupForm + ], + exports: [ + OperationGroupTable, + OperationGroupModal + ] + }), + __metadata("design:paramtypes", []) +], AppOperationGroupModule); +export { AppOperationGroupModule }; +//# sourceMappingURL=operation-group.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operationgroup/operation-group.module.js.map b/out-tsc/app/app/trip/operationgroup/operation-group.module.js.map new file mode 100644 index 000000000..fa8aa9700 --- /dev/null +++ b/out-tsc/app/app/trip/operationgroup/operation-group.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"operation-group.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/operationgroup/operation-group.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAsBpE,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAElC;QACE,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACxD,CAAC;CACF,CAAA;AALY,uBAAuB;IAnBnC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAE1B,qBAAqB;YACrB,oBAAoB;YACpB,oBAAoB;SACrB;QACD,YAAY,EAAE;YACZ,mBAAmB;YACnB,mBAAmB;YACnB,kBAAkB;SACnB;QACD,OAAO,EAAE;YACP,mBAAmB;YACnB,mBAAmB;SACpB;KACF,CAAC;;GACW,uBAAuB,CAKnC;SALY,uBAAuB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operationgroup/operation-group.validator.js b/out-tsc/app/app/trip/operationgroup/operation-group.validator.js new file mode 100644 index 000000000..3cae7077b --- /dev/null +++ b/out-tsc/app/app/trip/operationgroup/operation-group.validator.js @@ -0,0 +1,57 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { LocalSettingsService, SharedValidators, toBoolean } from '@sumaris-net/ngx-components'; +import { DataEntityValidatorService } from '@app/data/services/validator/data-entity.validator'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { OperationGroup } from '../trip/trip.model'; +import { TranslateService } from '@ngx-translate/core'; +let OperationGroupValidatorService = class OperationGroupValidatorService extends DataEntityValidatorService { + constructor(formBuilder, translate, settings, measurementsValidatorService) { + super(formBuilder, translate, settings); + this.formBuilder = formBuilder; + this.translate = translate; + this.settings = settings; + this.measurementsValidatorService = measurementsValidatorService; + } + getFormGroup(data, opts) { + opts = this.fillDefaultOptions(opts); + const form = super.getFormGroup(data, opts); + // Add measurement form + // if (opts.withMeasurements) { + // const pmfms = (opts.program?.strategies?.[0]?.denormalizedPmfms || []) + // .filter(p => p.acquisitionLevel === AcquisitionLevelCodes.OPERATION); + // form.addControl('measurements', this.measurementsValidatorService.getFormGroup(data && data.measurements, { + // isOnFieldMode: opts.isOnFieldMode, + // pmfms + // })); + // } + return form; + } + getFormGroupConfig(data, opts) { + return Object.assign(super.getFormGroupConfig(data, opts), { + __typename: [OperationGroup.TYPENAME], + rankOrderOnPeriod: [(data === null || data === void 0 ? void 0 : data.rankOrderOnPeriod) || null], + metier: [(data === null || data === void 0 ? void 0 : data.metier) || null, Validators.compose([Validators.required, SharedValidators.entity])], + physicalGearId: [(data === null || data === void 0 ? void 0 : data.physicalGearId) || null], + measurementValues: this.formBuilder.group({}), + comments: [(data === null || data === void 0 ? void 0 : data.comments) || null, Validators.maxLength(2000)] + }); + } + /* -- protected methods -- */ + fillDefaultOptions(opts) { + opts = super.fillDefaultOptions(opts); + opts.withMeasurements = toBoolean(opts.withMeasurements, toBoolean(!!opts.program, false)); + //console.debug("[operation-validator] Ope Validator will use options:", opts); + return opts; + } +}; +OperationGroupValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + LocalSettingsService, + MeasurementsValidatorService]) +], OperationGroupValidatorService); +export { OperationGroupValidatorService }; +//# sourceMappingURL=operation-group.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operationgroup/operation-group.validator.js.map b/out-tsc/app/app/trip/operationgroup/operation-group.validator.js.map new file mode 100644 index 000000000..513862480 --- /dev/null +++ b/out-tsc/app/app/trip/operationgroup/operation-group.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"operation-group.validator.js","sourceRoot":"","sources":["../../../../../src/app/trip/operationgroup/operation-group.validator.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAoB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAChG,OAAO,EAA8B,0BAA0B,EAAE,MAAM,oDAAoD,CAAC;AAC5H,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAE3F,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAQhD,IAAM,8BAA8B,GAApC,MAAM,8BACX,SAAQ,0BAA6C;IAErD,YACY,WAA+B,EAC/B,SAA2B,EAC3B,QAA8B,EAC9B,4BAA0D;QAEpE,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAL9B,gBAAW,GAAX,WAAW,CAAoB;QAC/B,cAAS,GAAT,SAAS,CAAkB;QAC3B,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,iCAA4B,GAA5B,4BAA4B,CAA8B;IAGtE,CAAC;IAED,YAAY,CAAC,IAAqB,EAAE,IAAQ;QAC1C,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAErC,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE5C,uBAAuB;QACvB,+BAA+B;QAC/B,2EAA2E;QAC3E,4EAA4E;QAC5E,gHAAgH;QAChH,yCAAyC;QACzC,YAAY;QACZ,SAAS;QACT,IAAI;QAEJ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB,CAAC,IAAqB,EAAE,IAAQ;QAEhD,OAAO,MAAM,CAAC,MAAM,CAClB,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,EACpC;YACE,UAAU,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;YACrC,iBAAiB,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,iBAAiB,KAAI,IAAI,CAAC;YACpD,MAAM,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,KAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YAClG,cAAc,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,KAAI,IAAI,CAAC;YAC9C,iBAAiB,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7C,QAAQ,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SAC/D,CAAC,CAAC;IACP,CAAC;IAED,6BAA6B;IAEnB,kBAAkB,CAAC,IAAQ;QACnC,IAAI,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAEtC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC3F,+EAA+E;QAE/E,OAAO,IAAI,CAAC;IACd,CAAC;CAEF,CAAA;AAvDY,8BAA8B;IAD1C,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAKN,kBAAkB;QACpB,gBAAgB;QACjB,oBAAoB;QACA,4BAA4B;GAP3D,8BAA8B,CAuD1C;SAvDY,8BAA8B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/operationgroup/operation-groups.table.js b/out-tsc/app/app/trip/operationgroup/operation-groups.table.js new file mode 100644 index 000000000..b36c8112c --- /dev/null +++ b/out-tsc/app/app/trip/operationgroup/operation-groups.table.js @@ -0,0 +1,210 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { BaseMeasurementsTable } from '@app/data/measurement/measurements-table.class'; +import { OperationGroupValidatorService } from './operation-group.validator'; +import { InMemoryEntitiesService, isNil, LocalSettingsService, referentialToString } from '@sumaris-net/ngx-components'; +import { MetierService } from '@app/referential/services/metier.service'; +import { OperationGroup } from '../trip/trip.model'; +import { environment } from '@environments/environment'; +import { OperationGroupModal } from '@app/trip/operationgroup/operation-group.modal'; +import { OperationGroupFilter } from '@app/trip/operationgroup/operation-group.filter'; +export const OPERATION_GROUP_RESERVED_START_COLUMNS = ['metier']; +export const OPERATION_GROUP_RESERVED_START_COLUMNS_NOT_MOBILE = ['gear', 'targetSpecies']; +export const OPERATION_GROUP_RESERVED_END_COLUMNS = ['comments']; +let OperationGroupTable = class OperationGroupTable extends BaseMeasurementsTable { + constructor(injector, settings, dataService, validatorService, metierService, cd) { + super(injector, OperationGroup, OperationGroupFilter, dataService, validatorService, { + reservedStartColumns: settings.mobile ? OPERATION_GROUP_RESERVED_START_COLUMNS : OPERATION_GROUP_RESERVED_START_COLUMNS.concat(OPERATION_GROUP_RESERVED_START_COLUMNS_NOT_MOBILE), + reservedEndColumns: settings.mobile ? [] : OPERATION_GROUP_RESERVED_END_COLUMNS, + mapPmfms: (pmfms) => this.mapPmfms(pmfms), + i18nColumnPrefix: 'TRIP.OPERATION.LIST.' + }); + this.metierService = metierService; + this.cd = cd; + this.referentialToString = referentialToString; + this.useSticky = false; + this.autoLoad = false; // waiting parent to be loaded + this.inlineEdition = this.validatorService && !this.mobile; + this.confirmBeforeDelete = true; + this.defaultPageSize = -1; // Do not use paginator + // Set default acquisition level + this.acquisitionLevel = AcquisitionLevelCodes.OPERATION; + // FOR DEV ONLY ---- + this.debug = !environment.production; + } + set value(data) { + this.memoryDataService.value = data; + } + get value() { + return this.memoryDataService.value; + } + ngOnInit() { + super.ngOnInit(); + this.displayAttributes = { + gear: this.settings.getFieldDisplayAttributes('gear'), + taxonGroup: ['taxonGroup.label', 'taxonGroup.name'], + metier: this.settings.getFieldDisplayAttributes('metier') + }; + // Metier combo + this.registerAutocompleteField('metier', { + showAllOnFocus: true, + items: this.metiers, + attributes: this.displayAttributes.metier, + columnSizes: this.displayAttributes.metier.map(attr => attr === 'label' ? 3 : undefined), + mobile: this.mobile + }); + // Add sort replacement + this.memoryDataService.addSortByReplacement('gear', this.displayAttributes.gear[0]); + this.memoryDataService.addSortByReplacement('taxonGroup', this.displayAttributes.taxonGroup[0]); + this.memoryDataService.addSortByReplacement('targetSpecies', this.displayAttributes.metier[0]); + } + ngOnDestroy() { + super.ngOnDestroy(); + this.memoryDataService.stop(); + } + openDetailModal(dataToOpen) { + return __awaiter(this, void 0, void 0, function* () { + const isNew = !dataToOpen && true; + if (isNew) { + dataToOpen = new this.dataType(); + yield this.onNewEntity(dataToOpen); + } + this.markAsLoading(); + const modal = yield this.modalCtrl.create({ + component: OperationGroupModal, + componentProps: { + programLabel: this.programLabel, + acquisitionLevel: this.acquisitionLevel, + metiers: this.metiers, + disabled: this.disabled, + mobile: this.mobile, + data: dataToOpen, + isNew, + onDelete: (event, item) => this.deleteEntity(event, item) + }, + keyboardClose: true + }); + // Open the modal + yield modal.present(); + // Wait until closed + const { data } = yield modal.onDidDismiss(); + if (data && this.debug) + console.debug('[operation-groups-table] operation-groups modal result: ', data); + this.markAsLoaded(); + if (data instanceof OperationGroup) { + return data; + } + // Exit if empty + return undefined; + }); + } + getMaxRankOrderOnPeriod() { + return __awaiter(this, void 0, void 0, function* () { + const rows = this.dataSource.getRows(); + return rows.reduce((res, row) => Math.max(res, row.currentData.rankOrderOnPeriod || 0), 0); + }); + } + onMetierChange($event, row) { + var _a, _b, _c; + return __awaiter(this, void 0, void 0, function* () { + if (row && row.currentData && row.currentData.metier) { + console.debug('[operation-group.table] onMetierChange', $event, row.currentData.metier); + const operationGroup = row.currentData; + if (((_a = operationGroup.metier) === null || _a === void 0 ? void 0 : _a.id) && (!((_b = operationGroup.metier) === null || _b === void 0 ? void 0 : _b.gear) || !((_c = operationGroup.metier) === null || _c === void 0 ? void 0 : _c.taxonGroup))) { + // First, load the Metier (with children) + const metier = yield this.metierService.load(operationGroup.metier.id); + // affect to current row + row.validator.controls['metier'].setValue(metier); + } + } + }); + } + /* -- protected methods -- */ + mapPmfms(pmfms) { + // if (this.mobile) { + // pmfms.forEach(pmfm => pmfm.hidden = true); + // // return []; + // } + return pmfms; + } + markForCheck() { + this.cd.markForCheck(); + } + openNewRowDetail() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail) + return false; + const data = yield this.openDetailModal(); + if (data) { + yield this.addEntityToTable(data); + } + return true; + }); + } + openRow(id, row) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail) + return false; + const data = this.toEntity(row, true); + const updatedData = yield this.openDetailModal(data); + if (updatedData) { + yield this.updateEntityToTable(updatedData, row, { confirmEdit: false }); + } + else { + this.editedRow = null; + } + return true; + }); + } + onNewEntity(data) { + return __awaiter(this, void 0, void 0, function* () { + if (isNil(data.rankOrderOnPeriod)) { + data.rankOrderOnPeriod = (yield this.getMaxRankOrderOnPeriod()) + 1; + } + }); + } + findRowByOperationGroup(operationGroup) { + return __awaiter(this, void 0, void 0, function* () { + return OperationGroup && this.dataSource.getRows().find(r => operationGroup.equals(r.currentData)); + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationGroupTable.prototype, "metiers", void 0); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], OperationGroupTable.prototype, "value", null); +__decorate([ + Input(), + __metadata("design:type", Object) +], OperationGroupTable.prototype, "useSticky", void 0); +OperationGroupTable = __decorate([ + Component({ + selector: 'app-operation-group-table', + templateUrl: 'operation-groups.table.html', + styleUrls: ['operation-groups.table.scss'], + providers: [ + { + provide: InMemoryEntitiesService, + useFactory: () => new InMemoryEntitiesService(OperationGroup, OperationGroupFilter, { + equals: OperationGroup.equals, + sortByReplacement: { id: 'rankOrder' } + }) + } + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + LocalSettingsService, + InMemoryEntitiesService, + OperationGroupValidatorService, + MetierService, + ChangeDetectorRef]) +], OperationGroupTable); +export { OperationGroupTable }; +//# sourceMappingURL=operation-groups.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/operationgroup/operation-groups.table.js.map b/out-tsc/app/app/trip/operationgroup/operation-groups.table.js.map new file mode 100644 index 000000000..347a02611 --- /dev/null +++ b/out-tsc/app/app/trip/operationgroup/operation-groups.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"operation-groups.table.js","sourceRoot":"","sources":["../../../../../src/app/trip/operationgroup/operation-groups.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/packet/packet-composition.validator.js b/out-tsc/app/app/trip/packet/packet-composition.validator.js new file mode 100644 index 000000000..a5c615038 --- /dev/null +++ b/out-tsc/app/app/trip/packet/packet-composition.validator.js @@ -0,0 +1,33 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { DataEntityValidatorService } from '@app/data/services/validator/data-entity.validator'; +import { PacketComposition, PacketIndexes } from './packet.model'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { LocalSettingsService, SharedValidators } from '@sumaris-net/ngx-components'; +import { TranslateService } from '@ngx-translate/core'; +let PacketCompositionValidatorService = class PacketCompositionValidatorService extends DataEntityValidatorService { + constructor(formBuilder, translate, settings) { + super(formBuilder, translate, settings); + } + getFormGroupConfig(data, opts) { + const formConfig = Object.assign(super.getFormGroupConfig(data, opts), { + __typename: [PacketComposition.TYPENAME], + rankOrder: [(data === null || data === void 0 ? void 0 : data.rankOrder) || null], + taxonGroup: [(data === null || data === void 0 ? void 0 : data.taxonGroup) || null, Validators.compose([Validators.required, SharedValidators.entity])], + weight: [(data === null || data === void 0 ? void 0 : data.weight) || null, null], + }); + // add ratios + PacketIndexes.forEach(index => { + formConfig['ratio' + index] = [(data === null || data === void 0 ? void 0 : data['ratio' + index]) || null, Validators.compose([SharedValidators.integer, Validators.min(0), Validators.max(100)])]; + }); + return formConfig; + } +}; +PacketCompositionValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + LocalSettingsService]) +], PacketCompositionValidatorService); +export { PacketCompositionValidatorService }; +//# sourceMappingURL=packet-composition.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/packet/packet-composition.validator.js.map b/out-tsc/app/app/trip/packet/packet-composition.validator.js.map new file mode 100644 index 000000000..c92eebdc2 --- /dev/null +++ b/out-tsc/app/app/trip/packet/packet-composition.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"packet-composition.validator.js","sourceRoot":"","sources":["../../../../../src/app/trip/packet/packet-composition.validator.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAA6B,0BAA0B,EAAC,MAAM,oDAAoD,CAAC;AAC1H,OAAO,EAAC,iBAAiB,EAAE,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAC,kBAAkB,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAC,oBAAoB,EAAE,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGhD,IAAM,iCAAiC,GAAvC,MAAM,iCACX,SAAQ,0BAA6C;IAErD,YACE,WAA+B,EAC/B,SAA2B,EAC3B,QAA8B;QAE9B,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,kBAAkB,CAAC,IAAwB,EAAE,IAAiC;QAE5E,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAC5B,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,EACpC;YACE,UAAU,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YACxC,SAAS,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,KAAI,IAAI,CAAC;YACpC,UAAU,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,KAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1G,MAAM,EAAE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,KAAI,IAAI,EAAE,IAAI,CAAC;SACrC,CAAC,CAAC;QAEP,aAAa;QACb,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC5B,UAAU,CAAC,OAAO,GAAC,KAAK,CAAC,GAAG,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAG,OAAO,GAAC,KAAK,CAAC,KAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtJ,CAAC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAA;AA7BY,iCAAiC;IAD7C,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAKhB,kBAAkB;QACpB,gBAAgB;QACjB,oBAAoB;GANrB,iCAAiC,CA6B7C;SA7BY,iCAAiC"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/packet/packet.form.js b/out-tsc/app/app/trip/packet/packet.form.js new file mode 100644 index 000000000..543a0748b --- /dev/null +++ b/out-tsc/app/app/trip/packet/packet.form.js @@ -0,0 +1,263 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { AppForm, AppFormUtils, FormArrayHelper, ReferentialUtils, isNotEmptyArray, isNotNilOrNaN, round, toNumber } from '@sumaris-net/ngx-components'; +import { PacketIndexes, PacketUtils } from './packet.model'; +import { PacketValidatorService } from './packet.validator'; +import { UntypedFormBuilder } from '@angular/forms'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { BehaviorSubject } from 'rxjs'; +import { startWith } from 'rxjs/operators'; +let PacketForm = class PacketForm extends AppForm { + constructor(injector, validatorService, formBuilder, programRefService, cd) { + super(injector, validatorService.getFormGroup(undefined, { withComposition: true })); + this.validatorService = validatorService; + this.formBuilder = formBuilder; + this.programRefService = programRefService; + this.cd = cd; + this.computing = false; + this.compositionFocusIndex = -1; + this.$packetCount = new BehaviorSubject(undefined); + this.$packetIndexes = new BehaviorSubject(undefined); + this.showError = true; + this.selectInputContent = AppFormUtils.selectInputContent; + } + set program(value) { + this._program = value; + } + get program() { + return this._program; + } + get compositionsFormArray() { + return this.form.controls.composition; + } + get packetCount() { + return this.$packetCount.value; + } + get value() { + const json = this.form.value; + // Update rankOrder on composition + if (json.composition && isNotEmptyArray(json.composition)) { + for (let i = 0; i < json.composition.length; i++) { + // Set rankOrder + json.composition[i].rankOrder = i + 1; + // Fix ratio if empty + // for (const index of PacketComposition.indexes) { + // if (isNotNilOrNaN(json['sampledWeight' + index]) && isNil(json.composition[i]['ratio' + index])) { + // json.composition[i]['ratio' + index] = 0; + // } + // } + } + } + return json; + } + ngOnInit() { + super.ngOnInit(); + this.initCompositionHelper(); + this.tabindex = toNumber(this.tabindex, 1); + this.usageMode = this.usageMode || this.settings.usageMode; + if (this.showParent) { + this.registerAutocompleteField('parent', { + items: this.parents, + attributes: this.parentAttributes, + columnNames: ['RANK_ORDER', 'REFERENTIAL.LABEL', 'REFERENTIAL.NAME'], + columnSizes: this.parentAttributes.map(attr => attr === 'metier.label' ? 3 : (attr === 'rankOrderOnPeriod' ? 1 : undefined)), + mobile: this.mobile + }); + } + this.registerAutocompleteField('taxonGroup', { + suggestFn: (value, options) => this.suggestTaxonGroups(value, options), + mobile: this.mobile + }); + } + suggestTaxonGroups(value, options) { + return __awaiter(this, void 0, void 0, function* () { + const currentControlValue = ReferentialUtils.isNotEmpty(value) ? value : null; + const newValue = currentControlValue ? '*' : value; + // Excluded existing locations, BUT keep the current control value + const excludedIds = (this.compositionsFormArray.value || []) + .map(composition => composition === null || composition === void 0 ? void 0 : composition.taxonGroup) + .filter(ReferentialUtils.isNotEmpty) + .filter(item => !currentControlValue || currentControlValue !== item) + .map(item => parseInt(item.id)); + return this.programRefService.suggestTaxonGroups(value, { + program: this.program, + excludedIds, + searchAttribute: options && options.searchAttribute + }); + }); + } + setValue(data, opts) { + if (!data) + return; + data.composition = data.composition && data.composition.length ? data.composition : [null]; + this.compositionHelper.resize(Math.max(1, data.composition.length)); + super.setValue(data, opts); + this.computeSampledRatios(); + this.computeTaxonGroupWeight(); + const numberControl = this.form.get('number'); + this.registerSubscription(numberControl.valueChanges + .pipe(startWith(numberControl.value)) + .subscribe((packetCount) => { + this.$packetCount.next(Math.max(1, Math.min(6, packetCount || 0))); + this.$packetIndexes.next([...Array(this.$packetCount.value).keys()]); + this.computeTotalWeight(); + this.computeTaxonGroupWeight(); + })); + PacketIndexes.forEach(index => { + this.registerSubscription(this.form.get('sampledWeight' + index).valueChanges.subscribe(() => { + this.computeTotalWeight(); + this.computeTaxonGroupWeight(); + })); + }); + this.registerSubscription(this.form.get('composition').valueChanges.subscribe(() => { + this.computeSampledRatios(); + this.computeTaxonGroupWeight(); + })); + } + computeSampledRatios() { + if (this.computing) + return; + try { + this.computing = true; + const compositions = this.form.controls.composition.value || []; + PacketIndexes.forEach(index => { + const ratio = compositions.reduce((sum, current) => sum + current['ratio' + index], 0); + this.form.controls['sampledRatio' + index].setValue(ratio > 0 ? ratio : null); + }); + } + finally { + this.computing = false; + } + } + computeTaxonGroupWeight() { + if (this.computing) + return; + try { + this.computing = true; + const totalWeight = this.form.controls.weight.value || 0; + const compositions = this.compositionsFormArray.controls || []; + for (const composition of compositions) { + const ratios = []; + PacketIndexes.forEach(index => { + const ratio = composition.controls['ratio' + index].value; + if (isNotNilOrNaN(ratio)) + ratios.push(ratio); + }); + const sum = ratios.reduce((a, b) => a + b, 0); + const avg = (sum / ratios.length) || 0; + composition.controls.weight.setValue(round(avg / 100 * totalWeight)); + } + } + finally { + this.computing = false; + } + } + computeTotalWeight() { + if (this.computing) + return; + try { + this.computing = true; + const sampledWeights = []; + PacketIndexes.forEach(index => { + const weight = this.form.controls['sampledWeight' + index].value; + if (isNotNilOrNaN(weight)) + sampledWeights.push(weight); + }); + const sum = sampledWeights.reduce((a, b) => a + b, 0); + const avg = round((sum / sampledWeights.length) || 0); + const number = this.form.controls.number.value || 0; + this.form.controls.weight.setValue(round(avg * number)); + } + finally { + this.computing = false; + } + } + initCompositionHelper() { + this.compositionHelper = new FormArrayHelper(FormArrayHelper.getOrCreateArray(this.formBuilder, this.form, 'composition'), (composition) => this.validatorService.getCompositionControl(composition), PacketUtils.isPacketCompositionEquals, PacketUtils.isPacketCompositionEmpty, { + allowEmptyArray: false, + validators: this.validatorService.getDefaultCompositionValidators() + }); + if (this.compositionHelper.size() === 0) { + // add at least one composition + this.compositionHelper.resize(1); + } + this.markForCheck(); + } + addComposition(event) { + event === null || event === void 0 ? void 0 : event.stopPropagation(); + this.compositionHelper.add(); + this.editComposition(this.compositionHelper.size() - 1); + } + removeCompositionAt(index) { + this.compositionHelper.removeAt(index); + this.editComposition(index - 1, { focus: false }); + } + editComposition(index, opts = { focus: true }) { + const maxIndex = this.compositionHelper.size() - 1; + if (index < 0) { + index = 0; + } + else if (index > maxIndex) { + index = maxIndex; + } + if (this.compositionEditedIndex === index) + return; // Skip if same + this.compositionEditedIndex = index; + this.markForCheck(); + // Focus + if (!this.mobile && (!opts || opts.focus !== false)) { + this.compositionFocusIndex = index; + setTimeout(() => { + this.compositionFocusIndex = undefined; + this.markForCheck(); + }, 500); + } + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PacketForm.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PacketForm.prototype, "showParent", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PacketForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PacketForm.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], PacketForm.prototype, "parents", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], PacketForm.prototype, "parentAttributes", void 0); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], PacketForm.prototype, "program", null); +PacketForm = __decorate([ + Component({ + selector: 'app-packet-form', + templateUrl: './packet.form.html', + styleUrls: ['./packet.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + PacketValidatorService, + UntypedFormBuilder, + ProgramRefService, + ChangeDetectorRef]) +], PacketForm); +export { PacketForm }; +//# sourceMappingURL=packet.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/packet/packet.form.js.map b/out-tsc/app/app/trip/packet/packet.form.js.map new file mode 100644 index 000000000..6b83e1c04 --- /dev/null +++ b/out-tsc/app/app/trip/packet/packet.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"packet.form.js","sourceRoot":"","sources":["../../../../../src/app/trip/packet/packet.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/packet/packet.modal.js b/out-tsc/app/app/trip/packet/packet.modal.js new file mode 100644 index 000000000..f5163bae4 --- /dev/null +++ b/out-tsc/app/app/trip/packet/packet.modal.js @@ -0,0 +1,151 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Component, Input, ViewChild } from '@angular/core'; +import { Packet } from './packet.model'; +import { ModalController } from '@ionic/angular'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { PacketForm } from './packet.form'; +import { AppFormUtils, isNil, LocalSettingsService, toBoolean } from '@sumaris-net/ngx-components'; +import { TranslateService } from '@ngx-translate/core'; +import { environment } from '@environments/environment'; +let PacketModal = class PacketModal { + constructor(viewCtrl, translate, settings) { + this.viewCtrl = viewCtrl; + this.translate = translate; + this.settings = settings; + this.loading = false; + this.subscription = new Subscription(); + this.$title = new BehaviorSubject(null); + this.mobile = settings.mobile; + this.debug = !environment.production; + } + get enabled() { + return this.packetForm.enabled; + } + get valid() { + var _a; + return ((_a = this.packetForm) === null || _a === void 0 ? void 0 : _a.valid) || false; + } + get invalid() { + var _a; + return ((_a = this.packetForm) === null || _a === void 0 ? void 0 : _a.invalid) || false; + } + ngOnInit() { + this.showParent = toBoolean(this.showParent, this.mobile); + this.updateTitle(); + this.packetForm.markAsReady(); + setTimeout(() => { + this.packetForm.setValue(this.data); + if (!this.disabled) + this.enable(); + }); + } + updateTitle(data) { + data = data || this.data; + let title; + if (this.isNew) { + title = this.translate.instant('PACKET.COMPOSITION.NEW.TITLE'); + } + else { + title = this.translate.instant('PACKET.COMPOSITION.TITLE', { rankOrder: data.rankOrder }); + } + this.$title.next(title); + } + onSave(event, role) { + return __awaiter(this, void 0, void 0, function* () { + // Avoid multiple call + if (this.disabled || this.loading) + return; + yield AppFormUtils.waitWhilePending(this.packetForm); + if (this.packetForm.invalid) { + if (this.debug) + AppFormUtils.logFormErrors(this.packetForm.form); + this.packetForm.markAllAsTouched(); + return; + } + this.loading = true; + try { + const value = this.packetForm.value; + this.disable(); + const data = Packet.fromObject(value); + this.packetForm.error = null; + yield this.viewCtrl.dismiss(data, role); + } + catch (err) { + this.packetForm.error = err && err.message || err; + this.enable(); + this.loading = false; + } + }); + } + delete(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.onDelete) + return; // Skip + const result = yield this.onDelete(event, this.data); + if (isNil(result) || (event && event.defaultPrevented)) + return; // User cancelled + if (result) { + yield this.viewCtrl.dismiss(this.data, 'delete'); + } + }); + } + disable() { + this.packetForm.disable(); + } + enable() { + this.packetForm.enable(); + } + cancel() { + this.viewCtrl.dismiss(); + } + ngOnDestroy() { + this.subscription.unsubscribe(); + } +}; +__decorate([ + ViewChild('form', { static: true }), + __metadata("design:type", PacketForm) +], PacketModal.prototype, "packetForm", void 0); +__decorate([ + Input(), + __metadata("design:type", Packet) +], PacketModal.prototype, "data", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PacketModal.prototype, "disabled", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PacketModal.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PacketModal.prototype, "showParent", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PacketModal.prototype, "isNew", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], PacketModal.prototype, "parents", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], PacketModal.prototype, "parentAttributes", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], PacketModal.prototype, "onDelete", void 0); +PacketModal = __decorate([ + Component({ + selector: 'app-packet-modal', + templateUrl: './packet.modal.html' + }), + __metadata("design:paramtypes", [ModalController, + TranslateService, + LocalSettingsService]) +], PacketModal); +export { PacketModal }; +//# sourceMappingURL=packet.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/packet/packet.modal.js.map b/out-tsc/app/app/trip/packet/packet.modal.js.map new file mode 100644 index 000000000..06fb16748 --- /dev/null +++ b/out-tsc/app/app/trip/packet/packet.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"packet.modal.js","sourceRoot":"","sources":["../../../../../src/app/trip/packet/packet.modal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAqB,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAsB,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAiBjD,IAAM,WAAW,GAAjB,MAAM,WAAW;IA8BtB,YACY,QAAyB,EACzB,SAA2B,EAC3B,QAA8B;QAF9B,aAAQ,GAAR,QAAQ,CAAiB;QACzB,cAAS,GAAT,SAAS,CAAkB;QAC3B,aAAQ,GAAR,QAAQ,CAAsB;QA9B1C,YAAO,GAAG,KAAK,CAAC;QAChB,iBAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,WAAM,GAAG,IAAI,eAAe,CAAS,IAAI,CAAC,CAAC;QA+BzC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;IACvC,CAAC;IApBD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;IACjC,CAAC;IAED,IAAI,KAAK;;QACP,OAAO,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,KAAK,KAAI,KAAK,CAAC;IACzC,CAAC;IAED,IAAI,OAAO;;QACT,OAAO,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,OAAO,KAAI,KAAK,CAAC;IAC3C,CAAC;IAYD,QAAQ;QACN,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC9B,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAES,WAAW,CAAC,IAAa;QACjC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QACzB,IAAI,KAAK,CAAC;QACV,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;SAChE;aAAM;YACL,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAC,CAAC,CAAC;SACzF;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAEK,MAAM,CAAC,KAAU,EAAE,IAAa;;YAEpC,sBAAsB;YACtB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO;YAE1C,MAAM,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAErD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;gBAC3B,IAAI,IAAI,CAAC,KAAK;oBAAE,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACjE,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;gBACnC,OAAO;aACR;YAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YAEpB,IAAI;gBACF,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gBACpC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAEf,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBACtC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;gBAC7B,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aACzC;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;gBAClD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;aACtB;QACH,CAAC;KAAA;IAEK,MAAM,CAAC,KAAa;;YACxB,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO,CAAC,OAAO;YACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,IAAc,CAAC,CAAC;YAC/D,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,gBAAgB,CAAC;gBAAE,OAAO,CAAC,iBAAiB;YAEjF,IAAI,MAAM,EAAE;gBACV,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;aAClD;QACH,CAAC;KAAA;IAED,OAAO;QACL,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IAED,WAAW;QACT,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC;CAEF,CAAA;AA7GC;IAAC,SAAS,CAAC,MAAM,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC;8BAAa,UAAU;+CAAC;AAE1D;IAAC,KAAK,EAAE;8BAAO,MAAM;yCAAC;AACtB;IAAC,KAAK,EAAE;;6CAAmB;AAC3B;IAAC,KAAK,EAAE;;2CAAiB;AACzB;IAAC,KAAK,EAAE;;+CAAqB;AAC7B;IAAC,KAAK,EAAE;;0CAAgB;AACxB;IAAC,KAAK,EAAE;;4CAAyC;AACjD;IAAC,KAAK,EAAE;;qDAA4B;AACpC;IAAC,KAAK,EAAE;;6CAA4D;AAhBzD,WAAW;IAJvB,SAAS,CAAC;QACT,QAAQ,EAAE,kBAAkB;QAC5B,WAAW,EAAE,qBAAqB;KACnC,CAAC;qCAgCsB,eAAe;QACd,gBAAgB;QACjB,oBAAoB;GAjC/B,WAAW,CAoHvB;SApHY,WAAW"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/packet/packet.model.js b/out-tsc/app/app/trip/packet/packet.model.js new file mode 100644 index 000000000..e9caedcb1 --- /dev/null +++ b/out-tsc/app/app/trip/packet/packet.model.js @@ -0,0 +1,168 @@ +var Packet_1, PacketComposition_1; +import { __decorate, __metadata } from "tslib"; +import { DataEntity } from '@app/data/services/model/data-entity.model'; +import { EntityClass, equalsOrNil, isNil, isNotNil, isNotNilOrNaN, referentialToString, ReferentialUtils, } from '@sumaris-net/ngx-components'; +import { Product } from '../product/product.model'; +import { DataEntityFilter } from '@app/data/services/model/data-filter.model'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +import { TaxonGroupRef } from '@app/referential/services/model/taxon-group.model'; +const PacketNumber = 6; // default packet number for SFA +export const PacketIndexes = [...Array(PacketNumber).keys()]; // produce: [0,1,2,3,4,5] with PacketNumber = 6 +export class PacketFilter extends DataEntityFilter { + static fromParent(parent) { + return PacketFilter.fromObject({ parent }); + } + static fromObject(source) { + if (!source || source instanceof PacketFilter) + return source; + const target = new PacketFilter(); + target.fromObject(source); + return target; + } + static searchFilter(source) { + return source && PacketFilter.fromObject(source).asFilterFn(); + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.parent = source.parent; + } + asFilterFn() { + if (isNil(this.parent)) + return undefined; + return (p) => p.parent && this.parent.equals(p.parent); + } +} +let Packet = Packet_1 = class Packet extends DataEntity { + constructor() { + super(Packet_1.TYPENAME); + this.rankOrder = null; + this.number = null; + this.weight = null; + this.composition = []; + this.saleProducts = []; + this.parent = null; + this.operationId = null; + } + static equals(p1, p2) { + return p1 && p2 && ((isNotNil(p1.id) && p1.id === p2.id) + // Or by functional attributes + || (p1.rankOrder === p2.rankOrder + // same operation + && ((!p1.operationId && !p2.operationId) || p1.operationId === p2.operationId) + && (p1.number === p2.number) + && (p1.weight === p2.weight))); + } + asObject(opts) { + const target = super.asObject(opts); + const sampledWeights = []; + PacketIndexes.forEach(index => { + sampledWeights.push(this['sampledWeight' + index]); + delete target['sampledWeight' + index]; + }); + target.sampledWeights = sampledWeights; + target.composition = this.composition && this.composition.map(c => c.asObject(opts)) || undefined; + if (!opts || opts.minify !== true) { + target.saleProducts = this.saleProducts && this.saleProducts.map(saleProduct => { + const s = saleProduct.asObject(opts); + // Affect batchId (=packet.id) + s.batchId = this.id; + return s; + }) || []; + } + else { + delete target.saleProducts; + } + delete target.parent; + return target; + } + fromObject(source) { + super.fromObject(source); + this.rankOrder = source.rankOrder; + this.number = source.number; + this.weight = source.weight; + const sampledWeights = source.sampledWeights || []; + PacketIndexes.forEach(index => this['sampledWeight' + index] = sampledWeights[index] || source['sampledWeight' + index]); + this.composition = source.composition && source.composition.map(c => PacketComposition.fromObject(c)); + this.saleProducts = source.saleProducts && source.saleProducts.map(saleProduct => Product.fromObject(saleProduct)) || []; + this.operationId = source.operationId; + this.parent = source.parent; + return this; + } + equals(other) { + return (super.equals(other) && isNotNil(this.id)) + || (this.rankOrder === other.rankOrder && equalsOrNil(this.number, other.number) && equalsOrNil(this.weight, other.weight)); + } +}; +Packet = Packet_1 = __decorate([ + EntityClass({ typename: 'PacketVO' }), + __metadata("design:paramtypes", []) +], Packet); +export { Packet }; +let PacketComposition = PacketComposition_1 = class PacketComposition extends DataEntity { + constructor() { + super(PacketComposition_1.TYPENAME); + this.rankOrder = null; + this.taxonGroup = null; + this.weight = null; + } + asObject(options) { + const target = super.asObject(options); + target.taxonGroup = this.taxonGroup && this.taxonGroup.asObject(Object.assign(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS), { keepEntityName: true })) || undefined; + const ratios = []; + PacketIndexes.forEach(index => { + ratios.push(this['ratio' + index]); + delete target['ratio' + index]; + }); + target.ratios = ratios; + delete target.weight; + delete target.qualityFlagId; + return target; + } + fromObject(source) { + super.fromObject(source); + this.rankOrder = source.rankOrder || undefined; + this.taxonGroup = source.taxonGroup && TaxonGroupRef.fromObject(source.taxonGroup) || undefined; + const ratios = source.ratios || []; + PacketIndexes.forEach(index => this['ratio' + index] = ratios[index] || source['ratio' + index]); + return this; + } + equals(other) { + return (super.equals(other) && isNotNil(this.id)) + || (this.taxonGroup.equals(other.taxonGroup) && this.rankOrder === other.rankOrder); + } +}; +PacketComposition = PacketComposition_1 = __decorate([ + EntityClass({ typename: 'PacketCompositionVO' }), + __metadata("design:paramtypes", []) +], PacketComposition); +export { PacketComposition }; +export class PacketUtils { + static isPacketEmpty(packet) { + return !packet || isNil(packet.number); + } + static isPacketCompositionEmpty(composition) { + return !composition || isNil(composition.taxonGroup); + } + static isPacketCompositionEquals(composition1, composition2) { + return (composition1 === composition2) || (isNil(composition1) && isNil(composition2)) || (composition1 && composition2 && ReferentialUtils.equals(composition1.taxonGroup, composition2.taxonGroup) + && PacketIndexes.every(index => composition1['ratio' + index] === composition2['ratio' + index])); + } + static getComposition(packet) { + return packet && packet.composition && packet.composition.map(composition => referentialToString(composition.taxonGroup)).join('\n') || ''; + } + static getCompositionAverageRatio(packet, composition) { + const ratios = PacketIndexes.map(index => composition['ratio' + index]).filter(value => isNotNilOrNaN(value)); + const sum = ratios.reduce((a, b) => a + b, 0); + const avg = (sum / PacketUtils.getSampledPacketCount(packet)) || 0; + return avg / 100; + } + static getSampledPacketCount(packet) { + let count = 0; + PacketIndexes.forEach(index => { + if (!!packet['sampledWeight' + index]) + count++; + }); + return count; + } +} +//# sourceMappingURL=packet.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/packet/packet.model.js.map b/out-tsc/app/app/trip/packet/packet.model.js.map new file mode 100644 index 000000000..47956c911 --- /dev/null +++ b/out-tsc/app/app/trip/packet/packet.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"packet.model.js","sourceRoot":"","sources":["../../../../../src/app/trip/packet/packet.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/packet/packet.module.js b/out-tsc/app/app/trip/packet/packet.module.js new file mode 100644 index 000000000..93361c62b --- /dev/null +++ b/out-tsc/app/app/trip/packet/packet.module.js @@ -0,0 +1,35 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { PacketsTable } from './packets.table'; +import { PacketForm } from './packet.form'; +import { PacketModal } from './packet.modal'; +import { TranslateModule } from '@ngx-translate/core'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppReferentialModule } from '@app/referential/referential.module'; +let AppPacketModule = class AppPacketModule { + constructor() { + console.debug('[packet] Creating module...'); + } +}; +AppPacketModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + TranslateModule.forChild(), + // Functional modules + AppReferentialModule, + //AppMeasurementModule, + ], + declarations: [ + PacketsTable, + PacketForm, + PacketModal + ], + exports: [ + PacketsTable + ] + }), + __metadata("design:paramtypes", []) +], AppPacketModule); +export { AppPacketModule }; +//# sourceMappingURL=packet.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/packet/packet.module.js.map b/out-tsc/app/app/trip/packet/packet.module.js.map new file mode 100644 index 000000000..05ad55158 --- /dev/null +++ b/out-tsc/app/app/trip/packet/packet.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"packet.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/packet/packet.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAqBpE,IAAM,eAAe,GAArB,MAAM,eAAe;IAE1B;QACE,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC/C,CAAC;CACF,CAAA;AALY,eAAe;IAlB3B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAE1B,qBAAqB;YACrB,oBAAoB;YACpB,uBAAuB;SACxB;QACD,YAAY,EAAE;YACZ,YAAY;YACZ,UAAU;YACV,WAAW;SACZ;QACD,OAAO,EAAE;YACP,YAAY;SACb;KACF,CAAC;;GACW,eAAe,CAK3B;SALY,eAAe"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/packet/packet.validator.js b/out-tsc/app/app/trip/packet/packet.validator.js new file mode 100644 index 000000000..9cf2d1a84 --- /dev/null +++ b/out-tsc/app/app/trip/packet/packet.validator.js @@ -0,0 +1,99 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { LocalSettingsService, SharedFormArrayValidators, SharedValidators } from '@sumaris-net/ngx-components'; +import { DataEntityValidatorService } from '@app/data/services/validator/data-entity.validator'; +import { Packet, PacketIndexes } from './packet.model'; +import { PacketCompositionValidatorService } from './packet-composition.validator'; +import { DataValidators } from '@app/data/services/validator/data.validators'; +import { TranslateService } from '@ngx-translate/core'; +let PacketValidatorService = class PacketValidatorService extends DataEntityValidatorService { + constructor(formBuilder, translate, settings, packetCompositionValidatorService) { + super(formBuilder, translate, settings); + this.packetCompositionValidatorService = packetCompositionValidatorService; + } + getFormGroupConfig(data, opts) { + const formConfig = Object.assign(super.getFormGroupConfig(data, opts), { + __typename: [Packet.TYPENAME], + parent: [(data === null || data === void 0 ? void 0 : data.parent) || null, Validators.required], + rankOrder: [(data === null || data === void 0 ? void 0 : data.rankOrder) || null], + number: [(data === null || data === void 0 ? void 0 : data.number) || null, Validators.compose([Validators.required, SharedValidators.integer])], + weight: [(data === null || data === void 0 ? void 0 : data.weight) || null, Validators.compose([Validators.required, SharedValidators.decimal({ maxDecimals: 2 })])] + }); + // add sampledWeights + PacketIndexes.forEach(index => { + formConfig['sampledWeight' + index] = [(data === null || data === void 0 ? void 0 : data['sampledWeight' + index]) || null, Validators.compose([Validators.min(0), SharedValidators.decimal({ maxDecimals: 2 })])]; + }); + if (opts.withComposition) { + formConfig.composition = this.getCompositionFormArray(data); + // add sampledRatios + PacketIndexes.forEach(index => { + formConfig['sampledRatio' + index] = [(data === null || data === void 0 ? void 0 : data['sampledRatio' + index]) || null, Validators.max(100)]; + }); + } + else { + formConfig.composition = [(data === null || data === void 0 ? void 0 : data.composition) || null, Validators.required]; + } + if (opts.withSaleProducts) { + formConfig.saleProducts = this.getSaleProductsFormArray(data); + } + else { + formConfig.saleProducts = [(data === null || data === void 0 ? void 0 : data.saleProducts) || null]; + } + return formConfig; + } + updateFormGroup(formGroup, opts) { + if (opts.withSaleProducts) { + const saleValidators = []; + if (formGroup.controls.number.value) { + saleValidators.push(SharedFormArrayValidators.validSumMaxValue('subgroupCount', formGroup.controls.number.value)); + } + if (saleValidators.length) { + formGroup.controls.saleProducts.setValidators(saleValidators); + } + } + } + /* -- protected methods -- */ + getCompositionFormArray(data) { + return this.formBuilder.array((data && data.composition || [null]).map(composition => this.getCompositionControl(composition)), this.getDefaultCompositionValidators()); + } + getDefaultCompositionValidators() { + return [ + SharedFormArrayValidators.uniqueEntity('taxonGroup') + ]; + } + getCompositionControl(composition) { + return this.packetCompositionValidatorService.getFormGroup(composition); + } + getSaleProductsFormArray(data) { + return this.formBuilder.array((data && data.saleProducts || [null]).map(saleProduct => this.getSaleProductControl(saleProduct))); + } + getSaleProductControl(sale) { + return this.formBuilder.group({ + saleType: [sale && sale.saleType || null, Validators.compose([Validators.required, SharedValidators.entity])], + rankOrder: [sale && sale.rankOrder || null], + subgroupCount: [sale && sale.subgroupCount || null, Validators.compose([SharedValidators.integer, Validators.min(0)])], + weight: [sale && sale.weight || null], + weightCalculated: [true], + averagePackagingPrice: [sale && sale.averagePackagingPrice || null, Validators.compose([SharedValidators.decimal({ maxDecimals: 2 }), Validators.min(0)])], + averagePackagingPriceCalculated: [sale && sale.averagePackagingPriceCalculated || null], + totalPrice: [sale && sale.totalPrice || null, Validators.compose([SharedValidators.decimal({ maxDecimals: 2 }), Validators.min(0)])], + totalPriceCalculated: [sale && sale.totalPriceCalculated || null], + productIdByTaxonGroup: [sale && sale.productIdByTaxonGroup || null] + }, { + validators: [ + DataValidators.resetCalculatedFlag('averagePackagingPrice', ['totalPrice']), + DataValidators.resetCalculatedFlag('totalPrice', ['averagePackagingPrice']), + ] + }); + } +}; +PacketValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + LocalSettingsService, + PacketCompositionValidatorService]) +], PacketValidatorService); +export { PacketValidatorService }; +//# sourceMappingURL=packet.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/packet/packet.validator.js.map b/out-tsc/app/app/trip/packet/packet.validator.js.map new file mode 100644 index 000000000..171fc1137 --- /dev/null +++ b/out-tsc/app/app/trip/packet/packet.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"packet.validator.js","sourceRoot":"","sources":["../../../../../src/app/trip/packet/packet.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/packet/packets.table.js b/out-tsc/app/app/trip/packet/packets.table.js new file mode 100644 index 000000000..e8e9008ad --- /dev/null +++ b/out-tsc/app/app/trip/packet/packets.table.js @@ -0,0 +1,336 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { AppTable, EntitiesTableDataSource, InMemoryEntitiesService, isNil, isNotEmptyArray, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, } from '@sumaris-net/ngx-components'; +import { Packet, PacketFilter, PacketUtils } from './packet.model'; +import { PacketValidatorService } from './packet.validator'; +import { BehaviorSubject } from 'rxjs'; +import { PacketModal } from './packet.modal'; +import { PacketSaleModal } from '../sale/packet-sale.modal'; +import { SaleProductUtils } from '../sale/sale-product.model'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { environment } from '@environments/environment'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +let PacketsTable = class PacketsTable extends AppTable { + constructor(injector, validatorService, memoryDataService, programRefService, cd) { + super(injector, + // columns + RESERVED_START_COLUMNS.concat(['parent', 'number', 'weight']).concat(RESERVED_END_COLUMNS), new EntitiesTableDataSource(Packet, memoryDataService, validatorService, { + suppressErrors: true, + onRowCreated: (row) => this.onRowCreated(row), + }), null // Filter + ); + this.validatorService = validatorService; + this.memoryDataService = memoryDataService; + this.programRefService = programRefService; + this.cd = cd; + this.showToolbar = true; + this.useSticky = false; + this.i18nColumnPrefix = 'PACKET.LIST.'; + this.autoLoad = false; // waiting parent to be loaded + this.inlineEdition = this.validatorService && !this.mobile; + this.confirmBeforeDelete = true; + this.defaultPageSize = -1; // Do not use paginator + // FOR DEV ONLY ---- + this.debug = !environment.production; + } + set parentFilter(packetFilter) { + this.setFilter(packetFilter); + } + set program(value) { + this._program = value; + if (value) { + this.loadPmfms(); + } + } + get program() { + return this._program; + } + set value(data) { + this.memoryDataService.value = data; + } + get value() { + return this.memoryDataService.value; + } + get dirty() { + return super.dirty || this.memoryDataService.dirty; + } + ngOnInit() { + super.ngOnInit(); + this.registerAutocompleteField('parent', { + items: this.$parents, + attributes: this.parentAttributes, + columnNames: ['RANK_ORDER', 'REFERENTIAL.LABEL', 'REFERENTIAL.NAME'], + columnSizes: this.parentAttributes.map((attr) => (attr === 'metier.label' ? 3 : attr === 'rankOrderOnPeriod' ? 1 : undefined)), + mobile: this.mobile, + }); + this.registerSubscription(this.onStartEditingRow.subscribe((row) => this.onStartEditPacket(row))); + } + ngOnDestroy() { + super.ngOnDestroy(); + this.memoryDataService.stop(); + } + loadPmfms() { + this.programRefService + .loadProgramPmfms(this.program, { acquisitionLevel: AcquisitionLevelCodes.PACKET_SALE }) + .then((packetSalePmfms) => (this.packetSalePmfms = packetSalePmfms)); + } + trackByFn(index, row) { + return row.currentData.rankOrder; + } + onRowCreated(row) { + return __awaiter(this, void 0, void 0, function* () { + const data = row.currentData; // if validator enable, this will call a getter function + yield this.onNewEntity(data); + // Affect new row + if (row.validator) { + row.validator.patchValue(data); + row.validator.markAsDirty(); + } + else { + row.currentData = data; + } + this.markForCheck(); + }); + } + addEntityToTable(data, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!data) + throw new Error('Missing data to add'); + if (this.debug) + console.debug('[measurement-table] Adding new entity', data); + const row = yield this.addRowToTable(); + if (!row) + throw new Error('Could not add row to table'); + yield this.onNewEntity(data); + // Affect new row + if (row.validator) { + row.validator.patchValue(data); + row.validator.markAsDirty(); + } + else { + row.currentData = data; + } + // Confirm the created row + if (!opts || opts.confirmCreate !== false) { + this.confirmEditCreate(null, row); + this.editedRow = null; + } + else { + this.editedRow = row; + } + this.markAsDirty(); + return row; + }); + } + onNewEntity(data) { + return __awaiter(this, void 0, void 0, function* () { + if (isNil(data.rankOrder)) { + data.rankOrder = (yield this.getMaxRankOrder()) + 1; + } + }); + } + getMaxRankOrder() { + return __awaiter(this, void 0, void 0, function* () { + const rows = this.dataSource.getRows(); + return rows.reduce((res, row) => Math.max(res, row.currentData.rankOrder || 0), 0); + }); + } + markForCheck() { + this.cd.markForCheck(); + } + openRow(id, row) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail) + return false; + yield this.openComposition(null, row); + return true; + }); + } + openNewRowDetail() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail) + return false; + const { data, role } = yield this.openDetailModal(); + if (data && role !== 'delete') { + const row = yield this.addEntityToTable(data); + // Redirect to another modal + if (role === 'sale') { + yield this.openPacketSale(null, row); + } + } + else { + this.editedRow = null; + } + return true; + }); + } + openDetailModal(dataToOpen) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const isNew = !dataToOpen && true; + if (isNew) { + dataToOpen = new Packet(); + if ((_a = this.filter) === null || _a === void 0 ? void 0 : _a.parent) { + dataToOpen.parent = this.filter.parent; + } + else if (((_b = this.$parents.value) === null || _b === void 0 ? void 0 : _b.length) === 1) { + dataToOpen.parent = this.$parents.value[0]; + } + } + const modal = yield this.modalCtrl.create({ + component: PacketModal, + componentProps: { + disabled: this.disabled, + mobile: this.mobile, + parents: this.$parents.value, + parentAttributes: this.parentAttributes, + data: dataToOpen, + isNew, + onDelete: (event, packet) => this.deleteEntity(event, packet), + }, + backdropDismiss: false, + cssClass: 'modal-large', + }); + // Open the modal + yield modal.present(); + // Wait until closed + const { data, role } = yield modal.onDidDismiss(); + this.markAsLoaded(); + if (this.debug) + console.debug('[packet-table] packet modal result: ', { data, role }); + return { data: data instanceof Packet ? data : undefined, role }; + }); + } + deleteEntity(event, data) { + return __awaiter(this, void 0, void 0, function* () { + const row = yield this.findRowByPacket(data); + // Row not exists: OK + if (!row) + return true; + const canDeleteRow = yield this.canDeleteRows([row]); + if (canDeleteRow === true) { + this.cancelOrDelete(undefined, row, { interactive: false /*already confirmed*/ }); + } + return canDeleteRow; + }); + } + openComposition(event, row) { + return __awaiter(this, void 0, void 0, function* () { + if (event) + event.stopPropagation(); + const { data, role } = yield this.openDetailModal(row.currentData); + if (data && role !== 'delete') { + row.validator.patchValue(data, { onlySelf: false, emitEvent: true }); + // update sales + this.updateSaleProducts(row); + this.markAsDirty({ emitEvent: false }); + this.markForCheck(); + if (role === 'sale') { + yield this.openPacketSale(null, row); + } + } + }); + } + getComposition(row) { + return PacketUtils.getComposition(row.currentData); + } + updateSaleProducts(row) { + if (row && row.currentData) { + // update sales if any + if (isNotEmptyArray(row.currentData.saleProducts)) { + const updatedSaleProducts = SaleProductUtils.updateAggregatedSaleProducts(row.currentData, this.packetSalePmfms); + row.validator.patchValue({ saleProducts: updatedSaleProducts }, { emitEvent: true }); + } + } + } + openPacketSale(event, row) { + return __awaiter(this, void 0, void 0, function* () { + if (event) + event.stopPropagation(); + const modal = yield this.modalCtrl.create({ + component: PacketSaleModal, + componentProps: { + data: row.currentData, + packetSalePmfms: this.packetSalePmfms, + disabled: this.disabled, + mobile: this.mobile, + }, + backdropDismiss: false, + cssClass: 'modal-large', + }); + yield modal.present(); + const res = yield modal.onDidDismiss(); + if (res && res.data) { + // patch saleProducts only + row.validator.patchValue({ saleProducts: res.data.saleProducts }, { emitEvent: true }); + this.markAsDirty({ emitEvent: false }); + this.markForCheck(); + } + }); + } + /* -- protected methods -- */ + findRowByPacket(packet) { + return __awaiter(this, void 0, void 0, function* () { + return Packet && this.dataSource.getRows().find((r) => Packet.equals(packet, r.currentData)); + }); + } + onStartEditPacket(row) { + if (this.filter && this.filter.parent && row.currentData && !row.currentData.parent) { + row.validator.patchValue({ parent: this.filter.parent }); + } + } +}; +__decorate([ + Input(), + __metadata("design:type", BehaviorSubject) +], PacketsTable.prototype, "$parents", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], PacketsTable.prototype, "parentAttributes", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PacketsTable.prototype, "showToolbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PacketsTable.prototype, "useSticky", void 0); +__decorate([ + Input(), + __metadata("design:type", PacketFilter), + __metadata("design:paramtypes", [PacketFilter]) +], PacketsTable.prototype, "parentFilter", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], PacketsTable.prototype, "program", null); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], PacketsTable.prototype, "value", null); +PacketsTable = __decorate([ + Component({ + selector: 'app-packets-table', + templateUrl: 'packets.table.html', + styleUrls: ['packets.table.scss'], + providers: [ + { + provide: InMemoryEntitiesService, + useFactory: () => new InMemoryEntitiesService(Packet, PacketFilter, { + equals: Packet.equals, + }), + }, + ], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + PacketValidatorService, + InMemoryEntitiesService, + ProgramRefService, + ChangeDetectorRef]) +], PacketsTable); +export { PacketsTable }; +//# sourceMappingURL=packets.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/packet/packets.table.js.map b/out-tsc/app/app/trip/packet/packets.table.js.map new file mode 100644 index 000000000..a643cd96b --- /dev/null +++ b/out-tsc/app/app/trip/packet/packets.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"packets.table.js","sourceRoot":"","sources":["../../../../../src/app/trip/packet/packets.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/physical-gear.filter.js b/out-tsc/app/app/trip/physicalgear/physical-gear.filter.js new file mode 100644 index 000000000..a1ea38796 --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/physical-gear.filter.js @@ -0,0 +1,99 @@ +import { __decorate } from "tslib"; +import { RootDataEntityFilter } from '@app/data/services/model/root-data-filter.model'; +import { EntityClass, fromDateISOString, isNil, isNotNil, isNotNilOrBlank } from '@sumaris-net/ngx-components'; +let PhysicalGearFilter = class PhysicalGearFilter extends RootDataEntityFilter { + constructor() { + super(...arguments); + this.vesselId = null; + this.tripId = null; + this.excludeTripId = null; + this.parentGearId = null; + this.excludeParentGearId = null; + this.excludeChildGear = null; + this.excludeParentGear = null; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.vesselId = source.vesselId; + this.tripId = source.tripId; + this.excludeTripId = source.excludeTripId; + this.parentGearId = source.parentGearId; + this.excludeParentGearId = source.excludeParentGearId; + this.excludeChildGear = source.excludeChildGear; + this.excludeParentGear = source.excludeParentGear; + } + asObject(opts) { + const target = super.asObject(opts); + if (opts && opts.minify) { + // NOT exists on pod: + } + return target; + } + buildFilter() { + const filterFns = super.buildFilter({ skipProgram: true }); + // Program + if (this.program) { + const programId = this.program.id; + const programLabel = this.program.label; + if (isNotNil(programId)) { + filterFns.push((t) => { var _a; return !((_a = t.trip) === null || _a === void 0 ? void 0 : _a.program) || t.trip.program.id === programId; }); + } + else if (isNotNilOrBlank(programLabel)) { + filterFns.push((t) => { var _a; return isNil((_a = t.trip) === null || _a === void 0 ? void 0 : _a.program) || t.trip.program.label === programLabel; }); + } + } + // Vessel + if (isNotNil(this.vesselId)) { + const vesselId = this.vesselId; + filterFns.push((pg) => { var _a, _b; return ((_b = (_a = pg.trip) === null || _a === void 0 ? void 0 : _a.vesselSnapshot) === null || _b === void 0 ? void 0 : _b.id) === vesselId; }); + } + // Trip + if (isNotNil(this.tripId)) { + const tripId = this.tripId; + filterFns.push((pg) => { var _a; return pg.tripId === tripId || ((_a = pg.trip) === null || _a === void 0 ? void 0 : _a.id) === tripId; }); + } + if (isNotNil(this.excludeTripId)) { + const excludeTripId = this.excludeTripId; + filterFns.push((pg) => { var _a; return !(pg.tripId === excludeTripId || ((_a = pg.trip) === null || _a === void 0 ? void 0 : _a.id) === excludeTripId); }); + } + // Parent/Children + if (isNotNil(this.parentGearId)) { + const parentGearId = this.parentGearId; + filterFns.push((pg) => { var _a; return pg.parentId === parentGearId || ((_a = pg.parent) === null || _a === void 0 ? void 0 : _a.id) === parentGearId; }); + } + if (isNotNil(this.excludeParentGearId)) { + const excludeParentGearId = this.excludeParentGearId; + filterFns.push((pg) => { var _a; return !(pg.parentId === excludeParentGearId || ((_a = pg.parent) === null || _a === void 0 ? void 0 : _a.id) === excludeParentGearId); }); + } + if (this.excludeParentGear) { + filterFns.push((pg) => isNotNil(pg.parentId) || !!pg.parent); + } + if (this.excludeChildGear) { + filterFns.push((pg) => isNil(pg.parentId) && !pg.parent); + } + // StartDate + if (isNotNil(this.startDate)) { + const startDate = this.startDate; + filterFns.push((pg) => { + var _a, _b, _c; + return (isNotNil((_a = pg.trip) === null || _a === void 0 ? void 0 : _a.returnDateTime) && fromDateISOString(pg.trip.returnDateTime).isAfter(startDate)) || + (isNotNil((_b = pg.trip) === null || _b === void 0 ? void 0 : _b.departureDateTime) && fromDateISOString((_c = pg.trip) === null || _c === void 0 ? void 0 : _c.departureDateTime).isAfter(startDate)); + }); + } + // EndDate + if (isNotNil(this.endDate)) { + const endDate = this.endDate; + filterFns.push((pg) => { + var _a, _b, _c; + return (isNotNil((_a = pg.trip) === null || _a === void 0 ? void 0 : _a.returnDateTime) && fromDateISOString(pg.trip.returnDateTime).isBefore(endDate)) || + (isNotNil((_b = pg.trip) === null || _b === void 0 ? void 0 : _b.departureDateTime) && fromDateISOString((_c = pg.trip) === null || _c === void 0 ? void 0 : _c.departureDateTime).isBefore(endDate)); + }); + } + return filterFns; + } +}; +PhysicalGearFilter = __decorate([ + EntityClass({ typename: 'PhysicalGearFilterVO' }) +], PhysicalGearFilter); +export { PhysicalGearFilter }; +//# sourceMappingURL=physical-gear.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/physical-gear.filter.js.map b/out-tsc/app/app/trip/physicalgear/physical-gear.filter.js.map new file mode 100644 index 000000000..9fcfe7788 --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/physical-gear.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"physical-gear.filter.js","sourceRoot":"","sources":["../../../../../src/app/trip/physicalgear/physical-gear.filter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/physical-gear.form.js b/out-tsc/app/app/trip/physicalgear/physical-gear.form.js new file mode 100644 index 000000000..9e3356c8b --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/physical-gear.form.js @@ -0,0 +1,203 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, Input, QueryList, ViewChildren } from '@angular/core'; +import { PhysicalGearValidatorService } from './physicalgear.validator'; +import { filter, mergeMap } from 'rxjs/operators'; +import { MeasurementValuesForm } from '@app/data/measurement/measurement-values.form.class'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { UntypedFormBuilder } from '@angular/forms'; +import { focusNextInput, getFocusableInputElements, isNotNil, isNotNilOrBlank, ReferentialRef, ReferentialUtils, selectInputContent, toBoolean, toNumber, waitFor, } from '@sumaris-net/ngx-components'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { environment } from '@environments/environment'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { OperationService } from '@app/trip/operation/operation.service'; +import { PhysicalGear } from '@app/trip/physicalgear/physical-gear.model'; +let PhysicalGearForm = class PhysicalGearForm extends MeasurementValuesForm { + constructor(injector, measurementsValidatorService, formBuilder, programRefService, validatorService, operationService, referentialRefService) { + super(injector, measurementsValidatorService, formBuilder, programRefService, validatorService.getFormGroup()); + this.measurementsValidatorService = measurementsValidatorService; + this.formBuilder = formBuilder; + this.programRefService = programRefService; + this.validatorService = validatorService; + this.operationService = operationService; + this.referentialRefService = referentialRefService; + this.gears$ = this._state.select('gears'); + this.canEditRankOrder = false; + this.canEditGear = true; + this.maxItemCountForButtons = 12; + this.showGear = true; + this.showError = false; + this.i18nSuffix = null; + this.selectInputContent = selectInputContent; + this._enable = true; + // Set defaults + this.acquisitionLevel = AcquisitionLevelCodes.PHYSICAL_GEAR; + this.requiredGear = true; + this.i18nPmfmPrefix = 'TRIP.PHYSICAL_GEAR.PMFM.'; + // Load gears from program + this._state.connect('gears', this.programLabel$ + .pipe(mergeMap(programLabel => this.programRefService.loadGears(programLabel)))); + this.debug = !environment.production; + } + set gears(value) { + this._state.set('gears', (_) => value); + } + get gears() { + return this._state.get('gears'); + } + ngOnInit() { + var _a; + super.ngOnInit(); + this.mobile = toBoolean(this.mobile, this.settings.mobile); + this.tabindex = toNumber(this.tabindex, 1); + this.showComment = !this.mobile || isNotNilOrBlank((_a = this.data) === null || _a === void 0 ? void 0 : _a.comments); + // Combo: gears + this.registerAutocompleteField('gear', { + items: this.gears$, + mobile: this.mobile, + showAllOnFocus: true + }); + // Disable gear field + const gearControl = this.form.get('gear'); + if (!this.canEditGear && gearControl.enabled) { + gearControl.disable(); + } + // Propagate data.gear into gearId + this.registerSubscription(this.form.get('gear').valueChanges + .pipe(filter(ReferentialUtils.isNotEmpty)) + .subscribe(gear => { + this.data = this.data || new PhysicalGear(); + this.data.gear = gear; + this.gearId = gear.id; + this.markForCheck(); + })); + } + enable(opts) { + super.enable(opts); + if (!this.canEditGear) { + this.form.get('gear').disable(opts); + } + } + focusFirstInput() { + return __awaiter(this, void 0, void 0, function* () { + yield waitFor(() => this.enabled, { timeout: 2000 }); + const inputElements = getFocusableInputElements(this.matInputs); + if (inputElements.length) + inputElements[0].focus(); + }); + } + focusNextInput(event, opts) { + // DEBUG + //return focusNextInput(event, this.inputFields, opts{debug: this.debug, ...opts}); + return focusNextInput(event, this.matInputs, opts); + } + setValue(data, opts) { + const _super = Object.create(null, { + setValue: { get: () => super.setValue } + }); + return __awaiter(this, void 0, void 0, function* () { + // For ce to clean previous gearId (to for pmfms recomputation) + if (isNotNil(this.gearId)) { + this.gearId = null; + } + // Can edite only if not used yet, in any operation + if (isNotNil(data === null || data === void 0 ? void 0 : data.tripId) && this.canEditGear) { + this.canEditGear = yield this.operationService.areUsedPhysicalGears(data.tripId, [data.id]); + } + this.showComment = this.showComment || isNotNilOrBlank(data.comments); + yield _super.setValue.call(this, data, opts); + }); + } + getValue() { + const target = super.getValue(); + // Re Add gear, if control has been disabled + const jsonGear = this.form.get('gear').value; + target.gear = jsonGear && ReferentialRef.fromObject(jsonGear); + return target; + } + toggleComment() { + if (this.disabled) + return; + this.showComment = !this.showComment; + if (!this.showComment) { + this.form.get('comments').setValue(null); + } + this.markForCheck(); + } + /* -- protected methods -- */ + onApplyingEntity(data, opts) { + if (!data) + return; // Skip + super.onApplyingEntity(data, opts); + // Propagate the gear + if (ReferentialUtils.isNotEmpty(data.gear)) { + this.gearId = data.gear.id; + } + } +}; +__decorate([ + Input(), + __metadata("design:type", Number) +], PhysicalGearForm.prototype, "tabindex", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearForm.prototype, "canEditRankOrder", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearForm.prototype, "canEditGear", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearForm.prototype, "maxItemCountForButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], PhysicalGearForm.prototype, "maxVisibleButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearForm.prototype, "showGear", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PhysicalGearForm.prototype, "showComment", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PhysicalGearForm.prototype, "i18nSuffix", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PhysicalGearForm.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], PhysicalGearForm.prototype, "gears", null); +__decorate([ + ViewChildren('matInput'), + __metadata("design:type", QueryList) +], PhysicalGearForm.prototype, "matInputs", void 0); +PhysicalGearForm = __decorate([ + Component({ + selector: 'app-physical-gear-form', + templateUrl: './physical-gear.form.html', + styleUrls: ['./physical-gear.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + MeasurementsValidatorService, + UntypedFormBuilder, + ProgramRefService, + PhysicalGearValidatorService, + OperationService, + ReferentialRefService]) +], PhysicalGearForm); +export { PhysicalGearForm }; +//# sourceMappingURL=physical-gear.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/physical-gear.form.js.map b/out-tsc/app/app/trip/physicalgear/physical-gear.form.js.map new file mode 100644 index 000000000..4e1b9ec80 --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/physical-gear.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"physical-gear.form.js","sourceRoot":"","sources":["../../../../../src/app/trip/physicalgear/physical-gear.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/physical-gear.modal.js b/out-tsc/app/app/trip/physicalgear/physical-gear.modal.js new file mode 100644 index 000000000..1cbc0784a --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/physical-gear.modal.js @@ -0,0 +1,405 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Injector, Input, Output, Self, ViewChild, } from '@angular/core'; +import { AcquisitionLevelCodes, PmfmIds, QualityFlagIds } from '@app/referential/services/model/model.enum'; +import { PhysicalGearForm } from './physical-gear.form'; +import { AppEntityEditorModal, createPromiseEventEmitter, emitPromiseEvent, firstNotNilPromise, InMemoryEntitiesService, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, toBoolean, toNumber, TranslateContextService, } from '@sumaris-net/ngx-components'; +import { MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { PhysicalGear } from '@app/trip/physicalgear/physical-gear.model'; +import { PhysicalGearFilter } from '@app/trip/physicalgear/physical-gear.filter'; +import { PHYSICAL_GEAR_DATA_SERVICE_TOKEN } from '@app/trip/physicalgear/physicalgear.service'; +import { filter, switchMap } from 'rxjs/operators'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { slideDownAnimation } from '@app/shared/material/material.animation'; +import { RxState } from '@rx-angular/state'; +import { environment } from '@environments/environment'; +const INVALID_GEAR_ID = -999; +let PhysicalGearModal = class PhysicalGearModal extends AppEntityEditorModal { + constructor(injector, translateContext, childrenGearService, _state, cd) { + super(injector, PhysicalGear, { + tabCount: 2, + i18nPrefix: 'TRIP.PHYSICAL_GEAR.EDIT.', + enableSwipe: false + }); + this.translateContext = translateContext; + this.childrenGearService = childrenGearService; + this._state = _state; + this.cd = cd; + this.gear$ = this._state.select('gear'); + this.gearId$ = this._state.select('gearId'); + this.childrenTable$ = this._state.select('childrenTable'); + this.showChildrenTable$ = this._state.select('showChildrenTable'); + this.childAcquisitionLevel = 'CHILD_PHYSICAL_GEAR'; + this.canEditGear = false; + this.canEditRankOrder = false; + this.minChildrenCount = 2; + this.showGear = true; + this.showSearchButton = true; + this.maxItemCountForButtons = 12; + this.searchButtonClick = createPromiseEventEmitter(); + // Default values + this._logPrefix = '[physical-gear-modal] '; + this.acquisitionLevel = AcquisitionLevelCodes.PHYSICAL_GEAR; + this.tabGroupAnimationDuration = this.mobile ? this.tabGroupAnimationDuration : '0s'; + // TODO: for DEV only + this.debug = !environment.production; + } + get form() { + return this.physicalGearForm.form; + } + get childrenTable() { + return this._state.get('childrenTable'); + } + set childrenTable(table) { + this._state.set('childrenTable', () => table); + } + get showChildrenTable() { + return this._state.get('showChildrenTable'); + } + set showChildrenTable(value) { + this._state.set('showChildrenTable', _ => value); + } + ngOnInit() { + this.allowChildrenGears = toBoolean(this.allowChildrenGears, true); + super.ngOnInit(); + if (this.enabled && this.isNew) { + this.markAsLoaded(); + } + } + registerForms() { + this.addChildForms([ + this.physicalGearForm, + // Will be included by (ngInit)= (see template) + //this.childrenTable + ]); + } + ngOnDestroy() { + super.ngOnDestroy(); + this.searchButtonClick.unsubscribe(); + this.childrenGearService.stop(); + } + ngAfterViewInit() { + const _super = Object.create(null, { + ngAfterViewInit: { get: () => super.ngAfterViewInit } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.ngAfterViewInit.call(this); + this._state.connect('gear', this.physicalGearForm.form.get('gear').valueChanges); + this._state.connect('gearId', this._state.select('gear'), (_, gear) => toNumber(gear === null || gear === void 0 ? void 0 : gear.id, INVALID_GEAR_ID)); + if (this.allowChildrenGears) { + this._state.connect('childrenPmfms', this._state.select('childrenTable') + .pipe(filter(isNotNil), switchMap((table) => table.pmfms$)), (_, pmfms) => { + console.debug('[physical-gear-modal] Receiving new pmfms', pmfms); + return pmfms; + }); + this._state.connect('showChildrenTable', this._state.select(['childrenPmfms', 'gearId'], ({ childrenPmfms, gearId }) => { + // DEBUG + console.debug('[physical-gear-modal] Should show children table ?', childrenPmfms, gearId); + // Check if table has something to display (some PMFM in the strategy) + const childrenHasSomePmfms = (childrenPmfms || []).some(p => + // Exclude Pmfm on all gears (e.g. GEAR_LABEL) + PmfmUtils.isDenormalizedPmfm(p) && isNotEmptyArray(p.gearIds) + // Keep only if applied to the selected gear (if any) + // We need to filter by gearId, because sometimes the table pmfms are outdated (e.g. on a previous gearId) + && (isNil(gearId) || p.gearIds.includes(gearId))); + return (childrenPmfms && isNotNil(gearId) && gearId !== INVALID_GEAR_ID) + ? childrenHasSomePmfms + : null; + })); + this._state.hold(this.showChildrenTable$, () => this.updateChildrenTableState()); + } + else { + this.showChildrenTable = false; + } + // Focus on the first field, is not in mobile + if (this.isNew && !this.mobile && this.enabled) { + setTimeout(() => this.physicalGearForm.focusFirstInput(), 400); + } + }); + } + openSearchModal(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.searchButtonClick.observers.length === 0) + return; // Skip + // Emit event, then wait for a result + try { + const selectedData = yield emitPromiseEvent(this.searchButtonClick, this.acquisitionLevel); + // No result (user cancelled): skip + if (!selectedData) + return; + // Create a copy + const data = PhysicalGear.fromObject({ + gear: selectedData.gear, + rankOrder: selectedData.rankOrder, + // Convert measurementValues as JSON, in order to force values of not required PMFM to be converted, in the form + measurementValues: MeasurementValuesUtils.asObject(selectedData.measurementValues, { minify: true }), + measurements: selectedData.measurements, + }).asObject(); + if (!this.canEditRankOrder) { + // Apply computed rankOrder + data.rankOrder = this.data.rankOrder; + } + // Apply to form + console.debug('[physical-gear-modal] Paste selected gear:', data); + yield this.setValue(data); + this.markAsDirty(); + } + catch (err) { + if (err === 'CANCELLED') + return; // Skip + this.setError(err); + this.scrollToTop(); + } + }); + } + // Change to public, to be able to force refresh + markForCheck() { + this.cd.markForCheck(); + } + /* -- protected functions -- */ + initChildrenTable(table) { + // DEBUG + console.debug('[physical-gear-modal] Init children table', table); + // Add children table to the editor + this.addChildForm(table); + // Configure table + table.setModalOption('helpMessage', this.helpMessage); + table.setModalOption('maxVisibleButtons', this.maxVisibleButtons); + table.setModalOption('maxItemCountForButtons', this.maxItemCountForButtons); + // Update state + this.childrenTable = table; + this.updateChildrenTableState(); + } + updateViewState(data, opts) { + super.updateViewState(data, opts); + this.updateChildrenTableState(opts); + // Restore error + const errorMessage = this.enabled && this.usageMode === 'DESK' && isNil(data.controlDate) ? data.qualificationComments : undefined; + if (isNotNilOrBlank(errorMessage)) { + console.info('[physical-gear-modal] Restore error from qualificationComments : ', errorMessage); + // Clean quality flags + this.form.patchValue({ + qualificationComments: null, + qualityFlagId: QualityFlagIds.NOT_QUALIFIED + }, { emitEvent: false }); + setTimeout(() => { + this.markAllAsTouched(); + this.form.updateValueAndValidity(); + // Replace newline by a
tag, then display + this.setError(errorMessage.replace(/(\n|\r|)+/g, '
')); + }); + } + } + updateChildrenTableState(opts) { + const table = this.childrenTable; + if (!table) + return; // Skip + const enabled = this.enabled && this.showChildrenTable === true; + if (enabled && !table.enabled) { + console.debug('[physical-gear-modal] Enable children table'); + table.enable(); + } + else if (!enabled && table.enabled) { + console.debug('[physical-gear-modal] Disable children table'); + table.disable(); + } + } + setValue(data) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + // Save children, before reset (not need in the main form) + const children = data.children; + data.children = undefined; + // Set main form + yield this.physicalGearForm.setValue(data); + if (this.allowChildrenGears) { + const childrenTable = yield firstNotNilPromise(this.childrenTable$, { stop: this.destroySubject, stopError: false }); + childrenTable.gearId = (_a = data.gear) === null || _a === void 0 ? void 0 : _a.id; + childrenTable.markAsReady(); + this.childrenGearService.value = children || []; + yield childrenTable.waitIdle({ timeout: 2000, stop: this.destroySubject, stopError: false }); + // Restore children + data.children = children; + } + }); + } + getValue() { + return __awaiter(this, void 0, void 0, function* () { + const data = PhysicalGear.fromObject(this.physicalGearForm.value); + if (this.allowChildrenGears && this.showChildrenTable) { + if (this.childrenTable.dirty) { + yield this.childrenTable.save(); + } + data.children = this.childrenGearService.value; + } + else { + data.children = null; + } + return data; + }); + } + saveAndClose(event) { + const _super = Object.create(null, { + saveAndClose: { get: () => super.saveAndClose } + }); + return __awaiter(this, void 0, void 0, function* () { + const valid = yield _super.saveAndClose.call(this, event); + if (!valid) { + // Need to mark table as touched, to show not enough row error + this.markAllAsTouched(); + } + return valid; + }); + } + getJsonValueToSave() { + return __awaiter(this, void 0, void 0, function* () { + console.warn('Should not used this method! Because form and childrenTable always return Entities!'); + const data = yield this.getValue(); + return data.asObject(); + }); + } + computeTitle(data) { + data = data || this.data; + if (this.isNewData || !data) { + return this.translateContext.instant('TRIP.PHYSICAL_GEAR.NEW.TITLE', this.i18nSuffix); + } + else { + const label = (data === null || data === void 0 ? void 0 : data.measurementValues[PmfmIds.GEAR_LABEL]) || ('#' + data.rankOrder); + return this.translateContext.instant('TRIP.PHYSICAL_GEAR.EDIT.TITLE', this.i18nSuffix, { label }); + } + } + getFirstInvalidTabIndex() { + var _a; + if (this.showChildrenTable && ((_a = this.childrenTable) === null || _a === void 0 ? void 0 : _a.invalid)) + return 1; + return 0; + } + /** + * Open a modal to select a previous child gear + * + * @param event + */ + openSearchChildrenModal(event) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!event || !event.detail.success) + return; // Skip (missing callback) + if (this.searchButtonClick.observers.length === 0) { + event.detail.error('CANCELLED'); + return; // Skip + } + // Emit event, then wait for a result + try { + const selectedData = yield emitPromiseEvent(this.searchButtonClick, event.type); + if (selectedData) { + // Create a copy + const data = PhysicalGear.fromObject({ + gear: selectedData.gear, + rankOrder: selectedData.rankOrder, + // Convert measurementValues as JSON, in order to force values of not required PMFM to be converted, in the form + measurementValues: MeasurementValuesUtils.asObject(selectedData.measurementValues, { minify: true }), + measurements: selectedData.measurements + }).asObject(); + event.detail.success(data); + } + // User cancelled + else { + event.detail.error('CANCELLED'); + } + } + catch (err) { + console.error(err); + (_a = event.detail) === null || _a === void 0 ? void 0 : _a.error(err); + } + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", String) +], PhysicalGearModal.prototype, "helpMessage", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PhysicalGearModal.prototype, "acquisitionLevel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PhysicalGearModal.prototype, "childAcquisitionLevel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PhysicalGearModal.prototype, "programLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], PhysicalGearModal.prototype, "tripId", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearModal.prototype, "canEditGear", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearModal.prototype, "canEditRankOrder", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PhysicalGearModal.prototype, "allowChildrenGears", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearModal.prototype, "minChildrenCount", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearModal.prototype, "showGear", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearModal.prototype, "showSearchButton", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], PhysicalGearModal.prototype, "maxVisibleButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearModal.prototype, "maxItemCountForButtons", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], PhysicalGearModal.prototype, "searchButtonClick", void 0); +__decorate([ + ViewChild(PhysicalGearForm, { static: true }), + __metadata("design:type", PhysicalGearForm) +], PhysicalGearModal.prototype, "physicalGearForm", void 0); +PhysicalGearModal = __decorate([ + Component({ + selector: 'app-physical-gear-modal', + templateUrl: './physical-gear.modal.html', + styleUrls: ['./physical-gear.modal.scss'], + providers: [ + { + provide: PHYSICAL_GEAR_DATA_SERVICE_TOKEN, + useFactory: () => new InMemoryEntitiesService(PhysicalGear, PhysicalGearFilter, { + equals: PhysicalGear.equals, + sortByReplacement: { id: 'rankOrder' } + }) + }, + RxState + ], + animations: [ + slideDownAnimation + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __param(2, Self()), + __param(2, Inject(PHYSICAL_GEAR_DATA_SERVICE_TOKEN)), + __metadata("design:paramtypes", [Injector, + TranslateContextService, + InMemoryEntitiesService, + RxState, + ChangeDetectorRef]) +], PhysicalGearModal); +export { PhysicalGearModal }; +//# sourceMappingURL=physical-gear.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/physical-gear.modal.js.map b/out-tsc/app/app/trip/physicalgear/physical-gear.modal.js.map new file mode 100644 index 000000000..65f9fc1a2 --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/physical-gear.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"physical-gear.modal.js","sourceRoot":"","sources":["../../../../../src/app/trip/physicalgear/physical-gear.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/physical-gear.model.js b/out-tsc/app/app/trip/physicalgear/physical-gear.model.js new file mode 100644 index 000000000..957674851 --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/physical-gear.model.js @@ -0,0 +1,176 @@ +var PhysicalGear_1; +import { __decorate, __metadata } from "tslib"; +import { EntityClass, EntityUtils, isEmptyArray, isNil, isNotEmptyArray, isNotNil, ReferentialRef } from '@sumaris-net/ngx-components'; +import { RootDataEntity } from '@app/data/services/model/root-data-entity.model'; +import { MeasurementUtils, MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +import { TripRef } from '@app/trip/trip/trip-ref.model'; +let PhysicalGear = PhysicalGear_1 = class PhysicalGear extends RootDataEntity { + constructor() { + super(PhysicalGear_1.TYPENAME); + this.rankOrder = null; + this.gear = null; + this.measurements = null; + this.measurementValues = {}; + // Parent (e.g. sub gears - see APASE program) + this.parent = null; + this.parentId = null; + this.children = null; + // Parent trip (used when lookup gears) + this.trip = null; + this.tripId = null; + } + static equals(s1, s2, opts = { withRankOrder: true, withMeasurementValues: false }) { + return s1 && s2 && s1.id === s2.id + // Or + || ( + // Same gear + (s1.gear && s2.gear && s1.gear.id === s2.gear.id) + // Same rankOrder + && (opts.withRankOrder === false || s1.rankOrder === s2.rankOrder) + // Same measurementValues + && (opts.withMeasurementValues !== true || MeasurementValuesUtils.equals(s1.measurementValues, s2.measurementValues)) + // WARN: compare parent (e.g. same trip) is to complicated, because it can be not set yet, before saving + ); + } + static computeSameAsScore(reference, source, opts) { + var _a, _b; + if (!source) + return -1; + return (((_a = reference.gear) === null || _a === void 0 ? void 0 : _a.id) === ((_b = source.gear) === null || _b === void 0 ? void 0 : _b.id) ? 1 : 0) * 1000 + + ((opts === null || opts === void 0 ? void 0 : opts.withMeasurementValues) !== false && MeasurementValuesUtils.equals(reference.measurementValues, source.measurementValues) ? 1 : 0) * 100 + + ((opts === null || opts === void 0 ? void 0 : opts.withRankOrder) !== false && reference.rankOrder === source.rankOrder ? 1 : 0) * 10 + + ((opts === null || opts === void 0 ? void 0 : opts.tripId) !== false && reference.tripId === source.tripId ? 1 : 0) * 1; + } + static scoreComparator(gear, sortDirection, opts) { + const direction = !sortDirection || sortDirection === 'desc' ? -1 : 1; + return (g1, g2) => { + const score1 = this.computeSameAsScore(gear, g1, opts); + const score2 = this.computeSameAsScore(gear, g2, opts); + return score1 === score2 ? 0 : (score1 > score2 ? direction : -direction); + }; + } + static fromObjectArrayAsTree(sources, opts) { + if (!sources) + return null; + // Convert to entities + const targets = (sources || []) + .map(json => this.fromObject(json, Object.assign(Object.assign({}, opts), { withChildren: false }))); + // Find roots + const root = targets.filter(g => isNil(g.parentId)); + // Link to parent (using parentId) + targets.forEach(t => { + t.parent = isNotNil(t.parentId) && root.find(p => p.id === t.parentId) || undefined; + t.parentId = undefined; // Avoid redundant info on parent + }); + // Link to children + root.forEach(s => s.children = targets.filter(p => p.parent && p.parent === s) || []); + console.debug('[physical-gear-model] fromObjectArrayAsTree() result:', root); + // Return root + return root; + } + /** + * Transform an entities tree, into an array of objects. + * children.parent are removed, to keep only a parentId + * + * @param source + * @param opts + * @throw Error if a batch has no id + */ + static treeAsObjectArray(sources, opts) { + return sources && sources + // Reduce to array + .reduce((res, source) => { + // Convert entity into object, WITHOUT children (will be set later) + const target = source.asObject ? source.asObject(Object.assign(Object.assign({}, opts), { withChildren: false })) : Object.assign(Object.assign({}, source), { children: undefined }); + // Link target with the given parent + const parent = opts && opts.parent; + if (parent) { + if (isNil(parent.id)) { + throw new Error(`Cannot convert physicalGears tree into array: No id found for the physicalGear with rankOrder=${parent.rankOrder}!`); + } + target.parentId = parent.id; + delete target.parent; // not need + } + if (isNotEmptyArray(source.children)) { + return res.concat(target) + .concat(...this.treeAsObjectArray(source.children, Object.assign(Object.assign({}, opts), { parent: target }))); + } + return res.concat(target); + }, []) || undefined; + } + copy(target) { + target.fromObject(this); + } + fromObject(source, opts) { + super.fromObject(source); + this.rankOrder = source.rankOrder; + this.gear = source.gear && ReferentialRef.fromObject(source.gear); + this.measurementValues = source.measurementValues && Object.assign({}, source.measurementValues) || MeasurementUtils.toMeasurementValues(source.measurements); + // Parent / children + this.parentId = source.parentId; + this.parent = source.parent && PhysicalGear_1.fromObject(source.parent); + if (!opts || opts.withChildren !== false) { + this.children = source.children && source.children.map(child => PhysicalGear_1.fromObject(child, opts)) || undefined; + } + // Trip + if (source.trip) { + this.trip = source.trip && TripRef.fromObject(source.trip); + this.tripId = this.trip && this.trip.id; + } + else { + this.trip = null; + this.tripId = source.tripId || null; // to keep tripId on clone even if source.trip is null. + } + return this; + } + asObject(opts) { + const target = super.asObject(opts); + target.gear = this.gear && this.gear.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS)) || undefined; + if (target.gear && !target.gear.entityName) { + console.warn('Fixme : manually set gear entityName!'); + target.gear.entityName = 'GearVO'; + } + target.rankOrder = this.rankOrder; + // Measurements + target.measurementValues = MeasurementValuesUtils.asObject(this.measurementValues, opts); + if (isEmptyArray(target.measurements)) + delete target.measurements; + // Parent / children + target.children = this.children && (!opts || opts.withChildren !== false) && this.children.map(c => c.asObject(opts)) || undefined; + target.parentId = this.parentId || this.parent && this.parent.id || undefined; + if (opts && opts.minify) { + // Parent not need, as the tree will be used by pod + delete target.parent; + delete target.parentId; + // Trip not need by pod + delete target.trip; + } + if (opts && opts.keepRemoteId === false && target.tripId >= 0) + delete target.tripId; + if (opts && opts.keepLocalId === false && target.tripId < 0) + delete target.tripId; + return target; + } + equals(other, opts = { withMeasurementValues: false }) { + return (super.equals(other) && isNotNil(this.id)) + || ( + // Same gear + (this.gear && other.gear && this.gear.id === other.gear.id) + // Same rankOrder + && (this.rankOrder === other.rankOrder) + // Same parent + && ((!this.parentId && !other.parentId) || this.parentId === other.parentId) + // Same trip + && ((!this.tripId && !other.tripId) || this.tripId === other.tripId) + // Same measurementsValues + && (opts.withMeasurementValues !== true || MeasurementValuesUtils.equals(this.measurementValues, other.measurementValues))); + } +}; +PhysicalGear.rankOrderComparator = EntityUtils.sortComparator('rankOrder'); +PhysicalGear = PhysicalGear_1 = __decorate([ + EntityClass({ typename: 'PhysicalGearVO' }), + __metadata("design:paramtypes", []) +], PhysicalGear); +export { PhysicalGear }; +//# sourceMappingURL=physical-gear.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/physical-gear.model.js.map b/out-tsc/app/app/trip/physicalgear/physical-gear.model.js.map new file mode 100644 index 000000000..2f235cf96 --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/physical-gear.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"physical-gear.model.js","sourceRoot":"","sources":["../../../../../src/app/trip/physicalgear/physical-gear.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/physical-gear.module.js b/out-tsc/app/app/trip/physicalgear/physical-gear.module.js new file mode 100644 index 000000000..fec26c352 --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/physical-gear.module.js @@ -0,0 +1,50 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { PhysicalGearForm } from './physical-gear.form'; +import { PhysicalGearTable } from './physical-gears.table'; +import { PhysicalGearModal } from './physical-gear.modal'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { SelectPhysicalGearModal } from './select-physical-gear.modal'; +import { AppDataModule } from '@app/data/data.module'; +import { TranslateModule } from '@ngx-translate/core'; +import { CommonModule } from '@angular/common'; +import { AppCoreModule } from '@app/core/core.module'; +import { VesselModule } from '@app/vessel/vessel.module'; +import { AppMeasurementModule } from '@app/data/measurement/measurement.module'; +let AppPhysicalGearModule = class AppPhysicalGearModule { + constructor() { + console.debug('[physical-gear] Creating module...'); + } +}; +AppPhysicalGearModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TranslateModule.forChild(), + // App module + AppCoreModule, + AppReferentialModule, + AppDataModule, + // Functional modules + VesselModule, + AppMeasurementModule + ], + declarations: [ + PhysicalGearTable, + PhysicalGearForm, + PhysicalGearModal, + SelectPhysicalGearModal, + ], + exports: [ + // Modules + TranslateModule, + // Pipes + // Components + PhysicalGearTable, + SelectPhysicalGearModal + ] + }), + __metadata("design:paramtypes", []) +], AppPhysicalGearModule); +export { AppPhysicalGearModule }; +//# sourceMappingURL=physical-gear.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/physical-gear.module.js.map b/out-tsc/app/app/trip/physicalgear/physical-gear.module.js.map new file mode 100644 index 000000000..a129556a7 --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/physical-gear.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"physical-gear.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/physicalgear/physical-gear.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAkCzE,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAEhC;QACE,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACtD,CAAC;CACF,CAAA;AALY,qBAAqB;IA/BjC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,eAAe,CAAC,QAAQ,EAAE;YAE1B,aAAa;YACb,aAAa;YACb,oBAAoB;YACpB,aAAa;YAEb,qBAAqB;YACrB,YAAY;YACZ,oBAAoB;SACrB;QACD,YAAY,EAAE;YACZ,iBAAiB;YACjB,gBAAgB;YAChB,iBAAiB;YACjB,uBAAuB;SACxB;QACD,OAAO,EAAE;YACP,UAAU;YACV,eAAe;YAEf,QAAQ;YAER,aAAa;YACb,iBAAiB;YACjB,uBAAuB;SACxB;KACF,CAAC;;GACW,qBAAqB,CAKjC;SALY,qBAAqB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/physical-gears.table.js b/out-tsc/app/app/trip/physicalgear/physical-gears.table.js new file mode 100644 index 000000000..d2685f4fd --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/physical-gears.table.js @@ -0,0 +1,394 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, Component, Inject, Injector, Input, Output } from '@angular/core'; +import { BaseMeasurementsTable } from '@app/data/measurement/measurements-table.class'; +import { createPromiseEventEmitter, isNotNil, ReferentialRef, SharedValidators, toBoolean, } from '@sumaris-net/ngx-components'; +import { PhysicalGearModal } from './physical-gear.modal'; +import { PHYSICAL_GEAR_DATA_SERVICE_TOKEN } from './physicalgear.service'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { PhysicalGearFilter } from './physical-gear.filter'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { debounceTime, filter } from 'rxjs/operators'; +import { MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { PhysicalGear } from '@app/trip/physicalgear/physical-gear.model'; +import { environment } from '@environments/environment'; +import { BehaviorSubject, merge, Subscription } from 'rxjs'; +import { TripContextService } from '@app/trip/trip-context.service'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +export const GEAR_RESERVED_START_COLUMNS = ['gear']; +export const GEAR_RESERVED_END_COLUMNS = ['subGearsCount', 'lastUsed', 'comments']; +let PhysicalGearTable = class PhysicalGearTable extends BaseMeasurementsTable { + constructor(injector, formBuilder, dataService, context) { + super(injector, PhysicalGear, PhysicalGearFilter, dataService, null, // No validator = no inline edition + { + reservedStartColumns: GEAR_RESERVED_START_COLUMNS, + reservedEndColumns: GEAR_RESERVED_END_COLUMNS, + mapPmfms: (pmfms) => this.mapPmfms(pmfms), + requiredStrategy: true + }); + this.context = context; + this.touchedSubject = new BehaviorSubject(false); + this.canDelete = true; + this.canSelect = true; + this.useSticky = false; + this.title = null; + this.defaultGear = null; + this.canEditGear = true; + this.showError = true; + this.showFilter = false; + this.showPmfmDetails = false; + this.compactFields = true; + this.minRowCount = 0; + this.openSelectPreviousGearModal = createPromiseEventEmitter(); + this.filterForm = formBuilder.group({ + tripId: [null], + startDate: [null, Validators.compose([Validators.required, SharedValidators.validDate])], + endDate: [null, Validators.compose([SharedValidators.validDate, SharedValidators.dateRangeEnd('startDate')])], + }); + this.defaultSortBy = 'id'; + this.inlineEdition = false; + this.i18nColumnPrefix = 'TRIP.PHYSICAL_GEAR.TABLE.'; + this.i18nPmfmPrefix = 'TRIP.PHYSICAL_GEAR.PMFM.'; + this.autoLoad = true; + this.canEdit = true; + // Set default acquisition level + this.acquisitionLevel = AcquisitionLevelCodes.PHYSICAL_GEAR; + // Excluded columns, by default + this.excludesColumns.push('lastUsed'); + this.excludesColumns.push('subGearsCount'); + // FOR DEV ONLY ---- + this.logPrefix = '[physical-gears-table] '; + this.debug = !environment.production; + } + set tripId(tripId) { + this.setTripId(tripId); + } + get tripId() { + return this.filterForm.get('tripId').value; + } + set showSelectColumn(show) { + this.setShowColumn('select', show); + } + set showLastUsedColumn(show) { + this.setShowColumn('lastUsed', show); + } + set showGearColumn(show) { + this.setShowColumn('gear', show); + } + get showGearColumn() { + return this.getShowColumn('gear'); + } + set allowChildrenGears(value) { + this.setModalOption('allowChildrenGears', value); + } + get allowChildrenGears() { + return this.getModalOption('allowChildrenGears'); + } + set showSubGearsCountColumn(show) { + this.setShowColumn('subGearsCount', show); + } + get showSubGearsCountColumn() { + return this.getShowColumn('subGearsCount'); + } + get valid() { + return super.valid && (this.totalRowCount >= this.minRowCount); + } + get invalid() { + return super.invalid || (this.totalRowCount < this.minRowCount); + } + get touched() { + return this.touchedSubject.value; + } + markAllAsTouched(opts) { + this.touchedSubject.next(true); + super.markAllAsTouched(opts); + } + markAsPristine(opts) { + this.touchedSubject.next(false); + super.markAsPristine(opts); + } + ngOnInit() { + super.ngOnInit(); + this.mobile = toBoolean(this.mobile, this.settings.mobile); + this._enabled = this.canEdit; + if (!this._enabled || !this.canDelete || !this.mobile) + this.excludesColumns.push('actions'); + // Update filter when changes + this.registerSubscription(this.filterForm.valueChanges + .pipe(debounceTime(250), + // DEBUG + //tap(json => console.debug("filter changed:", json)), + filter(() => this.filterForm.valid)) + // Applying the filter + .subscribe((json) => this.setFilter(Object.assign(Object.assign({}, this.filter), json), { emitEvent: true /*always apply*/ }))); + if (this.minRowCount > 0) { + this.registerSubscription(merge(this.touchedSubject, this.dataSource.rowsSubject) + .pipe(debounceTime(100), + //tap(() => console.debug(this.logPrefix + 'Updating minRowCount error')) + filter(_ => this.enabled)) + .subscribe(_ => { + if (this.totalRowCount < this.minRowCount) { + const error = this.translate.instant((this.minRowCount === 1 + ? 'TRIP.PHYSICAL_GEAR.ERROR.NOT_ENOUGH_SUB_GEAR' + : 'TRIP.PHYSICAL_GEAR.ERROR.NOT_ENOUGH_SUB_GEARS'), { minRowCount: this.minRowCount }); + this.setError(error); + } + else { + this.resetError(); + } + })); + } + } + ngOnDestroy() { + super.ngOnDestroy(); + this.openSelectPreviousGearModal.unsubscribe(); + } + setTripId(tripId, opts) { + this.setFilter(Object.assign(Object.assign({}, this.filterForm.value), { tripId }), opts); + } + updateView(res, opts) { + return super.updateView(res, opts); + } + setModalOption(key, value) { + this.modalOptions = this.modalOptions || {}; + this.modalOptions[key] = value; + } + getModalOption(key) { + return this.modalOptions[key]; + } + setFilter(value, opts) { + value = PhysicalGearFilter.fromObject(value); + // Update the form content + if (!opts || opts.emitEvent !== false) { + this.filterForm.patchValue(value.asObject(), { emitEvent: false }); + } + super.setFilter(value, opts); + } + setError(error, opts) { + super.setError(error, opts); + } + resetError(opts) { + this.setError(undefined, opts); + } + /* -- protected function -- */ + mapPmfms(pmfms) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const includedPmfmIds = (_a = this.context.program) === null || _a === void 0 ? void 0 : _a.getPropertyAsNumbers(ProgramProperties.TRIP_PHYSICAL_GEARS_COLUMNS_PMFM_IDS); + // Keep selectivity device, if any + return pmfms.filter(p => p.required || (includedPmfmIds === null || includedPmfmIds === void 0 ? void 0 : includedPmfmIds.includes(p.id))); + }); + } + openNewRowDetail() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail) + return false; + if (this.onNewRow.observers.length) { + this.onNewRow.emit(); + return true; + } + const { data, role } = yield this.openDetailModal(); + if (data && role !== 'delete') { + if (this.debug) + console.debug('Adding new gear:', data); + yield this.addEntityToTable(data, { confirmCreate: false, editing: false }); + } + return true; + }); + } + openRow(id, row) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail) + return false; + if (this.onOpenRow.observers.length) { + this.onOpenRow.emit(row); + return true; + } + // Clone to keep original object unchanged + const gear = PhysicalGear.fromObject(row.currentData).clone(); + // Convert measurementValues to model, in order to force values of not required PMFM to be converted later, in the modal's form + gear.measurementValues = MeasurementValuesUtils.asObject(gear.measurementValues, { minify: true }); + const { data, role } = yield this.openDetailModal(gear); + if (data && role !== 'delete') { + yield this.updateEntityToTable(data, row); + } + else { + this.editedRow = null; + } + return true; + }); + } + openDetailModal(dataToOpen) { + return __awaiter(this, void 0, void 0, function* () { + const isNew = !dataToOpen && true; + if (isNew) { + dataToOpen = new PhysicalGear(); + yield this.onNewEntity(dataToOpen); + } + dataToOpen.tripId = this.tripId; + const subscription = new Subscription(); + const showSearchButton = isNew && this.openSelectPreviousGearModal.observers.length > 0; + const hasTopModal = !!(yield this.modalCtrl.getTop()); + const modal = yield this.modalCtrl.create({ + component: PhysicalGearModal, + componentProps: Object.assign({ programLabel: this.programLabel, acquisitionLevel: this.acquisitionLevel, disabled: this.disabled, data: dataToOpen.clone(), // Do a copy, because edition can be cancelled + isNew, tripId: this.tripId, canEditGear: this.canEditGear, canEditRankOrder: this.canEditRankOrder, showSearchButton, onAfterModalInit: (modal) => { + subscription.add(modal.searchButtonClick.subscribe(event => this.openSelectPreviousGearModal.emit(event))); + }, onDelete: (event, data) => this.deleteEntity(event, data), showGear: this.showGearColumn, i18nSuffix: this.i18nColumnSuffix, mobile: this.mobile, usageMode: this.usageMode }, this.modalOptions), + cssClass: hasTopModal ? 'modal-large stack-modal' : 'modal-large', + backdropDismiss: false, + keyboardClose: true + }); + // Open the modal + yield modal.present(); + // Wait until closed + const { data, role } = yield modal.onDidDismiss(); + subscription.unsubscribe(); + if (data && this.debug) + console.debug(this.logPrefix + 'Modal result: ', data, role); + return { data: (data instanceof PhysicalGear) ? data : undefined, role }; + }); + } + pressRow(event, row) { + return super.pressRow(event, row); + } + deleteEntity(event, data) { + return __awaiter(this, void 0, void 0, function* () { + const row = yield this.findRowByEntity(data); + // Row not exists: OK + if (!row) + return true; + const confirmed = yield this.canDeleteRows([row]); + if (confirmed) { + return this.deleteRow(null, row, { interactive: false /*already confirmed*/ }); + } + return confirmed; + }); + } + markAsReady(opts) { + super.markAsReady(opts); + } + /* -- protected methods -- */ + onNewEntity(data) { + const _super = Object.create(null, { + onNewEntity: { get: () => super.onNewEntity } + }); + return __awaiter(this, void 0, void 0, function* () { + console.debug(this.logPrefix + 'Initializing new row data...'); + yield _super.onNewEntity.call(this, data); + // Default gear + if (isNotNil(this.defaultGear)) { + data.gear = this.defaultGear; + } + // Link to parent + data.tripId = this.tripId; + }); + } + findRowByEntity(physicalGear) { + return __awaiter(this, void 0, void 0, function* () { + return PhysicalGear && this.dataSource.getRows().find(r => r.currentData.equals(physicalGear)); + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearTable.prototype, "canDelete", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearTable.prototype, "canSelect", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], PhysicalGearTable.prototype, "copyPreviousGears", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearTable.prototype, "useSticky", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PhysicalGearTable.prototype, "title", void 0); +__decorate([ + Input(), + __metadata("design:type", ReferentialRef) +], PhysicalGearTable.prototype, "defaultGear", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearTable.prototype, "canEditGear", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearTable.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearTable.prototype, "showFilter", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearTable.prototype, "showPmfmDetails", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearTable.prototype, "compactFields", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PhysicalGearTable.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PhysicalGearTable.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PhysicalGearTable.prototype, "minRowCount", void 0); +__decorate([ + Input(), + __metadata("design:type", Number), + __metadata("design:paramtypes", [Number]) +], PhysicalGearTable.prototype, "tripId", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], PhysicalGearTable.prototype, "showSelectColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], PhysicalGearTable.prototype, "showLastUsedColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], PhysicalGearTable.prototype, "showGearColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], PhysicalGearTable.prototype, "allowChildrenGears", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], PhysicalGearTable.prototype, "showSubGearsCountColumn", null); +__decorate([ + Output(), + __metadata("design:type", Object) +], PhysicalGearTable.prototype, "openSelectPreviousGearModal", void 0); +PhysicalGearTable = __decorate([ + Component({ + selector: 'app-physical-gears-table', + templateUrl: 'physical-gears.table.html', + styleUrls: ['physical-gears.table.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __param(2, Inject(PHYSICAL_GEAR_DATA_SERVICE_TOKEN)), + __metadata("design:paramtypes", [Injector, + UntypedFormBuilder, Object, TripContextService]) +], PhysicalGearTable); +export { PhysicalGearTable }; +//# sourceMappingURL=physical-gears.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/physical-gears.table.js.map b/out-tsc/app/app/trip/physicalgear/physical-gears.table.js.map new file mode 100644 index 000000000..3ef000f6b --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/physical-gears.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"physical-gears.table.js","sourceRoot":"","sources":["../../../../../src/app/trip/physicalgear/physical-gears.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/physicalgear.service.js b/out-tsc/app/app/trip/physicalgear/physicalgear.service.js new file mode 100644 index 000000000..acf17f765 --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/physicalgear.service.js @@ -0,0 +1,526 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable, InjectionToken } from '@angular/core'; +import { AccountService, AppFormUtils, arrayDistinct, BaseGraphqlService, EntitiesStorage, EntityUtils, firstNotNilPromise, FormErrorTranslator, GraphqlService, isEmptyArray, isNil, isNotEmptyArray, isNotNil, JobUtils, NetworkService, removeDuplicatesFromArray, toNumber, } from '@sumaris-net/ngx-components'; +import { Trip } from '../trip/trip.model'; +import { environment } from '@environments/environment'; +import { combineLatest, EMPTY } from 'rxjs'; +import { filter, first, map, throttleTime } from 'rxjs/operators'; +import { gql } from '@apollo/client/core'; +import { ReferentialFragments } from '@app/referential/services/referential.fragments'; +import { PhysicalGearFilter } from './physical-gear.filter'; +import moment from 'moment'; +import { TripFilter } from '@app/trip/trip/trip.filter'; +import { DataErrorCodes } from '@app/data/services/errors'; +import { mergeLoadResult } from '@app/shared/functions'; +import { VesselSnapshotFragments } from '@app/referential/services/vessel-snapshot.service'; +import { ProgramFragments } from '@app/referential/services/program.fragments'; +import { PhysicalGear } from '@app/trip/physicalgear/physical-gear.model'; +import { ProgressionModel } from '@app/shared/progression/progression.model'; +import { PhysicalGearValidatorService } from '@app/trip/physicalgear/physicalgear.validator'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { MEASUREMENT_VALUES_PMFM_ID_REGEXP, MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { DataEntityUtils } from '@app/data/services/model/data-entity.model'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { PhysicalGearFragments } from "@app/trip/common/data.fragments"; +const Queries = { + loadAll: gql ` + query PhysicalGears($filter: PhysicalGearFilterVOInput, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String) { + data: physicalGears(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection) { + ...PhysicalGearFragment + } + } + ${PhysicalGearFragments.physicalGear} + ${ReferentialFragments.lightReferential} + ${ReferentialFragments.lightDepartment} + `, + load: gql ` + query PhysicalGear($id: Int!) { + data: physicalGear(id: $id) { + ...PhysicalGearFragment + } + } + ${PhysicalGearFragments.physicalGear} + ${ReferentialFragments.lightReferential} + ${ReferentialFragments.lightDepartment} + `, + loadAllWithTrip: gql ` + query PhysicalGearsWithTrip($filter: PhysicalGearFilterVOInput, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String) { + data: physicalGears(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection) { + ...PhysicalGearFragment + trip { + departureDateTime + returnDateTime + program { + ...ProgramRefFragment + } + vesselSnapshot { + ...LightVesselSnapshotFragment + } + } + } + } + ${PhysicalGearFragments.physicalGear} + ${ReferentialFragments.lightReferential} + ${ReferentialFragments.lightDepartment} + ${ReferentialFragments.lightDepartment} + ${VesselSnapshotFragments.lightVesselSnapshot} + ${ProgramFragments.programRef} + `, +}; +const sortByTripDateFn = (n1, n2) => { + const d1 = n1.trip && (n1.trip.returnDateTime || n1.trip.departureDateTime); + const d2 = n2.trip && (n2.trip.returnDateTime || n2.trip.departureDateTime); + return d1.isSame(d2) ? 0 : (d1.isAfter(d2) ? 1 : -1); +}; +export const PHYSICAL_GEAR_DATA_SERVICE_TOKEN = new InjectionToken('PhysicalGearDataService'); +let PhysicalGearService = class PhysicalGearService extends BaseGraphqlService { + constructor(graphql, network, accountService, entities, validatorService, programRefService, formErrorTranslator) { + super(graphql, environment); + this.graphql = graphql; + this.network = network; + this.accountService = accountService; + this.entities = entities; + this.validatorService = validatorService; + this.programRefService = programRefService; + this.formErrorTranslator = formErrorTranslator; + this.loading = false; + this._logPrefix = '[physical-gear-service] '; + // -- For DEV only + this._debug = !environment.production; + } + watchAll(offset, size, sortBy, sortDirection, dataFilter, opts) { + if (!dataFilter || (isNil(dataFilter.parentGearId) && (isNil(dataFilter.program) || (isNil(dataFilter.vesselId) && isNil(dataFilter.startDate))))) { + console.warn('[physical-gear-service] Missing physical gears filter. At least \'parentGearId\', or \'program\' and \'vesselId\' or \'startDate\'. Skipping.'); + return EMPTY; + } + dataFilter = this.asFilter(dataFilter); + // Fix sortBy + sortBy = sortBy !== 'id' ? sortBy : 'rankOrder'; + sortBy = sortBy !== 'label' ? sortBy : 'gear.label'; + const forceOffline = this.network.offline + || (isNotNil(dataFilter.tripId) && dataFilter.tripId < 0) + || (isNotNil(dataFilter.parentGearId) && dataFilter.parentGearId < 0); + ; + const offline = forceOffline || (opts === null || opts === void 0 ? void 0 : opts.withOffline) || false; + const online = !forceOffline; + const offline$ = offline && this.watchAllLocally(offset, size, sortBy, sortDirection, dataFilter, Object.assign(Object.assign({}, opts), { toEntity: false, distinctBy: undefined })); + const online$ = online && this.watchAllRemotely(offset, size, sortBy, sortDirection, dataFilter, Object.assign(Object.assign({}, opts), { toEntity: false, distinctBy: undefined })); + // Merge local and remote + const res = (offline$ && online$) + ? combineLatest([offline$, online$]) + .pipe(map(([res1, res2]) => mergeLoadResult(res1, res2))) + : (offline$ || online$); + return res.pipe(map(res => this.applyWatchOptions(res, offset, size, sortBy, sortDirection, dataFilter, opts))); + } + deleteAll(data, options) { + return __awaiter(this, void 0, void 0, function* () { + console.error('PhysicalGearService.deleteAll() not implemented yet'); + }); + } + saveAll(data, options) { + return __awaiter(this, void 0, void 0, function* () { + console.error('PhysicalGearService.saveAll() not implemented yet !'); + return data; + }); + } + watchAllRemotely(offset, size, sortBy, sortDirection, dataFilter, opts) { + if (!dataFilter || (isNil(dataFilter.parentGearId) && (isNil(dataFilter.program) || (isNil(dataFilter.vesselId) && isNil(dataFilter.startDate))))) { + console.warn('[physical-gear-service] Missing physical gears filter. Expected at least \'parentGearId\', or \'program\' and \'vesselId\' or \'startDate\'. Skipping.'); + return EMPTY; + } + const variables = { + offset: offset || 0, + size: size >= 0 ? size : 100, + sortBy: (sortBy !== 'id' && sortBy !== 'lastUsed' && sortBy) || 'rankOrder', + sortDirection: sortDirection || 'desc', + filter: dataFilter.asPodObject() + }; + let now = this._debug && Date.now(); + if (this._debug) + console.debug('[physical-gear-service] Loading physical gears... using options:', variables); + const withTrip = dataFilter && dataFilter.vesselId && isNil(dataFilter.tripId); + const query = (opts === null || opts === void 0 ? void 0 : opts.query) || (withTrip ? Queries.loadAllWithTrip : Queries.loadAll); + return this.graphql.watchQuery({ + query, + variables, + error: { code: DataErrorCodes.LOAD_ENTITIES_ERROR, message: 'ERROR.LOAD_ENTITIES_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || undefined + }) + .pipe(throttleTime(200), // avoid multiple call + filter(() => !this.loading), map(({ data, total }) => { + if (now) { + console.debug(`[physical-gear-service] Loaded ${data.length} physical gears in ${Date.now() - now}ms`); + now = undefined; + } + return { + data, + total: total || data.length + }; + }), map(res => this.applyWatchOptions(res, offset, size, sortBy, sortDirection, dataFilter, opts))); + } + /** + * Get physical gears, from trips data, and imported gears (offline mode) + * + * @param offset + * @param size + * @param sortBy + * @param sortDirection + * @param dataFilter + * @param opts + */ + watchAllLocally(offset, size, sortBy, sortDirection, dataFilter, opts) { + if (!dataFilter || (isNil(dataFilter.parentGearId) && isNil(dataFilter.vesselId))) { + console.warn('[physical-gear-service] Missing physical gears filter. Expected at least \'vesselId\' or \'parentGearId\'. Skipping.'); + return EMPTY; + } + const withTrip = isNil(dataFilter.tripId); + const fromTrip$ = this.watchAllLocallyFromTrips(offset, size, sortBy, sortDirection, dataFilter, Object.assign(Object.assign({}, opts), { toEntity: false, distinctBy: undefined })); + // Then, search from predoc (physical gears imported by the offline mode, into the local storage) + const variables = { + offset: offset || 0, + size, + sortBy: (sortBy !== 'id' && sortBy !== 'lastUsed' && sortBy) || 'rankOrder', + sortDirection: sortDirection || 'desc', + filter: dataFilter.asFilterFn() + }; + if (this._debug) + console.debug('[physical-gear-service] Loading physical gears locally... using variables:', variables); + const fromStorage$ = this.entities.watchAll(PhysicalGear.TYPENAME, variables, { fullLoad: opts && opts.fullLoad }); + const res = (fromTrip$ && fromStorage$) + // Merge local and remote + ? combineLatest([fromTrip$, fromStorage$]) + .pipe(map(([res1, res2]) => mergeLoadResult(res1, res2))) + : (fromTrip$ || fromStorage$); + return res.pipe(map(res => this.applyWatchOptions(res, offset, size, sortBy, sortDirection, dataFilter, opts))); + } + watchAllLocallyFromTrips(offset, size, sortBy, sortDirection, dataFilter, opts) { + if (!dataFilter || (isNil(dataFilter.tripId) && (isNil(dataFilter.vesselId) || isNil(dataFilter.program)))) { + console.warn('[physical-gear-service] Trying to load gears from trips without [vesselId, program] or without [tripdId]. Skipping.'); + return EMPTY; + } + const tripFilter = TripFilter.fromObject(dataFilter && { + id: dataFilter.tripId, + vesselId: dataFilter.vesselId, + startDate: dataFilter.startDate, + endDate: dataFilter.endDate, + program: dataFilter.program, + excludedIds: isNotNil(dataFilter.excludeTripId) ? [dataFilter.excludeTripId] : undefined + }); + size = size >= 0 ? size : 100; + const variables = { + offset: offset || 0, + size, + sortBy: 'id', + sortDirection: sortDirection || 'desc', + filter: tripFilter.asFilterFn() + }; + if (this._debug) + console.debug('[physical-gear-service] Loading physical gears, from local trips... using variables:', variables); + const withTrip = isNil(dataFilter.tripId); + return this.entities.watchAll(Trip.TYPENAME, variables, { fullLoad: true }) // FullLoad is needed to get gears + .pipe( + // Need only one iteration + first(), + // Get trips array + map(res => res && res.data || []), + // Extract physical gears, from trip + map(trips => trips.reduce((res, trip) => res.concat((trip.gears || []) + .map(gear => (Object.assign(Object.assign({}, gear), { + // Add metadata on trip, if need + trip: withTrip ? { + id: trip.id, + program: trip.program, + departureDateTime: trip.departureDateTime, + returnDateTime: trip.returnDateTime + } : undefined })))), [])), + // Return as load result + map(data => ({ data, total: data.length })), map(res => this.applyWatchOptions(res, offset, size, sortBy, sortDirection, dataFilter, opts))); + } + applyWatchOptions({ data, total }, offset, size, sortBy, sortDirection, filter, opts) { + const toEntity = (!opts || opts.toEntity !== false); + let entities = toEntity ? + (data || []).map(source => PhysicalGear.fromObject(source, opts)) + : (data || []); + // Sort by trip dates + const withTrip = isNil(filter.tripId); + // Remove duplicated gears + if (isNotEmptyArray(opts === null || opts === void 0 ? void 0 : opts.distinctBy)) { + // Sort by trip dates desc, to keep newer + if (toEntity && withTrip) + entities.sort(sortByTripDateFn).reverse(); + entities = arrayDistinct(entities, opts === null || opts === void 0 ? void 0 : opts.distinctBy); + } + // Sort + if (sortBy) { + entities = toEntity ? entities : entities.slice(); // Make sure to source array, as it can be a readonly array + if (sortBy === 'lastUsed') { + if (toEntity && withTrip) { + entities.sort(sortByTripDateFn); + if (sortDirection === 'desc') { + entities.reverse(); + } + } + } + else { + EntityUtils.sort(entities, sortBy, sortDirection); + } + } + return { data: entities, total }; + } + load(id, tripId, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (isNil(id)) + throw new Error('Missing argument \'id\' '); + const now = this._debug && Date.now(); + if (this._debug) + console.debug(`[physical-gear-service] Loading physical gear #${id}...`); + this.loading = true; + try { + let json; + const offline = this.network.offline || id < 0; + // Load locally + if (offline) { + // Watch on storage + json = yield this.entities.load(id, PhysicalGear.TYPENAME); + if (!json) { + // If not on storage, watch on trip + const trip = yield this.entities.load(tripId, Trip.TYPENAME); + if (trip && trip.gears) { + json = trip.gears.find(g => g.id === id); + } + } + if (!json) + throw { code: DataErrorCodes.LOAD_ENTITY_ERROR, message: 'ERROR.LOAD_ENTITY_ERROR' }; + } + // Load from pod + else { + const res = yield this.graphql.query({ + query: Queries.load, + variables: { id }, + error: { code: DataErrorCodes.LOAD_ENTITY_ERROR, message: 'ERROR.LOAD_ENTITY_ERROR' } + }); + json = res && res.data; + } + // Transform to entity + const data = (!opts || opts.toEntity !== false) + ? PhysicalGear.fromObject(json) + : json; + if (data && this._debug) + console.debug(`[physical-gear-service] Physical gear #${id} loaded in ${Date.now() - now}ms`, data); + return data; + } + finally { + this.loading = false; + } + }); + } + loadAll(offset, size, sortBy, sortDirection, dataFilter, opts) { + return __awaiter(this, void 0, void 0, function* () { + return firstNotNilPromise(this.watchAll(offset, size, sortBy, sortDirection, dataFilter, opts)); + }); + } + loadAllByParentId(filter, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + // If we know the local trip, load it + if (isNotNil(filter.tripId) && filter.tripId < 0) { + const trip = yield this.entities.load(filter.tripId, Trip.TYPENAME); + return (_a = (trip.gears || []).find(g => g.id === filter.parentGearId)) === null || _a === void 0 ? void 0 : _a.children; + } + const res = yield this.loadAll(0, 100, 'rankOrder', 'asc', filter, opts); + return res === null || res === void 0 ? void 0 : res.data; + }); + } + controlAllByTrip(trip, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const maxProgression = toNumber(opts === null || opts === void 0 ? void 0 : opts.maxProgression, 100); + opts = Object.assign(Object.assign({}, opts), { maxProgression }); + opts.progression = opts.progression || new ProgressionModel({ total: maxProgression }); + const endProgression = opts.progression.current + maxProgression; + try { + const entities = trip.gears; + if (isEmptyArray(entities)) + return undefined; // Skip if empty + // Prepare control options + opts = yield this.fillControlOptionsForTrip(trip.id, opts); + const progressionStep = maxProgression / entities.length; // 2 steps by gear: control, then save + let errorsById = null; + // For each entity + for (const entity of entities) { + const errors = yield this.control(entity, opts); + // Control failed: save error + if (errors) { + errorsById = errorsById || {}; + errorsById[entity.id] = errors; + // translate, and update the entity + const errorMessage = this.formErrorTranslator.translateErrors(errors, opts.translatorOptions); + DataEntityUtils.markAsInvalid(entity, errorMessage); + } + // OK succeed: mark as controlled + else { + DataEntityUtils.markAsControlled(entity); + } + if ((_a = opts.progression) === null || _a === void 0 ? void 0 : _a.cancelled) + return; // Cancel + opts.progression.increment(progressionStep); + } + return errorsById; + } + catch (err) { + console.error(err && err.message || err); + throw err; + } + finally { + if (opts.progression.current < endProgression) { + opts.progression.current = endProgression; + } + } + }); + } + control(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + const now = this._debug && Date.now(); + if (this._debug) + console.debug(`[physical-gear-service] Control #${entity.id}...`, entity); + // Prepare control options + opts = yield this.fillControlOptionsForGear(entity, opts); + // Make sure to convert ALL pmfms to form (sometime we convert only required pmfms - e.g. see optimization in the physical gear table) + if (MeasurementValuesUtils.isMeasurementFormValues(entity.measurementValues)) { + entity.measurementValues.__typename = undefined; + entity.measurementValues = MeasurementValuesUtils.normalizeValuesToForm(entity.measurementValues, opts.pmfms, { keepSourceObject: true, onlyExistingPmfms: true }); + } + // Create validator + const form = this.validatorService.getFormGroup(entity, opts); + if (!form.valid) { + // Wait end of validation (e.g. async validators) + yield AppFormUtils.waitWhilePending(form); + // Get form errors + if (form.invalid) { + const errors = AppFormUtils.getFormErrors(form); + console.info(`[physical-gear-service] Control #${entity.id} [INVALID] in ${Date.now() - now}ms`, errors); + return errors; + } + } + }); + } + executeImport(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + const maxProgression = opts && opts.maxProgression || 100; + filter = Object.assign({ startDate: moment().add(-1, 'month') }, filter); + console.info('[physical-gear-service] Importing physical gears...'); + const res = yield JobUtils.fetchAllPages((offset, size) => this.loadAll(offset, size, 'id', null, filter, { + fetchPolicy: 'no-cache', + distinctByRankOrder: true, + toEntity: false, + query: Queries.loadAllWithTrip + }), { + progression: opts === null || opts === void 0 ? void 0 : opts.progression, + maxProgression: maxProgression * 0.9, + logPrefix: this._logPrefix, + fetchSize: 100 + }); + // Save result locally + yield this.entities.saveAll(res.data, { entityName: PhysicalGear.TYPENAME, reset: true }); + }); + } + asFilter(filter) { + return PhysicalGearFilter.fromObject(filter); + } + translateControlPath(path, opts) { + opts = opts || {}; + opts.i18nPrefix = opts.i18nPrefix || 'TRIP.PHYSICAL_GEAR.EDIT.'; + // Translate PMFM field + if (MEASUREMENT_VALUES_PMFM_ID_REGEXP.test(path) && opts.pmfms) { + const pmfmId = parseInt(path.split('.').pop()); + const pmfm = opts.pmfms.find(p => p.id === pmfmId); + return PmfmUtils.getPmfmName(pmfm); + } + // Default translation + return this.formErrorTranslator.translateControlPath(path, opts); + } + /* -- protected methods -- */ + fillValidatorOptionsForTrip(tripId, opts) { + return __awaiter(this, void 0, void 0, function* () { + opts = opts || {}; + // Check program filled + if (!opts.program) + throw new Error('Missing program in options. Unable to control trip\'s physical gears'); + const allowChildren = opts === null || opts === void 0 ? void 0 : opts.program.getPropertyAsBoolean(ProgramProperties.TRIP_PHYSICAL_GEAR_ALLOW_CHILDREN); + return Object.assign(Object.assign({ acquisitionLevel: AcquisitionLevelCodes.PHYSICAL_GEAR, withChildren: allowChildren, minChildrenCount: allowChildren && (opts === null || opts === void 0 ? void 0 : opts.program.getPropertyAsInt(ProgramProperties.TRIP_PHYSICAL_GEAR_MIN_CHILDREN_COUNT)) }, opts), { withMeasurementValues: true }); + }); + } + fillControlOptionsForTrip(tripId, opts) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + // Fill options need by the operation validator + opts = yield this.fillValidatorOptionsForTrip(tripId, opts); + // Prepare pmfms (the full list, not filtered by gearId) + if (!opts.initialPmfms) { + const programLabel = (_a = opts.program) === null || _a === void 0 ? void 0 : _a.label; + const acquisitionLevel = AcquisitionLevelCodes.PHYSICAL_GEAR; + opts.initialPmfms = programLabel && (yield this.programRefService.loadProgramPmfms(programLabel, { acquisitionLevel })) || []; + } + // Prepare children pmfms (the full list, not filtered by gearId) + if (opts.withChildren && !opts.initialChildrenPmfms) { + const programLabel = (_b = opts.program) === null || _b === void 0 ? void 0 : _b.label; + const acquisitionLevel = AcquisitionLevelCodes.CHILD_PHYSICAL_GEAR; + opts.initialChildrenPmfms = programLabel && (yield this.programRefService.loadProgramPmfms(programLabel, { acquisitionLevel })) || []; + } + // Prepare error translator + if (!opts.translatorOptions) { + opts.translatorOptions = { + controlPathTranslator: { + translateControlPath: (path) => this.translateControlPath(path, { pmfms: opts.initialPmfms }) + } + }; + } + return opts; + }); + } + fillControlOptionsForGear(entity, opts) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + opts = opts || {}; + opts = yield this.fillControlOptionsForTrip(entity.tripId, opts); + // Fill acquisition level + const isChild = isNotNil(toNumber(entity.parentId, (_a = entity.parent) === null || _a === void 0 ? void 0 : _a.id)); + opts.withChildren = opts.withChildren && !isChild; + opts.acquisitionLevel = isChild ? AcquisitionLevelCodes.CHILD_PHYSICAL_GEAR : AcquisitionLevelCodes.PHYSICAL_GEAR; + // Filter pmfms for the operation's gear + const initialPmfms = isChild ? opts.initialChildrenPmfms : opts.initialPmfms; + const gearId = (_b = entity.gear) === null || _b === void 0 ? void 0 : _b.id; + if (isNotNil(gearId)) { + opts.pmfms = initialPmfms + .filter(p => isEmptyArray(p.gearIds) || p.gearIds.includes(gearId)); + } + else { + opts.pmfms = (initialPmfms || []); + } + // Filter children pmfms, for children gears + const childrenGearIds = opts.withChildren ? removeDuplicatesFromArray((entity.children || []).map(child => { var _a; return (_a = child.gear) === null || _a === void 0 ? void 0 : _a.id; })) : undefined; + if (isNotEmptyArray(childrenGearIds) && opts.initialChildrenPmfms) { + opts.childrenPmfms = opts.initialChildrenPmfms + .filter(p => isEmptyArray(p.gearIds) || p.gearIds.some(id => childrenGearIds.includes(id))); + } + else { + opts.childrenPmfms = (opts.initialChildrenPmfms || []); + } + return opts; + }); + } +}; +PhysicalGearService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [GraphqlService, + NetworkService, + AccountService, + EntitiesStorage, + PhysicalGearValidatorService, + ProgramRefService, + FormErrorTranslator]) +], PhysicalGearService); +export { PhysicalGearService }; +//# sourceMappingURL=physicalgear.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/physicalgear.service.js.map b/out-tsc/app/app/trip/physicalgear/physicalgear.service.js.map new file mode 100644 index 000000000..754de7097 --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/physicalgear.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"physicalgear.service.js","sourceRoot":"","sources":["../../../../../src/app/trip/physicalgear/physicalgear.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/physicalgear.validator.js b/out-tsc/app/app/trip/physicalgear/physicalgear.validator.js new file mode 100644 index 000000000..9745f04b9 --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/physicalgear.validator.js @@ -0,0 +1,75 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { AppFormArray, isNil, LocalSettingsService, SharedValidators, toBoolean, toNumber } from '@sumaris-net/ngx-components'; +import { PhysicalGear } from '@app/trip/physicalgear/physical-gear.model'; +import { DataRootEntityValidatorService } from '@app/data/services/validator/root-data-entity.validator'; +import { TranslateService } from '@ngx-translate/core'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { OperationValidators } from '@app/trip/operation/operation.validator'; +let PhysicalGearValidatorService = class PhysicalGearValidatorService extends DataRootEntityValidatorService { + constructor(formBuilder, translate, measurementsValidatorService, settings) { + super(formBuilder, translate, settings); + this.measurementsValidatorService = measurementsValidatorService; + } + getFormGroup(data, opts) { + opts = opts || {}; + const form = super.getFormGroup(data, opts); + // Add measurement values form + if (opts.withMeasurementValues) { + form.setControl('measurementValues', this.getMeasurementValuesForm(data === null || data === void 0 ? void 0 : data.measurementValues, { + pmfms: opts.pmfms + })); + } + return form; + } + getFormGroupConfig(data, opts) { + const config = Object.assign(Object.assign({}, super.getFormGroupConfig(data, opts)), { __typename: [PhysicalGear.TYPENAME], rankOrder: [toNumber(data === null || data === void 0 ? void 0 : data.rankOrder, null), Validators.compose([Validators.required, SharedValidators.integer, Validators.min(1)])], gear: [(data === null || data === void 0 ? void 0 : data.gear) || null, Validators.compose([Validators.required, SharedValidators.entity])], measurementValues: this.formBuilder.group({}), tripId: [toNumber(data === null || data === void 0 ? void 0 : data.tripId, null)] }); + // Change program is optional + config['program'] = [(data === null || data === void 0 ? void 0 : data.program) || null]; + if (!opts || opts.withChildren !== false) { + config['children'] = this.getChildrenFormArray(data === null || data === void 0 ? void 0 : data.children, opts); + } + return config; + } + getFormGroupOptions(data, opts) { + return null; + } + getChildrenFormArray(data, opts) { + const formArray = new AppFormArray((value) => this.getFormGroup(value, Object.assign(Object.assign({}, opts), { pmfms: (opts === null || opts === void 0 ? void 0 : opts.childrenPmfms) || (opts === null || opts === void 0 ? void 0 : opts.pmfms), withChildren: false, acquisitionLevel: AcquisitionLevelCodes.CHILD_PHYSICAL_GEAR // Force the acquisition level for children + })), PhysicalGear.equals, (value) => isNil(value), { + allowEmptyArray: true, + allowReuseControls: false, + validators: (opts === null || opts === void 0 ? void 0 : opts.minChildrenCount) > 0 + ? OperationValidators.requiredArrayMinLength(opts.minChildrenCount) + : undefined + }); + if (data) { + formArray.patchValue(data); + } + return formArray; + } + getMeasurementValuesForm(data, opts) { + const measurementValues = data && MeasurementValuesUtils.normalizeValuesToForm(data, opts.pmfms); + return this.measurementsValidatorService.getFormGroup(measurementValues, opts); + } + fillDefaultOptions(opts) { + var _a, _b; + opts = super.fillDefaultOptions(opts); + opts.withChildren = toBoolean(opts.withChildren, toBoolean((_a = opts.program) === null || _a === void 0 ? void 0 : _a.getPropertyAsBoolean(ProgramProperties.TRIP_PHYSICAL_GEAR_ALLOW_CHILDREN), false)); + opts.minChildrenCount = toNumber(opts.minChildrenCount, (_b = opts.program) === null || _b === void 0 ? void 0 : _b.getPropertyAsInt(ProgramProperties.TRIP_PHYSICAL_GEAR_MIN_CHILDREN_COUNT)); + return opts; + } +}; +PhysicalGearValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + MeasurementsValidatorService, + LocalSettingsService]) +], PhysicalGearValidatorService); +export { PhysicalGearValidatorService }; +//# sourceMappingURL=physicalgear.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/physicalgear.validator.js.map b/out-tsc/app/app/trip/physicalgear/physicalgear.validator.js.map new file mode 100644 index 000000000..cc5f0ac44 --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/physicalgear.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"physicalgear.validator.js","sourceRoot":"","sources":["../../../../../src/app/trip/physicalgear/physicalgear.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/select-physical-gear.modal.js b/out-tsc/app/app/trip/physicalgear/select-physical-gear.modal.js new file mode 100644 index 000000000..34e918556 --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/select-physical-gear.modal.js @@ -0,0 +1,128 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, ViewChild } from '@angular/core'; +import { ModalController } from '@ionic/angular'; +import { PHYSICAL_GEAR_DATA_SERVICE_TOKEN, PhysicalGearService } from './physicalgear.service'; +import { isNotNil, LocalSettingsService, ReferentialRef, toBoolean } from '@sumaris-net/ngx-components'; +import { AcquisitionLevelCodes, PmfmIds } from '@app/referential/services/model/model.enum'; +import { PhysicalGearFilter } from './physical-gear.filter'; +import { PhysicalGearTable } from '@app/trip/physicalgear/physical-gears.table'; +import { PhysicalGear } from '@app/trip/physicalgear/physical-gear.model'; +let SelectPhysicalGearModal = class SelectPhysicalGearModal { + constructor(modalCtrl, settings, cd, dataService) { + this.modalCtrl = modalCtrl; + this.settings = settings; + this.cd = cd; + this.dataService = dataService; + this.filter = null; + this.mobile = settings.mobile; + } + get loadingSubject() { + return this.table.loadingSubject; + } + ngOnInit() { + // Init table + this.table.dataService = this.dataService; + this.filter = PhysicalGearFilter.fromObject(this.filter); + this.filter.program = ReferentialRef.fromObject(Object.assign(Object.assign({}, this.filter.program), { label: this.programLabel })); + this.table.filter = this.filter; + this.table.dataSource.watchAllOptions = { + distinctBy: this.distinctBy || ['gear.id', 'rankOrder', `measurementValues.${PmfmIds.GEAR_LABEL}`], + withOffline: this.withOffline + }; + this.table.acquisitionLevel = this.acquisitionLevel || AcquisitionLevelCodes.PHYSICAL_GEAR; + this.table.programLabel = this.programLabel; + this.table.markAsReady(); + this.table.onRefresh.emit(); + // Set defaults + this.allowMultiple = toBoolean(this.allowMultiple, false); + } + selectRow(row) { + return __awaiter(this, void 0, void 0, function* () { + if (row && this.table) { + // Select the clicked row, then close + if (!this.allowMultiple) { + this.table.selection.clear(); + this.table.selection.select(row); + yield this.close(); + } + // Add clicked row to selection + else { + this.table.selection.select(row); + } + } + }); + } + close(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.hasSelection()) + return; // Skip if nothing selected + const gears = (this.table.selection.selected || []) + .map(row => row.currentData) + .map(PhysicalGear.fromObject) + .filter(isNotNil); + return this.modalCtrl.dismiss(gears); + }); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.modalCtrl.dismiss(); + }); + } + hasSelection() { + return this.table && this.table.selection.hasValue() && (this.allowMultiple || this.table.selection.selected.length === 1); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectPhysicalGearModal.prototype, "allowMultiple", void 0); +__decorate([ + Input(), + __metadata("design:type", PhysicalGearFilter) +], SelectPhysicalGearModal.prototype, "filter", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SelectPhysicalGearModal.prototype, "acquisitionLevel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SelectPhysicalGearModal.prototype, "programLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], SelectPhysicalGearModal.prototype, "distinctBy", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectPhysicalGearModal.prototype, "withOffline", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectPhysicalGearModal.prototype, "showGearColumn", void 0); +__decorate([ + ViewChild(PhysicalGearTable, { static: true }), + __metadata("design:type", PhysicalGearTable) +], SelectPhysicalGearModal.prototype, "table", void 0); +SelectPhysicalGearModal = __decorate([ + Component({ + selector: 'app-select-physical-gear-modal', + templateUrl: './select-physical-gear.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush, + providers: [ + { + provide: PHYSICAL_GEAR_DATA_SERVICE_TOKEN, + useExisting: PhysicalGearService + } + ] + }), + __param(3, Inject(PHYSICAL_GEAR_DATA_SERVICE_TOKEN)), + __metadata("design:paramtypes", [ModalController, + LocalSettingsService, + ChangeDetectorRef, Object]) +], SelectPhysicalGearModal); +export { SelectPhysicalGearModal }; +//# sourceMappingURL=select-physical-gear.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/select-physical-gear.modal.js.map b/out-tsc/app/app/trip/physicalgear/select-physical-gear.modal.js.map new file mode 100644 index 000000000..a2947a0b1 --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/select-physical-gear.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"select-physical-gear.modal.js","sourceRoot":"","sources":["../../../../../src/app/trip/physicalgear/select-physical-gear.modal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAU,SAAS,EAAE,MAAM,eAAe,CAAC;AACxH,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,gCAAgC,EAAE,mBAAmB,EAAmC,MAAM,wBAAwB,CAAC;AAEhI,OAAO,EAAoB,QAAQ,EAAE,oBAAoB,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC1H,OAAO,EAAE,qBAAqB,EAAwB,OAAO,EAAE,MAAM,4CAA4C,CAAC;AAElH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAuBnE,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAkBlC,YACU,SAA0B,EAC1B,QAA8B,EAC5B,EAAqB,EACqB,WAAgE;QAH5G,cAAS,GAAT,SAAS,CAAiB;QAC1B,aAAQ,GAAR,QAAQ,CAAsB;QAC5B,OAAE,GAAF,EAAE,CAAmB;QACqB,gBAAW,GAAX,WAAW,CAAqD;QAjB7G,WAAM,GAA8B,IAAI,CAAC;QAmBhD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAChC,CAAC;IAbD,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;IACnC,CAAC;IAaD,QAAQ;QAEN,aAAa;QACb,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,cAAc,CAAC,UAAU,iCAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,KACtB,KAAK,EAAE,IAAI,CAAC,YAAY,IACxB,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,GAAoC;YACvE,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,qBAAqB,OAAO,CAAC,UAAU,EAAE,CAAC;YAClG,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,qBAAqB,CAAC,aAAa,CAAC;QAC3F,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAE5B,eAAe;QACf,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAE5D,CAAC;IAEK,SAAS,CAAC,GAA+B;;YAC7C,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;gBAErB,qCAAqC;gBACrC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;oBACvB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;oBAC7B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACjC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;iBACpB;gBAED,+BAA+B;qBAC1B;oBACH,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;iBAClC;aACF;QACH,CAAC;KAAA;IAEK,KAAK,CAAC,KAAW;;YACrB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBAAE,OAAO,CAAC,2BAA2B;YAE7D,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC;iBAChD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC;iBAC3B,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC;iBAC5B,MAAM,CAAC,QAAQ,CAAC,CAAC;YACpB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;KAAA;IAEK,MAAM;;YACV,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACjC,CAAC;KAAA;IAED,YAAY;QACV,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IAC7H,CAAC;IAES,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;CACF,CAAA;AArFC;IAAC,KAAK,EAAE;;8DAAwB;AAChC;IAAC,KAAK,EAAE;8BAAS,kBAAkB;uDAAe;AAClD;IAAC,KAAK,EAAE;;iEAAwC;AAChD;IAAC,KAAK,EAAE;;6DAAsB;AAC9B;IAAC,KAAK,EAAE;;2DAAsB;AAC9B;IAAC,KAAK,EAAE;;4DAAsB;AAC9B;IAAC,KAAK,EAAE;;+DAAyB;AAMjC;IAAC,SAAS,CAAC,iBAAiB,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC;8BAAQ,iBAAiB;sDAAC;AAhB5D,uBAAuB;IAXnC,SAAS,CAAC;QACT,QAAQ,EAAE,gCAAgC;QAC1C,WAAW,EAAE,mCAAmC;QAChD,eAAe,EAAE,uBAAuB,CAAC,MAAM;QAC/C,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,gCAAgC;gBACzC,WAAW,EAAE,mBAAmB;aACjC;SACF;KACF,CAAC;IAuBG,WAAA,MAAM,CAAC,gCAAgC,CAAC,CAAA;qCAHtB,eAAe;QAChB,oBAAoB;QACxB,iBAAiB;GArBtB,uBAAuB,CAyFnC;SAzFY,uBAAuB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/testing/physical-gears.test.js b/out-tsc/app/app/trip/physicalgear/testing/physical-gears.test.js new file mode 100644 index 000000000..9d1c92033 --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/testing/physical-gears.test.js @@ -0,0 +1,242 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { Component, Inject, ViewChild } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { BehaviorSubject } from 'rxjs'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { EntitiesStorage, EntityUtils, firstNotNilPromise, InMemoryEntitiesService, isNil, isNotEmptyArray, MatAutocompleteConfigHolder, SharedValidators, sleep, waitFor } from '@sumaris-net/ngx-components'; +import { PmfmIds } from '@app/referential/services/model/model.enum'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { PhysicalGearTable } from '@app/trip/physicalgear/physical-gears.table'; +import { PhysicalGearTestUtils } from '@app/trip/physicalgear/testing/physical-gears.utils'; +import { PhysicalGear } from '@app/trip/physicalgear/physical-gear.model'; +import { PHYSICAL_GEAR_DATA_SERVICE_TOKEN } from '@app/trip/physicalgear/physicalgear.service'; +import { PhysicalGearFilter } from '@app/trip/physicalgear/physical-gear.filter'; +let PhysicalGearsTestPage = class PhysicalGearsTestPage { + constructor(formBuilder, referentialRefService, programRefService, entities, dataService) { + this.referentialRefService = referentialRefService; + this.programRefService = programRefService; + this.entities = entities; + this.dataService = dataService; + this.$programLabel = new BehaviorSubject(undefined); + this.autocomplete = new MatAutocompleteConfigHolder(); + this.outputs = {}; + this.filterForm = formBuilder.group({ + program: [null, Validators.compose([Validators.required, SharedValidators.entity])], + example: [null, Validators.required], + modalOptions: formBuilder.group({}) + }); + } + get table() { + return this.mobileTable || this.desktopTable; + } + ngOnInit() { + // Program + this.autocomplete.add('program', { + suggestFn: (value, filter) => this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { entityName: 'Program' })), + attributes: ['label', 'name'] + }); + this.filterForm.get('program').valueChanges + //.pipe(debounceTime(450)) + .subscribe(p => { + const label = p && p.label; + if (label) { + this.$programLabel.next(label); + } + }); + // Input example + this.autocomplete.add('example', { + items: PhysicalGearTestUtils.EXAMPLES.map((label, index) => ({ id: index + 1, label })), + attributes: ['label'], + showAllOnFocus: true + }); + this.filterForm.get('example').valueChanges + //.pipe(debounceTime(450)) + .subscribe(example => { + if (example && typeof example.label == 'string') { + const json = PhysicalGearTestUtils.getExample(example.label); + if (this.outputs.example) { + this.dumpData([PhysicalGear.fromObject(json)], 'example'); + } + } + }); + // Modal options + this.filterForm.get('modalOptions').valueChanges + .subscribe(value => this.applyModalOptions(value)); + this.filterForm.patchValue({ + //program: {id: 1, label: 'SUMARiS' }, + //program: {id: 10, label: 'ADAP-MER' }, + program: { id: 70, label: 'APASE' }, + modalOptions: {}, + example: { id: 1, label: 'default' } + }); + this.applyExample(); + } + // Load data into components + updateView(data) { + return __awaiter(this, void 0, void 0, function* () { + // wait for program + yield firstNotNilPromise(this.$programLabel); + yield waitFor(() => !!this.table); + this.dataService.value = data; + this.markAsReady(); + this.table.enable(); + }); + } + enable() { + this.table.enable(); + } + markAsReady() { + this.table.markAsReady(); + } + markAsLoaded() { + this.table.markAsLoaded(); + } + doSubmit(event) { + // Nothing to do + } + getExample(key) { + return __awaiter(this, void 0, void 0, function* () { + if (!key) { + const example = this.filterForm.get('example').value; + key = example && example.label || 'default'; + } + // Load example + const json = PhysicalGearTestUtils.getExample(key); + // Convert to array (as Pod should sent) with: + // - a local ID + // - only the parentId, and NOT the parent + const gears = json.map(PhysicalGear.fromObject); + yield EntityUtils.fillLocalIds(gears, (_, count) => this.entities.nextValues(PhysicalGear.TYPENAME, count)); + return gears; + }); + } + // Load data into components + applyExample(key) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (isNil(key)) { + key = (_a = this.filterForm.get('example').value) === null || _a === void 0 ? void 0 : _a.label; + } + // Wait enumerations override + yield this.referentialRefService.ready(); + const data = yield this.getExample(key); + yield this.updateView(data); + // Set modal options + this.applyModalOptions(); + // Open first + this.openFirstRow(); + }); + } + applyModalOptions(modalOptions) { + modalOptions = modalOptions || this.filterForm.get('modalOptions').value; + Object.keys(modalOptions).forEach(key => this.setModalOptions(key, modalOptions[key])); + } + setModalOptions(key, value) { + return __awaiter(this, void 0, void 0, function* () { + yield waitFor(() => !!this.table); + this.table.setModalOption(key, value); + }); + } + getModalOptions(key) { + return this.table.getModalOption(key); + } + openFirstRow() { + return __awaiter(this, void 0, void 0, function* () { + yield waitFor(() => !!this.table); + yield sleep(200); + // Open modal + const rows = yield this.table.dataSource.getRows(); + if (isNotEmptyArray(rows)) { + this.table.clickRow(null, rows[0]); + } + }); + } + dumpExample(key) { + return __awaiter(this, void 0, void 0, function* () { + const data = yield this.getExample(key); + this.dumpData(data, 'example'); + }); + } + dumpTable(table, outputName) { + return __awaiter(this, void 0, void 0, function* () { + const data = yield this.getValue(table); + this.dumpData(data, outputName); + }); + } + dumpData(data, outputName) { + let html = ''; + if (data) { + data.map(gear => { + html += '
- ' + gear.measurementValues[PmfmIds.GEAR_LABEL]; + }); + html = html.replace(/\t/g, '  '); + this.outputs[outputName] = html; + } + else { + this.outputs[outputName] = ' No result'; + } + console.debug(html); + } + copyTableValue(source, target) { + return __awaiter(this, void 0, void 0, function* () { + yield source.save(); + source.disable(); + target.disable(); + try { + const value = yield this.getValue(source); + this.dataService.value = value; + yield target.ready(); + } + finally { + source.enable(); + target.enable(); + } + }); + } + save(event, table, outputName) { + return __awaiter(this, void 0, void 0, function* () { + yield this.dumpTable(table, outputName); + }); + } + /* -- protected methods -- */ + getValue(table) { + return __awaiter(this, void 0, void 0, function* () { + yield table.save(); + const data = this.dataService.value; + return data; + }); + } + stringify(value) { + return JSON.stringify(value); + } +}; +__decorate([ + ViewChild('mobileTable'), + __metadata("design:type", PhysicalGearTable) +], PhysicalGearsTestPage.prototype, "mobileTable", void 0); +__decorate([ + ViewChild('desktopTable'), + __metadata("design:type", PhysicalGearTable) +], PhysicalGearsTestPage.prototype, "desktopTable", void 0); +PhysicalGearsTestPage = __decorate([ + Component({ + selector: 'app-physical-gears-test', + templateUrl: './physical-gears.test.html', + providers: [ + { + provide: PHYSICAL_GEAR_DATA_SERVICE_TOKEN, + useFactory: () => new InMemoryEntitiesService(PhysicalGear, PhysicalGearFilter, { + equals: PhysicalGear.equals + }) + } + ] + }), + __param(4, Inject(PHYSICAL_GEAR_DATA_SERVICE_TOKEN)), + __metadata("design:paramtypes", [UntypedFormBuilder, + ReferentialRefService, + ProgramRefService, + EntitiesStorage, + InMemoryEntitiesService]) +], PhysicalGearsTestPage); +export { PhysicalGearsTestPage }; +//# sourceMappingURL=physical-gears.test.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/testing/physical-gears.test.js.map b/out-tsc/app/app/trip/physicalgear/testing/physical-gears.test.js.map new file mode 100644 index 000000000..baed211b6 --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/testing/physical-gears.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"physical-gears.test.js","sourceRoot":"","sources":["../../../../../../src/app/trip/physicalgear/testing/physical-gears.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAU,SAAS,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAoB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EACL,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,EACL,eAAe,EACf,2BAA2B,EAC3B,gBAAgB,EAChB,KAAK,EACL,OAAO,EACR,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,4CAA4C,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAE1E,OAAO,EAAE,gCAAgC,EAAE,MAAM,6CAA6C,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AAe1E,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAiBhC,YACE,WAA+B,EACrB,qBAA4C,EAC5C,iBAAoC,EACtC,QAAyB,EACiB,WAAsE;QAH9G,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,sBAAiB,GAAjB,iBAAiB,CAAmB;QACtC,aAAQ,GAAR,QAAQ,CAAiB;QACiB,gBAAW,GAAX,WAAW,CAA2D;QApB1H,kBAAa,GAAG,IAAI,eAAe,CAAS,SAAS,CAAC,CAAC;QAEvD,iBAAY,GAAG,IAAI,2BAA2B,EAAE,CAAC;QAEjD,YAAO,GAEH,EAAE,CAAC;QAiBL,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC;YAClC,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YACnF,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;YACpC,YAAY,EAAE,WAAW,CAAC,KAAK,CAAC,EAE/B,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAnBD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC;IAC/C,CAAC;IAmBD,QAAQ;QAEN,UAAU;QACV,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE;YAC/B,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,kCACjE,MAAM,KACT,UAAU,EAAE,SAAS,IACrB;YACF,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;SAC9B,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,YAAY;YACzC,0BAA0B;aACzB,SAAS,CAAC,CAAC,CAAC,EAAE;YACb,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;YAC3B,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAChC;QACH,CAAC,CAAC,CAAC;QAEL,gBAAgB;QAChB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE;YAC/B,KAAK,EAAE,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAC,EAAE,EAAE,KAAK,GAAC,CAAC,EAAE,KAAK,EAAC,CAAC,CAAC;YACnF,UAAU,EAAE,CAAC,OAAO,CAAC;YACrB,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,YAAY;YACzC,0BAA0B;aACzB,SAAS,CAAC,OAAO,CAAC,EAAE;YACnB,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,KAAK,IAAI,QAAQ,EAAE;gBAC/C,MAAM,IAAI,GAAG,qBAAqB,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC7D,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;oBACxB,IAAI,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;iBAC3D;aACF;QACH,CAAC,CAAC,CAAC;QAEL,gBAAgB;QAChB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,YAAY;aAC7C,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QAErD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YACzB,sCAAsC;YACtC,wCAAwC;YAExC,OAAO,EAAE,EAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;YAClC,YAAY,EAAE,EACb;YAED,OAAO,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAC;SACnC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAGD,4BAA4B;IACtB,UAAU,CAAC,IAAoB;;YAEnC,mBAAmB;YACnB,MAAM,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7C,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAElC,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC;YAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACtB,CAAC;KAAA;IAED,MAAM;QACJ,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACtB,CAAC;IAED,WAAW;QACT,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC;IAED,YAAY;QACV,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAED,QAAQ,CAAC,KAAa;QACpB,gBAAgB;IAClB,CAAC;IAGK,UAAU,CAAC,GAAY;;YAE3B,IAAI,CAAC,GAAG,EAAE;gBACR,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;gBACrD,GAAG,GAAG,OAAO,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC;aAC7C;YAED,eAAe;YACf,MAAM,IAAI,GAAG,qBAAqB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAEnD,8CAA8C;YAC9C,eAAe;YACf,0CAA0C;YAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YAChD,MAAM,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YAE5G,OAAO,KAAK,CAAC;QACf,CAAC;KAAA;IAED,4BAA4B;IACtB,YAAY,CAAC,GAAY;;;YAC7B,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;gBACd,GAAG,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,0CAAE,KAAK,CAAC;aACnD;YAED,6BAA6B;YAC7B,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;YAEzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAE5B,oBAAoB;YACpB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAEzB,aAAa;YACb,IAAI,CAAC,YAAY,EAAE,CAAC;;KACrB;IAED,iBAAiB,CAAC,YAAkB;QAClC,YAAY,GAAG,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC;QAEzE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CACtC,IAAI,CAAC,eAAe,CAAC,GAAsC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAChF,CAAC;IACJ,CAAC;IAEK,eAAe,CAAC,GAAoC,EAAE,KAA4C;;YACtG,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;KAAA;IAED,eAAe,CAAC,GAAoC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC;IAEK,YAAY;;YAChB,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAElC,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YAEjB,aAAa;YACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACnD,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;gBACzB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aACpC;QACH,CAAC;KAAA;IAEK,WAAW,CAAC,GAAY;;YAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAClC,CAAC;KAAA;IAEK,SAAS,CAAC,KAAwB,EAAE,UAAmB;;YAC3D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAClC,CAAC;KAAA;IAED,QAAQ,CAAC,IAAoB,EAAE,UAAmB;QAChD,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACd,IAAI,IAAI,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAClE,CAAC,CAAC,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;YAE3C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;SACjC;aACI;YACH,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,iBAAiB,CAAC;SAC9C;QAED,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAEK,cAAc,CAAC,MAAyB,EAAE,MAAyB;;YACvE,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAEpB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI;gBACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAE1C,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;gBAE/B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;aACtB;oBACO;gBACN,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,CAAC,MAAM,EAAE,CAAC;aACjB;QACH,CAAC;KAAA;IAEK,IAAI,CAAC,KAAY,EAAE,KAAwB,EAAE,UAAkB;;YACnE,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC;KAAA;IAED,6BAA6B;IAEvB,QAAQ,CAAC,KAAwB;;YAErC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAEpC,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAED,SAAS,CAAC,KAAU;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;CACF,CAAA;AA7OC;IAAC,SAAS,CAAC,aAAa,CAAC;8BAAc,iBAAiB;0DAAC;AACzD;IAAC,SAAS,CAAC,cAAc,CAAC;8BAAe,iBAAiB;2DAAC;AAXhD,qBAAqB;IAZjC,SAAS,CAAC;QACT,QAAQ,EAAE,yBAAyB;QACnC,WAAW,EAAE,4BAA4B;QACzC,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,gCAAgC;gBACzC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,uBAAuB,CAAC,YAAY,EAAE,kBAAkB,EAAE;oBAC9E,MAAM,EAAE,YAAY,CAAC,MAAM;iBAC5B,CAAC;aACH;SACF;KACF,CAAC;IAuBG,WAAA,MAAM,CAAC,gCAAgC,CAAC,CAAA;qCAJ5B,kBAAkB;QACE,qBAAqB;QACzB,iBAAiB;QAC5B,eAAe;QAC8B,uBAAuB;GAtB7E,qBAAqB,CAuPjC;SAvPY,qBAAqB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/testing/physical-gears.utils.js b/out-tsc/app/app/trip/physicalgear/testing/physical-gears.utils.js new file mode 100644 index 000000000..f3fa5df7b --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/testing/physical-gears.utils.js @@ -0,0 +1,48 @@ +import { PmfmIds } from '@app/referential/services/model/model.enum'; +import { isNotNil } from '@sumaris-net/ngx-components'; +export class PhysicalGearTestUtils { + static getExample(key) { + switch (key) { + case 'default': + return [{ + id: null, + rankOrder: 1, + gear: { id: 7, label: 'OTT', name: 'Chaluts jumeaux à panneaux', __typename: 'ReferentialVO', entityName: 'Gear' }, + measurementValues: this.getMeasurementValues({ label: 'Gear #1', meshSize: 110 }), + children: [{ + id: null, + rankOrder: 1, + gear: { id: 7, label: 'OTT', name: 'Chaluts jumeaux à panneaux', __typename: 'ReferentialVO', entityName: 'Gear' }, + measurementValues: this.getMeasurementValues({ label: 'Chalut sélectif mailles carrées', meshSize: 110, selectiveDevice: 'MACAR' }) + }, + { + id: null, + rankOrder: 2, + gear: { id: 7, label: 'OTT', name: 'Chaluts jumeaux à panneaux', __typename: 'ReferentialVO', entityName: 'Gear' }, + measurementValues: this.getMeasurementValues({ label: 'Chalut sélectif T90', meshSize: 150, selectiveDevice: 'T90' }), + }] + }]; + case 'empty': + return []; + } + throw new Error('Unknown key: ' + key); + } + static getMeasurementValues(values) { + const result = {}; + result[PmfmIds.GEAR_LABEL] = (values === null || values === void 0 ? void 0 : values.label) || null; + result['3'] = isNotNil(values === null || values === void 0 ? void 0 : values.meshSize) ? '' + (values === null || values === void 0 ? void 0 : values.meshSize) : null; + if (values.selectiveDevice) { + switch (values.selectiveDevice) { + case 'T90': + result['4'] = '36'; + break; + case 'MACAR': + result['4'] = '10'; + break; + } + } + return result; + } +} +PhysicalGearTestUtils.EXAMPLES = ['default', 'empty']; +//# sourceMappingURL=physical-gears.utils.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/physicalgear/testing/physical-gears.utils.js.map b/out-tsc/app/app/trip/physicalgear/testing/physical-gears.utils.js.map new file mode 100644 index 000000000..0c138f66e --- /dev/null +++ b/out-tsc/app/app/trip/physicalgear/testing/physical-gears.utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"physical-gears.utils.js","sourceRoot":"","sources":["../../../../../../src/app/trip/physicalgear/testing/physical-gears.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,4CAA4C,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAkB,MAAM,6BAA6B,CAAC;AAGvE,MAAM,OAAO,qBAAqB;IAGhC,MAAM,CAAC,UAAU,CAAC,GAAW;QAC3B,QAAQ,GAAG,EAAE;YACX,KAAK,SAAS;gBACZ,OAAO,CAAC;wBACN,EAAE,EAAE,IAAI;wBACR,SAAS,EAAE,CAAC;wBACZ,IAAI,EAAkB,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE;wBAClI,iBAAiB,EAAE,IAAI,CAAC,oBAAoB,CAAC,EAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAC,CAAC;wBAC/E,QAAQ,EAAkB,CAAC;gCACzB,EAAE,EAAE,IAAI;gCACR,SAAS,EAAE,CAAC;gCACZ,IAAI,EAAkB,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE;gCAClI,iBAAiB,EAAE,IAAI,CAAC,oBAAoB,CAAC,EAAC,KAAK,EAAE,iCAAiC,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,EAAC,CAAC;6BAClI;4BACD;gCACE,EAAE,EAAE,IAAI;gCACR,SAAS,EAAE,CAAC;gCACZ,IAAI,EAAkB,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE;gCAClI,iBAAiB,EAAE,IAAI,CAAC,oBAAoB,CAAC,EAAC,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAC,CAAC;6BACpH,CAAC;qBACH,CAAC,CAAC;YAEL,KAAK,OAAO;gBACV,OAAO,EAAE,CAAC;SACb;QAED,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC;IACzC,CAAC;IAGD,MAAM,CAAC,oBAAoB,CAAC,MAA6E;QACvG,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,KAAI,IAAI,CAAC;QACnD,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,CAAA,CAAC,CAAC,CAAC,IAAI,CAAC;QACxE,IAAI,MAAM,CAAC,eAAe,EAAE;YAC1B,QAAQ,MAAM,CAAC,eAAe,EAAE;gBAC9B,KAAK,KAAK;oBACR,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;oBACnB,MAAM;gBACR,KAAK,OAAO;oBACV,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;oBACnB,MAAM;aACT;SACF;QAGD,OAAO,MAAM,CAAC;IAChB,CAAC;;AAjDM,8BAAQ,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/product/product.form.js b/out-tsc/app/app/trip/product/product.form.js new file mode 100644 index 000000000..33926f7dd --- /dev/null +++ b/out-tsc/app/app/trip/product/product.form.js @@ -0,0 +1,94 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { Injector } from '@angular/core'; +import { isNotNil } from '@sumaris-net/ngx-components'; +import { UntypedFormBuilder } from '@angular/forms'; +import { MeasurementValuesForm } from '@app/data/measurement/measurement-values.form.class'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { environment } from '@environments/environment'; +import { ProductValidatorService } from '@app/trip/product/product.validator'; +let ProductForm = class ProductForm extends MeasurementValuesForm { + constructor(injector, measurementsValidatorService, formBuilder, programRefService, validatorService) { + super(injector, measurementsValidatorService, formBuilder, programRefService, validatorService.getFormGroup(null, { + withMeasurements: false + })); + this.measurementsValidatorService = measurementsValidatorService; + this.formBuilder = formBuilder; + this.programRefService = programRefService; + this.validatorService = validatorService; + this.showComment = false; + this.showError = true; + // Set default acquisition level + this.acquisitionLevel = AcquisitionLevelCodes.PRODUCT; + this.mobile = this.settings.mobile; + this.debug = !environment.production; + } + ; + ngOnInit() { + super.ngOnInit(); + // Default values + this.tabindex = isNotNil(this.tabindex) ? this.tabindex : 1; + this.registerAutocompleteField('parent', { + items: this.parents, + attributes: this.parentAttributes, + columnNames: ['RANK_ORDER', 'REFERENTIAL.LABEL', 'REFERENTIAL.NAME'], + columnSizes: this.parentAttributes.map(attr => attr === 'metier.label' ? 3 : (attr === 'rankOrderOnPeriod' ? 1 : undefined)), + mobile: this.mobile + }); + const taxonGroupAttributes = this.settings.getFieldDisplayAttributes('taxonGroup'); + this.registerAutocompleteField('taxonGroup', { + suggestFn: (value, options) => this.suggestTaxonGroups(value, options), + columnSizes: taxonGroupAttributes.map(attr => attr === 'label' ? 3 : undefined), + mobile: this.mobile + }); + } + /* -- protected methods -- */ + suggestTaxonGroups(value, options) { + return __awaiter(this, void 0, void 0, function* () { + return this.programRefService.suggestTaxonGroups(value, { + program: this.programLabel, + searchAttribute: options && options.searchAttribute + }); + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Number) +], ProductForm.prototype, "tabindex", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ProductForm.prototype, "showComment", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ProductForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], ProductForm.prototype, "parents", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], ProductForm.prototype, "parentAttributes", void 0); +ProductForm = __decorate([ + Component({ + selector: 'app-product-form', + templateUrl: './product.form.html', + styleUrls: ['./product.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + MeasurementsValidatorService, + UntypedFormBuilder, + ProgramRefService, + ProductValidatorService]) +], ProductForm); +export { ProductForm }; +//# sourceMappingURL=product.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/product/product.form.js.map b/out-tsc/app/app/trip/product/product.form.js.map new file mode 100644 index 000000000..541725f4b --- /dev/null +++ b/out-tsc/app/app/trip/product/product.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"product.form.js","sourceRoot":"","sources":["../../../../../src/app/trip/product/product.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/product/product.modal.js b/out-tsc/app/app/trip/product/product.modal.js new file mode 100644 index 000000000..2ff293a94 --- /dev/null +++ b/out-tsc/app/app/trip/product/product.modal.js @@ -0,0 +1,229 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input, ViewChild } from '@angular/core'; +import { Alerts, isNil, LocalSettingsService, sleep, toBoolean } from '@sumaris-net/ngx-components'; +import { AlertController, ModalController } from '@ionic/angular'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { TranslateService } from '@ngx-translate/core'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { environment } from '@environments/environment'; +import { Product } from '@app/trip/product/product.model'; +import { ProductForm } from '@app/trip/product/product.form'; +let ProductModal = class ProductModal { + constructor(injector, alertCtrl, modalCtrl, settings, translate, cd) { + this.injector = injector; + this.alertCtrl = alertCtrl; + this.modalCtrl = modalCtrl; + this.settings = settings; + this.translate = translate; + this.cd = cd; + this._subscription = new Subscription(); + this.debug = false; + this.loading = false; + this.$title = new BehaviorSubject(undefined); + // Default value + this.acquisitionLevel = AcquisitionLevelCodes.PRODUCT; + // TODO: for DEV only + this.debug = !environment.production; + } + get dirty() { + return this.form.dirty; + } + get invalid() { + return this.form.invalid; + } + get valid() { + return this.form.valid; + } + get pending() { + return this.form.pending; + } + get enabled() { + return !this.disabled; + } + enable(opts) { + this.form.enable(opts); + } + disable(opts) { + this.form.disable(opts); + } + ngOnInit() { + this.disabled = toBoolean(this.disabled, false); + this.isNew = toBoolean(this.isNew, !this.data); + this.data = this.data || new Product(); + this.load(); + } + ngOnDestroy() { + this._subscription.unsubscribe(); + } + load() { + return __awaiter(this, void 0, void 0, function* () { + try { + this.form.markAsReady(); + yield this.form.setValue(this.data); + if (this.disabled) { + this.disable(); + } + else { + this.enable(); + } + // Compute the title + yield this.computeTitle(); + if (!this.isNew) { + // Update title each time value changes + this.form.valueChanges.subscribe(product => this.computeTitle(product)); + } + } + catch (err) { + const error = ((err === null || err === void 0 ? void 0 : err.message) || err); + this.form.error = error; + console.error(error); + } + finally { + // Workaround to force form to be untouched, even if 'requiredIf' validator force controls as touched + yield sleep(500); + this.form.markAsUntouched(); + this.form.markAsPristine(); + } + }); + } + cancel(event) { + return __awaiter(this, void 0, void 0, function* () { + yield this.saveIfDirtyAndConfirm(event); + // Continue (if event not cancelled) + if (!event.defaultPrevented) { + yield this.modalCtrl.dismiss(undefined, undefined); + } + }); + } + save(event, role) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.form.valid || this.loading) + return false; + this.loading = true; + // Nothing to save: just leave + if (!this.isNew && !this.form.dirty) { + yield this.modalCtrl.dismiss(undefined, role); + return false; + } + try { + this.form.error = null; + const product = this.form.value; + return yield this.modalCtrl.dismiss(product, role); + } + catch (err) { + this.loading = false; + this.form.error = err && err.message || err; + return false; + } + }); + } + delete(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.onDelete) + return; // Skip + const result = yield this.onDelete(event, this.data); + if (isNil(result) || (event && event.defaultPrevented)) + return; // User cancelled + if (result) { + yield this.modalCtrl.dismiss(this.data, 'delete'); + } + }); + } + /* -- protected methods -- */ + saveIfDirtyAndConfirm(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.form.dirty) + return; // skip, if nothing to save + const confirmation = yield Alerts.askSaveBeforeLeave(this.alertCtrl, this.translate, event); + // User cancelled + if (isNil(confirmation) || event && event.defaultPrevented) { + return; + } + if (confirmation === false) { + return; + } + // If user confirm: save + const saved = yield this.save(event); + // Error while saving: avoid to close + if (!saved) + event.preventDefault(); + }); + } + computeTitle(data) { + return __awaiter(this, void 0, void 0, function* () { + data = data || this.data; + if (this.isNew) { + this.$title.next(yield this.translate.get('TRIP.PRODUCT.NEW.TITLE').toPromise()); + } + else { + this.$title.next(yield this.translate.get('TRIP.PRODUCT.EDIT.TITLE', { rankOrder: data.rankOrder }).toPromise()); + } + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", String) +], ProductModal.prototype, "acquisitionLevel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], ProductModal.prototype, "programLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], ProductModal.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], ProductModal.prototype, "disabled", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], ProductModal.prototype, "isNew", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], ProductModal.prototype, "parents", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], ProductModal.prototype, "parentAttributes", void 0); +__decorate([ + Input(), + __metadata("design:type", Product) +], ProductModal.prototype, "data", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], ProductModal.prototype, "pmfms", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], ProductModal.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], ProductModal.prototype, "onDelete", void 0); +__decorate([ + ViewChild('form', { static: true }), + __metadata("design:type", ProductForm) +], ProductModal.prototype, "form", void 0); +ProductModal = __decorate([ + Component({ + selector: 'app-product-modal', + templateUrl: 'product.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + AlertController, + ModalController, + LocalSettingsService, + TranslateService, + ChangeDetectorRef]) +], ProductModal); +export { ProductModal }; +//# sourceMappingURL=product.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/product/product.modal.js.map b/out-tsc/app/app/trip/product/product.modal.js.map new file mode 100644 index 000000000..8496b1138 --- /dev/null +++ b/out-tsc/app/app/trip/product/product.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"product.modal.js","sourceRoot":"","sources":["../../../../../src/app/trip/product/product.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/product/product.model.js b/out-tsc/app/app/trip/product/product.model.js new file mode 100644 index 000000000..09860efd4 --- /dev/null +++ b/out-tsc/app/app/trip/product/product.model.js @@ -0,0 +1,126 @@ +var Product_1; +import { __decorate, __metadata } from "tslib"; +import { EntityClass, equalsOrNil, isNil, isNotNil, isNotNilOrBlank, ReferentialRef, ReferentialUtils, } from '@sumaris-net/ngx-components'; +import { DataEntity } from '@app/data/services/model/data-entity.model'; +import { MeasurementValuesUtils, } from '@app/data/measurement/measurement.model'; +import { Sample } from '../sample/sample.model'; +import { DataEntityFilter } from '@app/data/services/model/data-filter.model'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +import { TaxonGroupRef } from '@app/referential/services/model/taxon-group.model'; +export class ProductFilter extends DataEntityFilter { + static fromParent(parent) { + return ProductFilter.fromObject({ parent }); + } + static fromObject(source) { + if (!source || source instanceof ProductFilter) + return source; + const target = new ProductFilter(); + target.fromObject(source); + return target; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.parent = source.parent; + } + buildFilter() { + return [ + (p) => (!this.parent) || (p.parent && this.parent && this.parent.equals(p.parent)) + ]; + } +} +let Product = Product_1 = class Product extends DataEntity { + constructor() { + super(Product_1.TYPENAME); + this.label = null; + this.comments = null; + this.rankOrder = null; + this.individualCount = null; + this.subgroupCount = null; + this.taxonGroup = null; + this.weight = null; + this.saleType = null; + this.measurementValues = {}; + this.saleProducts = []; + this.samples = []; + this.operationId = null; + this.saleId = null; + this.expectedSaleId = null; + this.landingId = null; + this.batchId = null; + } + static equals(p1, p2) { + return p1 && p2 && ((isNotNil(p1.id) && p1.id === p2.id) + // Or by functional attributes + || (p1.rankOrder === p2.rankOrder + // same operation + && ((!p1.operationId && !p2.operationId) || p1.operationId === p2.operationId) + // same taxon group + && ReferentialUtils.equals(p1.taxonGroup, p2.taxonGroup) + // same batch + && ((isNil(p1.batchId) && isNil(p1.batchId)) || p1.batchId === p2.batchId))); + } + asObject(opts) { + const target = super.asObject(opts); + target.taxonGroup = this.taxonGroup && this.taxonGroup.asObject(Object.assign(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS), { keepEntityName: true })) || undefined; + target.saleType = this.saleType && ReferentialRef.fromObject(this.saleType).asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS)) || undefined; + target.measurementValues = MeasurementValuesUtils.asObject(this.measurementValues, opts); + if (!opts || opts.minify !== true) { + target.saleProducts = this.saleProducts && this.saleProducts.map(s => s.asObject(opts)) || []; + target.samples = this.samples && this.samples.map(s => s.asObject(Object.assign(Object.assign({}, opts), { withChildren: false }))) || []; + } + else { + delete target.saleProducts; + delete target.samples; + } + delete target.parent; + return target; + } + fromObject(source) { + super.fromObject(source); + this.label = source.label; + this.comments = source.comments; + this.rankOrder = +source.rankOrder; + this.individualCount = isNotNilOrBlank(source.individualCount) ? parseInt(source.individualCount) : null; + this.subgroupCount = isNotNilOrBlank(source.subgroupCount) ? parseFloat(source.subgroupCount) : null; + this.taxonGroup = source.taxonGroup && TaxonGroupRef.fromObject(source.taxonGroup) || undefined; + this.weight = source.weight || undefined; + this.weightCalculated = source.weightCalculated || false; + this.saleType = source.saleType && ReferentialRef.fromObject(source.saleType) || undefined; + this.parent = source.parent; + this.operationId = source.operationId; + this.saleId = source.saleId; + this.expectedSaleId = source.expectedSaleId; + this.landingId = source.landingId; + this.batchId = source.batchId; + // Get all measurements values (by copy) + this.measurementValues = source.measurementValues && Object.assign({}, source.measurementValues); + this.saleProducts = source.saleProducts && source.saleProducts.map(saleProduct => Product_1.fromObject(saleProduct)) || []; + this.samples = source.samples && source.samples.map(json => Sample.fromObject(json)) || []; + return this; + } + /** + * This equals function should also works with SaleProduct + * + * @param other + */ + equals(other) { + return (super.equals(other) && isNotNil(this.id)) + || (this.taxonGroup.equals(other.taxonGroup) && this.rankOrder === other.rankOrder + && equalsOrNil(this.individualCount, other.individualCount) && equalsOrNil(this.weight, other.weight) + && equalsOrNil(this.subgroupCount, other.subgroupCount) && ReferentialUtils.equals(this.saleType, other.saleType)); + } +}; +Product = Product_1 = __decorate([ + EntityClass({ typename: 'ProductVO' }), + __metadata("design:paramtypes", []) +], Product); +export { Product }; +export class ProductUtils { + static isSampleOfProduct(product, sample) { + return product && sample + && ((product.operationId === sample.operationId) || (product.parent && product.parent.id === sample.operationId)) + && product.taxonGroup && sample.taxonGroup + && ReferentialUtils.equals(product.taxonGroup, sample.taxonGroup); + } +} +//# sourceMappingURL=product.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/product/product.model.js.map b/out-tsc/app/app/trip/product/product.model.js.map new file mode 100644 index 000000000..ade3a50b1 --- /dev/null +++ b/out-tsc/app/app/trip/product/product.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"product.model.js","sourceRoot":"","sources":["../../../../../src/app/trip/product/product.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/product/product.module.js b/out-tsc/app/app/trip/product/product.module.js new file mode 100644 index 000000000..e9561e81e --- /dev/null +++ b/out-tsc/app/app/trip/product/product.module.js @@ -0,0 +1,39 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { ProductsTable } from './products.table'; +import { TranslateModule } from '@ngx-translate/core'; +import { ProductForm } from './product.form'; +import { ProductModal } from './product.modal'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppDataModule } from '@app/data/data.module'; +import { AppMeasurementModule } from '@app/data/measurement/measurement.module'; +import { AppReferentialModule } from '@app/referential/referential.module'; +let AppProductModule = class AppProductModule { + constructor() { + console.debug('[product] Creating module...'); + } +}; +AppProductModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + AppDataModule, + TranslateModule.forChild(), + // Functional modules + AppReferentialModule, + AppMeasurementModule + ], + declarations: [ + ProductsTable, + ProductModal, + ProductForm + ], + exports: [ + // Components + ProductsTable + ] + }), + __metadata("design:paramtypes", []) +], AppProductModule); +export { AppProductModule }; +//# sourceMappingURL=product.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/product/product.module.js.map b/out-tsc/app/app/trip/product/product.module.js.map new file mode 100644 index 000000000..536d79ed3 --- /dev/null +++ b/out-tsc/app/app/trip/product/product.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"product.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/product/product.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAuBpE,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAE3B;QACE,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAChD,CAAC;CACF,CAAA;AALY,gBAAgB;IApB5B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAE1B,qBAAqB;YACrB,oBAAoB;YACpB,oBAAoB;SACrB;QACD,YAAY,EAAE;YACZ,aAAa;YACb,YAAY;YACZ,WAAW;SACZ;QACD,OAAO,EAAE;YACP,aAAa;YACb,aAAa;SACd;KACF,CAAC;;GACW,gBAAgB,CAK5B;SALY,gBAAgB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/product/product.validator.js b/out-tsc/app/app/trip/product/product.validator.js new file mode 100644 index 000000000..651660b6a --- /dev/null +++ b/out-tsc/app/app/trip/product/product.validator.js @@ -0,0 +1,123 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { LocalSettingsService, SharedFormArrayValidators, SharedFormGroupValidators, SharedValidators, toBoolean } from '@sumaris-net/ngx-components'; +import { DataEntityValidatorService } from '@app/data/services/validator/data-entity.validator'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { OperationGroup } from '../trip/trip.model'; +import { DataValidators } from '@app/data/services/validator/data.validators'; +import { TranslateService } from '@ngx-translate/core'; +let ProductValidatorService = class ProductValidatorService extends DataEntityValidatorService { + constructor(formBuilder, translate, settings, measurementsValidatorService) { + super(formBuilder, translate, settings); + this.measurementsValidatorService = measurementsValidatorService; + } + getRowValidator() { + return this.getFormGroup(); + } + getFormGroup(data, opts) { + opts = this.fillDefaultOptions(opts); + const form = super.getFormGroup(data, opts); + // Add measurement form + // if (opts.withMeasurements) { + // const pmfms = (opts.program && opts.program.strategies[0] && opts.program.strategies[0].pmfms || []) + // .filter(p => p.acquisitionLevel === AcquisitionLevelCodes.OPERATION); + // form.addControl('measurements', this.measurementsValidatorService.getFormGroup(data && data.measurements, { + // isOnFieldMode: opts.isOnFieldMode, + // pmfms + // })); + // } + return form; + } + getFormGroupConfig(data, opts) { + const formConfig = Object.assign(super.getFormGroupConfig(data, opts), { + __typename: [OperationGroup.TYPENAME], + parent: [(data === null || data === void 0 ? void 0 : data.parent) || null, Validators.required], + rankOrder: [(data === null || data === void 0 ? void 0 : data.rankOrder) || null], + saleType: [(data === null || data === void 0 ? void 0 : data.saleType) || null], + taxonGroup: [(data === null || data === void 0 ? void 0 : data.taxonGroup) || null, Validators.compose([Validators.required, SharedValidators.entity])], + weight: [(data === null || data === void 0 ? void 0 : data.weight) || '', SharedValidators.decimal({ maxDecimals: 2 })], + individualCount: [(data === null || data === void 0 ? void 0 : data.individualCount) || '', SharedValidators.integer], + measurementValues: this.formBuilder.group({}), + samples: [(data === null || data === void 0 ? void 0 : data.samples) || null], + // comments: [data && data.comments || null, Validators.maxLength(2000)] + }); + if (opts.withSaleProducts) { + formConfig.saleProducts = this.getSaleProductsFormArray(data); + } + else { + formConfig.saleProducts = [(data === null || data === void 0 ? void 0 : data.saleProducts) || null]; + } + return formConfig; + } + getFormGroupOptions(data, opts) { + return { + validator: [ + SharedFormGroupValidators.requiredIfEmpty('weight', 'individualCount'), + SharedFormGroupValidators.requiredIfEmpty('individualCount', 'weight'), + ], + }; + } + fillDefaultOptions(opts) { + opts = super.fillDefaultOptions(opts); + opts.withMeasurements = toBoolean(opts.withMeasurements, toBoolean(!!opts.program, false)); + return opts; + } + updateFormGroup(formGroup, opts) { + if (opts.withSaleProducts) { + const saleValidators = this.getDefaultSaleProductValidators(); + if (formGroup.controls.individualCount.value) { + saleValidators.push(SharedFormArrayValidators.validSumMaxValue('individualCount', formGroup.controls.individualCount.value)); + } + if (formGroup.controls.weight.value) { + saleValidators.push(SharedFormArrayValidators.validSumMaxValue('weight', formGroup.controls.weight.value)); + } + if (saleValidators.length) { + formGroup.controls.saleProducts.setValidators(saleValidators); + } + } + } + /* -- protected methods -- */ + getSaleProductsFormArray(data) { + return this.formBuilder.array((data && data.saleProducts || [null]).map(saleProduct => this.getSaleProductControl(saleProduct)), this.getDefaultSaleProductValidators()); + } + getDefaultSaleProductValidators() { + return [ + SharedFormArrayValidators.validSumMaxValue('ratio', 100), + ]; + } + getSaleProductControl(sale) { + return this.formBuilder.group({ + id: [(sale === null || sale === void 0 ? void 0 : sale.id) || null], + saleType: [(sale === null || sale === void 0 ? void 0 : sale.saleType) || null, Validators.compose([Validators.required, SharedValidators.entity])], + ratio: [(sale === null || sale === void 0 ? void 0 : sale.ratio) || null, Validators.compose([SharedValidators.decimal({ maxDecimals: 2 }), Validators.min(0), Validators.max(100)])], + ratioCalculated: [(sale === null || sale === void 0 ? void 0 : sale.ratioCalculated) || null], + weight: [(sale === null || sale === void 0 ? void 0 : sale.weight) || null, Validators.compose([SharedValidators.decimal({ maxDecimals: 2 }), Validators.min(0)])], + weightCalculated: [(sale === null || sale === void 0 ? void 0 : sale.weightCalculated) || null], + individualCount: [(sale === null || sale === void 0 ? void 0 : sale.individualCount) || null, Validators.compose([SharedValidators.integer, Validators.min(0)])], + averageWeightPrice: [(sale === null || sale === void 0 ? void 0 : sale.averageWeightPrice) || null, Validators.compose([SharedValidators.decimal({ maxDecimals: 2 }), Validators.min(0)])], + averageWeightPriceCalculated: [(sale === null || sale === void 0 ? void 0 : sale.averageWeightPriceCalculated) || null], + averagePackagingPrice: [(sale === null || sale === void 0 ? void 0 : sale.averagePackagingPrice) || null, Validators.compose([SharedValidators.decimal({ maxDecimals: 2 }), Validators.min(0)])], + averagePackagingPriceCalculated: [(sale === null || sale === void 0 ? void 0 : sale.averagePackagingPriceCalculated) || null], + totalPrice: [(sale === null || sale === void 0 ? void 0 : sale.totalPrice) || null, Validators.compose([SharedValidators.decimal({ maxDecimals: 2 }), Validators.min(0)])], + totalPriceCalculated: [(sale === null || sale === void 0 ? void 0 : sale.totalPriceCalculated) || null], + }, { + validators: [ + DataValidators.resetCalculatedFlag('ratio', ['weight']), + DataValidators.resetCalculatedFlag('weight', ['ratio']), + DataValidators.resetCalculatedFlag('averageWeightPrice', ['averagePackagingPrice', 'totalPrice']), + DataValidators.resetCalculatedFlag('averagePackagingPrice', ['averageWeightPrice', 'totalPrice']), + DataValidators.resetCalculatedFlag('totalPrice', ['averageWeightPrice', 'averagePackagingPrice']), + ], + }); + } +}; +ProductValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + LocalSettingsService, + MeasurementsValidatorService]) +], ProductValidatorService); +export { ProductValidatorService }; +//# sourceMappingURL=product.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/product/product.validator.js.map b/out-tsc/app/app/trip/product/product.validator.js.map new file mode 100644 index 000000000..9ef72321e --- /dev/null +++ b/out-tsc/app/app/trip/product/product.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"product.validator.js","sourceRoot":"","sources":["../../../../../src/app/trip/product/product.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/product/products.table.js b/out-tsc/app/app/trip/product/products.table.js new file mode 100644 index 000000000..2b833f315 --- /dev/null +++ b/out-tsc/app/app/trip/product/products.table.js @@ -0,0 +1,333 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, Input } from '@angular/core'; +import { filterNotNil, InMemoryEntitiesService, isNotEmptyArray, LocalSettingsService, referentialToString, } from '@sumaris-net/ngx-components'; +import { BaseMeasurementsTable } from '@app/data/measurement/measurements-table.class'; +import { ProductValidatorService } from './product.validator'; +import { Product, ProductFilter } from './product.model'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { BehaviorSubject } from 'rxjs'; +import { ProductSaleModal } from '../sale/product-sale.modal'; +import { SaleProductUtils } from '../sale/sale-product.model'; +import { environment } from '@environments/environment'; +import { SamplesModal } from '../sample/samples.modal'; +import { ProductModal } from '@app/trip/product/product.modal'; +import { mergeMap } from 'rxjs/operators'; +import moment from 'moment'; +export const PRODUCT_RESERVED_START_COLUMNS = ['parent', 'saleType', 'taxonGroup', 'weight', 'individualCount']; +export const PRODUCT_RESERVED_END_COLUMNS = []; // ['comments']; // todo +let ProductsTable = class ProductsTable extends BaseMeasurementsTable { + constructor(injector, settings, dataService, validatorService) { + super(injector, Product, ProductFilter, dataService, validatorService, { + suppressErrors: true, + reservedStartColumns: PRODUCT_RESERVED_START_COLUMNS, + reservedEndColumns: settings.mobile ? [] : PRODUCT_RESERVED_END_COLUMNS, + i18nColumnPrefix: 'TRIP.PRODUCT.LIST.' + }); + this.showIdColumn = true; + this.showActionButtons = true; + this.useSticky = false; + this.autoLoad = false; // waiting parent to be loaded + this.inlineEdition = this.validatorService && !this.mobile; + this.confirmBeforeDelete = true; + this.defaultPageSize = -1; // Do not use paginator + // Set default acquisition level + this.acquisitionLevel = AcquisitionLevelCodes.PRODUCT; + this.defaultSortBy = 'id'; + this.defaultSortDirection = 'asc'; + // FOR DEV ONLY ---- + this.debug = !environment.production; + } + set showParent(value) { + this.setShowColumn('parent', value); + } + get showParent() { + return this.getShowColumn('parent'); + } + set showSaleType(value) { + this.setShowColumn('saleType', value); + } + get showSaleType() { + return this.getShowColumn('saleType'); + } + set parentFilter(productFilter) { + this.setFilter(productFilter); + } + set value(data) { + this.memoryDataService.value = data; + } + get value() { + return this.memoryDataService.value; + } + ngOnInit() { + super.ngOnInit(); + if (this.showParent && this.parentAttributes) { + this.registerAutocompleteField('parent', { + items: this.$parents, + attributes: this.parentAttributes, + columnNames: ['RANK_ORDER', 'REFERENTIAL.LABEL', 'REFERENTIAL.NAME'], + columnSizes: this.parentAttributes.map(attr => attr === 'metier.label' ? 3 : (attr === 'rankOrderOnPeriod' ? 1 : undefined)), + mobile: this.mobile + }); + } + const taxonGroupAttributes = this.settings.getFieldDisplayAttributes('taxonGroup'); + this.registerAutocompleteField('taxonGroup', { + suggestFn: (value, options) => this.suggestTaxonGroups(value, options), + columnSizes: taxonGroupAttributes.map(attr => attr === 'label' ? 3 : undefined), + mobile: this.mobile + }); + this.registerSubscription(filterNotNil(this.pmfms$) + // if main pmfms are loaded, then other pmfm can be loaded + .pipe(mergeMap(() => this.programRefService.loadProgramPmfms(this.programLabel, { acquisitionLevel: AcquisitionLevelCodes.PRODUCT_SALE }))) + .subscribe((productSalePmfms) => { + this.productSalePmfms = productSalePmfms; + })); + this.registerSubscription(this.onStartEditingRow.subscribe(row => this.onStartEditProduct(row))); + } + confirmEditCreate(event, row) { + row = row || this.editedRow; + const confirmed = super.confirmEditCreate(event, row); + if (confirmed && row) { + // update sales if any + if (isNotEmptyArray(row.currentData.saleProducts)) { + const updatedSaleProducts = SaleProductUtils.updateSaleProducts(row.currentData, this.productSalePmfms); + row.validator.patchValue({ saleProducts: updatedSaleProducts }, { emitEvent: true }); + } + } + return confirmed; + } + openProductSale(event, row) { + return __awaiter(this, void 0, void 0, function* () { + if (event) + event.stopPropagation(); + const modal = yield this.modalCtrl.create({ + component: ProductSaleModal, + componentProps: { + disabled: this.disabled, + mobile: this.mobile, + data: row.currentData, + productSalePmfms: this.productSalePmfms + }, + backdropDismiss: false, + cssClass: 'modal-large' + }); + yield modal.present(); + const { data } = yield modal.onDidDismiss(); + if (data) { + // patch saleProducts only + row.validator.patchValue({ saleProducts: data.saleProducts }, { emitEvent: true }); + this.markAsDirty({ emitEvent: false }); + this.markForCheck(); + } + }); + } + openSampling(event, row) { + return __awaiter(this, void 0, void 0, function* () { + if (event) + event.stopPropagation(); + if (row.editing) { + const confirmed = yield this.confirmEditCreate(event, row); + if (!confirmed) + return; // skip + } + const samples = row.currentData.samples || []; + const taxonGroup = row.currentData.taxonGroup; + const title = yield this.translate.get('TRIP.SAMPLE.EDIT.TITLE', { label: referentialToString(taxonGroup) }).toPromise(); + const modal = yield this.modalCtrl.create({ + component: SamplesModal, + componentProps: { + programLabel: this.programLabel, + disabled: this.disabled, + data: samples, + defaultSampleDate: moment(), + defaultTaxonGroup: taxonGroup, + showLabel: false, + showTaxonGroup: false, + showTaxonName: false, + title + // onReady: (obj) => this.onInitForm && this.onInitForm.emit({form: obj.form.form, pmfms: obj.$pmfms.getValue()}) + }, + backdropDismiss: false, + keyboardClose: true + }); + // Open the modal + yield modal.present(); + // Wait until closed + const res = yield modal.onDidDismiss(); + if (res === null || res === void 0 ? void 0 : res.data) { + if (this.debug) + console.debug('[products-table] Modal result: ', res.data); + // patch samples only + row.validator.patchValue({ samples: res === null || res === void 0 ? void 0 : res.data }, { emitEvent: true }); + this.markAsDirty({ emitEvent: false }); + this.markForCheck(); + } + }); + } + openNewRowDetail() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail || this.readOnly) + return false; + const { data, role } = yield this.openDetailModal(); + if (data && role !== 'delete') { + const row = yield this.addEntityToTable(data); + // Redirect to another modal + if (role === 'sampling') { + yield this.openSampling(null, row); + } + else if (role === 'sale') { + yield this.openProductSale(null, row); + } + } + return true; + }); + } + openRow(id, row) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail || this.readOnly) + return false; + const entity = this.toEntity(row, true); + const { data, role } = yield this.openDetailModal(entity); + if (data && role !== 'delete') { + yield this.updateEntityToTable(data, row, { confirmEdit: false }); + } + else { + this.editedRow = null; + } + if (role) { + if (role === 'sampling') { + yield this.openSampling(null, row); + } + else if (role === 'sale') { + yield this.openProductSale(null, row); + } + } + return true; + }); + } + openDetailModal(dataToOpen) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const isNew = !dataToOpen && true; + if (isNew) { + dataToOpen = new this.dataType(); + yield this.onNewEntity(dataToOpen); + if ((_a = this.filter) === null || _a === void 0 ? void 0 : _a.parent) { + dataToOpen.parent = this.filter.parent; + } + else if (((_b = this.$parents.value) === null || _b === void 0 ? void 0 : _b.length) === 1) { + dataToOpen.parent = this.$parents.value[0]; + } + } + this.markAsLoading(); + const modal = yield this.modalCtrl.create({ + component: ProductModal, + componentProps: { + programLabel: this.programLabel, + acquisitionLevel: this.acquisitionLevel, + data: dataToOpen, + parents: this.$parents.value || null, + parentAttributes: this.parentAttributes, + disabled: this.disabled, + mobile: this.mobile, + isNew, + onDelete: (event, data) => this.deleteEntity(event, data) + }, + cssClass: 'modal-large', + keyboardClose: true + }); + // Open the modal + yield modal.present(); + // Wait until closed + const { data, role } = yield modal.onDidDismiss(); + if (data && this.debug) + console.debug('[product-table] product modal result: ', data, role); + this.markAsLoaded(); + return { data: data ? data : undefined, role }; + }); + } + /* -- protected methods -- */ + suggestTaxonGroups(value, options) { + return __awaiter(this, void 0, void 0, function* () { + return this.programRefService.suggestTaxonGroups(value, { + program: this.programLabel, + searchAttribute: options && options.searchAttribute + }); + }); + } + markForCheck() { + this.cd.markForCheck(); + } + onStartEditProduct(row) { + var _a, _b; + if (row.currentData && !row.currentData.parent) { + if ((_a = this.filter) === null || _a === void 0 ? void 0 : _a.parent) { + row.validator.patchValue({ parent: this.filter.parent }); + } + else if (((_b = this.$parents.value) === null || _b === void 0 ? void 0 : _b.length) === 1) { + row.validator.patchValue({ parent: this.$parents.value[0] }); + } + } + } +}; +__decorate([ + Input(), + __metadata("design:type", BehaviorSubject) +], ProductsTable.prototype, "$parents", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], ProductsTable.prototype, "parentAttributes", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ProductsTable.prototype, "showIdColumn", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ProductsTable.prototype, "showActionButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ProductsTable.prototype, "useSticky", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], ProductsTable.prototype, "showParent", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], ProductsTable.prototype, "showSaleType", null); +__decorate([ + Input(), + __metadata("design:type", ProductFilter), + __metadata("design:paramtypes", [ProductFilter]) +], ProductsTable.prototype, "parentFilter", null); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], ProductsTable.prototype, "value", null); +ProductsTable = __decorate([ + Component({ + selector: 'app-products-table', + templateUrl: 'products.table.html', + styleUrls: ['products.table.scss'], + providers: [ + { + provide: InMemoryEntitiesService, + useFactory: () => new InMemoryEntitiesService(Product, ProductFilter, { + equals: Product.equals + }) + } + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + LocalSettingsService, + InMemoryEntitiesService, + ProductValidatorService]) +], ProductsTable); +export { ProductsTable }; +//# sourceMappingURL=products.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/product/products.table.js.map b/out-tsc/app/app/trip/product/products.table.js.map new file mode 100644 index 000000000..d648901f8 --- /dev/null +++ b/out-tsc/app/app/trip/product/products.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"products.table.js","sourceRoot":"","sources":["../../../../../src/app/trip/product/products.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/expected-sale.form.js b/out-tsc/app/app/trip/sale/expected-sale.form.js new file mode 100644 index 000000000..cdd349047 --- /dev/null +++ b/out-tsc/app/app/trip/sale/expected-sale.form.js @@ -0,0 +1,99 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input, ViewChild } from '@angular/core'; +import { AppFormProvider, firstNotNilPromise, isNotNil, LocalSettingsService, round } from '@sumaris-net/ngx-components'; +import { ProductsTable } from '../product/products.table'; +import { MeasurementsForm } from '@app/data/measurement/measurements.form.component'; +import { ExpectedSale } from '@app/trip/sale/expected-sale.model'; +import { Product } from '@app/trip/product/product.model'; +import { SaleProductUtils } from '@app/trip/sale/sale-product.model'; +import { DenormalizedPmfmStrategy } from '@app/referential/services/model/pmfm-strategy.model'; +import { MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { PmfmIds } from '@app/referential/services/model/model.enum'; +import { environment } from '@environments/environment'; +let ExpectedSaleForm = class ExpectedSaleForm extends AppFormProvider { + constructor(injector, settings, cd) { + super(() => this.saleMeasurementsForm); + this.injector = injector; + this.settings = settings; + this.cd = cd; + this.debug = !environment.production; + this.showError = false; + } + get value() { + return this.getValue(); + } + set value(data) { + this.setValue(isNotNil(data) ? data : new ExpectedSale()); + } + ngOnInit() { + this.productsTable.disable(); // Readonly + } + setValue(data, opts) { + this.data = data; + this.saleMeasurementsForm.value = data.measurements || []; + this.updateProducts(data.products); + } + getValue() { + this.data.measurements = this.saleMeasurementsForm.value; + this.data.products = null; // don't return readonly table value + return this.data; + } + updateProducts(value) { + return __awaiter(this, void 0, void 0, function* () { + const pmfms = (yield firstNotNilPromise(this.productsTable.pmfms$)).map((pmfm) => DenormalizedPmfmStrategy.fromObject(pmfm)); + let products = (value || []).slice(); + this.totalPriceCalculated = 0; + // compute prices + products = products.map((product) => { + const saleProduct = SaleProductUtils.productToSaleProduct(product, pmfms); + SaleProductUtils.computeSaleProduct(product, saleProduct, (object, valueName) => !!object[valueName], (object, valueName) => object[valueName], (object, valueName, value) => (object[valueName] = round(value)), (object, valueName) => (object[valueName] = undefined), true, 'individualCount'); + const target = Object.assign(Object.assign({}, product), saleProduct); + target.measurementValues = MeasurementValuesUtils.normalizeValuesToForm(target.measurementValues || {}, pmfms); + // add measurements for each calculated or non calculated values + MeasurementValuesUtils.setFormValue(target.measurementValues, pmfms, PmfmIds.AVERAGE_WEIGHT_PRICE, saleProduct.averageWeightPrice); + MeasurementValuesUtils.setFormValue(target.measurementValues, pmfms, PmfmIds.AVERAGE_PACKAGING_PRICE, saleProduct.averagePackagingPrice); + MeasurementValuesUtils.setFormValue(target.measurementValues, pmfms, PmfmIds.TOTAL_PRICE, saleProduct.totalPrice); + this.totalPriceCalculated += saleProduct.totalPrice; + return Product.fromObject(target); + }); + if (this.totalPriceCalculated === 0) + this.totalPriceCalculated = undefined; + // populate table + this.productsTable.value = products; + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", String) +], ExpectedSaleForm.prototype, "programLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ExpectedSaleForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], ExpectedSaleForm.prototype, "mobile", void 0); +__decorate([ + ViewChild('saleMeasurementsForm', { static: true }), + __metadata("design:type", MeasurementsForm) +], ExpectedSaleForm.prototype, "saleMeasurementsForm", void 0); +__decorate([ + ViewChild('productsTable', { static: true }), + __metadata("design:type", ProductsTable) +], ExpectedSaleForm.prototype, "productsTable", void 0); +ExpectedSaleForm = __decorate([ + Component({ + selector: 'app-expected-sale-form', + templateUrl: './expected-sale.form.html', + styleUrls: ['./expected-sale.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, LocalSettingsService, ChangeDetectorRef]) +], ExpectedSaleForm); +export { ExpectedSaleForm }; +//# sourceMappingURL=expected-sale.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/expected-sale.form.js.map b/out-tsc/app/app/trip/sale/expected-sale.form.js.map new file mode 100644 index 000000000..f199437c8 --- /dev/null +++ b/out-tsc/app/app/trip/sale/expected-sale.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"expected-sale.form.js","sourceRoot":"","sources":["../../../../../src/app/trip/sale/expected-sale.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/expected-sale.model.js b/out-tsc/app/app/trip/sale/expected-sale.model.js new file mode 100644 index 000000000..fbfbd721d --- /dev/null +++ b/out-tsc/app/app/trip/sale/expected-sale.model.js @@ -0,0 +1,59 @@ +var ExpectedSale_1; +import { __decorate, __metadata } from "tslib"; +import { EntityClass, fromDateISOString, isNotEmptyArray, ReferentialRef, toDateISOString } from '@sumaris-net/ngx-components'; +import { DataEntity } from '@app/data/services/model/data-entity.model'; +import { Measurement, MeasurementUtils } from '@app/data/measurement/measurement.model'; +import { Product } from '../product/product.model'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +let ExpectedSale = ExpectedSale_1 = class ExpectedSale extends DataEntity { + constructor() { + super(ExpectedSale_1.TYPENAME); + this.saleDate = null; + this.saleLocation = null; + this.saleType = null; + this.landingId = null; + this.tripId = null; + this.measurements = null; + this.products = null; + } + fromObject(source) { + super.fromObject(source); + this.saleDate = fromDateISOString(source.saleDate); + this.saleLocation = source.saleLocation && ReferentialRef.fromObject(source.saleLocation); + this.saleType = source.saleType && ReferentialRef.fromObject(source.saleType); + this.tripId = source.tripId; + this.landingId = source.landingId; + this.measurements = source.measurements && source.measurements.map(Measurement.fromObject) || []; + // Products (sale) + this.products = source.products && source.products.map(Product.fromObject) || []; + // Affect parent + this.products.forEach(product => { + product.parent = this; + }); + return this; + } + asObject(options) { + const target = super.asObject(options); + target.saleDate = toDateISOString(this.saleDate); + target.saleLocation = this.saleLocation && this.saleLocation.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS)) || undefined; + target.saleType = this.saleType && this.saleType.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS)) || undefined; + target.measurements = this.measurements && this.measurements.filter(MeasurementUtils.isNotEmpty).map(m => m.asObject(options)) || undefined; + // Products + target.products = this.products && this.products.map(o => o.asObject(options)) || undefined; + // Affect parent link + if (isNotEmptyArray(target.products)) { + target.products.forEach(product => { + product.expectedSaleId = target.id; + // todo product.landingId must also be set, but not here, see pod + delete product.parent; + }); + } + return target; + } +}; +ExpectedSale = ExpectedSale_1 = __decorate([ + EntityClass({ typename: 'ExpectedSaleVO' }), + __metadata("design:paramtypes", []) +], ExpectedSale); +export { ExpectedSale }; +//# sourceMappingURL=expected-sale.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/expected-sale.model.js.map b/out-tsc/app/app/trip/sale/expected-sale.model.js.map new file mode 100644 index 000000000..5a601cb1c --- /dev/null +++ b/out-tsc/app/app/trip/sale/expected-sale.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"expected-sale.model.js","sourceRoot":"","sources":["../../../../../src/app/trip/sale/expected-sale.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/packet-sale.form.js b/out-tsc/app/app/trip/sale/packet-sale.form.js new file mode 100644 index 000000000..8039e6ffb --- /dev/null +++ b/out-tsc/app/app/trip/sale/packet-sale.form.js @@ -0,0 +1,177 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { UntypedFormBuilder } from '@angular/forms'; +import { AppForm, AppFormUtils, FormArrayHelper, isNotEmptyArray } from '@sumaris-net/ngx-components'; +import { PacketValidatorService } from '../packet/packet.validator'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { Subscription } from 'rxjs'; +import { fillRankOrder } from '@app/data/services/model/model.utils'; +import { SaleProductUtils } from './sale-product.model'; +let PacketSaleForm = class PacketSaleForm extends AppForm { + constructor(injector, validatorService, cd, formBuilder, referentialRefService) { + super(injector, validatorService.getFormGroup(undefined, { withSaleProducts: true })); + this.validatorService = validatorService; + this.cd = cd; + this.formBuilder = formBuilder; + this.referentialRefService = referentialRefService; + this.computing = false; + this.salesFocusIndex = -1; + this.showError = true; + } + get saleFormArray() { + return this.form.controls.saleProducts; + } + get value() { + const json = this.form.value; + // Update packets sales if needed + fillRankOrder(json.saleProducts); + // Convert aggregated products sales to products + json.saleProducts = json.saleProducts && SaleProductUtils.aggregatedSaleProductsToProducts(this._data, json.saleProducts, this.packetSalePmfms); + return json; + } + ngOnInit() { + super.ngOnInit(); + this.initSalesHelper(); + this.usageMode = this.usageMode || this.settings.usageMode; + // Combo: sale types + this.registerAutocompleteField('saleType', { + service: this.referentialRefService, + attributes: ['name'], + filter: { + entityName: 'SaleType' + }, + showAllOnFocus: true, + mobile: this.mobile + }); + } + ngOnDestroy() { + var _a; + (_a = this._saleSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + super.ngOnDestroy(); + } + setValue(data, opts) { + if (!data) + return; + this._data = data; + // Initialize product sales by converting products to aggregated sale products + const aggregatedSaleProducts = isNotEmptyArray(data.saleProducts) + ? SaleProductUtils.productsToAggregatedSaleProduct(data.saleProducts, this.packetSalePmfms) + .map(p => p.asObject()) + : [{}]; + this.salesHelper.resize(Math.max(1, aggregatedSaleProducts.length)); + data.saleProducts = aggregatedSaleProducts; + // Set value + super.setValue(data, opts); + // update saleFromArray validators + this.validatorService.updateFormGroup(this.form, { withSaleProducts: true }); + this.computeAllPrices(); + this.initSubscription(); + } + initSubscription() { + var _a; + // clear and re-create + (_a = this._saleSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + this._saleSubscription = new Subscription(); + // add subscription on each sale form + for (const saleForm of this.saleFormArray.controls || []) { + this._saleSubscription.add(saleForm.valueChanges.subscribe(() => { + const dirty = saleForm.dirty; + this.computePrices(saleForm.controls); + // Restore previous state - fix OBSDEB bug + if (!dirty) + saleForm.markAsPristine(); + })); + } + } + computeAllPrices() { + for (const sale of this.saleFormArray.controls || []) { + this.computePrices(sale.controls); + } + } + computePrices(controls) { + if (this.computing) + return; + try { + this.computing = true; + SaleProductUtils.computeSaleProduct(this.form.value, controls, (object, valueName) => AppFormUtils.isControlHasInput(object, valueName), (object, valueName) => object[valueName].value, (object, valueName, value) => AppFormUtils.setCalculatedValue(object, valueName, value), (object, valueName) => AppFormUtils.resetCalculatedValue(object, valueName), false, 'subgroupCount', 'number'); + } + finally { + this.computing = false; + } + } + initSalesHelper() { + this.salesHelper = new FormArrayHelper(FormArrayHelper.getOrCreateArray(this.formBuilder, this.form, 'saleProducts'), (saleProduct) => this.validatorService.getSaleProductControl(saleProduct), SaleProductUtils.isSaleProductEquals, SaleProductUtils.isSaleProductEmpty, { + allowEmptyArray: true + }); + if (this.salesHelper.size() === 0) { + // add at least one sale + this.salesHelper.resize(1); + } + this.markForCheck(); + } + addSale(event) { + event === null || event === void 0 ? void 0 : event.stopPropagation(); + this.salesHelper.add(); + this.initSubscription(); + this.editSale(this.salesHelper.size() - 1); + } + removeSale(index) { + this.salesHelper.removeAt(index); + this.initSubscription(); + this.editSale(index - 1, { focus: false }); + } + editSale(index, opts = { focus: true }) { + const maxIndex = this.salesHelper.size() - 1; + if (index < 0) { + index = 0; + } + else if (index > maxIndex) { + index = maxIndex; + } + if (this.salesEditedIndex === index) + return; // Skip if same + this.salesEditedIndex = index; + this.markForCheck(); + // Focus + if (!this.mobile && (!opts || opts.focus !== false)) { + this.salesFocusIndex = index; + setTimeout(() => { + this.salesFocusIndex = undefined; + }, 500); + } + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PacketSaleForm.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], PacketSaleForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], PacketSaleForm.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], PacketSaleForm.prototype, "packetSalePmfms", void 0); +PacketSaleForm = __decorate([ + Component({ + selector: 'app-packet-sale-form', + templateUrl: './packet-sale.form.html', + styleUrls: ['./packet-sale.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + PacketValidatorService, + ChangeDetectorRef, + UntypedFormBuilder, + ReferentialRefService]) +], PacketSaleForm); +export { PacketSaleForm }; +//# sourceMappingURL=packet-sale.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/packet-sale.form.js.map b/out-tsc/app/app/trip/sale/packet-sale.form.js.map new file mode 100644 index 000000000..858b87ebc --- /dev/null +++ b/out-tsc/app/app/trip/sale/packet-sale.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"packet-sale.form.js","sourceRoot":"","sources":["../../../../../src/app/trip/sale/packet-sale.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/packet-sale.modal.js b/out-tsc/app/app/trip/sale/packet-sale.modal.js new file mode 100644 index 000000000..3159d2258 --- /dev/null +++ b/out-tsc/app/app/trip/sale/packet-sale.modal.js @@ -0,0 +1,113 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Component, Injector, Input, ViewChild } from '@angular/core'; +import { ModalController } from '@ionic/angular'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { AppFormUtils, LocalSettingsService } from '@sumaris-net/ngx-components'; +import { Packet } from '../packet/packet.model'; +import { PacketSaleForm } from './packet-sale.form'; +import { TranslateService } from '@ngx-translate/core'; +let PacketSaleModal = class PacketSaleModal { + constructor(injector, viewCtrl, translate) { + this.viewCtrl = viewCtrl; + this.translate = translate; + this.loading = false; + this.subscription = new Subscription(); + this.$title = new BehaviorSubject(null); + this.mobile = injector.get(LocalSettingsService).mobile; + } + get enabled() { + return this.packetSaleForm.enabled; + } + get valid() { + var _a; + return ((_a = this.packetSaleForm) === null || _a === void 0 ? void 0 : _a.valid) || false; + } + get invalid() { + var _a; + return ((_a = this.packetSaleForm) === null || _a === void 0 ? void 0 : _a.invalid) || false; + } + ngOnInit() { + this.updateTitle(); + this.packetSaleForm.markAsReady(); + setTimeout(() => __awaiter(this, void 0, void 0, function* () { + yield this.packetSaleForm.setValue(Packet.fromObject(this.data)); + if (!this.disabled) + this.enable(); + })); + } + updateTitle() { + var _a; + const title = this.translate.instant('PACKET.SALE.TITLE', { rankOrder: (_a = this.data) === null || _a === void 0 ? void 0 : _a.rankOrder }); + this.$title.next(title); + } + onSave(event) { + return __awaiter(this, void 0, void 0, function* () { + // Avoid multiple call + if (this.disabled) + return; + yield AppFormUtils.waitWhilePending(this.packetSaleForm); + if (this.packetSaleForm.invalid) { + AppFormUtils.logFormErrors(this.packetSaleForm.form); + this.packetSaleForm.markAllAsTouched({ emitEvent: true }); + return; + } + this.loading = true; + try { + const value = this.packetSaleForm.value; + this.disable(); + yield this.viewCtrl.dismiss(value); + } + catch (err) { + console.error(err); + this.packetSaleForm.error = err && err.message || err; + this.enable(); + this.loading = false; + } + }); + } + disable() { + this.disabled = true; + this.packetSaleForm.disable(); + } + enable() { + this.disabled = false; + this.packetSaleForm.enable(); + } + cancel() { + this.viewCtrl.dismiss(); + } + ngOnDestroy() { + this.subscription.unsubscribe(); + } +}; +__decorate([ + ViewChild('packetSaleForm', { static: true }), + __metadata("design:type", PacketSaleForm) +], PacketSaleModal.prototype, "packetSaleForm", void 0); +__decorate([ + Input(), + __metadata("design:type", Packet) +], PacketSaleModal.prototype, "data", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PacketSaleModal.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], PacketSaleModal.prototype, "packetSalePmfms", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], PacketSaleModal.prototype, "disabled", void 0); +PacketSaleModal = __decorate([ + Component({ + selector: 'app-packet-sale-modal', + templateUrl: './packet-sale.modal.html' + }), + __metadata("design:paramtypes", [Injector, + ModalController, + TranslateService]) +], PacketSaleModal); +export { PacketSaleModal }; +//# sourceMappingURL=packet-sale.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/packet-sale.modal.js.map b/out-tsc/app/app/trip/sale/packet-sale.modal.js.map new file mode 100644 index 000000000..2130c28a8 --- /dev/null +++ b/out-tsc/app/app/trip/sale/packet-sale.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"packet-sale.modal.js","sourceRoot":"","sources":["../../../../../src/app/trip/sale/packet-sale.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/product-sale.form.js b/out-tsc/app/app/trip/sale/product-sale.form.js new file mode 100644 index 000000000..d5c7ebbe0 --- /dev/null +++ b/out-tsc/app/app/trip/sale/product-sale.form.js @@ -0,0 +1,190 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core'; +import { UntypedFormBuilder } from '@angular/forms'; +import { AppForm, AppFormUtils, FormArrayHelper, isNotEmptyArray, isNotNil } from '@sumaris-net/ngx-components'; +import { Injector } from '@angular/core'; +import { ProductValidatorService } from '../product/product.validator'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { Subscription } from 'rxjs'; +import { SaleProductUtils } from './sale-product.model'; +let ProductSaleForm = class ProductSaleForm extends AppForm { + constructor(injector, validatorService, cd, formBuilder, referentialRefService) { + super(injector, validatorService.getFormGroup(undefined, { withSaleProducts: true })); + this.validatorService = validatorService; + this.cd = cd; + this.formBuilder = formBuilder; + this.referentialRefService = referentialRefService; + this.computing = false; + this.salesFocusIndex = -1; + this.showError = true; + } + get saleFormArray() { + return this.form.controls.saleProducts; + } + get value() { + const json = this.form.value; + // Convert products sales to products + json.saleProducts = (json.saleProducts || []).map(saleProduct => SaleProductUtils.saleProductToProduct(this._data, saleProduct, this.productSalePmfms, { keepId: true })); + return json; + } + ngOnInit() { + super.ngOnInit(); + this.initSalesHelper(); + this.usageMode = this.usageMode || this.settings.usageMode; + // Combo: sale types + this.registerAutocompleteField('saleType', { + service: this.referentialRefService, + attributes: ['name'], + filter: { + entityName: 'SaleType' + }, + showAllOnFocus: true, + mobile: this.mobile + }); + this.registerSubscription(this.form.get('individualCount').valueChanges.subscribe(value => { + this.hasIndividualCount = isNotNil(value); + this.markForCheck(); + })); + } + ngOnDestroy() { + var _a; + (_a = this._saleSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + super.ngOnDestroy(); + } + setValue(data, opts) { + const _super = Object.create(null, { + setValue: { get: () => super.setValue } + }); + return __awaiter(this, void 0, void 0, function* () { + if (!data) + return; + this._data = data; + // Initialize product sales by converting products to sale products + data.saleProducts = isNotEmptyArray(data.saleProducts) ? data.saleProducts.map(p => SaleProductUtils.productToSaleProduct(p, this.productSalePmfms)) : [null]; + this.salesHelper.resize(Math.max(1, data.saleProducts.length)); + _super.setValue.call(this, data, opts); + // update saleFromArray validators + this.validatorService.updateFormGroup(this.form, { withSaleProducts: true }); + this.computeAllPrices(); + this.initSubscription(); + }); + } + initSubscription() { + var _a; + // clear and re-create + (_a = this._saleSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + this._saleSubscription = new Subscription(); + // add subscription on each sale form + for (const saleForm of this.saleFormArray.controls || []) { + this._saleSubscription.add(saleForm.valueChanges.subscribe(() => { + const dirty = saleForm.dirty; + this.computePrices(saleForm.controls); + // Restore previous state - fix OBSDEB bug + if (!dirty) + saleForm.markAsPristine(); + })); + } + } + computeAllPrices() { + for (const saleForm of this.saleFormArray.controls || []) { + this.computePrices(saleForm.controls); + } + } + computePrices(controls) { + if (this.computing) + return; + try { + this.computing = true; + SaleProductUtils.computeSaleProduct(this.form.value, controls, (object, valueName) => AppFormUtils.isControlHasInput(object, valueName), (object, valueName) => object[valueName].value, (object, valueName, value1) => AppFormUtils.setCalculatedValue(object, valueName, value1), (object, valueName) => AppFormUtils.resetCalculatedValue(object, valueName), true, 'individualCount'); + } + finally { + this.computing = false; + } + } + isProductWithNumber() { + return isNotNil(this.form.value.individualCount); + } + isProductWithWeight() { + return isNotNil(this.form.value.weight); + } + initSalesHelper() { + this.salesHelper = new FormArrayHelper(FormArrayHelper.getOrCreateArray(this.formBuilder, this.form, 'saleProducts'), (saleProduct) => this.validatorService.getSaleProductControl(saleProduct), SaleProductUtils.isSaleProductEquals, SaleProductUtils.isSaleProductEmpty, { + allowEmptyArray: true, + validators: this.validatorService.getDefaultSaleProductValidators() + }); + if (this.salesHelper.size() === 0) { + // add at least one sale + this.salesHelper.resize(1); + } + this.markForCheck(); + } + asFormGroup(control) { + return control; + } + addSale(event) { + event === null || event === void 0 ? void 0 : event.stopPropagation(); + this.salesHelper.add(); + this.initSubscription(); + this.editSale(this.salesHelper.size() - 1); + } + removeSale(index) { + this.salesHelper.removeAt(index); + this.initSubscription(); + this.editSale(index - 1, { focus: false }); + } + editSale(index, opts = { focus: true }) { + const maxIndex = this.salesHelper.size() - 1; + if (index < 0) { + index = 0; + } + else if (index > maxIndex) { + index = maxIndex; + } + if (this.salesEditedIndex === index) + return; // Skip if same + this.salesEditedIndex = index; + this.markForCheck(); + // Focus + if (!this.mobile && (!opts || opts.focus !== false)) { + this.salesFocusIndex = index; + setTimeout(() => { + this.salesFocusIndex = undefined; + this.markForCheck(); + }, 500); + } + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Boolean) +], ProductSaleForm.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ProductSaleForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], ProductSaleForm.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], ProductSaleForm.prototype, "productSalePmfms", void 0); +ProductSaleForm = __decorate([ + Component({ + selector: 'app-product-sale-form', + templateUrl: './product-sale.form.html', + styleUrls: ['./product-sale.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + ProductValidatorService, + ChangeDetectorRef, + UntypedFormBuilder, + ReferentialRefService]) +], ProductSaleForm); +export { ProductSaleForm }; +//# sourceMappingURL=product-sale.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/product-sale.form.js.map b/out-tsc/app/app/trip/sale/product-sale.form.js.map new file mode 100644 index 000000000..c265b1db2 --- /dev/null +++ b/out-tsc/app/app/trip/sale/product-sale.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"product-sale.form.js","sourceRoot":"","sources":["../../../../../src/app/trip/sale/product-sale.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/product-sale.modal.js b/out-tsc/app/app/trip/sale/product-sale.modal.js new file mode 100644 index 000000000..4cc7091d4 --- /dev/null +++ b/out-tsc/app/app/trip/sale/product-sale.modal.js @@ -0,0 +1,85 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Component, Injector, Input, ViewChild } from '@angular/core'; +import { AlertController, ModalController } from '@ionic/angular'; +import { AppEntityEditorModal, referentialToString } from '@sumaris-net/ngx-components'; +import { ProductSaleForm } from './product-sale.form'; +import { Product } from '../product/product.model'; +import { TranslateService } from '@ngx-translate/core'; +import { distinctUntilChanged } from 'rxjs/operators'; +let ProductSaleModal = class ProductSaleModal extends AppEntityEditorModal { + constructor(injector, viewCtrl, alertCtrl, translate) { + super(injector, Product, { + tabCount: 1 + }); + this.viewCtrl = viewCtrl; + this.alertCtrl = alertCtrl; + this.translate = translate; + this.referentialToString = referentialToString; + } + get form() { + return this.productSaleForm.form; + } + saveAndClose(event) { + return super.saveAndClose(event); + } + registerForms() { + this.addChildForm(this.productSaleForm); + } + ngOnInit() { + const _super = Object.create(null, { + ngOnInit: { get: () => super.ngOnInit } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.ngOnInit.call(this); + this.productSaleForm.markAsReady(); + const formArray = this.productSaleForm.form.get('saleProducts'); + formArray.statusChanges + .pipe(distinctUntilChanged()) + .subscribe((status) => { + const control = formArray.at(0); + console.log('saleProducts.dirty=' + control.enabled, control); + }); + }); + } + ngOnDestroy() { + super.ngOnDestroy(); + } + setValue(data) { + return __awaiter(this, void 0, void 0, function* () { + yield this.productSaleForm.setValue(Product.fromObject(data)); + }); + } + getJsonValueToSave() { + return __awaiter(this, void 0, void 0, function* () { + return this.productSaleForm.value; + }); + } + computeTitle(data) { + return __awaiter(this, void 0, void 0, function* () { + return this.translate.instant('TRIP.PRODUCT.SALE.TITLE', { taxonGroupLabel: referentialToString(data.taxonGroup) }); + }); + } + getFirstInvalidTabIndex() { + return 0; + } +}; +__decorate([ + ViewChild('productSaleForm', { static: true }), + __metadata("design:type", ProductSaleForm) +], ProductSaleModal.prototype, "productSaleForm", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], ProductSaleModal.prototype, "productSalePmfms", void 0); +ProductSaleModal = __decorate([ + Component({ + selector: 'app-product-sale-modal', + templateUrl: './product-sale.modal.html' + }), + __metadata("design:paramtypes", [Injector, + ModalController, + AlertController, + TranslateService]) +], ProductSaleModal); +export { ProductSaleModal }; +//# sourceMappingURL=product-sale.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/product-sale.modal.js.map b/out-tsc/app/app/trip/sale/product-sale.modal.js.map new file mode 100644 index 000000000..1d05f3dc7 --- /dev/null +++ b/out-tsc/app/app/trip/sale/product-sale.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"product-sale.modal.js","sourceRoot":"","sources":["../../../../../src/app/trip/sale/product-sale.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/sale-product.model.js b/out-tsc/app/app/trip/sale/sale-product.model.js new file mode 100644 index 000000000..c30fc892c --- /dev/null +++ b/out-tsc/app/app/trip/sale/sale-product.model.js @@ -0,0 +1,310 @@ +import { MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { isNil, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilOrNaN, ReferentialUtils, round } from '@sumaris-net/ngx-components'; +import { Product } from '../product/product.model'; +import { PacketUtils } from '../packet/packet.model'; +import { PmfmIds } from '@app/referential/services/model/model.enum'; +export class SaleProduct extends Product { + constructor() { + super(); + this.__typename = undefined; //Product.TYPENAME; + this.saleProducts = []; + this.productIdByTaxonGroup = {}; + } + // static TYPENAME = 'SaleProductVO'; // fixme: This VO don't exists, keep its TYPENAME ? + static fromObject(source) { + const target = new SaleProduct(); + target.fromObject(source); + return target; + } + asObject(opts) { + const target = super.asObject(opts); + delete target.saleProducts; + return target; + } + fromObject(source, opts) { + super.fromObject(source); + this.ratio = source.ratio; + this.ratioCalculated = source.ratioCalculated; + this.averageWeightPrice = source.averageWeightPrice; + this.averageWeightPriceCalculated = source.averageWeightPriceCalculated; + this.averagePackagingPrice = source.averagePackagingPrice; + this.averagePackagingPriceCalculated = source.averagePackagingPriceCalculated; + this.totalPrice = source.totalPrice; + this.totalPriceCalculated = source.totalPriceCalculated; + this.saleProducts = []; + this.productIdByTaxonGroup = source.productIdByTaxonGroup || {}; + return this; + } +} +const ratioProperty = 'ratio'; +const weightProperty = 'weight'; +const averageWeightPriceProperty = 'averageWeightPrice'; +const averagePackagingPriceProperty = 'averagePackagingPrice'; +const totalPriceProperty = 'totalPrice'; +export class SaleProductUtils { + static isSaleProductEmpty(saleProduct) { + return !saleProduct || isNil(saleProduct.saleType); + } + static isSaleProductEquals(saleProduct1, saleProduct2) { + return (saleProduct1 === saleProduct2) || (isNil(saleProduct1) && isNil(saleProduct2)) || (saleProduct1 && saleProduct2 && ReferentialUtils.equals(saleProduct1.saleType, saleProduct2.saleType) + && saleProduct1.rankOrder === saleProduct2.rankOrder); + } + static isSaleOfProduct(product, saleProduct, pmfms) { + return product && saleProduct + && product.taxonGroup && saleProduct.taxonGroup && product.taxonGroup.equals(saleProduct.taxonGroup) + && product.rankOrder === saleProduct.rankOrder + && product.measurementValues && saleProduct.measurementValues + && MeasurementValuesUtils.getFormValue(product.measurementValues, pmfms, PmfmIds.PACKAGING) === MeasurementValuesUtils.getFormValue(saleProduct.measurementValues, pmfms, PmfmIds.PACKAGING) + && MeasurementValuesUtils.getFormValue(product.measurementValues, pmfms, PmfmIds.SIZE_CATEGORY) === MeasurementValuesUtils.getFormValue(saleProduct.measurementValues, pmfms, PmfmIds.SIZE_CATEGORY); + } + static isSaleOfPacket(packet, saleProduct) { + return packet && saleProduct + && packet.id === saleProduct.batchId; + } + static productToSaleProduct(product, pmfms) { + const target = SaleProduct.fromObject(product); + // parse measurements to sale properties + if (product.measurementValues && pmfms) { + const rankOrder = MeasurementValuesUtils.getFormValue(product.measurementValues, pmfms, PmfmIds.SALE_RANK_ORDER); + if (rankOrder) { + // replace product rankOrder by saleRankOrder + target.rankOrder = isNotNilOrNaN(rankOrder) ? +rankOrder : undefined; + } + const ratio = MeasurementValuesUtils.getFormValue(product.measurementValues, pmfms, PmfmIds.SALE_ESTIMATED_RATIO); + target.ratio = isNotNilOrNaN(ratio) ? +ratio : undefined; + target.ratioCalculated = isNil(target.ratio); + const averageWeightPrice = MeasurementValuesUtils.getFormValue(product.measurementValues, pmfms, PmfmIds.AVERAGE_WEIGHT_PRICE); + target.averageWeightPrice = isNotNilOrNaN(averageWeightPrice) ? +averageWeightPrice : undefined; + target.averageWeightPriceCalculated = isNil(target.averageWeightPrice); + const averagePackagingPrice = MeasurementValuesUtils.getFormValue(product.measurementValues, pmfms, PmfmIds.AVERAGE_PACKAGING_PRICE); + target.averagePackagingPrice = isNotNilOrNaN(averagePackagingPrice) ? +averagePackagingPrice : undefined; + target.averagePackagingPriceCalculated = isNil(target.averagePackagingPrice); + const totalPrice = MeasurementValuesUtils.getFormValue(product.measurementValues, pmfms, PmfmIds.TOTAL_PRICE); + target.totalPrice = isNotNilOrNaN(totalPrice) ? +totalPrice : undefined; + target.totalPriceCalculated = isNil(target.totalPrice); + } + return target; + } + static productsToAggregatedSaleProduct(products, pmfms) { + const target = []; + (products || []).forEach(product => { + const saleProduct = this.productToSaleProduct(product, pmfms); + // Valid saleProduct + if (ReferentialUtils.isEmpty(saleProduct.taxonGroup)) + throw new Error('this saleProduct has no taxonGroup'); + // aggregate weight price to packaging price + saleProduct.averagePackagingPrice = saleProduct.averageWeightPrice; + saleProduct.averagePackagingPriceCalculated = isNil(saleProduct.averagePackagingPrice); + saleProduct.averageWeightPrice = undefined; + const aggregatedSaleProduct = target.find(a => a.rankOrder === saleProduct.rankOrder); + if (aggregatedSaleProduct) { + // Some assertions + if (aggregatedSaleProduct.subgroupCount !== saleProduct.subgroupCount) + throw new Error(`Invalid packet sale: different packet count found: ${aggregatedSaleProduct.subgroupCount} != ${saleProduct.subgroupCount}`); + if (isNil(saleProduct.saleType) || !saleProduct.saleType.equals(aggregatedSaleProduct.saleType)) + throw new Error(`Invalid packet sale: different sale type found: + ${aggregatedSaleProduct.saleType && aggregatedSaleProduct.saleType.name || null} != ${saleProduct.saleType && saleProduct.saleType.name || null}`); + // Sum values + if (aggregatedSaleProduct.weight && saleProduct.weight) + aggregatedSaleProduct.weight += saleProduct.weight; + if (aggregatedSaleProduct.averagePackagingPrice && saleProduct.averagePackagingPrice) + aggregatedSaleProduct.averagePackagingPrice += saleProduct.averagePackagingPrice; + if (aggregatedSaleProduct.totalPrice && saleProduct.totalPrice) + aggregatedSaleProduct.totalPrice += saleProduct.totalPrice; + // Keep id + if (saleProduct.id) { + if (aggregatedSaleProduct.productIdByTaxonGroup[saleProduct.taxonGroup.id]) + throw new Error(`The taxonGroup id:${saleProduct.taxonGroup.id} already present in this aggregated sale product`); + aggregatedSaleProduct.productIdByTaxonGroup[saleProduct.taxonGroup.id] = saleProduct.id; + } + } + else { + // Keep id + if (saleProduct.id) + saleProduct.productIdByTaxonGroup[saleProduct.taxonGroup.id] = saleProduct.id; + // just add to aggregation + target.push(saleProduct); + } + }); + return target; + } + static saleProductToProduct(product, saleProduct, pmfms, options) { + // merge product with sale product to initialize target product + const target = Object.assign(Object.assign({}, product), saleProduct); + delete target.saleProducts; + // Don't copy id by default + if (!options || !options.keepId) + delete target.id; + target.measurementValues = MeasurementValuesUtils.normalizeValuesToForm(target.measurementValues, pmfms); + // even a calculated ratio need to be saved + MeasurementValuesUtils.setFormValue(target.measurementValues, pmfms, PmfmIds.SALE_ESTIMATED_RATIO, saleProduct.ratio); + // add measurements for each non-calculated values + MeasurementValuesUtils.setFormValue(target.measurementValues, pmfms, PmfmIds.AVERAGE_WEIGHT_PRICE, isNotNilOrNaN(saleProduct.averageWeightPrice) && !saleProduct.averageWeightPriceCalculated ? saleProduct.averageWeightPrice : undefined); + MeasurementValuesUtils.setFormValue(target.measurementValues, pmfms, PmfmIds.AVERAGE_PACKAGING_PRICE, isNotNilOrNaN(saleProduct.averagePackagingPrice) && !saleProduct.averagePackagingPriceCalculated ? saleProduct.averagePackagingPrice : undefined); + MeasurementValuesUtils.setFormValue(target.measurementValues, pmfms, PmfmIds.TOTAL_PRICE, isNotNilOrNaN(saleProduct.totalPrice) && !saleProduct.totalPriceCalculated ? saleProduct.totalPrice : undefined); + return Product.fromObject(target); + } + static aggregatedSaleProductsToProducts(packet, saleProducts, pmfms) { + const target = []; + (saleProducts || []).forEach(saleProduct => { + // dispatch each sale product with packet composition + packet.composition.forEach(composition => { + const existingProductId = saleProduct.productIdByTaxonGroup && saleProduct.productIdByTaxonGroup[composition.taxonGroup.id]; + let product; + if (existingProductId) { + product = packet.saleProducts.find(p => p.id === existingProductId); + } + if (!product) { + product = new Product(); + product.taxonGroup = composition.taxonGroup; + } + // update this product + product.rankOrder = saleProduct.rankOrder; + product.subgroupCount = saleProduct.subgroupCount; + product.saleType = saleProduct.saleType; + // get or calculate average weight + const compositionAverageRatio = PacketUtils.getCompositionAverageRatio(packet, composition); + let averageWeight = composition.weight; + if (isNilOrNaN(averageWeight)) { + averageWeight = compositionAverageRatio * packet.weight; + } + product.weight = round(averageWeight * saleProduct.subgroupCount / packet.number); + product.weightCalculated = true; + // sale rank order + MeasurementValuesUtils.setFormValue(product.measurementValues, pmfms, PmfmIds.SALE_RANK_ORDER, saleProduct.rankOrder); + // average packaging converted to average weight price + MeasurementValuesUtils.setFormValue(product.measurementValues, pmfms, PmfmIds.AVERAGE_WEIGHT_PRICE, isNotNilOrNaN(saleProduct.averagePackagingPrice) && !saleProduct.averagePackagingPriceCalculated + ? round(compositionAverageRatio * saleProduct.averagePackagingPrice) + : undefined); + // total price + MeasurementValuesUtils.setFormValue(product.measurementValues, pmfms, PmfmIds.TOTAL_PRICE, isNotNilOrNaN(saleProduct.totalPrice) && !saleProduct.totalPriceCalculated + ? round(compositionAverageRatio * saleProduct.totalPrice) + : undefined); + // add to target + target.push(product); + }); + }); + return target; + } + static updateSaleProducts(product, pmfms) { + // convert to SaleProduct + const saleProducts = isNotEmptyArray(product.saleProducts) ? product.saleProducts.map(p => SaleProductUtils.productToSaleProduct(p, pmfms)) : []; + // compute prices + saleProducts.forEach(saleProduct => SaleProductUtils.computeSaleProduct(product, saleProduct, (object, valueName) => !!object[valueName], (object, valueName) => object[valueName], (object, valueName, value) => object[valueName] = round(value), (object, valueName) => object[valueName] = undefined, true, 'individualCount')); + // convert back to Product + return saleProducts.map(saleProduct => SaleProductUtils.saleProductToProduct(product, saleProduct, pmfms, { keepId: true })); + } + static updateAggregatedSaleProducts(packet, pmfms) { + // convert to SaleProduct + const saleProducts = isNotEmptyArray(packet.saleProducts) ? SaleProductUtils.productsToAggregatedSaleProduct(packet.saleProducts, pmfms) : []; + // compute prices + saleProducts.forEach(saleProduct => SaleProductUtils.computeSaleProduct(packet, saleProduct, (object, valueName) => !!object[valueName], (object, valueName) => object[valueName], (object, valueName, value) => object[valueName] = round(value), (object, valueName) => object[valueName] = undefined, false, 'subgroupCount', 'number')); + // convert back to Product + return SaleProductUtils.aggregatedSaleProductsToProducts(packet, saleProducts, pmfms); + } + static computeSaleProduct(parent, saleProduct, hasValueFn, getValueFn, setValueFn, resetValueFn, useRatioAndWeight, countProperty, parentCountProperty) { + const parentCount = parent[parentCountProperty || countProperty]; + const parentWeight = parent[weightProperty]; + if (isNotNil(parentCount)) { + // with saleProduct count (should be < whole parent count) + const count = getValueFn(saleProduct, countProperty); + const ratio = count / parentCount; + let useAverageWeightPrice = false; + if (count) { + if (hasValueFn(saleProduct, averagePackagingPriceProperty)) { + // compute total price + setValueFn(saleProduct, totalPriceProperty, getValueFn(saleProduct, averagePackagingPriceProperty) * count); + } + else if (hasValueFn(saleProduct, totalPriceProperty)) { + // compute average packaging price + const total = getValueFn(saleProduct, totalPriceProperty); + const averagePackagingPrice = total / count; + setValueFn(saleProduct, averagePackagingPriceProperty, averagePackagingPrice); + } + else if (useRatioAndWeight && isNotNil(parentWeight) && hasValueFn(saleProduct, averageWeightPriceProperty)) { + // compute average packaging price and total price + useAverageWeightPrice = true; + const total = ratio * parentWeight * getValueFn(saleProduct, averageWeightPriceProperty); + const averagePackagingPrice = total / count; + setValueFn(saleProduct, totalPriceProperty, total); + setValueFn(saleProduct, averagePackagingPriceProperty, averagePackagingPrice); + } + else { + resetValueFn(saleProduct, averagePackagingPriceProperty); + resetValueFn(saleProduct, totalPriceProperty); + if (useRatioAndWeight) + resetValueFn(saleProduct, averageWeightPriceProperty); + } + if (useRatioAndWeight) { + // compute ratio + // const ratio = count / parentCount * 100; + setValueFn(saleProduct, ratioProperty, ratio * 100); + if (isNotNil(parentWeight)) { + // calculate weight + setValueFn(saleProduct, weightProperty, ratio * parentWeight); + // calculate average weight price (with calculated or input total price) + if (!useAverageWeightPrice && isNotNil(getValueFn(saleProduct, totalPriceProperty))) { + setValueFn(saleProduct, averageWeightPriceProperty, getValueFn(saleProduct, totalPriceProperty) / parentWeight); + } + } + else { + // reset weight part + resetValueFn(saleProduct, weightProperty); + resetValueFn(saleProduct, averageWeightPriceProperty); + } + } + else { + // compute weigh (always calculated) + setValueFn(saleProduct, weightProperty, count * parentWeight / parentCount); + } + } + else { + // reset all + resetValueFn(saleProduct, averagePackagingPriceProperty); + resetValueFn(saleProduct, totalPriceProperty); + resetValueFn(saleProduct, weightProperty); + if (useRatioAndWeight) { + resetValueFn(saleProduct, ratioProperty); + resetValueFn(saleProduct, averageWeightPriceProperty); + } + } + } + else + // Only by weight + if (useRatioAndWeight && isNotNil(parentWeight)) { + // with weight only + if (hasValueFn(saleProduct, weightProperty)) { + // calculate ratio + setValueFn(saleProduct, ratioProperty, getValueFn(saleProduct, weightProperty) / parentWeight * 100); + } + else if (hasValueFn(saleProduct, ratioProperty)) { + // calculate weight + setValueFn(saleProduct, weightProperty, getValueFn(saleProduct, ratioProperty) * parentWeight / 100); + } + else { + // reset all + resetValueFn(saleProduct, ratioProperty); + resetValueFn(saleProduct, weightProperty); + resetValueFn(saleProduct, averageWeightPriceProperty); + resetValueFn(saleProduct, totalPriceProperty); + } + const weight = getValueFn(saleProduct, weightProperty); + if (isNotNil(weight)) { + if (hasValueFn(saleProduct, averageWeightPriceProperty)) { + // compute total price + setValueFn(saleProduct, totalPriceProperty, getValueFn(saleProduct, averageWeightPriceProperty) * weight); + } + else if (hasValueFn(saleProduct, totalPriceProperty)) { + // compute average weight price + setValueFn(saleProduct, averageWeightPriceProperty, getValueFn(saleProduct, totalPriceProperty) / weight); + } + else { + // reset + resetValueFn(saleProduct, averageWeightPriceProperty); + resetValueFn(saleProduct, totalPriceProperty); + } + } + } + } +} +//# sourceMappingURL=sale-product.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/sale-product.model.js.map b/out-tsc/app/app/trip/sale/sale-product.model.js.map new file mode 100644 index 000000000..2d7035c49 --- /dev/null +++ b/out-tsc/app/app/trip/sale/sale-product.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sale-product.model.js","sourceRoot":"","sources":["../../../../../src/app/trip/sale/sale-product.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/sale.form.js b/out-tsc/app/app/trip/sale/sale.form.js new file mode 100644 index 000000000..5e687dd8b --- /dev/null +++ b/out-tsc/app/app/trip/sale/sale.form.js @@ -0,0 +1,132 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { SaleValidatorService } from './sale.validator'; +import { AppForm, referentialToString, toNumber } from '@sumaris-net/ngx-components'; +import { VesselSnapshotService } from '@app/referential/services/vessel-snapshot.service'; +import { LocationLevelIds } from '@app/referential/services/model/model.enum'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +let SaleForm = class SaleForm extends AppForm { + constructor(injector, validatorService, vesselSnapshotService, referentialRefService, cd) { + super(injector, validatorService.getFormGroup()); + this.validatorService = validatorService; + this.vesselSnapshotService = vesselSnapshotService; + this.referentialRefService = referentialRefService; + this.cd = cd; + this._minDate = null; + this.required = true; + this.showError = true; + this.showVessel = true; + this.showEndDateTime = true; + this.showComment = true; + this.showButtons = true; + this.referentialToString = referentialToString; + } + set minDate(value) { + if (value && (!this._minDate || !this._minDate.isSame(value))) { + this._minDate = value; + if (!this.loading) + this.updateFormGroup(); + } + } + get empty() { + const value = this.value; + return ((!value.saleLocation || !value.saleLocation.id) && + !value.startDateTime && + !value.endDateTime && + (!value.saleType || !value.saleType.id) && + (!value.comments || !value.comments.length)); + } + get valid() { + return this.form && (this.required ? this.form.valid : this.form.valid || this.empty); + } + ngOnInit() { + super.ngOnInit(); + // Set defaults + this.tabindex = toNumber(this.tabindex, 0); + // Combo: vessels (if need) + if (this.showVessel) { + // Combo: vessels + this.vesselSnapshotService.getAutocompleteFieldOptions().then((opts) => this.registerAutocompleteField('vesselSnapshot', opts)); + } + else { + this.form.get('vesselSnapshot').clearValidators(); + } + // Combo: sale locations + this.registerAutocompleteField('location', { + service: this.referentialRefService, + filter: { + entityName: 'Location', + levelId: LocationLevelIds.PORT, + }, + }); + // Combo: sale types + this.registerAutocompleteField('saleType', { + service: this.referentialRefService, + attributes: ['name'], + filter: { + entityName: 'SaleType', + }, + }); + } + ngOnReady() { + this.updateFormGroup(); + } + updateFormGroup(opts) { + console.info('[sale-form] Updating form group...'); + this.validatorService.updateFormGroup(this.form, { + required: this.required, + minDate: this._minDate, + }); + if (!opts || opts.emitEvent !== false) { + this.form.updateValueAndValidity(); + this.markForCheck(); + } + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], SaleForm.prototype, "required", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SaleForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SaleForm.prototype, "showVessel", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SaleForm.prototype, "showEndDateTime", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SaleForm.prototype, "showComment", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SaleForm.prototype, "showButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], SaleForm.prototype, "minDate", null); +SaleForm = __decorate([ + Component({ + selector: 'app-form-sale', + templateUrl: './sale.form.html', + styleUrls: ['./sale.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + SaleValidatorService, + VesselSnapshotService, + ReferentialRefService, + ChangeDetectorRef]) +], SaleForm); +export { SaleForm }; +//# sourceMappingURL=sale.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/sale.form.js.map b/out-tsc/app/app/trip/sale/sale.form.js.map new file mode 100644 index 000000000..6287dea1a --- /dev/null +++ b/out-tsc/app/app/trip/sale/sale.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sale.form.js","sourceRoot":"","sources":["../../../../../src/app/trip/sale/sale.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/sale.model.js b/out-tsc/app/app/trip/sale/sale.model.js new file mode 100644 index 000000000..6d90974ef --- /dev/null +++ b/out-tsc/app/app/trip/sale/sale.model.js @@ -0,0 +1,79 @@ +var Sale_1; +import { __decorate, __metadata } from "tslib"; +import { EntityClass, fromDateISOString, isNotEmptyArray, isNotNil, Person, ReferentialRef, toDateISOString } from '@sumaris-net/ngx-components'; +import { Sample } from '../sample/sample.model'; +import { Measurement, MeasurementUtils } from '@app/data/measurement/measurement.model'; +import { Product } from '../product/product.model'; +import { DataRootVesselEntity } from '@app/data/services/model/root-vessel-entity.model'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +let Sale = Sale_1 = class Sale extends DataRootVesselEntity { + constructor() { + super(Sale_1.TYPENAME); + this.startDateTime = null; + this.endDateTime = null; + this.saleLocation = null; + this.saleType = null; + this.observedLocationId = null; + this.tripId = null; + this.measurements = null; + this.samples = null; + this.rankOrder = null; + this.observers = null; + this.products = null; + } + fromObject(source) { + super.fromObject(source); + this.startDateTime = fromDateISOString(source.startDateTime); + this.endDateTime = fromDateISOString(source.endDateTime); + this.saleLocation = source.saleLocation && ReferentialRef.fromObject(source.saleLocation); + this.saleType = source.saleType && ReferentialRef.fromObject(source.saleType); + this.rankOrder = source.rankOrder; + this.tripId = source.tripId; + this.observedLocationId = source.observedLocationId; + this.samples = source.samples && source.samples.map(Sample.fromObject) || []; + this.observers = source.observers && source.observers.map(Person.fromObject) || []; + this.measurements = source.measurements && source.measurements.map(Measurement.fromObject) || []; + // Products (sale) + this.products = source.products && source.products.map(Product.fromObject) || []; + // Affect parent + this.products.forEach(product => { + product.parent = this; + }); + return this; + } + asObject(options) { + const target = super.asObject(options); + target.startDateTime = toDateISOString(this.startDateTime); + target.endDateTime = toDateISOString(this.endDateTime); + target.saleLocation = this.saleLocation && this.saleLocation.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS)) || undefined; + target.saleType = this.saleType && this.saleType.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS)) || undefined; + target.samples = this.samples && this.samples.map(s => s.asObject(options)) || undefined; + target.observers = this.observers && this.observers.map(o => o.asObject(options)) || undefined; + target.measurements = this.measurements && this.measurements.filter(MeasurementUtils.isNotEmpty).map(m => m.asObject(options)) || undefined; + // Products + target.products = this.products && this.products.map(o => o.asObject(options)) || undefined; + // Affect parent link + if (isNotEmptyArray(target.products)) { + target.products.forEach(product => { + product.saleId = target.id; + // todo product.landingId must also be set, but not here, see pod + delete product.parent; + }); + } + return target; + } + equals(other) { + // Same Entity, by ID + return (isNotNil(this.id) && super.equals(other)) + // Or same [trip, rankOrder] + || (isNotNil(this.tripId) && this.tripId === other.tripId && this.rankOrder === other.rankOrder) + // Or same [observationLocation, rankOrder] + || (isNotNil(this.observedLocationId) && this.observedLocationId === other.observedLocationId && this.rankOrder === other.rankOrder); + } +}; +Sale = Sale_1 = __decorate([ + EntityClass({ typename: 'SaleVO' }), + __metadata("design:paramtypes", []) +], Sale); +export { Sale }; +//# sourceMappingURL=sale.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/sale.model.js.map b/out-tsc/app/app/trip/sale/sale.model.js.map new file mode 100644 index 000000000..853b46b2c --- /dev/null +++ b/out-tsc/app/app/trip/sale/sale.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sale.model.js","sourceRoot":"","sources":["../../../../../src/app/trip/sale/sale.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/sale.module.js b/out-tsc/app/app/trip/sale/sale.module.js new file mode 100644 index 000000000..1c9035a6f --- /dev/null +++ b/out-tsc/app/app/trip/sale/sale.module.js @@ -0,0 +1,48 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { ExpectedSaleForm } from './expected-sale.form'; +import { ProductSaleForm } from './product-sale.form'; +import { ProductSaleModal } from './product-sale.modal'; +import { PacketSaleModal } from './packet-sale.modal'; +import { PacketSaleForm } from './packet-sale.form'; +import { TranslateModule } from '@ngx-translate/core'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppMeasurementModule } from '@app/data/measurement/measurement.module'; +import { SaleForm } from '@app/trip/sale/sale.form'; +import { AppProductModule } from '@app/trip/product/product.module'; +let AppSaleModule = class AppSaleModule { + constructor() { + console.debug('[sale] Creating module...'); + } +}; +AppSaleModule = __decorate([ + NgModule({ + imports: [ + AppCoreModule, + TranslateModule.forChild(), + // Functional modules + AppMeasurementModule, + AppProductModule + ], + declarations: [ + SaleForm, + ProductSaleForm, + ProductSaleModal, + ExpectedSaleForm, + PacketSaleForm, + PacketSaleModal + ], + exports: [ + // Components + SaleForm, + ProductSaleForm, + ProductSaleModal, + ExpectedSaleForm, + PacketSaleForm, + PacketSaleModal + ] + }), + __metadata("design:paramtypes", []) +], AppSaleModule); +export { AppSaleModule }; +//# sourceMappingURL=sale.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/sale.module.js.map b/out-tsc/app/app/trip/sale/sale.module.js.map new file mode 100644 index 000000000..80b90e9ec --- /dev/null +++ b/out-tsc/app/app/trip/sale/sale.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sale.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/sale/sale.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AA+B7D,IAAM,aAAa,GAAnB,MAAM,aAAa;IAExB;QACE,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC7C,CAAC;CACF,CAAA;AALY,aAAa;IA5BzB,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,eAAe,CAAC,QAAQ,EAAE;YAE1B,qBAAqB;YACrB,oBAAoB;YACpB,gBAAgB;SACjB;QACD,YAAY,EAAE;YACZ,QAAQ;YACR,eAAe;YACf,gBAAgB;YAChB,gBAAgB;YAChB,cAAc;YACd,eAAe;SAChB;QACD,OAAO,EAAE;YAEP,aAAa;YACb,QAAQ;YACR,eAAe;YACf,gBAAgB;YAChB,gBAAgB;YAChB,cAAc;YACd,eAAe;SAChB;KACF,CAAC;;GACW,aAAa,CAKzB;SALY,aAAa"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/sale.validator.js b/out-tsc/app/app/trip/sale/sale.validator.js new file mode 100644 index 000000000..521177821 --- /dev/null +++ b/out-tsc/app/app/trip/sale/sale.validator.js @@ -0,0 +1,76 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { fromDateISOString, isNotNil, SharedFormGroupValidators, SharedValidators } from '@sumaris-net/ngx-components'; +import { toBoolean } from '@sumaris-net/ngx-components'; +import { LocalSettingsService } from '@sumaris-net/ngx-components'; +import { Sale } from './sale.model'; +import { DataRootEntityValidatorService } from '@app/data/services/validator/root-data-entity.validator'; +import { DateAdapter } from '@angular/material/core'; +import { TranslateService } from '@ngx-translate/core'; +let SaleValidatorService = class SaleValidatorService extends DataRootEntityValidatorService { + constructor(formBuilder, translate, settings, dateAdapter) { + super(formBuilder, translate, settings); + this.dateAdapter = dateAdapter; + } + getFormGroupConfig(data, opts) { + const formConfig = { + __typename: [Sale.TYPENAME], + id: [data && data.id || null], + updateDate: [data && data.updateDate || null], + creationDate: [data && data.creationDate || null], + vesselSnapshot: [data && data.vesselSnapshot || null, !opts.required ? SharedValidators.entity : Validators.compose([Validators.required, SharedValidators.entity])], + saleType: [data && data.saleType || null, !opts.required ? SharedValidators.entity : Validators.compose([Validators.required, SharedValidators.entity])], + startDateTime: [data && data.startDateTime || null], + endDateTime: [data && data.endDateTime || null, SharedValidators.dateRangeEnd('startDateTime')], + saleLocation: [data && data.saleLocation || null, SharedValidators.entity], + comments: [data && data.comments || null, Validators.maxLength(2000)] + }; + return formConfig; + } + getFormGroupOptions(data, opts) { + return { + validator: Validators.compose([ + SharedFormGroupValidators.requiredIf('saleLocation', 'saleType'), + SharedFormGroupValidators.requiredIf('startDateTime', 'saleType') + ]) + }; + } + updateFormGroup(form, opts) { + opts = this.fillDefaultOptions(opts); + if (opts.required === true) { + form.controls['vesselSnapshot'].setValidators([Validators.required, SharedValidators.entity]); + form.controls['saleType'].setValidators([Validators.required, SharedValidators.entity]); + } + else { + form.controls['vesselSnapshot'].setValidators(SharedValidators.entity); + form.controls['saleType'].setValidators(SharedValidators.entity); + } + if (opts.minDate) { + const minDate = fromDateISOString(opts.minDate); + const minDateStr = this.dateAdapter.format(minDate, this.translate.instant('COMMON.DATE_TIME_PATTERN')); + form.controls['startDateTime'].setValidators(SharedValidators.dateIsAfter(minDate, minDateStr)); + } + const formGroupOptions = this.getFormGroupOptions(null, opts); + form.setValidators(formGroupOptions === null || formGroupOptions === void 0 ? void 0 : formGroupOptions.validators); + return form; + } + /* -- fill options defaults -- */ + fillDefaultOptions(opts) { + var _a; + opts = opts || {}; + opts.isOnFieldMode = isNotNil(opts.isOnFieldMode) ? opts.isOnFieldMode : (((_a = this.settings) === null || _a === void 0 ? void 0 : _a.isOnFieldMode()) || false); + opts.required = toBoolean(opts.required, true); + opts.withProgram = toBoolean(opts.withProgram, false); + return opts; + } +}; +SaleValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + LocalSettingsService, + DateAdapter]) +], SaleValidatorService); +export { SaleValidatorService }; +//# sourceMappingURL=sale.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sale/sale.validator.js.map b/out-tsc/app/app/trip/sale/sale.validator.js.map new file mode 100644 index 000000000..bb18d86fc --- /dev/null +++ b/out-tsc/app/app/trip/sale/sale.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sale.validator.js","sourceRoot":"","sources":["../../../../../src/app/trip/sale/sale.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/individualmonitoring/individual-monitoring.table.js b/out-tsc/app/app/trip/sample/individualmonitoring/individual-monitoring.table.js new file mode 100644 index 000000000..ed2892b49 --- /dev/null +++ b/out-tsc/app/app/trip/sample/individualmonitoring/individual-monitoring.table.js @@ -0,0 +1,67 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector } from '@angular/core'; +import { ValidatorService } from '@e-is/ngx-material-table'; +import { SubSampleValidatorService } from '../sub-sample.validator'; +import { Validators } from '@angular/forms'; +import { AcquisitionLevelCodes, PmfmIds } from '@app/referential/services/model/model.enum'; +import { SubSamplesTable } from '../sub-samples.table'; +let IndividualMonitoringTable = class IndividualMonitoringTable extends SubSamplesTable { + constructor(injector) { + super(injector); + this.acquisitionLevel = AcquisitionLevelCodes.INDIVIDUAL_MONITORING; + } + onPmfmsLoaded(pmfms) { + // Listening on column 'IS_DEAD' value changes + const hasIsDeadPmfm = pmfms.findIndex(p => p.id === PmfmIds.IS_DEAD) !== -1; + if (hasIsDeadPmfm) { + const isDeadControlPath = `measurementValues.${PmfmIds.IS_DEAD}`; + this.registerSubscription(this.registerCellValueChanges('isDead', isDeadControlPath, true) + .subscribe((isDeadValue) => { + if (!this.editedRow) + return; // Should never occur + const row = this.editedRow; + const controls = row.validator.get('measurementValues').controls; + if (isDeadValue) { + if (controls[PmfmIds.DEATH_TIME]) { + if (row.validator.enabled) { + controls[PmfmIds.DEATH_TIME].enable(); + } + controls[PmfmIds.DEATH_TIME].setValidators(Validators.required); + } + if (controls[PmfmIds.VERTEBRAL_COLUMN_ANALYSIS]) { + if (row.validator.enabled) { + controls[PmfmIds.VERTEBRAL_COLUMN_ANALYSIS].enable(); + } + controls[PmfmIds.VERTEBRAL_COLUMN_ANALYSIS].setValidators(Validators.required); + } + } + else { + if (controls[PmfmIds.DEATH_TIME]) { + controls[PmfmIds.DEATH_TIME].disable(); + controls[PmfmIds.DEATH_TIME].setValue(null); + controls[PmfmIds.DEATH_TIME].setValidators(null); + } + if (controls[PmfmIds.VERTEBRAL_COLUMN_ANALYSIS]) { + controls[PmfmIds.VERTEBRAL_COLUMN_ANALYSIS].setValue(null); + controls[PmfmIds.VERTEBRAL_COLUMN_ANALYSIS].setValidators(null); + controls[PmfmIds.VERTEBRAL_COLUMN_ANALYSIS].disable(); + } + } + })); + } + } +}; +IndividualMonitoringTable = __decorate([ + Component({ + selector: 'app-individual-monitoring-table', + templateUrl: '../sub-samples.table.html', + styleUrls: ['../sub-samples.table.scss', 'individual-monitoring.table.scss'], + providers: [ + { provide: ValidatorService, useExisting: SubSampleValidatorService } + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector]) +], IndividualMonitoringTable); +export { IndividualMonitoringTable }; +//# sourceMappingURL=individual-monitoring.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/individualmonitoring/individual-monitoring.table.js.map b/out-tsc/app/app/trip/sample/individualmonitoring/individual-monitoring.table.js.map new file mode 100644 index 000000000..f9d5fa165 --- /dev/null +++ b/out-tsc/app/app/trip/sample/individualmonitoring/individual-monitoring.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"individual-monitoring.table.js","sourceRoot":"","sources":["../../../../../../src/app/trip/sample/individualmonitoring/individual-monitoring.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/individualrelease/individual-releases.table.js b/out-tsc/app/app/trip/sample/individualrelease/individual-releases.table.js new file mode 100644 index 000000000..e7505e539 --- /dev/null +++ b/out-tsc/app/app/trip/sample/individualrelease/individual-releases.table.js @@ -0,0 +1,29 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector } from '@angular/core'; +import { ValidatorService } from '@e-is/ngx-material-table'; +import { SubSampleValidatorService } from '../sub-sample.validator'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { SubSamplesTable } from '../sub-samples.table'; +let IndividualReleasesTable = class IndividualReleasesTable extends SubSamplesTable { + constructor(injector) { + super(injector); + this.acquisitionLevel = AcquisitionLevelCodes.INDIVIDUAL_RELEASE; + } + /* -- protected functions -- */ + onPmfmsLoaded(pmfms) { + } +}; +IndividualReleasesTable = __decorate([ + Component({ + selector: 'app-individual-releases-table', + templateUrl: '../sub-samples.table.html', + styleUrls: ['../sub-samples.table.scss', 'individual-releases.table.scss'], + providers: [ + { provide: ValidatorService, useExisting: SubSampleValidatorService } + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector]) +], IndividualReleasesTable); +export { IndividualReleasesTable }; +//# sourceMappingURL=individual-releases.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/individualrelease/individual-releases.table.js.map b/out-tsc/app/app/trip/sample/individualrelease/individual-releases.table.js.map new file mode 100644 index 000000000..4e1bf248e --- /dev/null +++ b/out-tsc/app/app/trip/sample/individualrelease/individual-releases.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"individual-releases.table.js","sourceRoot":"","sources":["../../../../../../src/app/trip/sample/individualrelease/individual-releases.table.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAYhD,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,eAAe;IAG1D,YACE,QAAkB;QAElB,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,kBAAkB,CAAC;IACnE,CAAC;IAED,+BAA+B;IAErB,aAAa,CAAC,KAAc;IAEtC,CAAC;CACF,CAAA;AAfY,uBAAuB;IATnC,SAAS,CAAC;QACT,QAAQ,EAAE,+BAA+B;QACzC,WAAW,EAAE,2BAA2B;QACxC,SAAS,EAAE,CAAC,2BAA2B,EAAE,gCAAgC,CAAC;QAC1E,SAAS,EAAE;YACT,EAAC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,yBAAyB,EAAC;SACpE;QACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAKY,QAAQ;GAJT,uBAAuB,CAenC;SAfY,uBAAuB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sample-tree.component.js b/out-tsc/app/app/trip/sample/sample-tree.component.js new file mode 100644 index 000000000..619f97d9d --- /dev/null +++ b/out-tsc/app/app/trip/sample/sample-tree.component.js @@ -0,0 +1,481 @@ +var SampleTreeComponent_1; +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core'; +import { AppTabEditor, EntityUtils, isNotEmptyArray, isNotNil, isNotNilOrBlank, LocalSettingsService, toBoolean, } from '@sumaris-net/ngx-components'; +import { Sample, SampleUtils } from '@app/trip/sample/sample.model'; +import { ActivatedRoute, Router } from '@angular/router'; +import { AlertController, NavController } from '@ionic/angular'; +import { TranslateService } from '@ngx-translate/core'; +import { SamplesTable } from '@app/trip/sample/samples.table'; +import { IndividualMonitoringTable } from '@app/trip/sample/individualmonitoring/individual-monitoring.table'; +import { IndividualReleasesTable } from '@app/trip/sample/individualrelease/individual-releases.table'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { BehaviorSubject, combineLatest } from 'rxjs'; +import { Program } from '@app/referential/services/model/program.model'; +import { environment } from '@environments/environment'; +import { debounceTime, distinctUntilChanged, filter, map, mergeMap, switchMap } from 'rxjs/operators'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +let SampleTreeComponent = SampleTreeComponent_1 = class SampleTreeComponent extends AppTabEditor { + constructor(route, router, navController, alertCtrl, translate, programRefService, settings, cd) { + super(route, router, navController, alertCtrl, translate, { + tabCount: settings.mobile ? 1 : 3, + }); + this.route = route; + this.router = router; + this.navController = navController; + this.alertCtrl = alertCtrl; + this.translate = translate; + this.programRefService = programRefService; + this.settings = settings; + this.cd = cd; + this.$programLabel = new BehaviorSubject(null); + this.$strategyLabel = new BehaviorSubject(null); + this.$program = new BehaviorSubject(null); + this.listenProgramChanges = true; + this.showIndividualMonitoringTable = false; + this.showIndividualReleaseTable = false; + this.useSticky = false; + this.requiredStrategy = false; + this.showGroupHeader = false; + this.prepareRowForm = new EventEmitter(); + // Defaults + this.mobile = settings.mobile; + this.debug = !environment.production; + this.i18nContext = { + prefix: '', + suffix: '', + }; + } + set defaultSampleDate(value) { + this.samplesTable.defaultSampleDate = value; + } + get defaultSampleDate() { + return this.samplesTable.defaultSampleDate; + } + set programLabel(value) { + if (this.$programLabel.value !== value) { + this.$programLabel.next(value); + } + } + get programLabel() { + return this.$programLabel.value; + } + set strategyLabel(value) { + if (this.$strategyLabel.value !== value) { + this.$strategyLabel.next(value); + } + } + get strategyLabel() { + return this.$strategyLabel.value; + } + set program(value) { + this.listenProgramChanges = false; // Avoid to watch program changes, when program is given by parent component + this.$program.next(value); + } + set value(value) { + this.setValue(value); + } + get value() { + return this.getValue(); + } + set availableTaxonGroups(value) { + this.samplesTable.availableTaxonGroups = value; + } + get availableTaxonGroups() { + return this.samplesTable.availableTaxonGroups; + } + get dirty() { + return super.dirty || false; + } + ngOnInit() { + // Set defaults + this.tabCount = this.mobile ? 1 : 3; // In testing page, mobile can be changed to false + super.ngOnInit(); + this.registerForms(); + } + ngAfterViewInit() { + // Watch program, to configure tables from program properties + this.registerSubscription(this.$programLabel + .pipe(filter(() => this.listenProgramChanges), // Avoid to watch program, if was already set + filter(isNotNilOrBlank), distinctUntilChanged(), switchMap((programLabel) => this.programRefService.watchByLabel(programLabel))) + .subscribe((program) => this.$program.next(program))); + const programChanged$ = this.$program.pipe(distinctUntilChanged((p1, p2) => p1 && p2 && p1.label === p2.label && p1.updateDate.isSame(p2.updateDate)), filter(isNotNil)); + // Watch program, to configure tables from program properties + this.registerSubscription(programChanged$.subscribe((program) => this.setProgram(program))); + // Configure sub sample buttons, in root table + if (!this.mobile) { + // If sub tables exists (desktop mode), check if there have some pmfms + this.registerSubscription(combineLatest([this.individualMonitoringTable.hasPmfms$, this.individualReleasesTable.hasPmfms$]).subscribe(([hasMonitoringPmfms, hasReleasePmfms]) => { + this.showIndividualMonitoringTable = hasMonitoringPmfms; + this.showIndividualReleaseTable = hasReleasePmfms; + this.samplesTable.showIndividualMonitoringButton = hasMonitoringPmfms; + this.samplesTable.showIndividualReleaseButton = hasReleasePmfms; + this.samplesTable.allowSubSamples = hasMonitoringPmfms || hasReleasePmfms; + this.tabCount = hasReleasePmfms ? 3 : hasMonitoringPmfms ? 2 : 1; + this.markForCheck(); + })); + } + else { + // If mobile (no sub tables), should load pmfms + // We create an observer for program (wait strategy if required) + const loadSubPmfms$ = this.requiredStrategy + ? programChanged$.pipe(mergeMap((_) => this.$strategyLabel), map((strategyLabel) => [this.$program.value.label, strategyLabel])) + : programChanged$.pipe(map((program) => [program.label, undefined])); + this.registerSubscription(loadSubPmfms$ + .pipe(mergeMap(([programLabel, strategyLabel]) => Promise.all([ + this.programRefService + .loadProgramPmfms(programLabel, { + acquisitionLevel: AcquisitionLevelCodes.INDIVIDUAL_MONITORING, + strategyLabel, + }) + .then(isNotEmptyArray), + this.programRefService + .loadProgramPmfms(programLabel, { + acquisitionLevel: AcquisitionLevelCodes.INDIVIDUAL_RELEASE, + strategyLabel, + }) + .then(isNotEmptyArray), + ]))) + .subscribe(([hasMonitoringPmfms, hasReleasePmfms]) => { + this.showIndividualMonitoringTable = hasMonitoringPmfms; + this.showIndividualReleaseTable = hasReleasePmfms; + this.samplesTable.showIndividualMonitoringButton = hasMonitoringPmfms; + this.samplesTable.showIndividualReleaseButton = hasReleasePmfms; + this.samplesTable.allowSubSamples = hasMonitoringPmfms || hasReleasePmfms; + this.markForCheck(); + })); + } + // Update available parent on sub-sample table, when samples changes + if (!this.mobile) { + this.registerSubscription(this.samplesTable.dataSource.rowsSubject + .pipe(debounceTime(400), filter(() => !this.loading), // skip if loading + map(() => this.samplesTable.dataSource.getData())) + .subscribe((samples) => { + console.debug('[sample-tree] Propagate root samples to sub-samples tables', samples); + // Will refresh the tables (inside the setter): + if (this.showIndividualMonitoringTable) + this.individualMonitoringTable.availableParents = samples; + if (this.showIndividualReleaseTable) + this.individualReleasesTable.availableParents = samples; + })); + } + } + get isNewData() { + return false; + } + setValue(data, opts) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.debug('[sample-tree] Set value', data); + const waitOpts = { stop: this.destroySubject, stopError: false }; + yield this.ready(waitOpts); + try { + this.markAsLoading(); + // Get all samples, as array (even when data is a list of parent/child tree) + const samples = EntityUtils.listOfTreeToArray(data) || []; + // Find root samples + const rootSamples = SampleUtils.filterByAcquisitionLevel(samples, this.samplesTable.acquisitionLevel); + if (!this.mobile) { + // Set root samples + this.samplesTable.markAsReady(); + this.samplesTable.value = rootSamples; + // Set sub-samples (individual monitoring) + this.individualMonitoringTable.availableParents = rootSamples; + this.individualMonitoringTable.markAsReady(); + this.individualMonitoringTable.value = SampleUtils.filterByAcquisitionLevel(samples, this.individualMonitoringTable.acquisitionLevel); + // Set sub-samples (individual release) + this.individualReleasesTable.availableParents = rootSamples; + this.individualReleasesTable.markAsReady(); + this.individualReleasesTable.value = SampleUtils.filterByAcquisitionLevel(samples, this.individualReleasesTable.acquisitionLevel); + // Wait loaded (because of markAsLoaded() in finally) + yield Promise.all([ + this.samplesTable.ready(waitOpts), + this.individualMonitoringTable.ready(waitOpts), + this.individualReleasesTable.ready(waitOpts), + ]); + } + else { + // Set children + rootSamples.forEach((parent) => { + parent.children = samples.filter((s) => s.parentId === parent.id || (s.parent && parent.equals(s.parent))); + }); + this.samplesTable.value = rootSamples; + yield this.samplesTable.ready(waitOpts); // Wait loaded (because of markAsLoaded() in finally) + // Mark other tables as loaded (because no value are set) + (_a = this.individualMonitoringTable) === null || _a === void 0 ? void 0 : _a.markAsLoaded(); + (_b = this.individualReleasesTable) === null || _b === void 0 ? void 0 : _b.markAsLoaded(); + } + } + catch (err) { + console.error((err === null || err === void 0 ? void 0 : err.message) || err, err); + throw err; + } + finally { + this.markAsLoaded({ emitEvent: false }); + this.markAsPristine(); + } + }); + } + save(event, options) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[sample-tree] Saving samples...'); + let target; + const saved = yield this.saveDirtyChildren(); + if (!saved) + return false; + // Save batch groups and sub batches + if (!this.mobile) { + const rootSamples = this.samplesTable.value; + const subSamples1 = this.individualMonitoringTable.value; + const subSamples2 = this.individualReleasesTable.value; + const subSamples = subSamples1.concat(subSamples2); + // Set children of root samples + rootSamples.forEach((sample) => { + sample.children = subSamples + .filter((c) => c.parent && sample.equals(c.parent)) + // Make sure to get Sample + .map((c) => Sample.fromObject(c, { withChildren: false })); + }); + target = rootSamples; + } + else { + target = this.samplesTable.value; + } + // DEBUG + if (this.debug) + SampleUtils.logTree(target); + // Make sure to convert into entities + this.data = target.map((s) => Sample.fromObject(s, { withChildren: true })); + return true; + }); + } + realignInkBar() { + if (this.tabGroup) { + //this.tabGroup.selectedIndex = this.selectedTabIndex; + this.tabGroup.realignInkBar(); + } + } + addRow(event) { + switch (this.selectedTabIndex) { + case 0: + this.samplesTable.addRow(event); + break; + case 1: + this.individualMonitoringTable.addRow(event); + break; + case 2: + this.individualReleasesTable.addRow(event); + break; + } + } + getFirstInvalidTabIndex() { + if (this.samplesTable.invalid) + return SampleTreeComponent_1.TABS.SAMPLE; + if (this.showIndividualMonitoringTable && this.individualMonitoringTable.invalid) + return SampleTreeComponent_1.TABS.INDIVIDUAL_MONITORING; + if (this.showIndividualReleaseTable && this.individualReleasesTable.invalid) + return SampleTreeComponent_1.TABS.INDIVIDUAL_RELEASE; + return -1; + } + onInitTable(table) { + if (!this.children.includes(table)) { + this.addChildForm(table); + } + // Mark table as ready, if main component is ready + if (this.readySubject.value) { + table.markAsReady(); + } + // Mark table as loaded, if main component is loaded + if (!this.loading) { + table.markAsLoaded(); + } + } + getValue() { + return this.data; + } + load(id, options) { + return Promise.resolve(undefined); + } + reload() { + return Promise.resolve(undefined); + } + /* -- -- */ + registerForms() { + this.addChildForm(this.samplesTable); + // Other tables will be register using (ngInit) (see template) + } + onTabChange(event, queryTabIndexParamName) { + var _a, _b; + const result = super.onTabChange(event, queryTabIndexParamName); + // On each tables, confirm the current editing row + if (!this.loading) { + this.samplesTable.confirmEditCreate(); + (_a = this.individualMonitoringTable) === null || _a === void 0 ? void 0 : _a.confirmEditCreate(); + (_b = this.individualReleasesTable) === null || _b === void 0 ? void 0 : _b.confirmEditCreate(); + } + return result; + } + setProgram(program) { + return __awaiter(this, void 0, void 0, function* () { + if (!program) + return; // Skip + const programLabel = program.label; + if (this.debug) + console.debug(`[sample-tree] Program ${programLabel} loaded, with properties: `, program.properties); + let i18nSuffix = program.getProperty(ProgramProperties.I18N_SUFFIX); + i18nSuffix = i18nSuffix !== 'legacy' ? i18nSuffix : ''; + this.i18nContext.suffix = i18nSuffix; + this.samplesTable.showTaxonGroupColumn = toBoolean(this.showTaxonGroupColumn, program.getPropertyAsBoolean(ProgramProperties.TRIP_SAMPLE_TAXON_GROUP_ENABLE)); + this.samplesTable.showTaxonNameColumn = toBoolean(this.showTaxonNameColumn, program.getPropertyAsBoolean(ProgramProperties.TRIP_SAMPLE_TAXON_NAME_ENABLE)); + this.samplesTable.showSampleDateColumn = toBoolean(this.showSampleDateColumn, program.getPropertyAsBoolean(ProgramProperties.TRIP_SAMPLE_DATE_TIME_ENABLE)); + this.samplesTable.showLabelColumn = toBoolean(this.showLabelColumn, program.getPropertyAsBoolean(ProgramProperties.TRIP_SAMPLE_LABEL_ENABLE)); + this.samplesTable.showImagesColumn = toBoolean(this.showImagesColumn, program.getPropertyAsBoolean(ProgramProperties.TRIP_SAMPLE_IMAGES_ENABLE)); + this.samplesTable.programLabel = program.label; + this.samplesTable.defaultLatitudeSign = program.getProperty(ProgramProperties.TRIP_LATITUDE_SIGN); + this.samplesTable.defaultLongitudeSign = program.getProperty(ProgramProperties.TRIP_LONGITUDE_SIGN); + this.samplesTable.i18nColumnSuffix = i18nSuffix; + // Configure sub tables + if (!this.mobile) { + this.individualMonitoringTable.defaultLatitudeSign = this.samplesTable.defaultLatitudeSign; + this.individualMonitoringTable.defaultLongitudeSign = this.samplesTable.defaultLongitudeSign; + this.individualMonitoringTable.i18nColumnSuffix = i18nSuffix; + this.individualReleasesTable.defaultLatitudeSign = this.samplesTable.defaultLatitudeSign; + this.individualReleasesTable.defaultLongitudeSign = this.samplesTable.defaultLongitudeSign; + this.individualReleasesTable.i18nColumnSuffix = i18nSuffix; + } + // Mobile mode + else { + } + // Propagate to children tables, if need + // This should be need when $program has been set by parent, and not from the $programLabel observable + if (this.$programLabel.value !== (program === null || program === void 0 ? void 0 : program.label)) + this.$programLabel.next(program === null || program === void 0 ? void 0 : program.label); + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +SampleTreeComponent.TABS = { + SAMPLE: 0, + INDIVIDUAL_MONITORING: 1, + INDIVIDUAL_RELEASE: 2, +}; +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SampleTreeComponent.prototype, "debug", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SampleTreeComponent.prototype, "useSticky", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SampleTreeComponent.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SampleTreeComponent.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SampleTreeComponent.prototype, "requiredStrategy", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SampleTreeComponent.prototype, "weightDisplayedUnit", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SampleTreeComponent.prototype, "showGroupHeader", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SampleTreeComponent.prototype, "showLabelColumn", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SampleTreeComponent.prototype, "showImagesColumn", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SampleTreeComponent.prototype, "showTaxonGroupColumn", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SampleTreeComponent.prototype, "showTaxonNameColumn", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SampleTreeComponent.prototype, "showSampleDateColumn", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SampleTreeComponent.prototype, "pmfmGroups", void 0); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], SampleTreeComponent.prototype, "defaultSampleDate", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], SampleTreeComponent.prototype, "programLabel", null); +__decorate([ + Input(), + __metadata("design:type", String), + __metadata("design:paramtypes", [String]) +], SampleTreeComponent.prototype, "strategyLabel", null); +__decorate([ + Input(), + __metadata("design:type", Program), + __metadata("design:paramtypes", [Program]) +], SampleTreeComponent.prototype, "program", null); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], SampleTreeComponent.prototype, "value", null); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], SampleTreeComponent.prototype, "availableTaxonGroups", null); +__decorate([ + ViewChild('samplesTable', { static: true }), + __metadata("design:type", SamplesTable) +], SampleTreeComponent.prototype, "samplesTable", void 0); +__decorate([ + ViewChild('individualMonitoringTable', { static: false }), + __metadata("design:type", IndividualMonitoringTable) +], SampleTreeComponent.prototype, "individualMonitoringTable", void 0); +__decorate([ + ViewChild('individualReleaseTable', { static: false }), + __metadata("design:type", IndividualReleasesTable) +], SampleTreeComponent.prototype, "individualReleasesTable", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], SampleTreeComponent.prototype, "prepareRowForm", void 0); +SampleTreeComponent = SampleTreeComponent_1 = __decorate([ + Component({ + selector: 'app-sample-tree', + templateUrl: './sample-tree.component.html', + styleUrls: ['./sample-tree.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [ActivatedRoute, + Router, + NavController, + AlertController, + TranslateService, + ProgramRefService, + LocalSettingsService, + ChangeDetectorRef]) +], SampleTreeComponent); +export { SampleTreeComponent }; +//# sourceMappingURL=sample-tree.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sample-tree.component.js.map b/out-tsc/app/app/trip/sample/sample-tree.component.js.map new file mode 100644 index 000000000..66cfdfb34 --- /dev/null +++ b/out-tsc/app/app/trip/sample/sample-tree.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sample-tree.component.js","sourceRoot":"","sources":["../../../../../src/app/trip/sample/sample-tree.component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sample.filter.js b/out-tsc/app/app/trip/sample/sample.filter.js new file mode 100644 index 000000000..80f48c9b5 --- /dev/null +++ b/out-tsc/app/app/trip/sample/sample.filter.js @@ -0,0 +1,56 @@ +import { __decorate } from "tslib"; +import { DataEntityFilter } from '@app/data/services/model/data-filter.model'; +import { EntityClass, isNotNil, isNotNilOrBlank } from '@sumaris-net/ngx-components'; +import { PmfmIds } from '@app/referential/services/model/model.enum'; +let SampleFilter = class SampleFilter extends DataEntityFilter { + fromObject(source, opts) { + super.fromObject(source, opts); + this.operationId = source.operationId; + this.landingId = source.landingId; + this.observedLocationId = source.observedLocationId; + this.observedLocationIds = source.observedLocationIds; + this.parent = source.parent; + this.tagId = source.tagId; + this.withTagId = source.withTagId; + } + asObject(opts) { + const target = super.asObject(opts); + if (opts && opts.minify) { + target.parentId = this.parent ? this.parent.id : undefined; + delete target.parent; + } + else { + target.parent = this.parent ? { id: this.parent.id, label: this.parent.label } : undefined; + } + return target; + } + buildFilter() { + const filterFns = super.buildFilter(); + // Landing + if (isNotNil(this.landingId)) { + filterFns.push(t => (t.landingId === this.landingId)); + } + // Operation + if (isNotNil(this.operationId)) { + filterFns.push(t => (t.operationId === this.operationId)); + } + // Parent + if (isNotNil(this.parent)) { + filterFns.push(t => (t.parentId === this.parent.id || this.parent.equals(t.parent))); + } + // Having a tag ID + if (isNotNilOrBlank(this.tagId)) { + filterFns.push(t => t.measurementValues && this.tagId === t.measurementValues[PmfmIds.TAG_ID]); + } + // With tag ID + if (isNotNil(this.withTagId)) { + filterFns.push(t => t.measurementValues && this.withTagId === isNotNilOrBlank(t.measurementValues[PmfmIds.TAG_ID])); + } + return filterFns; + } +}; +SampleFilter = __decorate([ + EntityClass({ typename: 'SampleFilterVO' }) +], SampleFilter); +export { SampleFilter }; +//# sourceMappingURL=sample.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sample.filter.js.map b/out-tsc/app/app/trip/sample/sample.filter.js.map new file mode 100644 index 000000000..008e12d6b --- /dev/null +++ b/out-tsc/app/app/trip/sample/sample.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sample.filter.js","sourceRoot":"","sources":["../../../../../src/app/trip/sample/sample.filter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sample.form.js b/out-tsc/app/app/trip/sample/sample.form.js new file mode 100644 index 000000000..5af08f2df --- /dev/null +++ b/out-tsc/app/app/trip/sample/sample.form.js @@ -0,0 +1,204 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, Input } from '@angular/core'; +import { MeasurementValuesForm } from '@app/data/measurement/measurement-values.form.class'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { UntypedFormBuilder } from '@angular/forms'; +import { AppFormUtils, FormArrayHelper, isNil, isNilOrBlank, isNotEmptyArray, isNotNilOrBlank, toNumber, } from '@sumaris-net/ngx-components'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { SampleValidatorService } from './sample.validator'; +import { Sample } from './sample.model'; +import { environment } from '@environments/environment'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { SubSampleValidatorService } from '@app/trip/sample/sub-sample.validator'; +let SampleForm = class SampleForm extends MeasurementValuesForm { + constructor(injector, measurementsValidatorService, formBuilder, programRefService, validatorService, subValidatorService) { + super(injector, measurementsValidatorService, formBuilder, programRefService, validatorService.getFormGroup(), { + skipDisabledPmfmControl: false, + skipComputedPmfmControl: false, + onUpdateFormGroup: (form) => this.onUpdateFormGroup(form), + }); + this.measurementsValidatorService = measurementsValidatorService; + this.formBuilder = formBuilder; + this.programRefService = programRefService; + this.validatorService = validatorService; + this.subValidatorService = subValidatorService; + this.availableTaxonGroups = null; + this.requiredLabel = true; + this.showLabel = true; + this.showSampleDate = true; + this.showTaxonGroup = true; + this.showTaxonName = true; + this.showComment = true; + this.showError = true; + this.isNotHiddenPmfm = PmfmUtils.isNotHidden; + this.selectInputContent = AppFormUtils.selectInputContent; + // Set default acquisition level + this.acquisitionLevel = AcquisitionLevelCodes.SAMPLE; + this._enable = true; + this.i18nPmfmPrefix = 'TRIP.SAMPLE.PMFM.'; + this.childrenArrayHelper = this.getChildrenFormHelper(this.form); + // for DEV only + this.debug = !environment.production; + } + ngOnInit() { + super.ngOnInit(); + this.tabindex = toNumber(this.tabindex, 1); + this.maxVisibleButtons = toNumber(this.maxVisibleButtons, 4); + // Taxon group combo + if (isNotEmptyArray(this.availableTaxonGroups)) { + this.registerAutocompleteField('taxonGroup', { + items: this.availableTaxonGroups, + mobile: this.mobile, + }); + } + else { + this.registerAutocompleteField('taxonGroup', { + suggestFn: (value, options) => this.programRefService.suggestTaxonGroups(value, Object.assign(Object.assign({}, options), { program: this.programLabel })), + mobile: this.mobile, + }); + } + // Taxon name combo + this.registerAutocompleteField('taxonName', { + suggestFn: (value, options) => this.suggestTaxonNames(value, options), + mobile: this.mobile, + }); + this.focusFieldName = + !this.mobile && ((this.showLabel && 'label') || (this.showTaxonGroup && 'taxonGroup') || (this.showTaxonName && 'taxonName')); + } + setChildren(children, opts) { + children = children || []; + if (this.childrenArrayHelper.size() !== children.length) { + this.childrenArrayHelper.resize(children.length); + } + this.form.patchValue({ children }, opts); + } + toggleComment() { + this.showComment = !this.showComment; + // Mark form as dirty, if need to reset comment (see getValue()) + if (!this.showComment && isNotNilOrBlank(this.form.get('comments').value)) + this.form.markAsDirty(); + this.markForCheck(); + } + /* -- protected methods -- */ + onUpdateFormGroup(form) { + this.validatorService.updateFormGroup(form, { + requiredLabel: this.requiredLabel, + }); + } + onApplyingEntity(data, opts) { + var _a; + super.onApplyingEntity(data, opts); + this.showComment = this.showComment || isNotNilOrBlank(data.comments); + const childrenCount = ((_a = data.children) === null || _a === void 0 ? void 0 : _a.length) || 0; + if (this.childrenArrayHelper.size() !== childrenCount) { + this.childrenArrayHelper.resize(childrenCount); + } + } + getValue() { + const value = super.getValue(); + // Reset comment, when hidden + if (!this.showComment) + value.comments = undefined; + return value; + } + suggestTaxonNames(value, options) { + return __awaiter(this, void 0, void 0, function* () { + const taxonGroup = this.form.get('taxonGroup').value; + // IF taxonGroup column exists: taxon group must be filled first + if (this.showTaxonGroup && isNilOrBlank(value) && isNil(taxonGroup)) + return { data: [] }; + return this.programRefService.suggestTaxonNames(value, { + programLabel: this.programLabel, + searchAttribute: options && options.searchAttribute, + taxonGroupId: (taxonGroup && taxonGroup.id) || undefined, + }); + }); + } + markForCheck() { + this.cd.markForCheck(); + } + getChildrenFormHelper(form) { + let arrayControl = form.get('children'); + if (!arrayControl) { + arrayControl = this.formBuilder.array([]); + form.addControl('children', arrayControl); + } + return new FormArrayHelper(arrayControl, (value) => this.subValidatorService.getFormGroup(value, { + measurementValuesAsGroup: false, + requiredParent: false, // Not need + }), (v1, v2) => Sample.equals(v1, v2), (value) => isNil(value), { allowEmptyArray: true }); + } +}; +__decorate([ + Input(), + __metadata("design:type", String) +], SampleForm.prototype, "i18nSuffix", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SampleForm.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], SampleForm.prototype, "tabindex", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SampleForm.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], SampleForm.prototype, "availableTaxonGroups", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SampleForm.prototype, "requiredLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SampleForm.prototype, "showLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SampleForm.prototype, "showSampleDate", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SampleForm.prototype, "showTaxonGroup", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SampleForm.prototype, "showTaxonName", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SampleForm.prototype, "showComment", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SampleForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], SampleForm.prototype, "maxVisibleButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], SampleForm.prototype, "pmfmValueColor", void 0); +SampleForm = __decorate([ + Component({ + selector: 'app-sample-form', + templateUrl: 'sample.form.html', + styleUrls: ['sample.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + MeasurementsValidatorService, + UntypedFormBuilder, + ProgramRefService, + SampleValidatorService, + SubSampleValidatorService]) +], SampleForm); +export { SampleForm }; +//# sourceMappingURL=sample.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sample.form.js.map b/out-tsc/app/app/trip/sample/sample.form.js.map new file mode 100644 index 000000000..832806c18 --- /dev/null +++ b/out-tsc/app/app/trip/sample/sample.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sample.form.js","sourceRoot":"","sources":["../../../../../src/app/trip/sample/sample.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sample.modal.js b/out-tsc/app/app/trip/sample/sample.modal.js new file mode 100644 index 000000000..ad34edf9c --- /dev/null +++ b/out-tsc/app/app/trip/sample/sample.modal.js @@ -0,0 +1,535 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input, ViewChild } from '@angular/core'; +import { Alerts, AppFormUtils, AudioProvider, EntityUtils, FormErrorTranslator, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, LocalSettingsService, referentialToString, toBoolean, TranslateContextService } from '@sumaris-net/ngx-components'; +import { environment } from '@environments/environment'; +import { AlertController, IonContent, ModalController } from '@ionic/angular'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { TranslateService } from '@ngx-translate/core'; +import { AcquisitionLevelCodes, PmfmIds } from '@app/referential/services/model/model.enum'; +import { SampleForm } from './sample.form'; +import { Sample } from './sample.model'; +import { debounceTime } from 'rxjs/operators'; +import moment from 'moment'; +import { AppImageAttachmentGallery } from '@app/data/image/image-attachment-gallery.component'; +import { ImageAttachment } from '@app/data/image/image-attachment.model'; +let SampleModal = class SampleModal { + constructor(injector, modalCtrl, alertCtrl, settings, translate, translateContext, formErrorTranslator, audio, cd) { + this.injector = injector; + this.modalCtrl = modalCtrl; + this.alertCtrl = alertCtrl; + this.settings = settings; + this.translate = translate; + this.translateContext = translateContext; + this.formErrorTranslator = formErrorTranslator; + this.audio = audio; + this.cd = cd; + this._subscription = new Subscription(); + this.$title = new BehaviorSubject(undefined); + this.debug = false; + this.loading = false; + this.requiredLabel = true; + this.showLabel = true; + this.showSampleDate = true; + this.showTaxonGroup = true; + this.showTaxonName = true; + this.availableTaxonGroups = null; + // Default value + this.mobile = settings.mobile; + this.acquisitionLevel = AcquisitionLevelCodes.SAMPLE; + // TODO: for DEV only + this.debug = !environment.production; + } + get dirty() { + return this.form.dirty || this.gallery.dirty; + } + get invalid() { + return this.form.invalid; + } + get valid() { + return this.form.valid; + } + ngOnInit() { + var _a, _b; + // Default values + this.isNew = toBoolean(this.isNew, !this.data); + this.usageMode = this.usageMode || this.settings.usageMode; + this._isOnFieldMode = this.settings.isOnFieldMode(this.usageMode); + this.disabled = toBoolean(this.disabled, false); + this.i18nSuffix = this.i18nSuffix || ''; + this.showComment = toBoolean(this.showComment, !this.mobile || isNotNil(this.data.comments)); + this.showPictures = toBoolean(this.showPictures, isNotEmptyArray((_a = this.data) === null || _a === void 0 ? void 0 : _a.images)); + this.showIndividualMonitoringButton = !!this.openSubSampleModal && toBoolean(this.showIndividualMonitoringButton, false); + this.showIndividualReleaseButton = !!this.openSubSampleModal && toBoolean(this.showIndividualReleaseButton, false); + // Show/Hide individual release button + if (this.showIndividualReleaseButton) { + this.tagIdPmfm = (_b = this.pmfms) === null || _b === void 0 ? void 0 : _b.find(p => p.id === PmfmIds.TAG_ID); + if (this.tagIdPmfm) { + this.form.ready().then(() => { + const tagIdControl = this.form.form.get('measurementValues.' + this.tagIdPmfm.id); + this.registerSubscription(tagIdControl + .valueChanges + .subscribe(tagId => { + this.showIndividualReleaseButton = isNotNilOrBlank(tagId); + this.markForCheck(); + })); + }); + } + } + if (this.disabled) { + this.form.disable(); + } + else { + // Change rankOrder validator, to optional + this.form.form.get('rankOrder').setValidators(null); + } + // Update title each time value changes + if (!this.isNew) { + this._subscription.add(this.form.valueChanges + .pipe(debounceTime(250)) + .subscribe(json => this.computeTitle(json))); + } + this.setValue(this.data); + } + ngOnDestroy() { + this._subscription.unsubscribe(); + } + close(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.dirty) { + const saveBeforeLeave = yield Alerts.askSaveBeforeLeave(this.alertCtrl, this.translate, event); + // User cancelled + if (isNil(saveBeforeLeave) || event && event.defaultPrevented) { + return; + } + // Is user confirm: close normally + if (saveBeforeLeave === true) { + yield this.onSubmit(event); + return; + } + } + yield this.modalCtrl.dismiss(); + }); + } + /** + * Add and reset form + */ + onSubmitAndNext(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.loading) + return undefined; // avoid many call + // DEBUG + //console.debug('[sample-modal] Calling onSubmitAndNext()'); + // If new AND pristine BUT valud (e.g. all PMFMs are optional): avoid to validate + if (this.isNew && !this.dirty && this.valid) { + return; // skip + } + const data = yield this.getDataToSave(); + // invalid + if (!data) { + if (this._isOnFieldMode) + this.audio.playBeepError(); + return; + } + this.markAsLoading(); + try { + const newData = yield this.onSaveAndNew(data); + yield this.reset(newData); + this.isNew = true; + if (this._isOnFieldMode) + this.audio.playBeepConfirm(); + yield this.scrollToTop(); + } + finally { + this.markAsLoaded(); + } + }); + } + /** + * Validate and close + * + * @param event + */ + onSubmitIfDirty(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.dirty) { + yield this.modalCtrl.dismiss(); + } + else { + return this.onSubmit(event); + } + }); + } + /** + * Validate and close + * + * @param event + */ + onSubmit(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.loading) + return undefined; // avoid many call + // No changes: leave + if ((!this.dirty && !this.isNew) + // If new, not changed but valid (e.g. if all PMFM are optional) : avoid to save an empty entity => skip + || (this.isNew && !this.dirty && this.valid)) { + this.markAsLoading(); + yield this.modalCtrl.dismiss(); + } + // Convert then dismiss + else { + const data = yield this.getDataToSave(); + if (!data) + return; // invalid + this.markAsLoading(); + // Clone is required to detect images changes (workaround) + // Fix issue #464 (images was not saved) + yield this.modalCtrl.dismiss(data.clone()); + } + }); + } + delete(event) { + return __awaiter(this, void 0, void 0, function* () { + // Apply deletion, if callback exists + if (this.onDelete) { + const deleted = yield this.onDelete(event, this.data); + if (isNil(deleted) || (event && event.defaultPrevented)) + return; // User cancelled + if (deleted) + yield this.modalCtrl.dismiss(); + } + else { + // Ask caller the modal owner apply deletion + yield this.modalCtrl.dismiss(this.data, 'delete'); + } + }); + } + onIndividualMonitoringClick(event) { + return this.doOpenSubSampleModal(AcquisitionLevelCodes.INDIVIDUAL_MONITORING); + } + onIndividualReleaseClick(event) { + return this.doOpenSubSampleModal(AcquisitionLevelCodes.INDIVIDUAL_RELEASE); + } + toggleImageGallery() { + this.showPictures = !this.showPictures; + this.markForCheck(); + } + /* -- protected methods -- */ + setValue(data) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[sample-modal] Applying value to form...', data); + this.form.markAsReady(); + this.gallery.markAsReady(); + this.resetError(); + try { + // Set form value + this.data = data || new Sample(); + const isNew = isNil(this.data.id); + if (isNew && !this.data.sampleDate) { + if (this.defaultSampleDate) { + this.data.sampleDate = this.defaultSampleDate.clone(); + } + else if (this._isOnFieldMode) { + this.data.sampleDate = moment(); + } + } + // Set form value + yield this.form.setValue(this.data); + // DEBUG + // Set gallery's images + // this.gallery.value = + // [ + // {id: 0, url: 'https://test.sumaris.net/assets/img/bg/ray-1.jpg', title: 'ray #1'}, + // {id: 1, url: 'https://test.sumaris.net/assets/img/bg/ray-2.jpg', title: 'ray #2'} + // ].map(ImageAttachment.fromObject); + this.showPictures = this.showPictures || isNotEmptyArray(this.data.images); + this.gallery.value = this.showPictures && this.data.images || []; + // Call ready callback + if (this.onReady) + yield this.onReady(this); + yield this.computeTitle(); + } + finally { + if (!this.disabled) + this.enable(); + this.form.markAsUntouched(); + this.form.markAsPristine(); + this.markForCheck(); + } + }); + } + getDataToSave(opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.valid) { + // Wait validation end + yield AppFormUtils.waitWhilePending(this.form); + if (this.invalid) { + if (this.debug) + AppFormUtils.logFormErrors(this.form.form, '[sample-modal] '); + // If not many fields/pmfms: display a simple message, + // Otherwise (many fields/pmfms) show a detailed message + if (!this.pmfms || this.pmfms.length < 5) { + this.setError('COMMON.FORM.HAS_ERROR'); + } + else { + const error = this.formErrorTranslator.translateFormErrors(this.form.form, { + controlPathTranslator: this.form, + separator: '
' + }); + const errorMessage = isNotNilOrBlank(error) + ? `${error}` + : 'COMMON.FORM.HAS_ERROR'; + this.setError(errorMessage); + } + this.form.markAllAsTouched(); + this.scrollToTop(); + return; + } + } + this.markAsLoading(); + this.resetError(); + // To force enable, to get computed values + this.enable(); + try { + // Get form value + const data = this.form.value; + // Add images + if (this.showPictures) { + if (this.gallery.dirty) { + yield this.gallery.save(); + } + const images = this.gallery.value; + data.images = images && images.map(ImageAttachment.fromObject) || undefined; + } + return data; + } + finally { + if (!opts || opts.disable !== false) { + //this.disable(); + } + } + }); + } + reset(data) { + return __awaiter(this, void 0, void 0, function* () { + yield this.setValue(data || new Sample()); + }); + } + computeTitle(data) { + return __awaiter(this, void 0, void 0, function* () { + data = data || this.data; + // Compute prefix + let prefix = ''; + const prefixItems = []; + if (data && !this.showTaxonGroup && EntityUtils.isNotEmpty(data.taxonGroup, 'id')) { + prefixItems.push(referentialToString(data.taxonGroup, this.settings.getFieldDisplayAttributes('taxonGroup'))); + } + if (data && !this.showTaxonName && data && EntityUtils.isNotEmpty(data.taxonName, 'id')) { + prefixItems.push(referentialToString(data.taxonName, this.settings.getFieldDisplayAttributes('taxonName'))); + } + if (isNotEmptyArray(prefixItems)) { + prefix = this.translateContext.instant('TRIP.SAMPLE.TITLE_PREFIX', this.i18nSuffix, { prefix: prefixItems.join(' / ') }); + } + if (this.isNew || !data) { + this.$title.next(prefix + this.translateContext.instant('TRIP.SAMPLE.NEW.TITLE', this.i18nSuffix)); + } + else { + // Label can be optional (e.g. in auction control) + const label = this.showLabel && data.label || ('#' + data.rankOrder); + this.$title.next(prefix + this.translateContext.instant('TRIP.SAMPLE.EDIT.TITLE', this.i18nSuffix, { label })); + } + }); + } + doOpenSubSampleModal(acquisitionLevel) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.openSubSampleModal) + return; // Skip + // Save + const savedSample = yield this.getDataToSave(); + if (!savedSample) + return; + try { + // Execute the callback + const updatedParent = yield this.openSubSampleModal(savedSample, acquisitionLevel); + if (!updatedParent) + return; // User cancelled + this.form.setChildren(updatedParent.children); + this.form.markAsDirty(); + } + finally { + this.loading = false; + this.form.enable(); + } + }); + } + scrollToTop() { + return __awaiter(this, void 0, void 0, function* () { + return this.content.scrollToTop(); + }); + } + markForCheck() { + this.cd.markForCheck(); + } + registerSubscription(teardown) { + this._subscription.add(teardown); + } + markAsLoading() { + this.loading = true; + this.markForCheck(); + } + markAsLoaded() { + this.loading = false; + this.markForCheck(); + } + enable(opts) { + this.form.enable(opts); + this.gallery.enable(opts); + } + disable(opts) { + this.form.disable(opts); + this.gallery.disable(opts); + } + setError(error) { + this.form.error = error; + } + resetError() { + this.form.error = null; + } +}; +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SampleModal.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SampleModal.prototype, "isNew", void 0); +__decorate([ + Input(), + __metadata("design:type", Sample) +], SampleModal.prototype, "data", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SampleModal.prototype, "disabled", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SampleModal.prototype, "acquisitionLevel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SampleModal.prototype, "programLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SampleModal.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], SampleModal.prototype, "pmfms", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SampleModal.prototype, "i18nSuffix", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SampleModal.prototype, "requiredLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SampleModal.prototype, "showLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SampleModal.prototype, "showSampleDate", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SampleModal.prototype, "showTaxonGroup", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SampleModal.prototype, "showTaxonName", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SampleModal.prototype, "showComment", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SampleModal.prototype, "showIndividualReleaseButton", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SampleModal.prototype, "showIndividualMonitoringButton", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SampleModal.prototype, "showPictures", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], SampleModal.prototype, "maxVisibleButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], SampleModal.prototype, "maxItemCountForButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], SampleModal.prototype, "availableTaxonGroups", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SampleModal.prototype, "defaultSampleDate", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], SampleModal.prototype, "pmfmValueColor", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], SampleModal.prototype, "onReady", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], SampleModal.prototype, "onSaveAndNew", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], SampleModal.prototype, "onDelete", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], SampleModal.prototype, "openSubSampleModal", void 0); +__decorate([ + ViewChild('form', { static: true }), + __metadata("design:type", SampleForm) +], SampleModal.prototype, "form", void 0); +__decorate([ + ViewChild('gallery', { static: true }), + __metadata("design:type", AppImageAttachmentGallery) +], SampleModal.prototype, "gallery", void 0); +__decorate([ + ViewChild(IonContent), + __metadata("design:type", IonContent) +], SampleModal.prototype, "content", void 0); +SampleModal = __decorate([ + Component({ + selector: 'app-sample-modal', + templateUrl: 'sample.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + ModalController, + AlertController, + LocalSettingsService, + TranslateService, + TranslateContextService, + FormErrorTranslator, + AudioProvider, + ChangeDetectorRef]) +], SampleModal); +export { SampleModal }; +//# sourceMappingURL=sample.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sample.modal.js.map b/out-tsc/app/app/trip/sample/sample.modal.js.map new file mode 100644 index 000000000..ec6275218 --- /dev/null +++ b/out-tsc/app/app/trip/sample/sample.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sample.modal.js","sourceRoot":"","sources":["../../../../../src/app/trip/sample/sample.modal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAqB,SAAS,EAAC,MAAM,eAAe,CAAC;AACnI,OAAO,EACL,MAAM,EACN,YAAY,EACZ,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,KAAK,EACL,eAAe,EACf,QAAQ,EACR,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,SAAS,EACT,uBAAuB,EAExB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAC,eAAe,EAAE,UAAU,EAAE,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAC,eAAe,EAAE,YAAY,EAAgB,MAAM,MAAM,CAAC;AAClE,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAC,qBAAqB,EAAwB,OAAO,EAAC,MAAM,4CAA4C,CAAC;AAChH,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,MAAM,EAAC,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAE5C,OAAO,MAAgB,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAC,yBAAyB,EAAC,MAAM,oDAAoD,CAAC;AAC7F,OAAO,EAAC,eAAe,EAAC,MAAM,wCAAwC,CAAC;AAqChE,IAAM,WAAW,GAAjB,MAAM,WAAW;IAwDtB,YACY,QAAkB,EAClB,SAA0B,EAC1B,SAA0B,EAC1B,QAA8B,EAC9B,SAA2B,EAC3B,gBAAyC,EACzC,mBAAwC,EACxC,KAAoB,EACpB,EAAqB;QARrB,aAAQ,GAAR,QAAQ,CAAU;QAClB,cAAS,GAAT,SAAS,CAAiB;QAC1B,cAAS,GAAT,SAAS,CAAiB;QAC1B,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,cAAS,GAAT,SAAS,CAAkB;QAC3B,qBAAgB,GAAhB,gBAAgB,CAAyB;QACzC,wBAAmB,GAAnB,mBAAmB,CAAqB;QACxC,UAAK,GAAL,KAAK,CAAe;QACpB,OAAE,GAAF,EAAE,CAAmB;QA/DhB,kBAAa,GAAG,IAAI,YAAY,EAAE,CAAC;QAEpD,WAAM,GAAG,IAAI,eAAe,CAAS,SAAS,CAAC,CAAC;QAChD,UAAK,GAAG,KAAK,CAAC;QACd,YAAO,GAAG,KAAK,CAAC;QAcP,kBAAa,GAAG,IAAI,CAAC;QACrB,cAAS,GAAG,IAAI,CAAC;QACjB,mBAAc,GAAG,IAAI,CAAC;QACtB,mBAAc,GAAG,IAAI,CAAC;QACtB,kBAAa,GAAG,IAAI,CAAC;QAOrB,yBAAoB,GAAoB,IAAI,CAAC;QAoCpD,gBAAgB;QAChB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,MAAM,CAAC;QAErD,qBAAqB;QACrB,IAAI,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;IACvC,CAAC;IA7BD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAC/C,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB,CAAC;IAqBD,QAAQ;;QACN,iBAAiB;QACjB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC3D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7F,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,MAAA,IAAI,CAAC,IAAI,0CAAE,MAAM,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,8BAA8B,GAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,IAAI,SAAS,CAAC,IAAI,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QAC1H,IAAI,CAAC,2BAA2B,GAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,IAAI,SAAS,CAAC,IAAI,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAEpH,sCAAsC;QACtC,IAAI,IAAI,CAAC,2BAA2B,EAAE;YACpC,IAAI,CAAC,SAAS,GAAG,MAAA,IAAI,CAAC,KAAK,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;YAEhE,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;oBAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;oBAElF,IAAI,CAAC,oBAAoB,CACvB,YAAY;yBACT,YAAY;yBACZ,SAAS,CAAC,KAAK,CAAC,EAAE;wBACjB,IAAI,CAAC,2BAA2B,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;wBAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,CAAC,CAAC,CACL,CAAC;gBACJ,CAAC,CAAC,CAAC;aACJ;SACF;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;SACrB;aACI;YACH,0CAA0C;YAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SACrD;QAED,uCAAuC;QACvC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,IAAI,CAAC,IAAI,CAAC,YAAY;iBACnB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;iBACvB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAC9C,CAAC;SACH;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,WAAW;QACT,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;IACnC,CAAC;IAEK,KAAK,CAAC,KAAa;;YACvB,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAE/F,iBAAiB;gBACjB,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,gBAAgB,EAAE;oBAC7D,OAAO;iBACR;gBAED,kCAAkC;gBAClC,IAAI,eAAe,KAAK,IAAI,EAAE;oBAC5B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAC3B,OAAO;iBACR;aACF;YAED,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACjC,CAAC;KAAA;IAED;;OAEG;IACG,eAAe,CAAC,KAAa;;YACjC,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO,SAAS,CAAC,CAAC,kBAAkB;YACtD,QAAQ;YACR,4DAA4D;YAE5D,iFAAiF;YACjF,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;gBAC3C,OAAO,CAAC,OAAO;aAChB;YAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,UAAU;YACV,IAAI,CAAC,IAAI,EAAE;gBACT,IAAI,IAAI,CAAC,cAAc;oBAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;gBACpD,OAAO;aACR;YAED,IAAI,CAAC,aAAa,EAAE,CAAC;YAErB,IAAI;gBACF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBAC9C,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;gBAClB,IAAI,IAAI,CAAC,cAAc;oBAAE,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;gBAEtD,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;aAC1B;oBAAS;gBACR,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;QACH,CAAC;KAAA;IAED;;;;OAIG;IACG,eAAe,CAAC,KAAa;;YACjC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACf,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;aAChC;iBACI;gBACH,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aAC7B;QACH,CAAC;KAAA;IAED;;;;OAIG;IACG,QAAQ,CAAC,KAAa;;YAC1B,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO,SAAS,CAAC,CAAC,kBAAkB;YAEtD,oBAAoB;YACpB,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC9B,wGAAwG;mBACrG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;gBAC9C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;aAChC;YACD,uBAAuB;iBAClB;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI;oBAAE,OAAO,CAAC,UAAU;gBAE7B,IAAI,CAAC,aAAa,EAAE,CAAC;gBAErB,0DAA0D;gBAC1D,wCAAwC;gBACxC,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;aAC5C;QACH,CAAC;KAAA;IAEK,MAAM,CAAC,KAAa;;YACxB,qCAAqC;YACrC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,gBAAgB,CAAC;oBAAE,OAAO,CAAC,iBAAiB;gBAClF,IAAI,OAAO;oBAAE,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;aAC7C;iBACI;gBACH,4CAA4C;gBAC5C,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;aACnD;QACH,CAAC;KAAA;IAED,2BAA2B,CAAC,KAAa;QACvC,OAAO,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,CAAC;IAChF,CAAC;IAED,wBAAwB,CAAC,KAAa;QACpC,OAAO,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;IAC7E,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,6BAA6B;IAEf,QAAQ,CAAC,IAAY;;YAEjC,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,IAAI,CAAC,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC3B,IAAI,CAAC,UAAU,EAAE,CAAC;YAElB,IAAI;gBACF,iBAAiB;gBACjB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAElC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;oBAClC,IAAI,IAAI,CAAC,iBAAiB,EAAE;wBAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;qBACvD;yBACI,IAAI,IAAI,CAAC,cAAc,EAAE;wBAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,MAAM,EAAE,CAAC;qBACjC;iBACF;gBAED,iBAAiB;gBACjB,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEpC,QAAQ;gBACR,uBAAuB;gBACvB,uBAAuB;gBACvB,MAAM;gBACN,yFAAyF;gBACzF,wFAAwF;gBACxF,uCAAuC;gBAEvC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3E,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;gBAEjE,sBAAsB;gBACtB,IAAI,IAAI,CAAC,OAAO;oBAAE,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAE3C,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;aAC3B;oBACO;gBACN,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE,IAAI,CAAC,MAAM,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC5B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;QACH,CAAC;KAAA;IAEe,aAAa,CAAC,IAA0B;;YAEtD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACf,sBAAsB;gBACtB,MAAM,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAE/C,IAAI,IAAI,CAAC,OAAO,EAAE;oBAChB,IAAI,IAAI,CAAC,KAAK;wBAAE,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;oBAE9E,sDAAsD;oBACtD,wDAAwD;oBACxD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;wBACxC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;qBACxC;yBACI;wBACH,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;4BACzE,qBAAqB,EAAE,IAAI,CAAC,IAAI;4BAChC,SAAS,EAAE,OAAO;yBACnB,CAAC,CAAC;wBACH,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC;4BACzC,CAAC,CAAC,gCAAgC,KAAK,UAAU;4BACjD,CAAC,CAAC,uBAAuB,CAAC;wBAC5B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;qBAC7B;oBACD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;oBACnB,OAAO;iBACR;aACF;YAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,EAAE,CAAC;YAElB,0CAA0C;YAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YAEd,IAAI;gBACF,iBAAiB;gBACjB,MAAM,IAAI,GAAW,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAErC,aAAa;gBACb,IAAI,IAAI,CAAC,YAAY,EAAE;oBACrB,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;wBACtB,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;qBAC3B;oBACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;oBAClC,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC;iBAC7E;gBAED,OAAO,IAAI,CAAC;aACb;oBAAS;gBACR,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;oBACnC,iBAAiB;iBAClB;aACF;QACH,CAAC;KAAA;IAEe,KAAK,CAAC,IAAa;;YACjC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;QAC5C,CAAC;KAAA;IAEe,YAAY,CAAC,IAAa;;YAExC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;YAEzB,iBAAiB;YACjB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,MAAM,WAAW,GAAG,EAAE,CAAC;YACvB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE;gBACjF,WAAW,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;aAC/G;YACD,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE;gBACvF,WAAW,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;aAC7G;YACD,IAAI,eAAe,CAAC,WAAW,CAAC,EAAE;gBAChC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,0BAA0B,EAAE,IAAI,CAAC,UAAU,EAChF,EAAC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC;aACtC;YAED,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE;gBACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;aACpG;iBAAM;gBACL,kDAAkD;gBAClD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;gBACrE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC,UAAU,EAAE,EAAC,KAAK,EAAC,CAAC,CAAC,CAAC;aAC9G;QACH,CAAC;KAAA;IAEe,oBAAoB,CAAC,gBAAsC;;YACzE,IAAI,CAAC,IAAI,CAAC,kBAAkB;gBAAE,OAAO,CAAC,OAAO;YAE7C,OAAO;YACP,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC/C,IAAI,CAAC,WAAW;gBAAE,OAAO;YAEzB,IAAI;gBAEF,uBAAuB;gBACvB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;gBAEnF,IAAI,CAAC,aAAa;oBAAE,OAAO,CAAC,iBAAiB;gBAE7C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAE9C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;aACzB;oBAAS;gBACR,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;aACpB;QACH,CAAC;KAAA;IAEK,WAAW;;YACf,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACpC,CAAC;KAAA;IAED,YAAY;QACV,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;IAES,oBAAoB,CAAC,QAAuB;QACpD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAES,aAAa;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAES,YAAY;QACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAES,MAAM,CAAC,IAA4B;QAC3C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAES,OAAO,CAAC,IAA4B;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAES,QAAQ,CAAC,KAAU;QAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAC1B,CAAC;IAES,UAAU;QAClB,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACzB,CAAC;CAEF,CAAA;AA5bC;IAAC,KAAK,EAAE;;2CAAiB;AACzB;IAAC,KAAK,EAAE;;0CAAgB;AACxB;IAAC,KAAK,EAAE;8BAAO,MAAM;yCAAC;AACtB;IAAC,KAAK,EAAE;;6CAAmB;AAC3B;IAAC,KAAK,EAAE;;qDAA0B;AAClC;IAAC,KAAK,EAAE;;iDAAsB;AAC9B;IAAC,KAAK,EAAE;;8CAAsB;AAC9B;IAAC,KAAK,EAAE;;0CAAgB;AAGxB;IAAC,KAAK,EAAE;;+CAAoB;AAC5B;IAAC,KAAK,EAAE;;kDAAsB;AAC9B;IAAC,KAAK,EAAE;;8CAAkB;AAC1B;IAAC,KAAK,EAAE;;mDAAuB;AAC/B;IAAC,KAAK,EAAE;;mDAAuB;AAC/B;IAAC,KAAK,EAAE;;kDAAsB;AAC9B;IAAC,KAAK,EAAE;;gDAAsB;AAC9B;IAAC,KAAK,EAAE;;gEAAsC;AAC9C;IAAC,KAAK,EAAE;;mEAAyC;AACjD;IAAC,KAAK,EAAE;;iDAAuB;AAC/B;IAAC,KAAK,EAAE;;sDAA2B;AACnC;IAAC,KAAK,EAAE;;2DAAgC;AACxC;IAAC,KAAK,EAAE;;yDAA8C;AACtD;IAAC,KAAK,EAAE;;sDAA2B;AACnC;IAAC,KAAK,EAAE;;mDAAkC;AAE1C;IAAC,KAAK,EAAE;;4CAAuD;AAC/D;IAAC,KAAK,EAAE;;iDAAiD;AACzD;IAAC,KAAK,EAAE;;6CAA4D;AACpE;IAAC,KAAK,EAAE;;uDAAiG;AAEzG;IAAC,SAAS,CAAC,MAAM,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC;8BAAO,UAAU;yCAAC;AACpD;IAAC,SAAS,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC;8BAAU,yBAAyB;4CAAC;AACzE;IAAC,SAAS,CAAC,UAAU,CAAC;8BAAU,UAAU;4CAAC;AA1ChC,WAAW;IALvB,SAAS,CAAC;QACT,QAAQ,EAAE,kBAAkB;QAC5B,WAAW,EAAE,mBAAmB;QAChC,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCA0DsB,QAAQ;QACP,eAAe;QACf,eAAe;QAChB,oBAAoB;QACnB,gBAAgB;QACT,uBAAuB;QACpB,mBAAmB;QACjC,aAAa;QAChB,iBAAiB;GAjEtB,WAAW,CAqcvB;SArcY,WAAW"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sample.model.js b/out-tsc/app/app/trip/sample/sample.model.js new file mode 100644 index 000000000..8114d3ab7 --- /dev/null +++ b/out-tsc/app/app/trip/sample/sample.model.js @@ -0,0 +1,301 @@ +var Sample_1; +import { __decorate, __metadata } from "tslib"; +import { EntityClass, fromDateISOString, isNil, isNotEmptyArray, isNotNil, referentialToString, ReferentialUtils, toDateISOString } from '@sumaris-net/ngx-components'; +import { MeasurementUtils, MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { TaxonGroupRef } from '@app/referential/services/model/taxon-group.model'; +import { TaxonNameRef } from '@app/referential/services/model/taxon-name.model'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +import { ImageAttachment } from '@app/data/image/image-attachment.model'; +import { RootDataEntity } from '@app/data/services/model/root-data-entity.model'; +let Sample = Sample_1 = class Sample extends RootDataEntity { + constructor() { + super(Sample_1.TYPENAME); + this.label = null; + this.rankOrder = null; + this.sampleDate = null; + this.individualCount = null; + this.taxonGroup = null; + this.taxonName = null; + this.measurementValues = {}; + this.matrixId = null; + this.batchId = null; + this.size = null; + this.sizeUnit = null; + this.operationId = null; + this.landingId = null; + this.parentId = null; + this.parent = null; + this.children = null; + } + static asObject(source, opts) { + var _a; + return (_a = Sample_1.fromObject(source)) === null || _a === void 0 ? void 0 : _a.asObject(opts); + } + static fromObjectArrayAsTree(sources, opts) { + if (!sources) + return null; + // Convert to entities + const targets = (sources || []).map(json => this.fromObject(json, Object.assign(Object.assign({}, opts), { withChildren: false }))); + // Find roots + const roots = targets.filter(g => isNil(g.parentId)); + // Link to parent (using parentId) + targets.forEach(t => { + t.parent = isNotNil(t.parentId) && roots.find(p => p.id === t.parentId) || undefined; + t.parentId = undefined; // Avoid redundant info on parent + }); + // Link to children + roots.forEach(s => s.children = targets.filter(p => p.parent && p.parent === s) || []); + // Return root + return roots; + } + /** + * Transform a samples tree, into an array of object. + * Parent & children links are removed, to keep only a parentId + * + * @param sources + * @param opts + * @throw Error if a sample has no id + */ + static treeAsObjectArray(sources, opts) { + return sources && sources + // Reduce to array + .reduce((res, source) => { + // Convert entity into object, WITHOUT children (will be set later) + const target = source.asObject ? source.asObject(Object.assign(Object.assign({}, opts), { withChildren: false })) : Object.assign(Object.assign({}, source), { children: undefined }); + // Link target with the given parent + const parent = opts && opts.parent; + if (parent) { + if (isNil(parent.id)) { + throw new Error(`Cannot convert sample tree into array: No id found for sample ${parent.label}!`); + } + target.parentId = parent.id; + delete target.parent; // not need + } + if (isNotEmptyArray(source.children)) { + return res.concat(target) + .concat(...this.treeAsObjectArray(source.children, Object.assign(Object.assign({}, opts), { parent: target }))); + } + return res.concat(target); + }, []) || undefined; + } + static equals(s1, s2) { + return s1 && s2 && (isNotNil(s1.id) && s1.id === s2.id) + || (s1.rankOrder === s2.rankOrder + // same operation + && ((!s1.operationId && !s2.operationId) || s1.operationId === s2.operationId) + // same label + && ((!s1.label && !s2.label) || s1.label === s2.label) + // Warn: compare using the parent ID is too complicated + ); + } + asObject(opts) { + const target = super.asObject(opts); + target.sampleDate = toDateISOString(this.sampleDate); + target.taxonGroup = this.taxonGroup && this.taxonGroup.asObject(Object.assign(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS), { keepEntityName: true /*fix #32*/ })) || undefined; + target.taxonName = this.taxonName && this.taxonName.asObject(Object.assign(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS), { keepEntityName: true /*fix #32*/ })) || undefined; + target.individualCount = isNotNil(this.individualCount) ? this.individualCount : null; + target.parentId = this.parentId || this.parent && this.parent.id || undefined; + target.children = this.children && (!opts || opts.withChildren !== false) && this.children.map(c => c.asObject(opts)) || undefined; + target.measurementValues = MeasurementValuesUtils.asObject(this.measurementValues, opts); + target.landingId = this.landingId; + target.operationId = this.operationId; + target.images = this.images && this.images.map(image => image.asObject(opts)) || undefined; + if (opts && opts.minify) { + // Parent not need, as the tree will be used by pod + delete target.parent; + delete target.parentId; + } + return target; + } + fromObject(source, opts) { + super.fromObject(source); + this.label = source.label; + this.rankOrder = source.rankOrder; + this.sampleDate = fromDateISOString(source.sampleDate); + this.individualCount = isNotNil(source.individualCount) && source.individualCount !== '' ? source.individualCount : null; + this.taxonGroup = source.taxonGroup && TaxonGroupRef.fromObject(source.taxonGroup) || undefined; + this.taxonName = source.taxonName && TaxonNameRef.fromObject(source.taxonName) || undefined; + this.size = source.size; + this.sizeUnit = source.sizeUnit; + this.matrixId = source.matrixId; + this.parentId = source.parentId; + this.parent = source.parent; + this.batchId = source.batchId; + this.operationId = source.operationId; + this.landingId = source.landingId; + this.measurementValues = source.measurementValues && Object.assign({}, source.measurementValues) || MeasurementUtils.toMeasurementValues(source.measurements); + this.images = source.images && source.images.map(ImageAttachment.fromObject) || undefined; + if (!opts || opts.withChildren !== false) { + this.children = source.children && source.children.map(child => Sample_1.fromObject(child, opts)) || undefined; + } + return this; + } + equals(other) { + // equals by ID + return (super.equals(other) && isNotNil(this.id)) + // Or by functional attributes + || (this.rankOrder === other.rankOrder + // same operation + && ((!this.operationId && !other.operationId) || this.operationId === other.operationId) + // same landing + && ((!this.landingId && !other.landingId) || this.landingId === other.landingId) + // same label + && ((!this.label && !other.label) || this.label === other.label) + // Warn: compare using the parent ID is too complicated + ); + } +}; +Sample = Sample_1 = __decorate([ + EntityClass({ typename: 'SampleVO' }), + __metadata("design:paramtypes", []) +], Sample); +export { Sample }; +export class SampleUtils { + static parentToString(parent, opts) { + if (!parent) + return null; + opts = opts || { taxonGroupAttributes: ['label', 'name'], taxonNameAttributes: ['label', 'name'] }; + if (opts.pmfm && parent.measurementValues && isNotNil(parent.measurementValues[opts.pmfm.id])) { + return parent.measurementValues[opts.pmfm.id]; + } + const hasTaxonGroup = ReferentialUtils.isNotEmpty(parent.taxonGroup); + const hasTaxonName = ReferentialUtils.isNotEmpty(parent.taxonName); + // Display only taxon name, if no taxon group or same label + if (hasTaxonName && (!hasTaxonGroup || parent.taxonGroup.label === parent.taxonName.label)) { + return referentialToString(parent.taxonName, opts.taxonNameAttributes); + } + // Display both, if both exists + if (hasTaxonName && hasTaxonGroup) { + return referentialToString(parent.taxonGroup, opts.taxonGroupAttributes) + ' / ' + + referentialToString(parent.taxonName, opts.taxonNameAttributes); + } + // Display only taxon group + if (hasTaxonGroup) { + return referentialToString(parent.taxonGroup, opts.taxonGroupAttributes); + } + // Display rankOrder only (should never occur) + return `#${parent.rankOrder}`; + } + static computeNextRankOrder(sources, acquisitionLevel) { + return sources.filter(s => this.hasAcquisitionLevel(s, acquisitionLevel)) + .reduce((max, s) => Math.max(max, s.rankOrder || 0), 0) + 1; + } + static computeLabel(rankOrder, acquisitionLevel) { + return acquisitionLevel + '#' + rankOrder; + } + static hasAcquisitionLevel(s, acquisitionLevel) { + return s && s.label && s.label.startsWith(acquisitionLevel + '#'); + } + static filterByAcquisitionLevel(samples, acquisitionLevel) { + return samples && samples.filter(s => s.label && s.label.startsWith(acquisitionLevel + '#')); + } + static insertOrUpdateChild(parent, child, acquisitionLevel) { + if (!parent || !child) + throw new Error('Missing \'parent\' or \'child\' arguments'); + parent.children = parent.children || []; + const subSampleIndex = parent.children.findIndex(s => Sample.equals(s, child)); + const isNew = subSampleIndex === -1; + // Add + if (isNew) { + child.rankOrder = this.computeNextRankOrder(parent.children, acquisitionLevel); + child.label = this.computeLabel(parent.rankOrder, acquisitionLevel); + parent.children.push(child); // Create a copy, to force change detection to recompute pipes + } + // Or replace + else { + parent.children[subSampleIndex] = child; + } + return parent.children; + } + static removeChild(parent, child) { + if (!parent || !child) + throw new Error('Missing \'parent\' or \'child\' arguments'); + const subSampleIndex = (parent.children || []).findIndex(s => Sample.equals(s, child)); + const exists = subSampleIndex !== -1; + // Add + if (exists) { + parent.children.splice(subSampleIndex, 1); + } + return parent.children; + } + static logSample(sample, opts) { + opts = opts || {}; + const indent = opts && opts.indent || ''; + let message = indent + (sample.label || 'NO_LABEL'); + if (opts.showAll) { + const excludeKeys = ['label', 'parent', 'children', '__typename']; + Object.keys(sample) + .filter(key => !excludeKeys.includes(key) && isNotNil(sample[key])) + .forEach(key => { + let value = sample[key]; + if (value instanceof Object) { + if (!(value instanceof Sample)) { + value = JSON.stringify(value); + } + } + message += ' ' + key + ':' + value; + }); + } + else { + if (isNotNil(sample.id)) { + message += ' id:' + sample.id; + } + // Parent + if (opts.showParent !== false) { + if (sample.parent) { + if (isNotNil(sample.parent.id)) { + message += ' parent.id:' + sample.parent.id; + } + else if (isNotNil(sample.parent.label)) { + message += ' parent.label:' + sample.parent.label; + } + } + if (isNotNil(sample.parentId)) { + message += ' parentId:' + sample.parentId; + } + } + // Taxon + if (opts.showTaxon !== false) { + if (sample.taxonGroup) { + message += ' taxonGroup:' + (sample.taxonGroup && (sample.taxonGroup.label || sample.taxonGroup.id)); + } + if (sample.taxonName) { + message += ' taxonName:' + (sample.taxonName && (sample.taxonName.label || sample.taxonName.id)); + } + } + // Measurement + if (opts.showMeasure !== false && sample.measurementValues) { + MeasurementValuesUtils.getPmfmIds(sample.measurementValues) + .forEach(pmfmId => { + message += ` pmfm#${pmfmId}: ${sample.measurementValues[pmfmId]}`; + }); + } + } + // Print + if (opts.println) + opts.println(message); + else + console.debug(message); + } + static logTree(samples, opts) { + opts = opts || {}; + samples = samples || []; + const indent = opts && opts.indent || ''; + const nextIndent = opts && opts.nextIndent || indent; + samples.forEach(sample => { + // Log current + this.logSample(sample, opts); + // Loop on children + this.logTree(sample.children, { + println: opts.println, + indent: nextIndent + ' |- ' + }); + }); + } +} +SampleUtils.isIndividualMonitoring = (s) => SampleUtils.hasAcquisitionLevel(s, AcquisitionLevelCodes.INDIVIDUAL_MONITORING); +SampleUtils.isIndividualRelease = (s) => SampleUtils.hasAcquisitionLevel(s, AcquisitionLevelCodes.INDIVIDUAL_RELEASE); +SampleUtils.filterIndividualMonitoring = (samples) => SampleUtils.filterByAcquisitionLevel(samples, AcquisitionLevelCodes.INDIVIDUAL_MONITORING); +SampleUtils.filterIndividualRelease = (samples) => SampleUtils.filterByAcquisitionLevel(samples, AcquisitionLevelCodes.INDIVIDUAL_RELEASE); +//# sourceMappingURL=sample.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sample.model.js.map b/out-tsc/app/app/trip/sample/sample.model.js.map new file mode 100644 index 000000000..5301f1269 --- /dev/null +++ b/out-tsc/app/app/trip/sample/sample.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sample.model.js","sourceRoot":"","sources":["../../../../../src/app/trip/sample/sample.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sample.module.js b/out-tsc/app/app/trip/sample/sample.module.js new file mode 100644 index 000000000..395157046 --- /dev/null +++ b/out-tsc/app/app/trip/sample/sample.module.js @@ -0,0 +1,66 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { SamplesTable } from './samples.table'; +import { SubSamplesTable } from './sub-samples.table'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { SampleForm } from './sample.form'; +import { SampleModal } from './sample.modal'; +import { AppDataModule } from '@app/data/data.module'; +import { TranslateModule } from '@ngx-translate/core'; +import { CommonModule } from '@angular/common'; +import { AppCoreModule } from '@app/core/core.module'; +import { SubSampleForm } from '@app/trip/sample/sub-sample.form'; +import { SubSampleModal } from '@app/trip/sample/sub-sample.modal'; +import { IndividualMonitoringTable } from '@app/trip/sample/individualmonitoring/individual-monitoring.table'; +import { IndividualReleasesTable } from '@app/trip/sample/individualrelease/individual-releases.table'; +import { SampleTreeComponent } from '@app/trip/sample/sample-tree.component'; +import { AppMeasurementModule } from '@app/data/measurement/measurement.module'; +import { SamplesModal } from '@app/trip/sample/samples.modal'; +import { ImageGalleryModule } from '@sumaris-net/ngx-components'; +import { AppPmfmSelectModalModule } from '@app/referential/pmfm/table/select-pmfm.module'; +import { AppEntityQualityModule } from '@app/data/quality/entity-quality.module'; +let AppSampleModule = class AppSampleModule { + constructor() { + console.debug('[sample] Creating module...'); + } +}; +AppSampleModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TranslateModule.forChild(), + // App module + AppCoreModule, + AppReferentialModule, + AppDataModule, + // Functional modules + AppMeasurementModule, + AppPmfmSelectModalModule, + ImageGalleryModule, + AppEntityQualityModule, + ], + declarations: [ + SamplesTable, + SampleForm, + SampleModal, + SamplesModal, + SubSamplesTable, + SubSampleForm, + SubSampleModal, + IndividualMonitoringTable, + IndividualReleasesTable, + SampleTreeComponent + ], + exports: [ + // Components + SamplesTable, + SamplesModal, + SampleForm, + SubSamplesTable, + SampleTreeComponent + ] + }), + __metadata("design:paramtypes", []) +], AppSampleModule); +export { AppSampleModule }; +//# sourceMappingURL=sample.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sample.module.js.map b/out-tsc/app/app/trip/sample/sample.module.js.map new file mode 100644 index 000000000..d09e131fb --- /dev/null +++ b/out-tsc/app/app/trip/sample/sample.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sample.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/sample/sample.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mEAAmE,CAAC;AAC9G,OAAO,EAAE,uBAAuB,EAAE,MAAM,8DAA8D,CAAC;AACvG,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAC1F,OAAO,EAAC,sBAAsB,EAAC,MAAM,yCAAyC,CAAC;AAwCxE,IAAM,eAAe,GAArB,MAAM,eAAe;IAE1B;QACE,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC/C,CAAC;CACF,CAAA;AALY,eAAe;IAtC3B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,eAAe,CAAC,QAAQ,EAAE;YAE1B,aAAa;YACb,aAAa;YACb,oBAAoB;YACpB,aAAa;YAEb,qBAAqB;YACrB,oBAAoB;YACpB,wBAAwB;YACxB,kBAAkB;YAClB,sBAAsB;SAEvB;QACD,YAAY,EAAE;YACZ,YAAY;YACZ,UAAU;YACV,WAAW;YACX,YAAY;YACZ,eAAe;YACf,aAAa;YACb,cAAc;YACd,yBAAyB;YACzB,uBAAuB;YACvB,mBAAmB;SACpB;QACD,OAAO,EAAE;YACP,aAAa;YACb,YAAY;YACZ,YAAY;YACZ,UAAU;YACV,eAAe;YACf,mBAAmB;SACpB;KACF,CAAC;;GACW,eAAe,CAK3B;SALY,eAAe"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sample.validator.js b/out-tsc/app/app/trip/sample/sample.validator.js new file mode 100644 index 000000000..26556f762 --- /dev/null +++ b/out-tsc/app/app/trip/sample/sample.validator.js @@ -0,0 +1,118 @@ +import { __decorate, __metadata, __param } from "tslib"; +import { Injectable, Optional } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { AppFormArray, SharedFormGroupValidators, SharedValidators, toNumber } from '@sumaris-net/ngx-components'; +import { Sample } from './sample.model'; +import { TranslateService } from '@ngx-translate/core'; +import { ImageAttachmentValidator } from '@app/data/image/image-attachment.validator'; +import { ImageAttachment } from '@app/data/image/image-attachment.model'; +import { BaseValidatorService } from '@app/shared/service/base.validator.service'; +import { QualityFlagIds } from '@app/referential/services/model/model.enum'; +let SampleValidatorService = class SampleValidatorService extends BaseValidatorService { + constructor(formBuilder, translate, imageAttachmentValidator) { + super(formBuilder, translate); + this.formBuilder = formBuilder; + this.translate = translate; + this.imageAttachmentValidator = imageAttachmentValidator; + } + getFormGroupConfig(data, opts) { + const config = { + __typename: [Sample.TYPENAME], + id: [toNumber(data && data.id, null)], + updateDate: [data && data.updateDate || null], + creationDate: [data && data.creationDate || null], + rankOrder: [toNumber(data && data.rankOrder, null), Validators.required], + label: [data && data.label || null, (!opts || opts.requiredLabel !== false) ? Validators.required : null], + individualCount: [toNumber(data && data.individualCount, null), Validators.compose([Validators.min(0), SharedValidators.integer])], + sampleDate: [data && data.sampleDate || null, Validators.required], + taxonGroup: [data && data.taxonGroup || null, SharedValidators.entity], + taxonName: [data && data.taxonName || null, SharedValidators.entity], + matrixId: [toNumber(data && data.matrixId, null)], + batchId: [toNumber(data && data.batchId, null)], + size: [toNumber(data && data.size, null)], + sizeUnit: [data && data.sizeUnit || null], + comments: [data && data.comments || null], + children: this.formBuilder.array([]), + parent: [data && data.parent || null, SharedValidators.entity], + // Quality properties + controlDate: [data && data.controlDate || null], + validationDate: [data && data.validationDate || null], + qualificationDate: [data && data.qualificationDate || null], + qualificationComments: [data && data.qualificationComments || null], + qualityFlagId: [toNumber(data && data.qualityFlagId, QualityFlagIds.NOT_QUALIFIED)], + }; + // Add children form array + if (!opts || opts.withChildren !== false) { + config['children'] = this.formBuilder.array([]); + } + // Add measurement values + if (!opts || opts.measurementValuesAsGroup !== false) { + config['measurementValues'] = this.formBuilder.group({}); + } + else { + config['measurementValues'] = this.formBuilder.control((data === null || data === void 0 ? void 0 : data.measurementValues) || null); + } + // Add image attachments + if (this.imageAttachmentValidator && ((opts === null || opts === void 0 ? void 0 : opts.withImages) === true)) { + config['images'] = this.getImagesFormArray(data === null || data === void 0 ? void 0 : data.images); + } + return config; + } + getFormGroupOptions(data, opts) { + return { + validators: [ + SharedFormGroupValidators.requiredIfEmpty('taxonGroup', 'taxonName'), + SharedFormGroupValidators.requiredIfEmpty('taxonName', 'taxonGroup') + ] + }; + } + updateFormGroup(form, opts) { + console.debug('[sample-validator] Updating form group...', opts); + // Label required validator + const labelControl = form.get('label'); + if ((!opts || opts.requiredLabel !== false)) { + if (labelControl && !labelControl.hasValidator(Validators.required)) { + labelControl.setValidators(Validators.required); + } + } + else if (labelControl && labelControl.hasValidator(Validators.required)) { + labelControl.removeValidators(Validators.required); + } + // Add image attachments + let imageFormArray = form.get('images'); + if (this.imageAttachmentValidator && ((opts === null || opts === void 0 ? void 0 : opts.withImages) === true)) { + if (!imageFormArray) { + imageFormArray = this.getImagesFormArray(); + form.addControl('images', imageFormArray); + } + } + else if (imageFormArray) { + form.removeControl('images'); + } + } + getI18nError(errorKey, errorContent) { + if (SAMPLE_VALIDATOR_I18N_ERROR_KEYS[errorKey]) + return this.translate.instant(SAMPLE_VALIDATOR_I18N_ERROR_KEYS[errorKey], errorContent); + return super.getI18nError(errorKey, errorContent); + } + getImagesFormArray(data, opts) { + const formArray = new AppFormArray((image) => this.imageAttachmentValidator.getFormGroup(image), ImageAttachment.equals, ImageAttachment.isEmpty); + if (data) + formArray.patchValue(data); + return formArray; + } +}; +SampleValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __param(2, Optional()), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + ImageAttachmentValidator]) +], SampleValidatorService); +export { SampleValidatorService }; +export const SAMPLE_VALIDATOR_I18N_ERROR_KEYS = { + missingWeightOrSize: 'TRIP.SAMPLE.ERROR.WEIGHT_OR_LENGTH_REQUIRED', + tagIdLength: 'TRIP.SAMPLE.ERROR.INVALID_TAG_ID_LENGTH', + outOfRange: 'TRIP.SAMPLE.ERROR.OUT_OF_RANGE', +}; +//# sourceMappingURL=sample.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sample.validator.js.map b/out-tsc/app/app/trip/sample/sample.validator.js.map new file mode 100644 index 000000000..6dd394576 --- /dev/null +++ b/out-tsc/app/app/trip/sample/sample.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sample.validator.js","sourceRoot":"","sources":["../../../../../src/app/trip/sample/sample.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/samples.modal.js b/out-tsc/app/app/trip/sample/samples.modal.js new file mode 100644 index 000000000..a375b8669 --- /dev/null +++ b/out-tsc/app/app/trip/sample/samples.modal.js @@ -0,0 +1,203 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input, ViewChild } from '@angular/core'; +import { AppFormUtils, LocalSettingsService, toBoolean } from '@sumaris-net/ngx-components'; +import { environment } from '@environments/environment'; +import { ModalController } from '@ionic/angular'; +import { BehaviorSubject } from 'rxjs'; +import { TranslateService } from '@ngx-translate/core'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { SamplesTable } from './samples.table'; +import { TaxonGroupRef } from '@app/referential/services/model/taxon-group.model'; +let SamplesModal = class SamplesModal { + constructor(injector, viewCtrl, settings, translate, cd) { + this.injector = injector; + this.viewCtrl = viewCtrl; + this.settings = settings; + this.translate = translate; + this.cd = cd; + this.debug = !environment.production; + this.loading = false; + this.$title = new BehaviorSubject(undefined); + this.mobile = this.settings.mobile; + this.isNew = false; + this.showTaxonGroup = true; + this.showTaxonName = true; + this.showLabel = false; + // Default value + this.acquisitionLevel = AcquisitionLevelCodes.SAMPLE; + } + get dirty() { + return this.table.dirty; + } + get enabled() { + return this.table.enabled; + } + get invalid() { + return this.table.invalid; + } + get valid() { + return this.table.valid; + } + get $pmfms() { + return this.table.pmfms$; + } + ngOnInit() { + this.canEdit = toBoolean(this.canEdit, !this.disabled); + this.disabled = !this.canEdit || toBoolean(this.disabled, true); + this.i18nSuffix = this.i18nSuffix || ''; + if (this.disabled) { + this.table.disable(); + } + // Compute the title + this.$title.next(this.title || ''); + // Add callback + this.applyValue(); + } + applyValue() { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[sample-modal] Applying data to form'); + this.table.markAsReady(); + try { + // Set form value + this.data = this.data || []; + this.table.value = this.data; + // Call ready callback + if (this.onReady) { + const promiseOrVoid = this.onReady(this); + if (promiseOrVoid) + yield promiseOrVoid; + } + } + finally { + this.table.markAsUntouched(); + this.table.markAsPristine(); + this.markForCheck(); + } + }); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.viewCtrl.dismiss(); + }); + } + ready() { + return __awaiter(this, void 0, void 0, function* () { + yield this.table.ready(); + }); + } + onSubmit(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.loading) + return; // avoid many call + yield AppFormUtils.waitWhilePending(this.table); + if (this.invalid) { + // if (this.debug) AppFormUtils.logFormErrors(this.table.table., "[sample-modal] "); + this.table.error = 'COMMON.FORM.HAS_ERROR'; + this.table.markAllAsTouched(); + return; + } + this.loading = true; + // Save table content + yield this.table.save(); + const data = this.table.value; + yield this.viewCtrl.dismiss(data); + }); + } + /* -- protected methods -- */ + markForCheck() { + this.cd.markForCheck(); + } + onNewFabButtonClick(event) { + this.table.addRow(event); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesModal.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesModal.prototype, "isNew", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], SamplesModal.prototype, "data", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SamplesModal.prototype, "disabled", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SamplesModal.prototype, "acquisitionLevel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SamplesModal.prototype, "programLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], SamplesModal.prototype, "pmfms", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SamplesModal.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SamplesModal.prototype, "i18nSuffix", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SamplesModal.prototype, "canEdit", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesModal.prototype, "defaultSampleDate", void 0); +__decorate([ + Input(), + __metadata("design:type", TaxonGroupRef) +], SamplesModal.prototype, "defaultTaxonGroup", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesModal.prototype, "showTaxonGroup", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesModal.prototype, "showTaxonName", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesModal.prototype, "showLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SamplesModal.prototype, "title", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], SamplesModal.prototype, "onReady", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], SamplesModal.prototype, "onDelete", void 0); +__decorate([ + ViewChild('table', { static: true }), + __metadata("design:type", SamplesTable) +], SamplesModal.prototype, "table", void 0); +SamplesModal = __decorate([ + Component({ + selector: 'app-samples-modal', + templateUrl: 'samples.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + ModalController, + LocalSettingsService, + TranslateService, + ChangeDetectorRef]) +], SamplesModal); +export { SamplesModal }; +//# sourceMappingURL=samples.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/samples.modal.js.map b/out-tsc/app/app/trip/sample/samples.modal.js.map new file mode 100644 index 000000000..0a8541af6 --- /dev/null +++ b/out-tsc/app/app/trip/sample/samples.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"samples.modal.js","sourceRoot":"","sources":["../../../../../src/app/trip/sample/samples.modal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAU,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1H,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,SAAS,EAAa,MAAM,6BAA6B,CAAC;AACvG,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAc,MAAM,MAAM,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAwB,MAAM,4CAA4C,CAAC;AAEzG,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI/C,OAAO,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAC;AAsB3E,IAAM,YAAY,GAAlB,MAAM,YAAY;IAiDvB,YACY,QAAkB,EAClB,QAAyB,EACzB,QAA8B,EAC9B,SAA2B,EAC3B,EAAqB;QAJrB,aAAQ,GAAR,QAAQ,CAAU;QAClB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,cAAS,GAAT,SAAS,CAAkB;QAC3B,OAAE,GAAF,EAAE,CAAmB;QApDxB,UAAK,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;QACzC,YAAO,GAAG,KAAK,CAAC;QAChB,WAAM,GAAG,IAAI,eAAe,CAAS,SAAS,CAAC,CAAC;QAEvC,WAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC9B,UAAK,GAAG,KAAK,CAAC;QAad,mBAAc,GAAG,IAAI,CAAC;QACtB,kBAAa,GAAG,IAAI,CAAC;QACrB,cAAS,GAAG,KAAK,CAAC;QAkCzB,gBAAgB;QAChB,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,MAAM,CAAC;IACvD,CAAC;IA7BD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAaD,QAAQ;QACN,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;QAExC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;SACtB;QAED,oBAAoB;QACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAEnC,eAAe;QACf,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAEK,UAAU;;YACd,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAEtD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YAEzB,IAAI;gBACF,iBAAiB;gBACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;gBAE7B,sBAAsB;gBACtB,IAAI,IAAI,CAAC,OAAO,EAAE;oBAChB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACzC,IAAI,aAAa;wBAAE,MAAM,aAAa,CAAC;iBACxC;aACF;oBACO;gBACN,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;gBAC7B,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;gBAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;QACH,CAAC;KAAA;IAEK,MAAM;;YACV,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAChC,CAAC;KAAA;IAEK,KAAK;;YACT,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;KAAA;IAEK,QAAQ,CAAC,KAAa;;YAC1B,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO,CAAC,kBAAkB;YAE5C,MAAM,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEhD,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,oFAAoF;gBACpF,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,uBAAuB,CAAC;gBAC3C,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBAC9B,OAAO;aACR;YAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YAEpB,qBAAqB;YACrB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAE9B,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;KAAA;IAED,6BAA6B;IAEnB,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;IAED,mBAAmB,CAAC,KAAY;QAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;CAEF,CAAA;AApIC;IAAC,KAAK,EAAE;;4CAA+B;AACvC;IAAC,KAAK,EAAE;;2CAAe;AACvB;IAAC,KAAK,EAAE;;0CAAgB;AACxB;IAAC,KAAK,EAAE;;8CAAmB;AAC3B;IAAC,KAAK,EAAE;;sDAAwC;AAChD;IAAC,KAAK,EAAE;;kDAAsB;AAC9B;IAAC,KAAK,EAAE;;2CAAgB;AACxB;IAAC,KAAK,EAAE;;+CAAsB;AAC9B;IAAC,KAAK,EAAE;;gDAAoB;AAE5B;IAAC,KAAK,EAAE;;6CAAkB;AAE1B;IAAC,KAAK,EAAE;;uDAA2B;AACnC;IAAC,KAAK,EAAE;8BAAoB,aAAa;uDAAC;AAC1C;IAAC,KAAK,EAAE;;oDAAuB;AAC/B;IAAC,KAAK,EAAE;;mDAAsB;AAC9B;IAAC,KAAK,EAAE;;+CAAmB;AAC3B;IAAC,KAAK,EAAE;;2CAAe;AACvB;IAAC,KAAK,EAAE;;6CAAwD;AAChE;IAAC,KAAK,EAAE;;8CAA8D;AAEtE;IAAC,SAAS,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;8BAAQ,YAAY;2CAAC;AA3B/C,YAAY;IALxB,SAAS,CAAC;QACT,QAAQ,EAAE,mBAAmB;QAC7B,WAAW,EAAE,oBAAoB;QACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAmDsB,QAAQ;QACR,eAAe;QACf,oBAAoB;QACnB,gBAAgB;QACvB,iBAAiB;GAtDtB,YAAY,CA0IxB;SA1IY,YAAY"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/samples.table.js b/out-tsc/app/app/trip/sample/samples.table.js new file mode 100644 index 000000000..a216e2a60 --- /dev/null +++ b/out-tsc/app/app/trip/sample/samples.table.js @@ -0,0 +1,1075 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, EventEmitter, Injector, Input, Output } from '@angular/core'; +import { SampleValidatorService } from './sample.validator'; +import { SamplingStrategyService } from '@app/referential/services/sampling-strategy.service'; +import { AppFormUtils, AppValidatorService, DateUtils, firstNotNilPromise, getPropertyByPath, InMemoryEntitiesService, isEmptyArray, isNil, isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrBlank, isNotNilOrNaN, LocalSettingsService, NetworkService, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, suggestFromArray, toBoolean, toNumber, } from '@sumaris-net/ngx-components'; +import { BaseMeasurementsTable } from '@app/data/measurement/measurements-table.class'; +import { SampleModal } from './sample.modal'; +import { TaxonGroupRef } from '@app/referential/services/model/taxon-group.model'; +import { Sample, SampleUtils } from './sample.model'; +import { AcquisitionLevelCodes, ParameterGroups, PmfmIds } from '@app/referential/services/model/model.enum'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { environment } from '@environments/environment'; +import { debounceTime } from 'rxjs/operators'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { SampleFilter } from './sample.filter'; +import { PmfmService } from '@app/referential/services/pmfm.service'; +import { SelectPmfmModal } from '@app/referential/pmfm/table/select-pmfm.modal'; +import { BehaviorSubject } from 'rxjs'; +import { TaxonNameRef } from '@app/referential/services/model/taxon-name.model'; +import { arrayPluck } from '@app/shared/functions'; +import { DenormalizedPmfmStrategy } from '@app/referential/services/model/pmfm-strategy.model'; +import { BatchGroup } from '@app/trip/batch/group/batch-group.model'; +import { SubSampleModal } from '@app/trip/sample/sub-sample.modal'; +import { PmfmFilter } from '@app/referential/services/filter/pmfm.filter'; +import { MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { AppImageAttachmentsModal } from '@app/data/image/image-attachment.modal'; +import { DataEntityUtils } from '@app/data/services/model/data-entity.model'; +export const SAMPLE_RESERVED_START_COLUMNS = ['label', 'taxonGroup', 'taxonName', 'sampleDate']; +export const SAMPLE_RESERVED_END_COLUMNS = ['comments', 'images']; +export const SAMPLE_TABLE_DEFAULT_I18N_PREFIX = 'TRIP.SAMPLE.TABLE.'; +let SamplesTable = class SamplesTable extends BaseMeasurementsTable { + constructor(injector, samplingStrategyService) { + super(injector, Sample, SampleFilter, new InMemoryEntitiesService(Sample, SampleFilter, { + onSave: (data) => this.onSave(data), + equals: Sample.equals, + sortByReplacement: { id: 'rankOrder' } + }), injector.get(LocalSettingsService).mobile ? null : injector.get(SampleValidatorService), { + reservedStartColumns: SAMPLE_RESERVED_START_COLUMNS, + reservedEndColumns: SAMPLE_RESERVED_END_COLUMNS, + requiredStrategy: false, + i18nColumnPrefix: 'TRIP.SAMPLE.TABLE.', + i18nPmfmPrefix: 'TRIP.SAMPLE.PMFM.', + // Cannot override mapPmfms (by options) + mapPmfms: (pmfms) => this.mapPmfms(pmfms), + onPrepareRowForm: (form) => this.onPrepareRowForm(form) + }); + this.samplingStrategyService = samplingStrategyService; + this.$pmfmGroups = new BehaviorSubject(null); + this.pmfmGroupColumns$ = new BehaviorSubject([]); + this.groupHeaderColumnNames = []; + this.footerColumns = ['footer-start']; + this.tagCount$ = new BehaviorSubject(0); + this.showGroupHeader = false; + this.useSticky = false; + this.useFooterSticky = false; + this.canAddPmfm = false; + this.showError = true; + this.showIdColumn = true; + this.showLabelColumn = false; + this.requiredLabel = true; + this.showPmfmDetails = false; + this.showFabButton = false; + this.showIndividualMonitoringButton = false; + this.showIndividualReleaseButton = false; + this.defaultSampleDate = null; + this.defaultTaxonGroup = null; + this.defaultTaxonName = null; + this.compactFields = true; + this.showDisplayColumnModal = true; + this.enableTagIdGeneration = false; + this.tagIdMinLength = 4; + this.tagIdPadString = '0'; + this.allowSubSamples = false; + this.showReadonlyPmfms = true; + this.pmfmValueColor = null; + this.availableTaxonGroups = null; + this.prepareRowForm = new EventEmitter(); + this.weightUnitChanges = new EventEmitter(); + this.selectInputContent = AppFormUtils.selectInputContent; + this.isIndividualMonitoring = SampleUtils.isIndividualMonitoring; + this.isIndividualRelease = SampleUtils.isIndividualRelease; + this.referentialRefService = injector.get(ReferentialRefService); + this.pmfmService = injector.get(PmfmService); + this.networkService = injector.get(NetworkService); + this.confirmBeforeDelete = false; + this.confirmBeforeCancel = false; + this.undoableDeletion = false; + this.saveBeforeSort = true; + this.saveBeforeFilter = true; + this.propagateRowError = true; + this.errorTranslatorOptions = { separator: '\n', controlPathTranslator: this }; + // Set default value + this.acquisitionLevel = null; // Avoid load to early. Need sub classes to set it + this.excludesColumns = ['images']; // Hide images by default + //this.debug = false; + this.debug = !environment.production; + this.logPrefix = '[samples-table] '; + } + set pmfmGroups(value) { + if (this.$pmfmGroups.value !== value) { + if (value && Object.keys(value).length) { + this.showGroupHeader = true; + } + else { + this.showGroupHeader = false; + } + this.$pmfmGroups.next(value); + } + } + get pmfmGroups() { + return this.$pmfmGroups.getValue(); + } + set value(data) { + this.memoryDataService.value = data; + } + get value() { + return this.memoryDataService.value; + } + set showSampleDateColumn(value) { + this.setShowColumn('sampleDate', value); + } + get showSampleDateColumn() { + return this.getShowColumn('sampleDate'); + } + set showTaxonGroupColumn(value) { + this.setShowColumn('taxonGroup', value); + } + get showTaxonGroupColumn() { + return this.getShowColumn('taxonGroup'); + } + set showTaxonNameColumn(value) { + this.setShowColumn('taxonName', value); + } + get showTaxonNameColumn() { + return this.getShowColumn('taxonName'); + } + set showImagesColumn(value) { + this.setShowColumn('images', value); + } + get showImagesColumn() { + return this.getShowColumn('images'); + } + getRowError(row, opts) { + return super.getRowError(row, opts); + } + setModalOption(key, value) { + this.modalOptions = this.modalOptions || {}; + this.modalOptions[key] = value; + } + getModalOption(key) { + return this.modalOptions[key]; + } + get tagIdGenerationMode() { + return this.enableTagIdGeneration ? (this.forcedTagIdGenerationMode || this.defaultTagIdGenerationMode) : 'none'; + } + ngOnInit() { + this.inlineEdition = !this.readOnly && this.validatorService && !this.mobile; + this.allowRowDetail = !this.inlineEdition; + this.usageMode = this.usageMode || this.settings.usageMode; + this.showToolbar = toBoolean(this.showToolbar, !this.showGroupHeader); + this.defaultTagIdGenerationMode = this.defaultTagIdGenerationMode || 'none'; + // Always add a confirmation before deletion, if mobile + if (this.mobile) + this.confirmBeforeDelete = true; + super.ngOnInit(); + // Add footer listener + this.registerSubscription(this.pmfms$.subscribe(pmfms => this.addFooterListener(pmfms))); + } + ngAfterViewInit() { + super.ngAfterViewInit(); + this.setShowColumn('label', this.showLabelColumn); + this.setShowColumn('comments', this.showCommentsColumn); + // Taxon group combo + this.registerAutocompleteField('taxonGroup', { + suggestFn: (value, options) => this.suggestTaxonGroups(value, options), + mobile: this.mobile + }); + // Taxon name combo + this.registerAutocompleteField('taxonName', { + suggestFn: (value, options) => this.suggestTaxonNames(value, options), + showAllOnFocus: this.showTaxonGroupColumn /*show all, because limited to taxon group*/, + mobile: this.mobile + }); + } + ngOnDestroy() { + var _a; + super.ngOnDestroy(); + (_a = this.memoryDataService) === null || _a === void 0 ? void 0 : _a.stop(); + this.prepareRowForm.complete(); + this.prepareRowForm.unsubscribe(); + this.$pmfmGroups.complete(); + this.$pmfmGroups.unsubscribe(); + this.pmfmGroupColumns$.complete(); + this.pmfmGroupColumns$.unsubscribe(); + this.memoryDataService.stop(); + } + configureValidator(opts) { + super.configureValidator(opts); + this.validatorService.delegateOptions = { withImages: this.showImagesColumn, requiredLabel: this.requiredLabel }; + } + onPrepareRowForm(form, opts) { + if (this.validatorService) { + this.validatorService.updateFormGroup(form); + } + this.prepareRowForm.emit(Object.assign({ form, pmfms: this.pmfms, markForCheck: () => this.markForCheck() }, opts)); + } + deleteSelection(event, opts) { + // FIXME -cf issue #454 + //console.debug('FIXME check deleteSelection') + return super.deleteSelection(event, opts); + } + /** + * Use in ngFor, for trackBy + * + * @param index + * @param column + */ + trackColumnDef(index, column) { + return column.key; + } + setSubSampleModalOption(key, value) { + this.subSampleModalOptions = this.subSampleModalOptions || {}; + this.subSampleModalOptions[key] = value; + } + onSave(data) { + return __awaiter(this, void 0, void 0, function* () { + if (this.debug) + console.debug('[samples-table] Preparing data to be saved...'); + data = data.map(entity => { + this.prepareEntityToSave(entity); + return entity; + }); + return data; + }); + } + // Change visibility to public + setError(error, opts) { + // if duplicated error + if (error && isNotEmptyArray(opts === null || opts === void 0 ? void 0 : opts.duplicatedValues)) { + const duplicatedValuePath = opts.duplicatedValuePath || this.tagIdPmfm && `measurementValues.${this.tagIdPmfm.id}`; + const rowsWithDuplicatedValue = this.dataSource.getRows() + .filter(row => { + const value = getPropertyByPath(row.currentData, duplicatedValuePath); + return opts.duplicatedValues.includes(value); + }); + if (isNotEmptyArray(rowsWithDuplicatedValue)) { + const tagIdPmfmName = this.getI18nPmfmName(this.tagIdPmfm); + const errorMessage = this.translate.instant('TRIP.SAMPLE.ERROR.DUPLICATED_TAG_ID', { name: tagIdPmfmName === null || tagIdPmfmName === void 0 ? void 0 : tagIdPmfmName.toLowerCase() }); + // For each rows, test if has duplicated tag id and mark it if so + Promise.all(rowsWithDuplicatedValue.map(row => { + const entity = row.currentData; + DataEntityUtils.markAsInvalid(entity, errorMessage); + return this.updateEntityToTable(entity, row, { confirmEdit: !row.editing }); + })) + .then(() => { + this.showError = true; + }); + super.setError(error, opts); + return; + } + } + else { + this.showError = false; + super.setError(error, opts); + } + } + openDetailModal(dataToOpen, row) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[samples-table] Opening detail modal...'); + const pmfms = yield firstNotNilPromise(this.pmfms$, { stop: this.destroySubject }); + let isNew = !dataToOpen && true; + if (isNew) { + dataToOpen = new Sample(); + yield this.onNewEntity(dataToOpen); + } + this.markAsLoading(); + const options = Object.assign(Object.assign({ + // Default options: + programLabel: undefined, // Prefer to pass PMFMs directly, to avoid a reloading + pmfms, acquisitionLevel: this.acquisitionLevel, disabled: this.disabled, i18nSuffix: this.i18nColumnSuffix, usageMode: this.usageMode, mobile: this.mobile, availableTaxonGroups: this.availableTaxonGroups, defaultSampleDate: this.defaultSampleDate, requiredLabel: this.requiredLabel, showLabel: this.showLabelColumn, showSampleDate: !this.defaultSampleDate ? true : this.showSampleDateColumn, showTaxonGroup: this.showTaxonGroupColumn, showTaxonName: this.showTaxonNameColumn, showIndividualMonitoringButton: this.allowSubSamples && this.showIndividualMonitoringButton || false, showIndividualReleaseButton: this.allowSubSamples && this.showIndividualReleaseButton || false, showPictures: this.showImagesColumn, pmfmValueColor: this.pmfmValueColor, onReady: (modal) => { + this.onPrepareRowForm(modal.form.form, { + pmfms, + markForCheck: () => modal.markForCheck() + }); + }, onDelete: (event, data) => this.deleteEntity(event, data), onSaveAndNew: (dataToSave) => __awaiter(this, void 0, void 0, function* () { + if (isNew) { + yield this.addEntityToTable(dataToSave, { editing: false }); + } + else { + yield this.updateEntityToTable(dataToSave, row, { confirmEdit: true }); + row = null; // Forget the row to update, for the next iteration (should never occur, because onSubmitAndNext always create a new entity) + } + // Prepare new sample + const newData = new Sample(); + yield this.onNewEntity(newData); + isNew = true; // Next row should be new + return newData; + }), openSubSampleModal: (parent, acquisitionLevel) => this.openSubSampleModalFromRootModal(parent, acquisitionLevel) }, this.modalOptions), { + // Data to open + isNew, data: dataToOpen }); + const modal = yield this.modalCtrl.create({ + component: SampleModal, + componentProps: options, + keyboardClose: true, + backdropDismiss: false, + cssClass: 'modal-large' + }); + // Open the modal + yield modal.present(); + // Wait until closed + const { data, role } = yield modal.onDidDismiss(); + if (data && this.debug) + console.debug('[samples-table] Sample modal result: ', data, role); + this.markAsLoaded(); + return { data: (data instanceof Sample ? data : undefined), role }; + }); + } + onIndividualMonitoringClick(event, row) { + return __awaiter(this, void 0, void 0, function* () { + return this.onSubSampleButtonClick(event, row, AcquisitionLevelCodes.INDIVIDUAL_MONITORING); + }); + } + onIndividualReleaseClick(event, row) { + return __awaiter(this, void 0, void 0, function* () { + return this.onSubSampleButtonClick(event, row, AcquisitionLevelCodes.INDIVIDUAL_RELEASE); + }); + } + onSubSampleButtonClick(event, row, acquisitionLevel) { + return __awaiter(this, void 0, void 0, function* () { + if (event) + event.preventDefault(); + console.debug(`[samples-table] onSubSampleButtonClick() on ${acquisitionLevel}`); + // Loading spinner + this.markAsLoading(); + try { + const parent = this.toEntity(row); + const { data, role } = yield this.openSubSampleModal(parent, { acquisitionLevel }); + if (isNil(data)) + return; // User cancelled + if (role === 'DELETE') { + parent.children = SampleUtils.removeChild(parent, data); + } + else { + parent.children = SampleUtils.insertOrUpdateChild(parent, data, acquisitionLevel); + } + if (row.validator) { + row.validator.patchValue({ children: parent.children }); + } + else { + row.currentData.children = parent.children.slice(); // Force pipes update + this.markAsDirty(); + } + } + finally { + this.markAsLoaded(); + } + }); + } + openSubSampleModalFromRootModal(parent, acquisitionLevel) { + return __awaiter(this, void 0, void 0, function* () { + if (!parent || !acquisitionLevel) + throw Error('Missing \'parent\' or \'acquisitionLevel\' arguments'); + // Make sure the row exists + this.editedRow = (this.editedRow && BatchGroup.equals(this.editedRow.currentData, parent) && this.editedRow) + || (yield this.findRowByEntity(parent)) + // Or add it to table, if new + || (yield this.addEntityToTable(parent, { confirmCreate: false /*keep row editing*/ })); + const { data, role } = yield this.openSubSampleModal(parent, { acquisitionLevel }); + if (isNil(data)) + return; // User cancelled + if (role === 'DELETE') { + parent.children = SampleUtils.removeChild(parent, data); + } + else { + parent.children = SampleUtils.insertOrUpdateChild(parent, data, acquisitionLevel); + } + // Return the updated parent + return parent; + }); + } + openSubSampleModal(parentSample, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const showParent = opts && opts.showParent === true; // False by default + const acquisitionLevel = (opts === null || opts === void 0 ? void 0 : opts.acquisitionLevel) || AcquisitionLevelCodes.INDIVIDUAL_MONITORING; + console.debug(`[samples-table] Opening sub-sample modal for {acquisitionLevel: ${acquisitionLevel}}`); + const children = SampleUtils.filterByAcquisitionLevel(parentSample.children || [], acquisitionLevel); + const isNew = !children || children.length === 0; + let subSample; + if (isNew) { + subSample = new Sample(); + } + else { + subSample = children[0]; + } + // Make sure to set the parent + subSample.parent = parentSample.asObject({ withChildren: false }); + const hasTopModal = !!(yield this.modalCtrl.getTop()); + const modal = yield this.modalCtrl.create({ + component: SubSampleModal, + componentProps: Object.assign({ programLabel: this.programLabel, usageMode: this.usageMode, acquisitionLevel, + isNew, data: subSample, showParent, i18nSuffix: this.i18nColumnSuffix, defaultLatitudeSign: this.defaultLatitudeSign, defaultLongitudeSign: this.defaultLongitudeSign, showLabel: false, disabled: this.disabled, maxVisibleButtons: (_a = this.modalOptions) === null || _a === void 0 ? void 0 : _a.maxVisibleButtons, mobile: this.mobile, onDelete: (_, __) => Promise.resolve(true) }, this.subSampleModalOptions), + backdropDismiss: false, + keyboardClose: true, + cssClass: hasTopModal ? 'modal-large stack-modal' : 'modal-large' + }); + // Open the modal + yield modal.present(); + // Wait until closed + const { data, role } = yield modal.onDidDismiss(); + // User cancelled + if (isNil(data)) { + if (this.debug) + console.debug('[sample-table] Sub-sample modal: user cancelled'); + } + else { + // DEBUG + if (this.debug) + console.debug('[sample-table] Sub-sample modal result: ', data, role); + } + return { data, role }; + }); + } + filterColumnsByTaxonGroup(taxonGroup) { + const toggleLoading = !this.loading; + if (toggleLoading) + this.markAsLoading(); + try { + const taxonGroupId = toNumber(taxonGroup && taxonGroup.id, null); + (this.pmfms || []).forEach(pmfm => { + const show = isNil(taxonGroupId) + || !PmfmUtils.isDenormalizedPmfm(pmfm) + || (isEmptyArray(pmfm.taxonGroupIds) || pmfm.taxonGroupIds.includes(taxonGroupId)); + this.setShowColumn(pmfm.id.toString(), show); + }); + this.updateColumns(); + } + finally { + if (toggleLoading) + this.markAsLoaded(); + } + } + openAddPmfmsModal(event) { + return __awaiter(this, void 0, void 0, function* () { + // If pending rows, save first + if (this.dirty) { + const saved = yield this.save(); + if (!saved) + return; + } + const existingPmfmIds = (this.pmfms || []).map(p => p.id).filter(isNotNil); + const pmfmIds = yield this.openSelectPmfmsModal(event, { + excludedIds: existingPmfmIds + }, { + allowMultiple: false + }); + if (isEmptyArray(pmfmIds)) + return; // User cancelled + console.debug('[samples-table] Adding pmfm ids:', pmfmIds); + yield this.addPmfmColumns(pmfmIds); + }); + } + /** + * Not used yet. Implementation must manage stored samples values and different pmfms types (number, string, qualitative values...) + * + * @param event + */ + openChangePmfmsModal(event) { + return __awaiter(this, void 0, void 0, function* () { + const existingPmfmIds = (this.pmfms || []).map(p => p.id).filter(isNotNil); + const pmfmIds = yield this.openSelectPmfmsModal(event, { + excludedIds: existingPmfmIds + }, { + allowMultiple: false + }); + if (!pmfmIds) + return; // USer cancelled + }); + } + openImagesModal(event, row) { + return __awaiter(this, void 0, void 0, function* () { + const images = row.currentData.images; + // Skip if no images to display + if (this.disabled && isEmptyArray(images)) + return; + event.stopPropagation(); + const modal = yield this.modalCtrl.create({ + component: AppImageAttachmentsModal, + componentProps: { + data: images, + disabled: this.disabled + }, + keyboardClose: true, + cssClass: 'modal-large' + }); + yield modal.present(); + const { data, role } = yield modal.onDidDismiss(); + // User cancel + if (isNil(data) || this.disabled) + return; + if (this.inlineEdition && row.validator) { + const formArray = row.validator.get('images'); + formArray.patchValue(data); + row.validator.markAsDirty(); + this.confirmEditCreate(); + this.markAsDirty(); + } + else { + row.currentData.images = data; + this.markAsDirty(); + } + }); + } + /* -- protected methods -- */ + suggestTaxonGroups(value, options) { + return __awaiter(this, void 0, void 0, function* () { + if (isNotEmptyArray(this.availableTaxonGroups)) { + return suggestFromArray(this.availableTaxonGroups, value, options); + } + return this.programRefService.suggestTaxonGroups(value, { + program: this.programLabel, + searchAttribute: options && options.searchAttribute + }); + }); + } + suggestTaxonNames(value, options) { + return __awaiter(this, void 0, void 0, function* () { + const taxonGroup = this.editedRow && this.editedRow.validator.get('taxonGroup').value; + // IF taxonGroup column exists: taxon group must be filled first + if (this.showTaxonGroupColumn && isNilOrBlank(value) && isNil(taxonGroup)) + return { data: [] }; + return this.programRefService.suggestTaxonNames(value, { + programLabel: this.programLabel, + searchAttribute: options && options.searchAttribute, + taxonGroupId: taxonGroup && taxonGroup.id || undefined + }); + }); + } + onNewEntity(data) { + const _super = Object.create(null, { + onNewEntity: { get: () => super.onNewEntity } + }); + return __awaiter(this, void 0, void 0, function* () { + console.debug('[sample-table] Initializing new row data...'); + yield _super.onNewEntity.call(this, data); + // Init measurement values + data.measurementValues = data.measurementValues || {}; + // generate label + if (!this.showLabelColumn && this.requiredLabel) { + data.label = `${this.acquisitionLevel || ''}#${data.rankOrder}`; + } + // Default date + if (isNotNil(this.defaultSampleDate)) { + data.sampleDate = this.defaultSampleDate; + } + else { + if (this.settings.isOnFieldMode(this.usageMode)) { + data.sampleDate = DateUtils.moment(); + } + } + // Default taxon name + if (isNotNil(this.defaultTaxonName)) { + data.taxonName = TaxonNameRef.fromObject(this.defaultTaxonName); + } + // Default taxon group + if (isNotNil(this.defaultTaxonGroup)) { + data.taxonGroup = TaxonGroupRef.fromObject(this.defaultTaxonGroup); + } + // Get the previous sample + const previousSample = this.getPreviousSample(); + // server call for first sample and increment from server call value + let tagIdGenerationMode = this.tagIdGenerationMode; + if (this.tagIdPmfm && tagIdGenerationMode !== 'none') { + // Force previous row, if offline + if (this.networkService.offline || !this.strategyLabel || this.tagIdMinLength <= 0) { + tagIdGenerationMode = 'previousRow'; + } + let newTagId = null; + const previousTagId = this.getPreviousTagId(); + console.debug(`[samples-table] Generating new TAG_ID (mode: ${tagIdGenerationMode}, previous: ${previousTagId})`); + switch (tagIdGenerationMode) { + // Previous row + 1 + case 'previousRow': + if (isNotNilOrNaN(previousTagId)) { + newTagId = (previousTagId + 1).toString().padStart(this.tagIdMinLength, '0'); + } + break; + // Remote generation + case 'remote': + const nextTagIdComplete = yield this.samplingStrategyService.computeNextSampleTagId(this.strategyLabel, '-', this.tagIdMinLength); + const nextTagIdSuffix = parseInt(nextTagIdComplete.slice(-1 * this.tagIdMinLength)); + newTagId = String(isNotNilOrNaN(previousTagId) ? Math.max(nextTagIdSuffix, previousTagId + 1) : nextTagIdSuffix) + .padStart(this.tagIdMinLength, '0'); + break; + } + data.measurementValues[PmfmIds.TAG_ID] = newTagId; + } + // Copy some value from previous sample + if (previousSample && isNotEmptyArray(this.existingPmfmIdsToCopy)) { + this.existingPmfmIdsToCopy + .forEach(pmfmId => { + if (isNilOrBlank(data.measurementValues[pmfmId])) { + data.measurementValues[pmfmId] = previousSample.measurementValues[pmfmId]; + } + }); + } + // Reset __typename, to force normalization of all values + MeasurementValuesUtils.resetTypename(data.measurementValues); + data.measurementValues = MeasurementValuesUtils.normalizeValuesToForm(data.measurementValues, this.pmfms, { keepSourceObject: true }); + }); + } + getPreviousSample() { + if (isNil(this.visibleRowCount) || this.visibleRowCount === 0) + return undefined; + const row = this.dataSource.getRow(this.visibleRowCount - 1); + return row === null || row === void 0 ? void 0 : row.currentData; + } + getPreviousTagId() { + if (isNil(this.visibleRowCount) || this.visibleRowCount === 0) + return undefined; + for (let i = this.visibleRowCount - 1; i >= 0; i--) { + const row = this.dataSource.getRow(i); + if (row) { + const rowData = row.currentData; + const existingTagId = toNumber(rowData === null || rowData === void 0 ? void 0 : rowData.measurementValues[PmfmIds.TAG_ID]); + if (isNotNilOrNaN(existingTagId)) + return existingTagId; + } + } + return undefined; + } + openNewRowDetail() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail) + return false; + const { data, role } = yield this.openDetailModal(); + if (data && role !== 'delete') { + // Can be an update (is user use the 'save and new' modal's button), + yield this.addOrUpdateEntityToTable(data); + return true; + } + else { + this.editedRow = null; + return false; + } + }); + } + openRow(id, row) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail) + return false; + if (this.onOpenRow.observers.length) { + this.onOpenRow.emit(row); + return true; + } + const dataToOpen = this.toEntity(row, true); + // Prepare entity measurement values + this.prepareEntityToSave(dataToOpen); + const { data, role } = yield this.openDetailModal(dataToOpen, row); + if (data && role !== 'delete') { + // Can be an update (is user use the 'save and new' modal's button), + yield this.addOrUpdateEntityToTable(data); + return true; + } + else { + this.editedRow = null; + return false; + } + }); + } + prepareEntityToSave(data) { + // Mark as controlled (should remove the duplicated tag id error - see issue #454) + DataEntityUtils.markAsControlled(data); + } + findRowByEntity(data) { + return __awaiter(this, void 0, void 0, function* () { + if (!data || isNil(data.rankOrder)) + throw new Error('Missing argument data or data.rankOrder'); + return this.dataSource.getRows() + .find(r => r.currentData.rankOrder === data.rankOrder); + }); + } + addPmfmColumns(pmfmIds) { + return __awaiter(this, void 0, void 0, function* () { + if (isEmptyArray(pmfmIds)) + return; // Skip if empty + // Load each pmfms, by id + const fullPmfms = yield Promise.all(pmfmIds.map(id => this.pmfmService.loadPmfmFull(id))); + let pmfms = fullPmfms.map(DenormalizedPmfmStrategy.fromFullPmfm); + // Add weight conversion + if (this.weightDisplayedUnit) { + pmfms = PmfmUtils.setWeightUnitConversions(pmfms, this.weightDisplayedUnit, { clone: false }); + console.debug('[samples-table] Add new pmfms: ', pmfms); + } + this.pmfms = [ + ...this.pmfms, + ...pmfms + ]; + }); + } + openSelectPmfmsModal(event, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + const modal = yield this.modalCtrl.create({ + component: SelectPmfmModal, + componentProps: { + filter: PmfmFilter.fromObject(filter), + showFilter: true, + allowMultiple: opts === null || opts === void 0 ? void 0 : opts.allowMultiple + }, + keyboardClose: true, + backdropDismiss: false, + cssClass: 'modal-large' + }); + // Open the modal + yield modal.present(); + // On dismiss + const { data } = yield modal.onDidDismiss(); + if (isEmptyArray(data)) + return; // CANCELLED + // Return pmfm ids + return data.map(p => p.id); + }); + } + /** + * Force to wait PMFM map to be loaded + * + * @param pmfms + */ + mapPmfms(pmfms) { + return __awaiter(this, void 0, void 0, function* () { + if (isEmptyArray(pmfms)) + return pmfms; // Nothing to map + // Compute tag id + this.tagIdPmfm = this.tagIdPmfm || pmfms && pmfms.find(pmfm => pmfm.id === PmfmIds.TAG_ID); + // Compute pmfms to copy (e.g. need by SIH-OBSBIO) + this.existingPmfmIdsToCopy = this.pmfmIdsToCopy + && pmfms.filter(pmfm => !pmfm.defaultValue && !pmfm.hidden && this.pmfmIdsToCopy.includes(pmfm.id)) + .map(pmfm => pmfm.id); + if (this.showGroupHeader) { + console.debug('[samples-table] Computing Pmfm group header...'); + // Wait until map is loaded + const groupedPmfmIdsMap = yield firstNotNilPromise(this.$pmfmGroups, { stop: this.destroySubject }); + // Create a list of known pmfm ids + const groupedPmfmIds = Object.values(groupedPmfmIdsMap).flatMap(pmfmIds => pmfmIds); + // Create pmfms group + const orderedPmfmIds = []; + const orderedPmfms = []; + let groupIndex = 0; + const groupNames = ParameterGroups.concat('OTHER'); + const pmfmGroupColumns = groupNames.reduce((pmfmGroups, group) => { + var _a; + let groupPmfms; + if (group === 'OTHER') { + groupPmfms = pmfms.filter(p => !groupedPmfmIds.includes(p.id)); + } + else { + const groupPmfmIds = groupedPmfmIdsMap[group]; + groupPmfms = isNotEmptyArray(groupPmfmIds) ? pmfms.filter(p => groupPmfmIds.includes(p.id)) : []; + } + let groupPmfmCount = groupPmfms.length; + const readonlyGroup = ((_a = this.readonlyPmfmGroups) === null || _a === void 0 ? void 0 : _a.includes(group)) || false; + groupPmfms.forEach(pmfm => { + pmfm = pmfm.clone(); // Clone, to leave original PMFM unchanged + // If readonly + if (readonlyGroup) { + // Force as computed + pmfm.isComputed = true; + // Force as hidden, if not shown + if (!this.showReadonlyPmfms && this._enabled) { + pmfm.hidden = true; + groupPmfmCount--; + console.log('TODO HIDE pmfm ', pmfm); + } + } + // Use rankOrder as a group index (will be used in template, to computed column class) + if (PmfmUtils.isDenormalizedPmfm(pmfm)) { + pmfm.rankOrder = groupIndex + 1; + } + // Apply weight conversion, if need + if (this.weightDisplayedUnit) { + PmfmUtils.setWeightUnitConversion(pmfm, this.weightDisplayedUnit, { clone: false }); + } + // Add pmfm into the final list of ordered pmfms + if (!orderedPmfms.includes(pmfm)) + orderedPmfms.push(pmfm); + }); + if (groupPmfmCount) { + ++groupIndex; + } + const cssClass = groupIndex % 2 === 0 ? 'even' : 'odd'; + return pmfmGroups.concat(...groupPmfms.reduce((res, pmfm, index) => { + if (orderedPmfmIds.includes(pmfm.id)) + return res; // Skip if already proceed + orderedPmfmIds.push(pmfm.id); + const visible = group !== 'TAG_ID'; + const key = 'group-' + group; + return index !== 0 || groupPmfmCount === 0 ? res : res.concat({ + key, + label: group, + name: visible && ('TRIP.SAMPLE.PMFM_GROUP.' + group) || '', + cssClass: visible && cssClass || '', + colSpan: groupPmfmCount + }); + }, [])); + }, []); + this.pmfmGroupColumns$.next(pmfmGroupColumns); + this.groupHeaderColumnNames = + ['top-start'] + .concat(arrayPluck(pmfmGroupColumns, 'key')) + .concat(['top-end']); + this.groupHeaderStartColSpan = RESERVED_START_COLUMNS.length + + (this.showLabelColumn ? 1 : 0) + + (this.showTaxonGroupColumn ? 1 : 0) + + (this.showTaxonNameColumn ? 1 : 0) + + (this.showSampleDateColumn ? 1 : 0); + this.groupHeaderEndColSpan = RESERVED_END_COLUMNS.length + + (this.showCommentsColumn ? 1 : 0); + pmfms = orderedPmfms; + } + // No pmfm group (no table top headers) + else { + // Apply weight conversion, if need + if (this.weightDisplayedUnit) { + pmfms = PmfmUtils.setWeightUnitConversions(pmfms, this.weightDisplayedUnit); + } + } + // DEBUG + const hasEmptyPmfm = pmfms.some(p => isNil(p === null || p === void 0 ? void 0 : p.id)); + if (hasEmptyPmfm) { + console.error('[samples-table] Invalid PMFMS: ', pmfms); + } + // Add replacement map, for sort by + pmfms.forEach(p => this.memoryDataService.addSortByReplacement(p.id.toString(), `measurementValues.${p.id}`)); + return pmfms; + }); + } + openSelectColumnsModal(event) { + return super.openSelectColumnsModal(event); + } + setTagIdGenerationMode(mode) { + this.forcedTagIdGenerationMode = mode; + this.markForCheck(); + } + addFooterListener(pmfms) { + this.tagIdPmfm = this.tagIdPmfm || pmfms && pmfms.find(pmfm => pmfm.id === PmfmIds.TAG_ID); + this.showTagCount = !!this.tagIdPmfm; + // Should display tag count: add column to footer + if (this.showTagCount && !this.footerColumns.includes('footer-tagCount')) { + this.footerColumns = [...this.footerColumns, 'footer-tagCount']; + } + // If tag count not displayed + else if (!this.showTagCount) { + // Remove from footer columns + this.footerColumns = this.footerColumns.filter(column => column !== 'footer-tagCount'); + // Reset counter + this.tagCount$.next(0); + } + this.showFooter = this.footerColumns.length > 1; + // DEBUG + console.debug('[samples-table] Show footer ?', this.showFooter); + // Remove previous rows listener + if (!this.showFooter && this._footerRowsSubscription) { + this.unregisterSubscription(this._footerRowsSubscription); + this._footerRowsSubscription.unsubscribe(); + this._footerRowsSubscription = null; + } + else if (this.showFooter && !this._footerRowsSubscription) { + this._footerRowsSubscription = this.dataSource.connect(null) + .pipe(debounceTime(500)).subscribe(rows => this.updateFooter(rows)); + } + } + updateFooter(rows) { + // Update tag count + const tagCount = (rows || []).map(row => row.currentData.measurementValues[PmfmIds.TAG_ID.toString()]) + .filter(isNotNilOrBlank) + .length; + this.tagCount$.next(tagCount); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "tagIdPmfm", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "showGroupHeader", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "useSticky", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "useFooterSticky", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "canAddPmfm", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SamplesTable.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SamplesTable.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "showIdColumn", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "showLabelColumn", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "requiredLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "showPmfmDetails", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "showFabButton", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "showIndividualMonitoringButton", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "showIndividualReleaseButton", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "defaultSampleDate", void 0); +__decorate([ + Input(), + __metadata("design:type", TaxonGroupRef) +], SamplesTable.prototype, "defaultTaxonGroup", void 0); +__decorate([ + Input(), + __metadata("design:type", TaxonNameRef) +], SamplesTable.prototype, "defaultTaxonName", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "modalOptions", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "compactFields", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "showDisplayColumnModal", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SamplesTable.prototype, "weightDisplayedUnit", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "enableTagIdGeneration", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SamplesTable.prototype, "defaultTagIdGenerationMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "tagIdMinLength", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "tagIdPadString", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SamplesTable.prototype, "defaultLatitudeSign", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SamplesTable.prototype, "defaultLongitudeSign", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "allowSubSamples", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "subSampleModalOptions", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], SamplesTable.prototype, "readonlyPmfmGroups", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SamplesTable.prototype, "showReadonlyPmfms", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], SamplesTable.prototype, "pmfmIdsToCopy", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], SamplesTable.prototype, "pmfmValueColor", void 0); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], SamplesTable.prototype, "pmfmGroups", null); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], SamplesTable.prototype, "value", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SamplesTable.prototype, "showSampleDateColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SamplesTable.prototype, "showTaxonGroupColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SamplesTable.prototype, "showTaxonNameColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], SamplesTable.prototype, "showImagesColumn", null); +__decorate([ + Input(), + __metadata("design:type", Array) +], SamplesTable.prototype, "availableTaxonGroups", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], SamplesTable.prototype, "prepareRowForm", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], SamplesTable.prototype, "weightUnitChanges", void 0); +SamplesTable = __decorate([ + Component({ + selector: 'app-samples-table', + templateUrl: 'samples.table.html', + styleUrls: ['samples.table.scss'], + providers: [ + { provide: AppValidatorService, useExisting: SampleValidatorService } + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + SamplingStrategyService]) +], SamplesTable); +export { SamplesTable }; +//# sourceMappingURL=samples.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/samples.table.js.map b/out-tsc/app/app/trip/sample/samples.table.js.map new file mode 100644 index 000000000..3b9ae2ffa --- /dev/null +++ b/out-tsc/app/app/trip/sample/samples.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"samples.table.js","sourceRoot":"","sources":["../../../../../src/app/trip/sample/samples.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sub-sample.form.js b/out-tsc/app/app/trip/sample/sub-sample.form.js new file mode 100644 index 000000000..73ef8c71f --- /dev/null +++ b/out-tsc/app/app/trip/sample/sub-sample.form.js @@ -0,0 +1,237 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { MeasurementValuesForm } from '@app/data/measurement/measurement-values.form.class'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { UntypedFormBuilder } from '@angular/forms'; +import { AppFormUtils, EntityUtils, isNil, isNotEmptyArray, isNotNil, joinPropertiesPath, LocalSettingsService, startsWithUpperCase, toNumber } from '@sumaris-net/ngx-components'; +import { AcquisitionLevelCodes, PmfmIds } from '@app/referential/services/model/model.enum'; +import { environment } from '@environments/environment'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { SubSampleValidatorService } from '@app/trip/sample/sub-sample.validator'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { PmfmValueUtils } from '@app/referential/services/model/pmfm-value.model'; +import { merge, Subject } from 'rxjs'; +import { filter, mergeMap } from 'rxjs/operators'; +let SubSampleForm = class SubSampleForm extends MeasurementValuesForm { + constructor(injector, measurementsValidatorService, formBuilder, programRefService, cd, validatorService, settings) { + super(injector, measurementsValidatorService, formBuilder, programRefService, validatorService.getFormGroup(), { + mapPmfms: (pmfms) => this.mapPmfms(pmfms) + }); + this.injector = injector; + this.measurementsValidatorService = measurementsValidatorService; + this.formBuilder = formBuilder; + this.programRefService = programRefService; + this.cd = cd; + this.validatorService = validatorService; + this.settings = settings; + this._availableParents = []; + this._availableSortedParents = []; + this.onParentChanges = new Subject(); + this.showLabel = false; + this.showParent = true; + this.showComment = true; + this.showError = true; + this.isNotHiddenPmfm = PmfmUtils.isNotHidden; + this.selectInputContent = AppFormUtils.selectInputContent; + this._enable = true; + this.i18nPmfmPrefix = 'TRIP.SAMPLE.PMFM.'; + // for DEV only + this.debug = !environment.production; + } + set availableParents(parents) { + if (this._availableParents !== parents) { + this._availableParents = parents; + if (!this.loading) + this.onParentChanges.next(); + } + } + get availableParents() { + return this._availableParents; + } + ngOnInit() { + var _a; + super.ngOnInit(); + // Set defaults + this.acquisitionLevel = this.acquisitionLevel || AcquisitionLevelCodes.INDIVIDUAL_MONITORING; + this.tabindex = toNumber(this.tabindex, 1); + this.maxVisibleButtons = toNumber(this.maxVisibleButtons, 4); + this.focusFieldName = !this.mobile && (this.showLabel ? 'label' : + (this.showParent ? 'parent' : null)); + this.i18nFieldPrefix = this.i18nFieldPrefix || `TRIP.SUB_SAMPLE.`; + this.i18nSuffix = this.i18nSuffix || ''; + this.i18nFullSuffix = `${this.acquisitionLevel}.${this.i18nSuffix}`; + // Parent combo + this.registerAutocompleteField('parent', { + suggestFn: (value, options) => this.suggestParent(value), + showAllOnFocus: true, + mobile: this.mobile + }); + this.registerSubscription(merge(this.onParentChanges.pipe(mergeMap(() => this.pmfms$)), this.pmfms$) + .pipe(filter(isNotEmptyArray)).subscribe((pmfms) => this.updateParents(pmfms))); + if (!this.showParent) { + (_a = this.form.parent) === null || _a === void 0 ? void 0 : _a.disable(); + } + } + toggleComment() { + this.showComment = !this.showComment; + this.markForCheck(); + } + /* -- protected methods -- */ + mapPmfms(pmfms) { + // DEBUG + console.debug('[sub-sample-form] Mapping PMFMs...', pmfms); + const tagIdPmfmIndex = pmfms.findIndex(p => p.id === PmfmIds.TAG_ID); + const tagIdPmfm = tagIdPmfmIndex !== -1 && pmfms[tagIdPmfmIndex]; + this.displayParentPmfm = (tagIdPmfm === null || tagIdPmfm === void 0 ? void 0 : tagIdPmfm.required) ? tagIdPmfm : null; + // Force the parent PMFM to be hidden, and NOT required + if (this.displayParentPmfm && !this.displayParentPmfm.hidden) { + const cloneParentPmfm = this.displayParentPmfm.clone(); + cloneParentPmfm.hidden = true; + cloneParentPmfm.required = false; + pmfms[tagIdPmfmIndex] = cloneParentPmfm; + } + return pmfms; + } + getValue() { + const value = super.getValue(); + // Copy parent measurement, if any + if (this.displayParentPmfm && value.parent) { + const parentPmfmId = this.displayParentPmfm.id.toString(); + value.measurementValues = value.measurementValues || {}; + value.measurementValues[parentPmfmId] = value.parent.measurementValues[parentPmfmId]; + } + if (!this.showComment) + value.comments = undefined; + return value; + } + updateParents(pmfms) { + return __awaiter(this, void 0, void 0, function* () { + // DEBUG + console.debug('[sub-sample-form] Update parents...'); + const parents = this._availableParents || []; + const hasTaxonName = parents.some(s => { var _a; return isNotNil((_a = s.taxonName) === null || _a === void 0 ? void 0 : _a.id); }); + const attributeName = hasTaxonName ? 'taxonName' : 'taxonGroup'; + const baseDisplayAttributes = this.settings.getFieldDisplayAttributes(attributeName) + .map(key => `${attributeName}.${key}`); + // If display parent using by a pmfm + if (this.displayParentPmfm) { + const parentDisplayPmfmIdStr = this.displayParentPmfm.id.toString(); + const parentDisplayPmfmPath = `measurementValues.${parentDisplayPmfmIdStr}`; + // Keep parents without this pmfms + const filteredParents = parents.filter(s => isNotNil(s.measurementValues[parentDisplayPmfmIdStr])); + this._availableSortedParents = EntityUtils.sort(filteredParents, parentDisplayPmfmPath); + this.autocompleteFields.parent.attributes = [parentDisplayPmfmPath].concat(baseDisplayAttributes); + this.autocompleteFields.parent.columnSizes = [4].concat(baseDisplayAttributes.map(attr => + // If label then col size = 2 + attr.endsWith('label') ? 2 : undefined)); + this.autocompleteFields.parent.columnNames = [PmfmUtils.getPmfmName(this.displayParentPmfm)]; + this.autocompleteFields.parent.displayWith = (obj) => obj && obj.measurementValues + && PmfmValueUtils.valueToString(obj.measurementValues[parentDisplayPmfmIdStr], { pmfm: this.displayParentPmfm }) + || undefined; + } + else { + const displayAttributes = ['rankOrder'].concat(baseDisplayAttributes); + this._availableSortedParents = EntityUtils.sort(parents.slice(), 'rankOrder'); + this.autocompleteFields.parent.attributes = displayAttributes; + this.autocompleteFields.parent.columnSizes = undefined; // use defaults + this.autocompleteFields.parent.columnNames = undefined; // use defaults + this.autocompleteFields.parent.displayWith = (obj) => obj && joinPropertiesPath(obj, displayAttributes) || undefined; + } + this.markForCheck(); + }); + } + suggestParent(value) { + return __awaiter(this, void 0, void 0, function* () { + if (EntityUtils.isNotEmpty(value, 'label')) { + return [value]; + } + value = (typeof value === 'string' && value !== '*') && value || undefined; + if (isNil(value)) + return this._availableSortedParents; // All + if (this.debug) + console.debug(`[sub-sample-form] Searching parent {${value || '*'}}...`); + if (this.displayParentPmfm) { // Search on a specific Pmfm (e.g Tag-ID) + return this._availableSortedParents.filter(p => startsWithUpperCase(p.measurementValues[this.displayParentPmfm.id], value)); + } + // Search on rankOrder + return this._availableSortedParents.filter(p => p.rankOrder.toString().startsWith(value)); + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", String) +], SubSampleForm.prototype, "i18nPmfmSuffix", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubSampleForm.prototype, "i18nSuffix", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SubSampleForm.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], SubSampleForm.prototype, "tabindex", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubSampleForm.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubSampleForm.prototype, "showLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubSampleForm.prototype, "showParent", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubSampleForm.prototype, "showComment", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubSampleForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], SubSampleForm.prototype, "maxVisibleButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubSampleForm.prototype, "defaultLatitudeSign", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubSampleForm.prototype, "defaultLongitudeSign", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubSampleForm.prototype, "displayParentPmfm", void 0); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], SubSampleForm.prototype, "availableParents", null); +SubSampleForm = __decorate([ + Component({ + selector: 'app-sub-sample-form', + templateUrl: 'sub-sample.form.html', + styleUrls: ['sub-sample.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + MeasurementsValidatorService, + UntypedFormBuilder, + ProgramRefService, + ChangeDetectorRef, + SubSampleValidatorService, + LocalSettingsService]) +], SubSampleForm); +export { SubSampleForm }; +//# sourceMappingURL=sub-sample.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sub-sample.form.js.map b/out-tsc/app/app/trip/sample/sub-sample.form.js.map new file mode 100644 index 000000000..aa8a4d657 --- /dev/null +++ b/out-tsc/app/app/trip/sample/sub-sample.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sub-sample.form.js","sourceRoot":"","sources":["../../../../../src/app/trip/sample/sub-sample.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sub-sample.modal.js b/out-tsc/app/app/trip/sample/sub-sample.modal.js new file mode 100644 index 000000000..c7db06413 --- /dev/null +++ b/out-tsc/app/app/trip/sample/sub-sample.modal.js @@ -0,0 +1,312 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input, ViewChild } from '@angular/core'; +import { Alerts, AppFormUtils, isNil, isNotNilOrBlank, LocalSettingsService, toBoolean, TranslateContextService } from '@sumaris-net/ngx-components'; +import { environment } from '@environments/environment'; +import { AlertController, IonContent, ModalController } from '@ionic/angular'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { TranslateService } from '@ngx-translate/core'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { Sample } from './sample.model'; +import { debounceTime } from 'rxjs/operators'; +import { SubSampleForm } from '@app/trip/sample/sub-sample.form'; +let SubSampleModal = class SubSampleModal { + constructor(injector, modalCtrl, alertCtrl, settings, translate, translateContext, cd) { + this.injector = injector; + this.modalCtrl = modalCtrl; + this.alertCtrl = alertCtrl; + this.settings = settings; + this.translate = translate; + this.translateContext = translateContext; + this.cd = cd; + this._subscription = new Subscription(); + this.$title = new BehaviorSubject(undefined); + this.debug = false; + this.loading = false; + // Default value + this.mobile = settings.mobile; + this.showComment = !this.mobile; + // TODO: for DEV only + this.debug = !environment.production; + } + get dirty() { + return this.form.dirty; + } + get invalid() { + return this.form.invalid; + } + get valid() { + return this.form.valid; + } + ngOnInit() { + this.isNew = toBoolean(this.isNew, !this.data); + this.usageMode = this.usageMode || this.settings.usageMode; + this.disabled = toBoolean(this.disabled, false); + this.acquisitionLevel = this.acquisitionLevel || AcquisitionLevelCodes.INDIVIDUAL_MONITORING; + this.i18nSuffix = this.i18nSuffix || ''; + this.i18nFullSuffix = `${this.acquisitionLevel}.${this.i18nSuffix}`; + if (this.disabled) { + this.form.disable(); + } + else { + // Change rankOrder validator, to optional + this.form.form.get('rankOrder').setValidators(null); + } + // Update title each time value changes + if (!this.isNew) { + this._subscription.add(this.form.valueChanges + .pipe(debounceTime(250)) + .subscribe(json => this.computeTitle(json))); + } + this.setValue(this.data); + } + ngOnDestroy() { + this._subscription.unsubscribe(); + } + setValue(data) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[sample-modal] Applying value to form...', data); + this.form.markAsReady(); + this.form.error = null; + try { + // Set form value + this.data = data || new Sample(); + const promiseOrVoid = this.form.setValue(this.data); + if (promiseOrVoid) + yield promiseOrVoid; + // Call ready callback + /*if (this.onReady) { + promiseOrVoid = this.onReady(this); + if (promiseOrVoid) await promiseOrVoid; + }*/ + // Compute the title + yield this.computeTitle(); + } + finally { + if (!this.disabled) + this.enable(); + this.form.markAsUntouched(); + this.form.markAsPristine(); + this.markForCheck(); + } + }); + } + close(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.dirty) { + const saveBeforeLeave = yield Alerts.askSaveBeforeLeave(this.alertCtrl, this.translate, event); + // User cancelled + if (isNil(saveBeforeLeave) || event && event.defaultPrevented) { + return; + } + // Is user confirm: close normally + if (saveBeforeLeave === true) { + yield this.onSubmit(event); + return; + } + } + yield this.modalCtrl.dismiss(); + }); + } + /** + * Validate and close + * + * @param event + */ + onSubmit(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.loading) + return undefined; // avoid many call + // Leave without saving + if (!this.dirty) { + this.loading = true; + yield this.modalCtrl.dismiss(); + } + // Convert and dismiss + else { + const data = this.dirty ? this.getDataToSave() : this.data; + if (!data) + return; // invalid + this.loading = true; + yield this.modalCtrl.dismiss(data); + } + }); + } + delete(event) { + return __awaiter(this, void 0, void 0, function* () { + let canDelete = true; + if (this.onDelete) { + canDelete = yield this.onDelete(event, this.data); + if (isNil(canDelete) || (event && event.defaultPrevented)) + return; // User cancelled + } + if (canDelete) { + yield this.modalCtrl.dismiss(this.data, 'DELETE'); + } + }); + } + /* -- protected methods -- */ + enable() { + this.form.enable(); + } + getDataToSave() { + if (this.invalid) { + if (this.debug) + AppFormUtils.logFormErrors(this.form.form, '[sub-sample-modal] '); + this.form.error = 'COMMON.FORM.HAS_ERROR'; + this.form.markAllAsTouched(); + this.scrollToTop(); + return undefined; + } + this.loading = true; + // To force enable, to get computed values + this.form.form.enable(); + try { + // Get form value + return this.form.value; + } + finally { + this.form.form.disable(); + } + } + reset(data) { + this.data = data || new Sample(); + this.form.error = null; + try { + this.form.value = this.data; + this.form.enable(); + // Compute the title + this.computeTitle(); + } + finally { + this.form.markAsPristine(); + this.form.markAsUntouched(); + this.markForCheck(); + } + } + computeTitle(data) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + // Make sure form is ready, before accessing to autocomplete config + yield this.form.ready(); + // DEBUG + console.debug('[sub-sample-modal] Computing title'); + data = data || this.data; + // Compute prefix, from parent + const parentStr = data.parent && ((_a = this.form) === null || _a === void 0 ? void 0 : _a.autocompleteFields.parent.displayWith(data.parent)); + const prefix = isNotNilOrBlank(parentStr) + ? this.translateContext.instant(`TRIP.SUB_SAMPLE.TITLE_PREFIX`, this.i18nFullSuffix, { prefix: parentStr }) + : ''; + if (this.isNew || !data) { + this.$title.next(prefix + this.translateContext.instant(`TRIP.SUB_SAMPLE.NEW.TITLE`, this.i18nFullSuffix)); + } + else { + // Label can be optional (e.g. in auction control) + const label = this.showLabel && data.label || ('#' + data.rankOrder); + this.$title.next(prefix + this.translateContext.instant(`TRIP.SUB_SAMPLE.EDIT.TITLE`, this.i18nFullSuffix, { label })); + } + }); + } + scrollToTop() { + return __awaiter(this, void 0, void 0, function* () { + return this.content.scrollToTop(); + }); + } + registerSubscription(teardown) { + this._subscription.add(teardown); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SubSampleModal.prototype, "isNew", void 0); +__decorate([ + Input(), + __metadata("design:type", Sample) +], SubSampleModal.prototype, "data", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SubSampleModal.prototype, "disabled", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubSampleModal.prototype, "acquisitionLevel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubSampleModal.prototype, "programLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubSampleModal.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], SubSampleModal.prototype, "pmfms", void 0); +__decorate([ + Input(), + __metadata("design:type", Array) +], SubSampleModal.prototype, "availableParents", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubSampleModal.prototype, "i18nSuffix", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SubSampleModal.prototype, "showLabel", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SubSampleModal.prototype, "showParent", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SubSampleModal.prototype, "showComment", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], SubSampleModal.prototype, "maxVisibleButtons", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubSampleModal.prototype, "defaultLatitudeSign", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubSampleModal.prototype, "defaultLongitudeSign", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], SubSampleModal.prototype, "onReady", void 0); +__decorate([ + Input(), + __metadata("design:type", Function) +], SubSampleModal.prototype, "onDelete", void 0); +__decorate([ + ViewChild('form', { static: true }), + __metadata("design:type", SubSampleForm) +], SubSampleModal.prototype, "form", void 0); +__decorate([ + ViewChild(IonContent), + __metadata("design:type", IonContent) +], SubSampleModal.prototype, "content", void 0); +SubSampleModal = __decorate([ + Component({ + selector: 'app-sub-sample-modal', + templateUrl: 'sub-sample.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + ModalController, + AlertController, + LocalSettingsService, + TranslateService, + TranslateContextService, + ChangeDetectorRef]) +], SubSampleModal); +export { SubSampleModal }; +//# sourceMappingURL=sub-sample.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sub-sample.modal.js.map b/out-tsc/app/app/trip/sample/sub-sample.modal.js.map new file mode 100644 index 000000000..7b2338c04 --- /dev/null +++ b/out-tsc/app/app/trip/sample/sub-sample.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sub-sample.modal.js","sourceRoot":"","sources":["../../../../../src/app/trip/sample/sub-sample.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sub-sample.validator.js b/out-tsc/app/app/trip/sample/sub-sample.validator.js new file mode 100644 index 000000000..04b9b068e --- /dev/null +++ b/out-tsc/app/app/trip/sample/sub-sample.validator.js @@ -0,0 +1,42 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { SharedValidators } from '@sumaris-net/ngx-components'; +import { SampleValidatorService } from '@app/trip/sample/sample.validator'; +import { TranslateService } from '@ngx-translate/core'; +import { ImageAttachmentValidator } from '@app/data/image/image-attachment.validator'; +let SubSampleValidatorService = class SubSampleValidatorService extends SampleValidatorService { + constructor(formBuilder, translate, imageAttachmentValidator) { + super(formBuilder, translate, imageAttachmentValidator); + this.formBuilder = formBuilder; + this.translate = translate; + this.imageAttachmentValidator = imageAttachmentValidator; + } + getFormGroupConfig(data, opts) { + const config = super.getFormGroupConfig(data, Object.assign({ withChildren: false }, opts)); + // Change label and samples to optional + config['label'] = [data && data.label || null]; + config['sampleDate'] = [data && data.sampleDate || null]; + // Add parent control (required by default) + if (!opts || opts.withParent !== false) { + const parentValidators = (!opts || opts.requiredParent !== false) + ? Validators.compose([SharedValidators.object, Validators.required]) + : SharedValidators.object; + config['parent'] = [data && data.parent || null, parentValidators]; + } + return config; + } + getFormGroupOptions(data, opts) { + return { + validators: [] // remove required validator on taxonGroup/taxonName + }; + } +}; +SubSampleValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + ImageAttachmentValidator]) +], SubSampleValidatorService); +export { SubSampleValidatorService }; +//# sourceMappingURL=sub-sample.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sub-sample.validator.js.map b/out-tsc/app/app/trip/sample/sub-sample.validator.js.map new file mode 100644 index 000000000..c3f9fac2d --- /dev/null +++ b/out-tsc/app/app/trip/sample/sub-sample.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sub-sample.validator.js","sourceRoot":"","sources":["../../../../../src/app/trip/sample/sub-sample.validator.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAEzC,OAAO,EAA0B,kBAAkB,EAAa,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACnG,OAAO,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AAG7D,OAAO,EAA0B,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAC,wBAAwB,EAAC,MAAM,4CAA4C,CAAC;AAQ7E,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,sBAAiD;IAE9F,YACY,WAA+B,EAC/B,SAA2B,EAC3B,wBAAkD;QAE5D,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,wBAAwB,CAAC,CAAC;QAJ9C,gBAAW,GAAX,WAAW,CAAoB;QAC/B,cAAS,GAAT,SAAS,CAAkB;QAC3B,6BAAwB,GAAxB,wBAAwB,CAA0B;IAG9D,CAAC;IAED,kBAAkB,CAAC,IAAU,EAAE,IAAgC;QAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,kBAC1C,YAAY,EAAE,KAAK,IAChB,IAAI,EACP,CAAC;QAEH,uCAAuC;QACvC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC;QAEzD,2CAA2C;QAC3C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE;YACtC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK,CAAC;gBAC/D,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACpE,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAC5B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,gBAAgB,CAAC,CAAC;SACpE;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,mBAAmB,CAAC,IAAa,EAAE,IAAgC;QACjE,OAAO;YACL,UAAU,EAAE,EAAE,CAAC,oDAAoD;SACpE,CAAC;IACJ,CAAC;CACF,CAAA;AApCY,yBAAyB;IADrC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAIN,kBAAkB;QACpB,gBAAgB;QACD,wBAAwB;GALnD,yBAAyB,CAoCrC;SApCY,yBAAyB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sub-samples.table.js b/out-tsc/app/app/trip/sample/sub-samples.table.js new file mode 100644 index 000000000..00d4cd0ed --- /dev/null +++ b/out-tsc/app/app/trip/sample/sub-samples.table.js @@ -0,0 +1,472 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, Input } from '@angular/core'; +import { ValidatorService } from '@e-is/ngx-material-table'; +import { PmfmIds } from '@app/referential/services/model/model.enum'; +import { SubSampleValidatorService } from './sub-sample.validator'; +import { EntityUtils, firstNotNilPromise, InMemoryEntitiesService, isNil, isNotEmptyArray, isNotNil, joinPropertiesPath, PlatformService, suggestFromArray, toNumber, } from '@sumaris-net/ngx-components'; +import { BaseMeasurementsTable } from '@app/data/measurement/measurements-table.class'; +import { Sample } from './sample.model'; +import { PmfmValueUtils } from '@app/referential/services/model/pmfm-value.model'; +import { environment } from '@environments/environment'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { SampleFilter } from './sample.filter'; +import { SubSampleModal } from '@app/trip/sample/sub-sample.modal'; +import { merge, Subject } from 'rxjs'; +import { debounceTime, distinctUntilChanged, filter, mergeMap, tap } from 'rxjs/operators'; +export const SUB_SAMPLE_RESERVED_START_COLUMNS = ['parent']; +export const SUB_SAMPLE_RESERVED_END_COLUMNS = ['comments']; +let SubSamplesTable = class SubSamplesTable extends BaseMeasurementsTable { + constructor(injector) { + super(injector, Sample, SampleFilter, new InMemoryEntitiesService(Sample, SampleFilter, { + onSort: (data, sortBy, sortDirection) => this.sortData(data, sortBy, sortDirection), + onLoad: (data) => this.onLoadData(data), + equals: Sample.equals, + sortByReplacement: { id: 'rankOrder' } + }), injector.get(PlatformService).mobile ? null : injector.get(ValidatorService), { + prependNewElements: false, + suppressErrors: environment.production, + reservedStartColumns: SUB_SAMPLE_RESERVED_START_COLUMNS, + reservedEndColumns: SUB_SAMPLE_RESERVED_END_COLUMNS, + mapPmfms: (pmfms) => this.mapPmfms(pmfms) + }); + this.injector = injector; + this._availableSortedParents = []; + this._availableParents = []; + this.onParentChanges = new Subject(); + this.showError = true; + this.showPmfmDetails = false; + this.compactFields = true; + this.showLabelColumn = false; + this.useSticky = false; + this.isNotHiddenPmfm = PmfmUtils.isNotHidden; + this.i18nColumnPrefix = 'TRIP.SAMPLE.TABLE.'; + this.i18nPmfmPrefix = 'TRIP.SAMPLE.PMFM.'; + this.confirmBeforeDelete = this.mobile; + this.inlineEdition = !this.mobile; + this.errorTranslatorOptions = { controlPathTranslator: this, separator: '\n' }; + // Default value + this.showCommentsColumn = !this.mobile; + // DEBUG + this.logPrefix = '[sub-samples-table] '; + this.debug = !environment.production; + } + set availableParents(parents) { + if (this._availableParents !== parents) { + this._availableParents = parents; + if (!this.loading) + this.onParentChanges.next(); + } + } + get availableParents() { + return this._availableParents; + } + set value(data) { + this.setValue(data); + } + get value() { + return this.getValue(); + } + ngOnInit() { + super.ngOnInit(); + this.setShowColumn('label', this.showLabelColumn); + // Parent combo + // the exact list of attributes to display will be set when receiving the pmfms and parents + this.registerAutocompleteField('parent', { + suggestFn: (value, opts) => this.suggestParent(value, opts), + showAllOnFocus: true, + mobile: this.mobile + }); + // Compute parent, when parents or pmfms changed + this.registerSubscription(merge(this.onParentChanges + .pipe(mergeMap(() => this.pmfms$)), this.pmfms$.pipe(filter(isNotEmptyArray), distinctUntilChanged(), tap(pmfms => this.onPmfmsLoaded(pmfms)))) + .pipe(debounceTime(250), tap(pmfms => this.updateParents(pmfms))) + .subscribe()); + } + setModalOption(key, value) { + this.modalOptions = this.modalOptions || {}; + this.modalOptions[key] = value; + } + autoFillTable() { + var _a; + return __awaiter(this, void 0, void 0, function* () { + console.debug('[sub-sample-table] Auto fill table'); + // Wait table ready and loaded + yield Promise.all([this.ready(), this.waitIdle()]); + // Skip when disabled or still editing a row + if (this.disabled || !this.confirmEditCreate()) { + console.warn('[sub-samples-table] Skipping autofill, as table is disabled or still editing a row'); + return; + } + this.markAsLoading(); + try { + // Read existing rows + const existingSamples = this.dataSource.getRows().map(r => r.currentData); + const displayParentPmfmId = (_a = this.displayParentPmfm) === null || _a === void 0 ? void 0 : _a.id; + const availableParents = this._availableSortedParents || this._availableParents + .filter(p => (isNil(displayParentPmfmId) || isNotNil(p.measurementValues[displayParentPmfmId]))); + const parents = availableParents + .filter(p => !existingSamples.find(s => Sample.equals(s.parent, p))); + // Create new row for each parent + for (const parent of parents) { + const sample = new Sample(); + sample.parent = parent; + yield this.addEntityToTable(sample); + } + } + catch (err) { + console.error(err && err.message || err); + this.error = err && err.message || err; + } + finally { + this.markAsLoaded(); + } + }); + } + /** + * Allow to set value + * + * @param data + */ + setValue(data) { + this.memoryDataService.value = data; + } + addOrUpdateEntityToTable(subSample) { + return __awaiter(this, void 0, void 0, function* () { + if (isNil(subSample.id) && isNil(subSample.rankOrder) && isNil(subSample.label)) { + yield this.addEntityToTable(subSample); + } + else { + const row = yield this.findRowByEntity(subSample); + yield this.updateEntityToTable(subSample, row); + } + }); + } + openDetailModal(dataToOpen, row) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[sub-samples-table] Opening detail modal...'); + const pmfms = yield firstNotNilPromise(this.pmfms$, { stop: this.destroySubject }); + const isNew = !dataToOpen && true; + if (isNew) { + dataToOpen = new Sample(); + yield this.onNewEntity(dataToOpen); + } + this.markAsLoading(); + const i18PrefixParts = this.i18nColumnPrefix && this.i18nColumnPrefix.split('.'); + const i18nPrefix = i18PrefixParts && (i18PrefixParts.slice(0, i18PrefixParts.length - 2).join('.') + '.'); + const modal = yield this.modalCtrl.create({ + component: SubSampleModal, + componentProps: Object.assign(Object.assign({ + // Default options: + programLabel: undefined, // Prefer to pass PMFMs directly, to avoid a reloading + pmfms, acquisitionLevel: this.acquisitionLevel, disabled: this.disabled, i18nPrefix, i18nSuffix: this.i18nColumnSuffix, usageMode: this.usageMode, availableParents: this._availableSortedParents, defaultLatitudeSign: this.defaultLatitudeSign, defaultLongitudeSign: this.defaultLongitudeSign, onDelete: (event, dataToDelete) => this.deleteEntity(event, dataToDelete) }, this.modalOptions), { + // Data to open + isNew, data: dataToOpen }), + keyboardClose: true, + backdropDismiss: false + }); + // Open the modal + yield modal.present(); + // Wait until closed + const { data } = yield modal.onDidDismiss(); + if (data && this.debug) + console.debug('[sub-samples-table] Modal result: ', data); + this.markAsLoaded(); + return data instanceof Sample ? data : undefined; + }); + } + deleteEntity(event, data) { + return __awaiter(this, void 0, void 0, function* () { + const row = yield this.findRowByEntity(data); + // Row not exists: OK + if (!row) + return true; + const confirmed = yield this.canDeleteRows([row]); + if (confirmed === true) { + return this.deleteRow(null, row, { interactive: false /*already confirmed*/ }); + } + return confirmed; + }); + } + /* -- protected methods -- */ + mapPmfms(pmfms) { + // DEBUG + console.debug('[sub-samples-table] Mapping PMFMs...', pmfms); + const tagIdPmfmIndex = pmfms.findIndex(p => p.id === PmfmIds.TAG_ID); + if (tagIdPmfmIndex !== -1) { + const tagIdPmfm = pmfms[tagIdPmfmIndex]; + this.displayParentPmfm = (tagIdPmfm === null || tagIdPmfm === void 0 ? void 0 : tagIdPmfm.required) ? tagIdPmfm : null; + } + // Force the parent PMFM to be hidden, and NOT required + if (this.displayParentPmfm && !this.displayParentPmfm.hidden) { + const cloneParentPmfm = this.displayParentPmfm.clone(); + cloneParentPmfm.hidden = true; + cloneParentPmfm.required = false; + pmfms[tagIdPmfmIndex] = cloneParentPmfm; + } + return pmfms; + } + onPmfmsLoaded(pmfms) { + // Can be overridden by subclasses + } + updateParents(pmfms) { + return __awaiter(this, void 0, void 0, function* () { + // DEBUG + console.debug('[sub-samples-table] Update parents...', pmfms); + const parents = this._availableParents || []; + const hasTaxonName = parents.some(s => { var _a; return isNotNil((_a = s.taxonName) === null || _a === void 0 ? void 0 : _a.id); }); + const attributeName = hasTaxonName ? 'taxonName' : 'taxonGroup'; + const baseDisplayAttributes = this.settings.getFieldDisplayAttributes(attributeName) + .map(key => `${attributeName}.${key}`); + // If display parent using by a pmfm + if (this.displayParentPmfm) { + const parentDisplayPmfmId = this.displayParentPmfm.id; + const parentDisplayPmfmPath = `measurementValues.${parentDisplayPmfmId}`; + // Keep parents with this pmfms + const filteredParents = parents.filter(s => isNotNil(s.measurementValues[parentDisplayPmfmId])); + this._availableSortedParents = EntityUtils.sort(filteredParents, parentDisplayPmfmPath); + this.autocompleteFields.parent.attributes = [parentDisplayPmfmPath].concat(baseDisplayAttributes); + this.autocompleteFields.parent.columnSizes = [4].concat(baseDisplayAttributes.map(attr => + // If label then col size = 2 + attr.endsWith('label') ? 2 : undefined)); + this.autocompleteFields.parent.columnNames = [PmfmUtils.getPmfmName(this.displayParentPmfm)]; + this.autocompleteFields.parent.displayWith = (obj) => PmfmValueUtils.valueToString(obj === null || obj === void 0 ? void 0 : obj.measurementValues[parentDisplayPmfmId], { pmfm: this.displayParentPmfm }) || undefined; + } + else { + const displayAttributes = ['rankOrder'].concat(baseDisplayAttributes); + this._availableSortedParents = this.sortData(parents.slice(), 'taxonGroup'); + this.autocompleteFields.parent.attributes = displayAttributes; + this.autocompleteFields.parent.columnSizes = undefined; // use defaults + this.autocompleteFields.parent.columnNames = undefined; // use defaults + this.autocompleteFields.parent.displayWith = (obj) => obj && joinPropertiesPath(obj, displayAttributes) || undefined; + } + // Configure the filter for suggestParent() + this.autocompleteFields.parent.filter = this.autocompleteFields.parent.filter || {}; + this.autocompleteFields.parent.filter.searchAttributes = this.autocompleteFields.parent.attributes; + // Link samples to parent, and delete orphan + yield this.linkDataToParentAndDeleteOrphan(); + this.markForCheck(); + }); + } + openNewRowDetail() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail) + return false; + const data = yield this.openDetailModal(); + if (data) { + yield this.addEntityToTable(data); + } + return true; + }); + } + openRow(id, row) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.allowRowDetail) + return false; + if (this.onOpenRow.observers.length) { + this.onOpenRow.emit(row); + return true; + } + const data = this.toEntity(row, true); + // Prepare entity measurement values + this.prepareEntityToSave(data); + const updatedData = yield this.openDetailModal(data, row); + if (updatedData) { + yield this.updateEntityToTable(updatedData, row); + } + else { + this.editedRow = null; + } + return true; + }); + } + getValue() { + return this.memoryDataService.value; + } + prepareEntityToSave(sample) { + // Override by subclasses + } + findRowByEntity(data) { + return __awaiter(this, void 0, void 0, function* () { + if (!data || isNil(data.rankOrder)) + throw new Error('Missing argument data or data.rankOrder'); + return this.dataSource.getRows() + .find(r => r.currentData.rankOrder === data.rankOrder); + }); + } + onNewEntity(data) { + const _super = Object.create(null, { + onNewEntity: { get: () => super.onNewEntity } + }); + return __awaiter(this, void 0, void 0, function* () { + console.debug('[sub-samples-table] Initializing new row data...'); + yield _super.onNewEntity.call(this, data); + // label + if (!this.showLabelColumn) { + // Generate label + data.label = this.acquisitionLevel + '#' + data.rankOrder; + } + }); + } + getI18nColumnName(columnName) { + // Replace parent by TAG_ID pmfms + columnName = columnName && columnName === 'parent' && this.displayParentPmfm ? this.displayParentPmfm.id.toString() : columnName; + return super.getI18nColumnName(columnName); + } + linkDataToParent(data) { + if (!this._availableParents || !data) + return; + // DEBUG + //console.debug("[sub-samples-table] Calling linkDataToParent()"); + data.forEach(s => { + var _a; + const parentId = toNumber(s.parentId, (_a = s.parent) === null || _a === void 0 ? void 0 : _a.id); + s.parent = this._availableParents.find(p => p.id === parentId + || (s.parent && p.label === s.parent.label && p.rankOrder === s.parent.rankOrder)) + || s.parent; + if (!s.parent) + console.warn('[sub-samples-table] linkDataToParent() - Could not found parent for sub-sample:', s); + }); + } + /** + * Remove samples in table, if there have no more parent + */ + linkDataToParentAndDeleteOrphan() { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const rows = this.dataSource.getRows(); + //console.debug("[sub-samples-table] Calling linkDataToParentAndDeleteOrphan()", rows); + const parentDisplayPmfmId = (_a = this.displayParentPmfm) === null || _a === void 0 ? void 0 : _a.id; + // Check if need to delete some rows + let hasRemovedItem = false; + const data = rows + .map(row => { + var _a, _b; + const item = row.currentData; + const parentId = toNumber(item.parentId, (_a = item.parent) === null || _a === void 0 ? void 0 : _a.id); + let parent; + if (isNotNil(parentId)) { + // Update the parent, by id + parent = this._availableParents.find(p => p.id === parentId); + } + // No parent, search from parent Pmfm + else if (isNotNil(parentDisplayPmfmId)) { + const parentPmfmValue = (_b = item === null || item === void 0 ? void 0 : item.measurementValues) === null || _b === void 0 ? void 0 : _b[parentDisplayPmfmId]; + if (isNil(parentPmfmValue)) { + parent = undefined; // remove link to parent + } + else { + // Update the parent, by tagId + parent = this._availableParents.find(p => { var _a; return (p && ((_a = p.measurementValues) === null || _a === void 0 ? void 0 : _a[parentDisplayPmfmId])) === parentPmfmValue; }); + } + } + if (parent || row.editing) { + if (item.parent !== parent) { + item.parent = parent; + // If row use a validator, force update + if (row.validator) { + if (!row.editing) + row.validator.patchValue({ parent }, { emitEvent: false }); + } + else { + row.currentData.parent = parent; + } + } + return item; // Keep only rows with a parent (or in editing mode) + } + // Could not find the parent anymore (parent has been deleted) + hasRemovedItem = true; + return undefined; + }) + .map(isNotNil); + if (hasRemovedItem) { + // Make sure to convert into a Sample - fix issue #371 + this.value = data.map(c => Sample.fromObject(c)); + } + }); + } + sortData(data, sortBy, sortDirection) { + sortBy = (sortBy !== 'parent') && sortBy || 'parent.rankOrder'; // Replace parent by its rankOrder + return this.memoryDataService.sort(data, sortBy, sortDirection); + } + onLoadData(data) { + this.linkDataToParent(data); + return data; + } + suggestParent(value, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (EntityUtils.isNotEmpty(value, 'label')) + return { data: [value] }; + value = (typeof value === 'string' && value !== '*') && value || undefined; + // All + if (isNil(value)) + return { data: this._availableSortedParents, total: this._availableSortedParents.length }; + return suggestFromArray(this._availableSortedParents, value, Object.assign({}, opts)); + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], SubSamplesTable.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubSamplesTable.prototype, "showPmfmDetails", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubSamplesTable.prototype, "compactFields", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubSamplesTable.prototype, "weightDisplayedUnit", void 0); +__decorate([ + Input(), + __metadata("design:type", Array), + __metadata("design:paramtypes", [Array]) +], SubSamplesTable.prototype, "availableParents", null); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubSamplesTable.prototype, "showLabelColumn", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubSamplesTable.prototype, "modalOptions", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SubSamplesTable.prototype, "mobile", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubSamplesTable.prototype, "usageMode", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SubSamplesTable.prototype, "useSticky", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubSamplesTable.prototype, "defaultLatitudeSign", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], SubSamplesTable.prototype, "defaultLongitudeSign", void 0); +SubSamplesTable = __decorate([ + Component({ + selector: 'app-sub-samples-table', + templateUrl: 'sub-samples.table.html', + styleUrls: ['sub-samples.table.scss'], + providers: [ + { provide: ValidatorService, useExisting: SubSampleValidatorService } + ], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector]) +], SubSamplesTable); +export { SubSamplesTable }; +//# sourceMappingURL=sub-samples.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/sub-samples.table.js.map b/out-tsc/app/app/trip/sample/sub-samples.table.js.map new file mode 100644 index 000000000..b3a40192e --- /dev/null +++ b/out-tsc/app/app/trip/sample/sub-samples.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sub-samples.table.js","sourceRoot":"","sources":["../../../../../src/app/trip/sample/sub-samples.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/testing/sample-data.test.js b/out-tsc/app/app/trip/sample/testing/sample-data.test.js new file mode 100644 index 000000000..41c771c6b --- /dev/null +++ b/out-tsc/app/app/trip/sample/testing/sample-data.test.js @@ -0,0 +1,78 @@ +import { DateUtils, isNotNil, toDateISOString } from '@sumaris-net/ngx-components'; +import { PmfmIds } from '@app/referential/services/model/model.enum'; +export function getMeasValues(opts) { + opts = Object.assign({ tagId: 'TAG-1' }, opts); + const res = {}; + res[PmfmIds.TAG_ID] = opts.tagId; + res[PmfmIds.IS_DEAD] = 1; + if (isNotNil(opts.totalLength)) { + res[PmfmIds.LENGTH_TOTAL_CM] = opts.totalLength; + } + if (isNotNil(opts.sex)) { + res[PmfmIds.SEX] = opts.sex === 'M' ? 185 : 186; + } + if (isNotNil(opts.weight)) { + res[PmfmIds.SAMPLE_MEASURED_WEIGHT] = opts.weight; + } + return res; +} +export function getMonitoringMeasValues(opts) { + opts = Object.assign({ tagId: 'TAG-1' }, opts); + const res = {}; + res[PmfmIds.TAG_ID] = opts.tagId; + if (isNotNil(opts.dateTime)) { + res[PmfmIds.MEASURE_TIME] = opts.dateTime; + } + return res; +} +export function getReleaseMeasValues(opts) { + opts = Object.assign({ tagId: 'TAG-1' }, opts); + const res = {}; + res[PmfmIds.TAG_ID] = opts.tagId; + if (isNotNil(opts.latitude)) { + res[PmfmIds.RELEASE_LATITUDE] = opts.latitude; + } + if (isNotNil(opts.longitude)) { + res[PmfmIds.RELEASE_LONGITUDE] = opts.longitude; + } + if (isNotNil(opts.dateTime)) { + res[PmfmIds.MEASURE_TIME] = toDateISOString(opts.dateTime); + } + return res; +} +export const SAMPLE_TREE_EXAMPLES = { + default: [{ + label: 'SAMPLE#1', rankOrder: 1, + sampleDate: DateUtils.moment(), + taxonGroup: { id: 1122, label: 'MNZ', name: 'Baudroie nca' }, + taxonName: { id: 1034, label: 'ANK', name: 'Lophius budegassa' }, + measurementValues: getMeasValues({ tagId: 'TAG-1', totalLength: 100, sex: 'M' }), + children: [ + { + label: 'INDIVIDUAL_MONITORING#1', + rankOrder: 1, + sampleDate: DateUtils.moment(), + measurementValues: getMonitoringMeasValues({ tagId: 'TAG-1' }), + }, + { + label: 'INDIVIDUAL_RELEASE#1', + rankOrder: 1, + sampleDate: DateUtils.moment(), + measurementValues: getReleaseMeasValues({ tagId: 'TAG-1', latitude: 11, longitude: 11, dateTime: DateUtils.moment() }), + } + ] + }], + // No data + empty: [{ id: 100, label: 'CATCH_BATCH', rankOrder: 1 }], + 'SIH-OBSBIO': [{ + label: 'SAMPLE#1', rankOrder: 1, + sampleDate: DateUtils.moment(), + measurementValues: getMeasValues({ tagId: '20LEUCCIR001-001' }), + children: [] + }], +}; +export const getExampleTree = (key, programLabel) => { + key = programLabel && Object.keys(SAMPLE_TREE_EXAMPLES).includes(programLabel) ? programLabel : key; + return SAMPLE_TREE_EXAMPLES[key]; +}; +//# sourceMappingURL=sample-data.test.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/testing/sample-data.test.js.map b/out-tsc/app/app/trip/sample/testing/sample-data.test.js.map new file mode 100644 index 000000000..80d315e0f --- /dev/null +++ b/out-tsc/app/app/trip/sample/testing/sample-data.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sample-data.test.js","sourceRoot":"","sources":["../../../../../../src/app/trip/sample/testing/sample-data.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/testing/sample-tree.test.js b/out-tsc/app/app/trip/sample/testing/sample-tree.test.js new file mode 100644 index 000000000..edc29d761 --- /dev/null +++ b/out-tsc/app/app/trip/sample/testing/sample-tree.test.js @@ -0,0 +1,269 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ViewChild } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { BehaviorSubject } from 'rxjs'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { DateUtils, EntitiesStorage, EntityUtils, firstNotNilPromise, isNotNilOrBlank, MatAutocompleteConfigHolder, PlatformService, SharedValidators, waitFor } from '@sumaris-net/ngx-components'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +import { SampleTreeComponent } from '@app/trip/sample/sample-tree.component'; +import { Sample, SampleUtils } from '@app/trip/sample/sample.model'; +import { getExampleTree, SAMPLE_TREE_EXAMPLES } from '@app/trip/sample/testing/sample-data.test'; +import { MatTabGroup } from '@angular/material/tabs'; +import { filter, mergeMap } from 'rxjs/operators'; +import { Parameters, PmfmIds } from '@app/referential/services/model/model.enum'; +import { PmfmService } from '@app/referential/services/pmfm.service'; +let SampleTreeTestPage = class SampleTreeTestPage { + constructor(formBuilder, platform, referentialRefService, programRefService, pmfmService, entities, cd) { + this.platform = platform; + this.referentialRefService = referentialRefService; + this.programRefService = programRefService; + this.pmfmService = pmfmService; + this.entities = entities; + this.cd = cd; + this.$programLabel = new BehaviorSubject(undefined); + this.$program = new BehaviorSubject(null); + this.autocomplete = new MatAutocompleteConfigHolder(); + this.defaultSampleDate = DateUtils.moment(); + this.selectedTabIndex = 1; // 0 = mobile, 1 = desktop + this.outputs = {}; + this.filterForm = formBuilder.group({ + program: [null, Validators.compose([Validators.required, SharedValidators.entity])], + gear: [null, Validators.compose([Validators.required, SharedValidators.entity])], + example: [null, Validators.required] + }); + } + get sampleTree() { + return (this.selectedTabIndex === 0) + ? this.mobileTree + : this.desktopTree; + } + ngOnInit() { + // Program + this.autocomplete.add('program', { + suggestFn: (value, filter) => this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { entityName: 'Program' })), + attributes: ['label', 'name'] + }); + this.filterForm.get('program').valueChanges + //.pipe(debounceTime(450)) + .subscribe(p => { + const label = p && p.label; + if (label) { + this.$programLabel.next(label); + } + }); + this.$programLabel + .pipe(filter(isNotNilOrBlank), mergeMap(programLabel => this.referentialRefService.ready() + .then(() => this.programRefService.loadByLabel(programLabel)))) + .subscribe(program => this.setProgram(program)); + // Input example + this.autocomplete.add('example', { + items: Object.keys(SAMPLE_TREE_EXAMPLES).map((label, index) => ({ id: index + 1, label })), + attributes: ['label'], + showAllOnFocus: true + }); + this.filterForm.get('example').valueChanges + //.pipe(debounceTime(450)) + .subscribe(example => { + if (example && typeof example.label == 'string') { + const json = SAMPLE_TREE_EXAMPLES[example.label]; + const samples = json.map(Sample.fromObject); + this.dumpSamples(samples, 'example'); + } + }); + this.platform.ready() + //.then(() => sleep(1000)) + .then(() => { + this.filterForm.patchValue({ + program: { id: 40, label: 'SIH-OBSBIO' }, + example: { id: 2, label: 'SIH-OBSBIO' } + //program: {id: 60, label: 'PIFIL' }, + //example: {id: 0, label: 'default'} + }); + this.applyExample(); + }); + } + // Load data into components + updateView(data) { + return __awaiter(this, void 0, void 0, function* () { + const program = yield firstNotNilPromise(this.$program); + yield waitFor(() => !!this.sampleTree, { timeout: 2000 }); + yield this.configureTree(this.sampleTree, program); + this.markAsReady(); + yield this.sampleTree.setValue(data.map(s => s.clone())); + this.sampleTree.enable(); + this.markAsLoaded(); + }); + } + setProgram(program) { + return __awaiter(this, void 0, void 0, function* () { + // DEBUG + console.debug('[sample-tree-test] Applying program:', program); + this.$program.next(program); + }); + } + configureTree(sampleTree, program) { + return __awaiter(this, void 0, void 0, function* () { + // Wait referential ready (before reading enumerations) + yield this.referentialRefService.ready(); + if (program.label === 'SIH-OBSBIO') { + sampleTree.showTaxonGroupColumn = false; + sampleTree.showTaxonNameColumn = false; + sampleTree.showSampleDateColumn = false; + sampleTree.program = program; + // Load Pmfm groups + const parameterLabelGroups = Parameters.getSampleParameterLabelGroups({ + excludedParameterLabels: ['PRESERVATION'] + }); + const pmfmGroups = yield this.pmfmService.loadIdsGroupByParameterLabels(parameterLabelGroups); + // Configure sample table + const samplesTable = sampleTree.samplesTable; + samplesTable.tagIdPmfm = { id: PmfmIds.TAG_ID }; + samplesTable.showPmfmDetails = true; + samplesTable.defaultSortBy = PmfmIds.TAG_ID.toString(); + samplesTable.readonlyPmfmGroups = ['AGE']; + samplesTable.pmfmIdsToCopy = [PmfmIds.DRESSING]; + samplesTable.showTaxonGroupColumn = false; + samplesTable.showTaxonNameColumn = false; + samplesTable.showSampleDateColumn = false; + samplesTable.defaultSampleDate = DateUtils.moment(); + samplesTable.canAddPmfm = true; + samplesTable.pmfmGroups = pmfmGroups; + } + else { + sampleTree.program = program; + } + this.cd.detectChanges(); + }); + } + markAsReady() { + var _a; + (_a = this.sampleTree) === null || _a === void 0 ? void 0 : _a.markAsReady(); + } + markAsLoaded() { + var _a; + (_a = this.sampleTree) === null || _a === void 0 ? void 0 : _a.markAsLoaded(); + } + doSubmit(event) { + // Nothing to do + } + getExampleTree(key) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!key) { + const example = this.filterForm.get('example').value; + key = example && example.label || 'default'; + } + // Get program + const programLabel = (_a = this.filterForm.get('program').value) === null || _a === void 0 ? void 0 : _a.label; + // Load example + const json = getExampleTree(key, programLabel); + // Convert to array (as Pod should send) with: + // - a local ID + // - only the parentId, and NOT the parent + const samples = EntityUtils.listOfTreeToArray((json || [])); + yield EntityUtils.fillLocalIds(samples, (_, count) => this.entities.nextValues(Sample.TYPENAME, count)); + samples.forEach(b => { + b.parentId = b.parent && b.parent.id; + delete b.parent; + }); + // Convert back to a sample tree + return Sample.fromObjectArrayAsTree(samples); + }); + } + // Load data into components + applyExample(key) { + return __awaiter(this, void 0, void 0, function* () { + const samples = yield this.getExampleTree(key); + yield this.updateView(samples); + this.tabGroup.realignInkBar(); + }); + } + dumpExample(key) { + return __awaiter(this, void 0, void 0, function* () { + const samples = yield this.getExampleTree(key); + this.dumpSamples(samples, 'example'); + }); + } + dumpSampleTree(component, outputName) { + return __awaiter(this, void 0, void 0, function* () { + yield component.save(); + const samples = component.value; + this.dumpSamples(samples, outputName); + if (component.mobile) { + const html = '
Sub samples :
'; + // TODO + // Append to result + this.outputs[outputName] += html; + } + }); + } + dumpSamples(samples, outputName, indent) { + let html = ''; + if (samples) { + SampleUtils.logTree(samples, { + showAll: false, + println: (m) => { + html += '
' + m; + } + }); + html = html.replace(/\t/g, '  '); + } + else { + html = !indent ? ' No result' : ''; + } + // Root call: display result + if (!indent) { + if (outputName) + this.outputs[outputName] = html; + console.debug(html); + } + return html; + } + copySampleTree(source, target) { + return __awaiter(this, void 0, void 0, function* () { + yield source.save(); + source.disable(); + target.disable(); + try { + yield target.setValue(source.value); + } + finally { + source.enable(); + target.enable(); + } + }); + } + /* -- protected methods -- */ + stringify(value) { + return JSON.stringify(value); + } +}; +__decorate([ + ViewChild('mobileTree'), + __metadata("design:type", SampleTreeComponent) +], SampleTreeTestPage.prototype, "mobileTree", void 0); +__decorate([ + ViewChild('desktopTree'), + __metadata("design:type", SampleTreeComponent) +], SampleTreeTestPage.prototype, "desktopTree", void 0); +__decorate([ + ViewChild('tabGroup'), + __metadata("design:type", MatTabGroup) +], SampleTreeTestPage.prototype, "tabGroup", void 0); +SampleTreeTestPage = __decorate([ + Component({ + selector: 'app-sample-tree-test', + templateUrl: './sample-tree.test.html', + styleUrls: ['./sample-tree.test.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [UntypedFormBuilder, + PlatformService, + ReferentialRefService, + ProgramRefService, + PmfmService, + EntitiesStorage, + ChangeDetectorRef]) +], SampleTreeTestPage); +export { SampleTreeTestPage }; +//# sourceMappingURL=sample-tree.test.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/sample/testing/sample-tree.test.js.map b/out-tsc/app/app/trip/sample/testing/sample-tree.test.js.map new file mode 100644 index 000000000..5700790d2 --- /dev/null +++ b/out-tsc/app/app/trip/sample/testing/sample-tree.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sample-tree.test.js","sourceRoot":"","sources":["../../../../../../src/app/trip/sample/testing/sample-tree.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/scientific-cruise/scientific-cruise-routing.module.js b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise-routing.module.js new file mode 100644 index 000000000..d3c8b7a2f --- /dev/null +++ b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise-routing.module.js @@ -0,0 +1,30 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { AuthGuardService } from '@sumaris-net/ngx-components'; +import { ScientificCruiseTable } from '@app/trip/scientific-cruise/scientific-cruise.table'; +import { AppScientificCruiseModule } from '@app/trip/scientific-cruise/scientific-cruise.module'; +const routes = [ + // Table + { + path: '', + pathMatch: 'full', + canActivate: [AuthGuardService], + component: ScientificCruiseTable, + }, +]; +let AppScientificCruiseRoutingModule = class AppScientificCruiseRoutingModule { +}; +AppScientificCruiseRoutingModule = __decorate([ + NgModule({ + imports: [ + AppScientificCruiseModule, + RouterModule.forChild(routes) + ], + exports: [ + RouterModule + ] + }) +], AppScientificCruiseRoutingModule); +export { AppScientificCruiseRoutingModule }; +//# sourceMappingURL=scientific-cruise-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/scientific-cruise/scientific-cruise-routing.module.js.map b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise-routing.module.js.map new file mode 100644 index 000000000..ac855e274 --- /dev/null +++ b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scientific-cruise-routing.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/scientific-cruise/scientific-cruise-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,EAAE,yBAAyB,EAAE,MAAM,sDAAsD,CAAC;AAEjG,MAAM,MAAM,GAAW;IACrB,QAAQ;IACR;QACE,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,WAAW,EAAE,CAAC,gBAAgB,CAAC;QAC/B,SAAS,EAAE,qBAAqB;KACjC;CACF,CAAC;AAYK,IAAM,gCAAgC,GAAtC,MAAM,gCAAgC;CAC5C,CAAA;AADY,gCAAgC;IAT5C,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,yBAAyB;YACzB,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC9B;QACD,OAAO,EAAE;YACP,YAAY;SACb;KACF,CAAC;GACW,gCAAgC,CAC5C;SADY,gCAAgC"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.config.js b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.config.js new file mode 100644 index 000000000..c46e45343 --- /dev/null +++ b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.config.js @@ -0,0 +1,25 @@ +export const SCIENTIFIC_CRUISE_FEATURE_NAME = 'scientificCruise'; +/** + * Define configuration options + */ +export const SCIENTIFIC_CRUISE_CONFIG_OPTIONS = Object.freeze({ + SCIENTIFIC_CRUISE_ENABLE: { + key: 'sumaris.scientificCruise.enable', + label: 'SCIENTIFIC_CRUISE.OPTIONS.ENABLE', + type: 'boolean', + defaultValue: true + }, + SCIENTIFIC_CRUISE_NAME: { + key: 'sumaris.scientificCruise.name', + label: 'SCIENTIFIC_CRUISE.OPTIONS.NAME', + type: 'enum', + values: [ + { + key: 'MENU.SCIENTIFIC_CRUISES', + value: 'MENU.SCIENTIFIC_CRUISES' + } + ], + defaultValue: 'MENU.SCIENTIFIC_CRUISES' + }, +}); +//# sourceMappingURL=scientific-cruise.config.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.config.js.map b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.config.js.map new file mode 100644 index 000000000..9910481c0 --- /dev/null +++ b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.config.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scientific-cruise.config.js","sourceRoot":"","sources":["../../../../../src/app/trip/scientific-cruise/scientific-cruise.config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,8BAA8B,GAAG,kBAAkB,CAAC;AAEjE;;GAEG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5D,wBAAwB,EAAuB;QAC7C,GAAG,EAAE,iCAAiC;QACtC,KAAK,EAAE,kCAAkC;QACzC,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,IAAI;KACnB;IACD,sBAAsB,EAAuB;QAC3C,GAAG,EAAE,+BAA+B;QACpC,KAAK,EAAE,gCAAgC;QACvC,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE;YACN;gBACE,GAAG,EAAE,yBAAyB;gBAC9B,KAAK,EAAE,yBAAyB;aACjC;SACF;QACD,YAAY,EAAE,yBAAyB;KACxC;CACF,CAAC,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.filter.js b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.filter.js new file mode 100644 index 000000000..0b3443fb7 --- /dev/null +++ b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.filter.js @@ -0,0 +1,96 @@ +import { __decorate, __metadata } from "tslib"; +import { RootDataEntityFilter } from '@app/data/services/model/root-data-filter.model'; +import { TripFilter } from '@app/trip/trip/trip.filter'; +import { OperationFilter } from '@app/trip/operation/operation.filter'; +import { VesselSnapshot } from '@app/referential/services/model/vessel-snapshot.model'; +import { EntityClass, fromDateISOString, isNil, isNotEmptyArray, isNotNil, toNumber, } from '@sumaris-net/ngx-components'; +let ScientificCruiseFilter = class ScientificCruiseFilter extends RootDataEntityFilter { + constructor() { + super(); + this.vesselId = null; + this.vesselSnapshot = null; + this.startDate = null; + this.endDate = null; + this.dataQualityStatus = 'VALIDATED'; + } + static toTripFilter(f) { + var _a, _b; + if (!f) + return undefined; + return TripFilter.fromObject({ + programLabel: (_a = f.program) === null || _a === void 0 ? void 0 : _a.label, + vesselId: toNumber(f.vesselId, (_b = f.vesselSnapshot) === null || _b === void 0 ? void 0 : _b.id), + startDate: f.startDate, + endDate: f.endDate, + boundingBox: f.boundingBox, + }); + } + static toOperationFilter(f) { + var _a; + if (!f) + return undefined; + return OperationFilter.fromObject({ + programLabel: (_a = f.program) === null || _a === void 0 ? void 0 : _a.label, + vesselId: f.vesselId, + startDate: f.startDate, + endDate: f.endDate, + boundingBox: f.boundingBox, + }); + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.vesselId = source.vesselId; + this.vesselSnapshot = source.vesselSnapshot && VesselSnapshot.fromObject(source.vesselSnapshot); + this.startDate = fromDateISOString(source.startDate); + this.endDate = fromDateISOString(source.endDate); + this.includedIds = source.includedIds; + this.excludedIds = source.excludedIds; + this.boundingBox = source.boundingBox; + } + asObject(opts) { + var _a; + const target = super.asObject(opts); + if (opts && opts.minify) { + // Vessel + target.vesselId = isNotNil(this.vesselId) ? this.vesselId : (_a = this.vesselSnapshot) === null || _a === void 0 ? void 0 : _a.id; + delete target.vesselSnapshot; + } + else { + target.vesselSnapshot = (this.vesselSnapshot && this.vesselSnapshot.asObject(opts)) || undefined; + } + return target; + } + buildFilter() { + var _a; + const filterFns = super.buildFilter(); + // Filter excluded ids + if (isNotEmptyArray(this.excludedIds)) { + filterFns.push((t) => isNil(t.id) || !this.excludedIds.includes(t.id)); + } + // Filter included ids + if (isNotEmptyArray(this.includedIds)) { + filterFns.push((t) => isNotNil(t.id) && this.includedIds.includes(t.id)); + } + // Vessel + const vesselId = isNotNil(this.vesselId) ? this.vesselId : (_a = this.vesselSnapshot) === null || _a === void 0 ? void 0 : _a.id; + if (isNotNil(vesselId)) { + filterFns.push((t) => { var _a; return ((_a = t.vesselSnapshot) === null || _a === void 0 ? void 0 : _a.id) === vesselId; }); + } + // Start/end period + if (this.startDate) { + const startDate = this.startDate.clone(); + filterFns.push((t) => (t.returnDateTime ? startDate.isSameOrBefore(t.returnDateTime) : startDate.isSameOrBefore(t.departureDateTime))); + } + if (this.endDate) { + const endDate = this.endDate.clone().add(1, 'day').startOf('day'); + filterFns.push((t) => t.departureDateTime && endDate.isAfter(t.departureDateTime)); + } + return filterFns; + } +}; +ScientificCruiseFilter = __decorate([ + EntityClass({ typename: 'ScientificCruiseFilterVO' }), + __metadata("design:paramtypes", []) +], ScientificCruiseFilter); +export { ScientificCruiseFilter }; +//# sourceMappingURL=scientific-cruise.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.filter.js.map b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.filter.js.map new file mode 100644 index 000000000..4d1de5aa4 --- /dev/null +++ b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scientific-cruise.filter.js","sourceRoot":"","sources":["../../../../../src/app/trip/scientific-cruise/scientific-cruise.filter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.model.js b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.model.js new file mode 100644 index 000000000..83237cd5b --- /dev/null +++ b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.model.js @@ -0,0 +1,51 @@ +import { __decorate, __metadata } from "tslib"; +import { Trip } from '../trip/trip.model'; +import { EntityClass, fromDateISOString, isNotNil, Person, toDateISOString } from '@sumaris-net/ngx-components'; +import { DataRootVesselEntity } from '@app/data/services/model/root-vessel-entity.model'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +import { VesselSnapshot } from '@app/referential/services/model/vessel-snapshot.model'; +let ScientificCruise = class ScientificCruise extends DataRootVesselEntity { + constructor() { + super(Trip.TYPENAME); + this.name = null; + this.reference = null; + this.departureDateTime = null; + this.returnDateTime = null; + this.trip = null; + this.managerPerson = null; + } + asObject(opts) { + const target = super.asObject(opts); + target.departureDateTime = toDateISOString(this.departureDateTime); + target.returnDateTime = toDateISOString(this.returnDateTime); + target.trip = (this.trip && this.trip.asObject(opts)) || undefined; + target.managerPerson = (this.managerPerson && this.managerPerson.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))) || undefined; + return target; + } + fromObject(source, opts) { + super.fromObject(source); + this.departureDateTime = fromDateISOString(source.departureDateTime); + this.returnDateTime = fromDateISOString(source.returnDateTime); + this.trip = (source.trip && Trip.fromObject(source.trip)) || undefined; + this.managerPerson = (source.managerPerson && Person.fromObject(source.managerPerson)) || undefined; + this.vesselSnapshot = (source.vesselSnapshot && VesselSnapshot.fromObject(source.vesselSnapshot)) || undefined; + return this; + } + equals(other) { + return ((super.equals(other) && isNotNil(this.id)) || + // Same vessel + (this.vesselSnapshot && + other.vesselSnapshot && + this.vesselSnapshot.id === other.vesselSnapshot.id && + // Same departure date (or, if not set, same return date) + (this.departureDateTime === other.departureDateTime || + (!this.departureDateTime && !other.departureDateTime && this.returnDateTime === other.returnDateTime)))); + } +}; +ScientificCruise.ENTITY_NAME = 'ScientificCruise'; +ScientificCruise = __decorate([ + EntityClass({ typename: 'ScientificCruiseVO' }), + __metadata("design:paramtypes", []) +], ScientificCruise); +export { ScientificCruise }; +//# sourceMappingURL=scientific-cruise.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.model.js.map b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.model.js.map new file mode 100644 index 000000000..d232515a8 --- /dev/null +++ b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scientific-cruise.model.js","sourceRoot":"","sources":["../../../../../src/app/trip/scientific-cruise/scientific-cruise.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.module.js b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.module.js new file mode 100644 index 000000000..993625039 --- /dev/null +++ b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.module.js @@ -0,0 +1,41 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { TranslateModule } from '@ngx-translate/core'; +import { AppSocialModule } from '@app/social/social.module'; +import { A11yModule } from '@angular/cdk/a11y'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { AppDataModule } from '@app/data/data.module'; +import { VesselModule } from '@app/vessel/vessel.module'; +import { AppExtractionButtonModule } from '@app/extraction/button/extraction-button.module'; +import { ScientificCruiseTable } from '@app/trip/scientific-cruise/scientific-cruise.table'; +let AppScientificCruiseModule = class AppScientificCruiseModule { + constructor() { + console.debug('[scientific-cruise] Creating module...'); + } +}; +AppScientificCruiseModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TranslateModule.forChild(), + AppSocialModule, + A11yModule, + // App module + AppCoreModule, + AppReferentialModule, + AppDataModule, + VesselModule, + AppExtractionButtonModule, + ], + declarations: [ScientificCruiseTable], + exports: [ + // Components + ScientificCruiseTable, + ], + }), + __metadata("design:paramtypes", []) +], AppScientificCruiseModule); +export { AppScientificCruiseModule }; +//# sourceMappingURL=scientific-cruise.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.module.js.map b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.module.js.map new file mode 100644 index 000000000..eaa09547a --- /dev/null +++ b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scientific-cruise.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/scientific-cruise/scientific-cruise.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAuBrF,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IACpC;QACE,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC1D,CAAC;CACF,CAAA;AAJY,yBAAyB;IArBrC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,eAAe,CAAC,QAAQ,EAAE;YAE1B,eAAe;YACf,UAAU;YAEV,aAAa;YACb,aAAa;YACb,oBAAoB;YACpB,aAAa;YACb,YAAY;YACZ,yBAAyB;SAC1B;QACD,YAAY,EAAE,CAAC,qBAAqB,CAAC;QACrC,OAAO,EAAE;YACP,aAAa;YACb,qBAAqB;SACtB;KACF,CAAC;;GACW,yBAAyB,CAIrC;SAJY,yBAAyB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.service.js b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.service.js new file mode 100644 index 000000000..4065d63e0 --- /dev/null +++ b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.service.js @@ -0,0 +1,95 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { ScientificCruise } from '@app/trip/scientific-cruise/scientific-cruise.model'; +import { ScientificCruiseFilter } from '@app/trip/scientific-cruise/scientific-cruise.filter'; +import { TripService } from '@app/trip/trip/trip.service'; +import { map } from 'rxjs/operators'; +import { Trip } from '@app/trip/trip/trip.model'; +export class ScientificCruiseComparators { + static sortByDepartureDateFn(n1, n2) { + const d1 = n1.departureDateTime; + const d2 = n2.departureDateTime; + return d1.isSame(d2) ? 0 : d1.isAfter(d2) ? 1 : -1; + } +} +let ScientificCruiseService = class ScientificCruiseService { + constructor(tripService) { + this.tripService = tripService; + } + watchAll(offset, size, sortBy, sortDirection, filter, options) { + filter = this.asFilter(filter); + const tripFilter = ScientificCruiseFilter.toTripFilter(filter); + tripFilter.hasScientificCruise = true; + tripFilter.hasObservedLocation = false; + return this.tripService + .watchAll(offset, size, sortBy, sortDirection, tripFilter, Object.assign(Object.assign({}, options), { toEntity: false })) + .pipe(map(({ data, total }) => { + const entities = (options === null || options === void 0 ? void 0 : options.toEntity) !== false + ? (data || []).map((json) => { + const entity = ScientificCruise.fromObject(json); + entity.trip = Trip.fromObject(json); + return entity; + }) + : (data || []).map((json) => { + const entity = json; + entity.trip = Trip.fromObject(json); + return entity; + }); + return { + data: entities, + total: (options === null || options === void 0 ? void 0 : options.withTotal) !== false ? total : entities.length, + }; + })); + } + asFilter(source) { + return ScientificCruiseFilter.fromObject(source); + } + deleteAll(data, opts) { + return Promise.resolve(undefined); + } + hasOfflineData() { + return Promise.resolve(false); + } + lastUpdateDate() { + return Promise.resolve(undefined); + } + load(id, opts) { + return Promise.resolve(undefined); + } + runImport(filter, opts) { + return undefined; + } + saveAll(data, opts) { + return Promise.resolve([]); + } + canUserWrite(data, opts) { + return this.tripService.canUserWrite(data.trip, opts); + } + control(data, opts) { + return this.tripService.control(data.trip, opts); + } + qualify(data, qualityFlagId) { + return __awaiter(this, void 0, void 0, function* () { + data.trip = yield this.tripService.qualify(data.trip, qualityFlagId); + return data; + }); + } + synchronize(data, opts) { + return Promise.resolve(undefined); + } + synchronizeById(id) { + return Promise.resolve(undefined); + } + terminate(entity) { + return Promise.resolve(undefined); + } + terminateById(id) { + return Promise.resolve(undefined); + } +}; +ScientificCruiseService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [TripService]) +], ScientificCruiseService); +export { ScientificCruiseService }; +//# sourceMappingURL=scientific-cruise.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.service.js.map b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.service.js.map new file mode 100644 index 000000000..3c06e143d --- /dev/null +++ b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scientific-cruise.service.js","sourceRoot":"","sources":["../../../../../src/app/trip/scientific-cruise/scientific-cruise.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.table.js b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.table.js new file mode 100644 index 000000000..58f49633b --- /dev/null +++ b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.table.js @@ -0,0 +1,409 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { arrayDistinct, chainPromises, ConfigService, FilesUtils, isEmptyArray, isNil, isNilOrBlank, isNotNil, MINIFY_ENTITY_FOR_LOCAL_STORAGE, PersonService, PersonUtils, SharedValidators, slideUpDownAnimation, splitByProperty, StatusIds, } from '@sumaris-net/ngx-components'; +import { TripSynchroImportFilter } from '@app/trip/trip/trip.filter'; +import { ScientificCruise } from '@app/trip/scientific-cruise/scientific-cruise.model'; +import { BehaviorSubject, tap } from 'rxjs'; +import { DataQualityStatusEnum, DataQualityStatusList } from '@app/data/services/model/model.utils'; +import { UntypedFormBuilder } from '@angular/forms'; +import { OperationService } from '@app/trip/operation/operation.service'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { VesselSnapshotService } from '@app/referential/services/vessel-snapshot.service'; +import { ContextService } from '@app/shared/context.service'; +import { TripContextService } from '@app/trip/trip-context.service'; +import { Operation } from '@app/trip/trip/trip.model'; +import { environment } from '@environments/environment'; +import { TRIP_FEATURE_DEFAULT_PROGRAM_FILTER } from '@app/trip/trip.config'; +import { LocationLevelIds, QualityFlagIds, VesselTypeIds } from '@app/referential/services/model/model.enum'; +import { DATA_CONFIG_OPTIONS } from '@app/data/data.config'; +import { TripTrashModal } from '@app/trip/trip/trash/trip-trash.modal'; +import { TripOfflineModal } from '@app/trip/trip/offline/trip-offline.modal'; +import { ExtractionType } from '@app/extraction/type/extraction-type.model'; +import { ExtractionUtils } from '@app/extraction/common/extraction.utils'; +import { OperationsMapModal } from '@app/trip/operation/map/operations-map.modal'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { AppRootDataTable, AppRootTableSettingsEnum } from '@app/data/table/root-table.class'; +import { ScientificCruiseFilter } from '@app/trip/scientific-cruise/scientific-cruise.filter'; +import { ScientificCruiseComparators, ScientificCruiseService } from '@app/trip/scientific-cruise/scientific-cruise.service'; +import { SCIENTIFIC_CRUISE_CONFIG_OPTIONS, SCIENTIFIC_CRUISE_FEATURE_NAME } from '@app/trip/scientific-cruise/scientific-cruise.config'; +import { filter } from 'rxjs/operators'; +export const ScientificCruiseTableSettingsEnum = { + PAGE_ID: 'scientificCruises', + FILTER_KEY: AppRootTableSettingsEnum.FILTER_KEY, + FEATURE_ID: SCIENTIFIC_CRUISE_FEATURE_NAME, +}; +let ScientificCruiseTable = class ScientificCruiseTable extends AppRootDataTable { + constructor(injector, dataService, operationService, personService, referentialRefService, vesselSnapshotService, configService, context, tripContext, formBuilder, cd) { + super(injector, ScientificCruise, ScientificCruiseFilter, ['quality', 'program', 'name', 'vessel', 'departureLocation', 'departureDateTime', 'returnDateTime', 'managerPerson', 'comments'], dataService, null); + this.operationService = operationService; + this.personService = personService; + this.referentialRefService = referentialRefService; + this.vesselSnapshotService = vesselSnapshotService; + this.configService = configService; + this.context = context; + this.tripContext = tripContext; + this.formBuilder = formBuilder; + this.cd = cd; + this.$title = new BehaviorSubject(''); + this.statusList = DataQualityStatusList; + this.statusById = DataQualityStatusEnum; + this.showRecorder = true; + this.showObservers = true; + this.canDownload = false; + this.canUpload = false; + this.canOpenMap = false; + this.i18nColumnPrefix = 'TRIP.TABLE.'; + this.filterForm = formBuilder.group({ + program: [null, SharedValidators.entity], + vesselSnapshot: [null, SharedValidators.entity], + startDate: [null, SharedValidators.validDate], + endDate: [null, SharedValidators.validDate], + synchronizationStatus: [null], + recorderDepartment: [null, SharedValidators.entity], + dataQualityStatus: [null], + qualityFlagId: [null, SharedValidators.integer], + }); + this.autoLoad = false; // See restoreFilterOrLoad() + this.inlineEdition = false; + this.defaultSortBy = 'departureDateTime'; + this.defaultSortDirection = 'desc'; + this.confirmBeforeDelete = true; + this.canEdit = this.accountService.isUser(); + const showAdvancedFeatures = this.accountService.isAdmin(); + this.canDownload = showAdvancedFeatures; + this.canUpload = showAdvancedFeatures; + this.canOpenMap = showAdvancedFeatures; + this.settingsId = ScientificCruiseTableSettingsEnum.PAGE_ID; // Fixed value, to be able to reuse it in the editor page + this.featureName = ScientificCruiseTableSettingsEnum.FEATURE_ID; + // FOR DEV ONLY ---- + this.debug = !environment.production; + } + get filterObserversForm() { + return this.filterForm.controls.observers; + } + get filterDataQualityControl() { + return this.filterForm.controls.dataQualityStatus; + } + ngOnInit() { + super.ngOnInit(); + // Programs combo (filter) + this.registerAutocompleteField('program', { + service: this.programRefService, + filter: TRIP_FEATURE_DEFAULT_PROGRAM_FILTER, + mobile: this.mobile + }); + // Locations combo (filter) + this.registerAutocompleteField('location', { + service: this.referentialRefService, + filter: { + entityName: 'Location', + levelId: LocationLevelIds.PORT, + }, + mobile: this.mobile, + }); + // Combo: vessels + this.vesselSnapshotService.getAutocompleteFieldOptions().then((opts) => { + this.registerAutocompleteField('vesselSnapshot', Object.assign(Object.assign({}, opts), { attributes: ['name'], filter: Object.assign(Object.assign({}, opts.filter), { searchAttributes: ['name'], vesselTypeId: VesselTypeIds.SCIENTIFIC_RESEARCH_VESSEL }) })); + }); + // Combo: recorder department + this.registerAutocompleteField('department', { + service: this.referentialRefService, + filter: { + entityName: 'Department', + }, + mobile: this.mobile, + }); + // Combo: recorder person + const personAttributes = this.settings.getFieldDisplayAttributes('person', ['lastName', 'firstName', 'department.name']); + this.registerAutocompleteField('person', { + service: this.personService, + filter: { + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE], + }, + attributes: personAttributes, + displayWith: PersonUtils.personToString, + mobile: this.mobile, + }); + this.registerSubscription(this.configService.config + .pipe(filter(isNotNil), tap((config) => { + console.info('[scientific-cruises] Init from config', config); + const title = config && config.getProperty(SCIENTIFIC_CRUISE_CONFIG_OPTIONS.SCIENTIFIC_CRUISE_NAME); + this.$title.next(title); + this.showQuality = config.getPropertyAsBoolean(DATA_CONFIG_OPTIONS.QUALITY_PROCESS_ENABLE); + this.setShowColumn('quality', this.showQuality, { emitEvent: false }); + if (this.showQuality) { + this.referentialRefService.loadQualityFlags().then((items) => { + this.qualityFlags = items; + this.qualityFlagsById = splitByProperty(items, 'id'); + }); + } + this.updateColumns(); + // Restore filter from settings, or load all + this.restoreFilterOrLoad(); + })) + .subscribe()); + // Clear the existing trip context + this.resetContext(); + } + /** + * Action triggered when user swipes + */ + onSwipeTab(event) { + // DEBUG + // if (this.debug) console.debug("[scientific-cruises] onSwipeTab()"); + // Skip, if not a valid swipe event + if (!event || event.defaultPrevented || (event.srcEvent && event.srcEvent.defaultPrevented) || event.pointerType !== 'touch') { + return false; + } + this.toggleSynchronizationStatus(); + return true; + } + openRow(id, row) { + const _super = Object.create(null, { + openRow: { get: () => super.openRow } + }); + var _a; + return __awaiter(this, void 0, void 0, function* () { + const tripId = (_a = row.currentData.trip) === null || _a === void 0 ? void 0 : _a.id; + console.log('TODO open data', row.currentData); + if (isNotNil(tripId)) { + return this.navController.navigateForward(`trips/${id.toString()}`, { + queryParams: {} + }); + } + else { + _super.openRow.call(this, id, row); + } + }); + } + openTrashModal(event) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[scientific-cruises] Opening trash modal...'); + const modalOptions = { + synchronizationStatus: (this.filter && this.filter.synchronizationStatus) || 'SYNC', + }; + const modal = yield this.modalCtrl.create({ + component: TripTrashModal, + componentProps: modalOptions, + keyboardClose: true, + cssClass: 'modal-large', + }); + // Open the modal + yield modal.present(); + // On dismiss + const { data, role } = yield modal.onDidDismiss(); + if (role === 'cancel' || isEmptyArray(data)) + return; // CANCELLED + // Select the local trips tab + this.setSynchronizationStatus('DIRTY'); + // If only one restored: open it + const trip = (data === null || data === void 0 ? void 0 : data.length) === 1 && data[0]; + if (isNotNil(trip.id)) { + yield this.navController.navigateForward([trip.id], { + relativeTo: this.route, + }); + } + }); + } + prepareOfflineMode(event, opts) { + const _super = Object.create(null, { + prepareOfflineMode: { get: () => super.prepareOfflineMode } + }); + return __awaiter(this, void 0, void 0, function* () { + if (this.importing) + return; // Skip + const feature = this.settings.getOfflineFeature(this._dataService.featureName) || { + name: this._dataService.featureName, + }; + // eslint-disable-next-line @typescript-eslint/no-shadow + const filter = this.asFilter(this.filterForm.value); + const synchroFilter = Object.assign({ vesselId: filter.vesselId || (filter.vesselSnapshot && filter.vesselSnapshot.id) || undefined, programLabel: (filter.program && filter.program.label) || undefined }, feature.filter); + // Open offline, if missing program or vesselId + if (event || isNilOrBlank(synchroFilter === null || synchroFilter === void 0 ? void 0 : synchroFilter.programLabel) || isNil(synchroFilter === null || synchroFilter === void 0 ? void 0 : synchroFilter.vesselId)) { + const modal = yield this.modalCtrl.create({ + component: TripOfflineModal, + componentProps: { + value: synchroFilter, + }, + keyboardClose: true, + }); + // Open the modal + modal.present(); + // Wait until closed + const { data, role } = yield modal.onDidDismiss(); + if (!data || role === 'cancel') + return; // User cancelled + // Update feature filter, and save it into settings + feature.filter = TripSynchroImportFilter.fromObject(data).asObject(); + this.settings.saveOfflineFeature(feature); + // DEBUG + console.debug('[trip-table] Will prepare offline mode, using filter:', feature.filter); + } + else { + // Saving feature's filter, to order to use it in TripService.runImport() + feature.filter = TripSynchroImportFilter.fromObject(synchroFilter).asObject(); + this.settings.saveOfflineFeature(feature); + } + return _super.prepareOfflineMode.call(this, event, opts); + }); + } + downloadSelectionAsJson(event) { + return __awaiter(this, void 0, void 0, function* () { + const ids = (this.selection.selected || []).map((row) => { var _a; return (_a = row.currentData) === null || _a === void 0 ? void 0 : _a.id; }); + return this.downloadAsJson(ids); + }); + } + openDownloadPage(type) { + return __awaiter(this, void 0, void 0, function* () { + const entities = (this.selection.selected || []) + .map((row) => row.currentData) + .filter(isNotNil) + .sort(ScientificCruiseComparators.sortByDepartureDateFn); + if (isEmptyArray(entities)) + return; // Skip if empty + const programs = arrayDistinct(entities.map((t) => t.program), 'label'); + if (programs.length !== 1) { + this.showToast({ + type: 'warning', + message: 'TRIP.TABLE.WARNING.NEED_ONE_PROGRAM', + }); + return; // Skip if no program + } + // Clear selection + this.selection.clear(); + this.markForCheck(); + // Create extraction type and filter + type = type || ExtractionType.fromLiveLabel('PMFM_TRIP'); + const programLabel = programs[0].label; + const tripIds = entities.map((t) => { var _a; return (_a = t.trip) === null || _a === void 0 ? void 0 : _a.id; }); + const filter = ExtractionUtils.createTripFilter(programLabel, tripIds); + const queryParams = ExtractionUtils.asQueryParams(type, filter); + // Open extraction + yield this.router.navigate(['extraction', 'data'], { queryParams }); + }); + } + openSelectionMap(event) { + return __awaiter(this, void 0, void 0, function* () { + const entities = (this.selection.selected || []) + .map((row) => row.currentData) + .filter(isNotNil) + .sort(ScientificCruiseComparators.sortByDepartureDateFn); + if (isEmptyArray(entities)) + return; // Skip if empty + const programs = arrayDistinct(entities.map((t) => t.program), 'label'); + if (programs.length !== 1) { + this.showToast({ + type: 'warning', + message: 'TRIP.TABLE.WARNING.NEED_ONE_PROGRAM', + }); + return; // Skip if no program + } + const programLabel = programs[0].label; + const operations = yield chainPromises(entities.map((entity) => () => this.operationService + .loadAllByTrip({ tripId: entity.trip.id }, { fetchPolicy: 'cache-first', fullLoad: false, withTotal: true /*better chance to get a cached value*/ }) + .then((res) => (Object.assign(Object.assign({}, entity.trip), { operations: res.data }))))); + const modal = yield this.modalCtrl.create({ + component: OperationsMapModal, + componentProps: { + data: operations, + programLabel, + latLongPattern: this.settings.latLongFormat, + }, + keyboardClose: true, + cssClass: 'modal-large', + }); + // Open the modal + yield modal.present(); + // Wait until closed + const { data } = yield modal.onDidDismiss(); + if (data instanceof Operation) { + console.info('[trips-table] User select an operation from the map:', data); + this.selection.clear(); + this.markForCheck(); + //Full load the program + const program = yield this.programRefService.loadByLabel(programLabel); + // Build the final path + const operationEditor = program.getProperty(ProgramProperties.TRIP_OPERATION_EDITOR); + const editorPath = operationEditor !== 'legacy' ? [operationEditor] : []; + yield this.router.navigate(['trips', data.tripId, 'operation', ...editorPath, data.id]); + return; + } + }); + } + clearFilterValue(key, event) { + if (event) { + event.preventDefault(); + event.stopPropagation(); + } + this.filterForm.get(key).reset(null); + } + /* -- protected methods -- */ + markForCheck() { + this.cd.markForCheck(); + } + resetContext() { + // Consume all context data, to avoid reusing it somewhere + // We should do that at each menu entry point + this.context.reset(); + this.tripContext.reset(); + } + downloadAsJson(ids) { + return __awaiter(this, void 0, void 0, function* () { + if (isEmptyArray(ids)) + return; // Skip if empty + // Create file content + const entities = (yield Promise.all(ids.map((id) => this._dataService.load(id, { fullLoad: true, withOperation: true })))).map((entity) => entity.asObject(MINIFY_ENTITY_FOR_LOCAL_STORAGE)); + const content = JSON.stringify(entities); + // Write to file + FilesUtils.writeTextToFile(content, { + filename: this.translate.instant('TRIP.TABLE.DOWNLOAD_JSON_FILENAME'), + type: 'application/json', + }); + }); + } + excludeNotQualified(qualityFlag) { + return (qualityFlag === null || qualityFlag === void 0 ? void 0 : qualityFlag.id) !== QualityFlagIds.NOT_QUALIFIED; + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], ScientificCruiseTable.prototype, "showRecorder", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ScientificCruiseTable.prototype, "showObservers", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ScientificCruiseTable.prototype, "canDownload", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ScientificCruiseTable.prototype, "canUpload", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], ScientificCruiseTable.prototype, "canOpenMap", void 0); +ScientificCruiseTable = __decorate([ + Component({ + selector: 'app-scientific-cruise-table', + templateUrl: 'scientific-cruise.table.html', + styleUrls: ['./scientific-cruise.table.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + animations: [slideUpDownAnimation], + }), + __metadata("design:paramtypes", [Injector, + ScientificCruiseService, + OperationService, + PersonService, + ReferentialRefService, + VesselSnapshotService, + ConfigService, + ContextService, + TripContextService, + UntypedFormBuilder, + ChangeDetectorRef]) +], ScientificCruiseTable); +export { ScientificCruiseTable }; +//# sourceMappingURL=scientific-cruise.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.table.js.map b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.table.js.map new file mode 100644 index 000000000..ec8b14d73 --- /dev/null +++ b/out-tsc/app/app/trip/scientific-cruise/scientific-cruise.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scientific-cruise.table.js","sourceRoot":"","sources":["../../../../../src/app/trip/scientific-cruise/scientific-cruise.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip-context.service.js b/out-tsc/app/app/trip/trip-context.service.js new file mode 100644 index 000000000..b7e0e8c7a --- /dev/null +++ b/out-tsc/app/app/trip/trip-context.service.js @@ -0,0 +1,29 @@ +import { __decorate, __metadata, __param } from "tslib"; +import { Inject, Injectable, Optional } from '@angular/core'; +import { DataContextService } from '@app/data/services/model/data-context.model'; +import { CONTEXT_DEFAULT_STATE } from '@app/shared/context.service'; +let TripContextService = class TripContextService extends DataContextService { + constructor(defaultState) { + super(defaultState || {}); + } + set trip(value) { + this.set('trip', () => value); + } + get trip() { + return this.get('trip'); + } + get operation() { + return this.get('operation'); + } + set operation(value) { + this.set('operation', _ => value); + } +}; +TripContextService = __decorate([ + Injectable({ providedIn: 'root' }), + __param(0, Optional()), + __param(0, Inject(CONTEXT_DEFAULT_STATE)), + __metadata("design:paramtypes", [Object]) +], TripContextService); +export { TripContextService }; +//# sourceMappingURL=trip-context.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip-context.service.js.map b/out-tsc/app/app/trip/trip-context.service.js.map new file mode 100644 index 000000000..f295fe734 --- /dev/null +++ b/out-tsc/app/app/trip/trip-context.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip-context.service.js","sourceRoot":"","sources":["../../../../src/app/trip/trip-context.service.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAe,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AAE9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAQ7D,IAAM,kBAAkB,GAAxB,MAAM,kBAAwD,SAAQ,kBAAqB;IAEhG,YAAuD,YAAe;QACpE,KAAK,CAAC,YAAY,IAAO,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,IAAI,CAAC,KAAW;QAClB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,SAAS,CAAC,KAAgB;QAC5B,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;CACF,CAAA;AArBY,kBAAkB;IAD9B,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;IAGlB,WAAA,QAAQ,EAAE,CAAA;IAAE,WAAA,MAAM,CAAC,qBAAqB,CAAC,CAAA;;GAF3C,kBAAkB,CAqB9B;SArBY,kBAAkB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip.config.js b/out-tsc/app/app/trip/trip.config.js new file mode 100644 index 000000000..518c49b9e --- /dev/null +++ b/out-tsc/app/app/trip/trip.config.js @@ -0,0 +1,182 @@ +import { StatusIds } from '@sumaris-net/ngx-components'; +import { AcquisitionLevelCodes, UnitLabel } from '@app/referential/services/model/model.enum'; +/** + * Name of the features (e.g. to be used by settings) + */ +export const TRIP_FEATURE_NAME = 'trip'; +export const OBSERVED_LOCATION_FEATURE_NAME = 'observedLocation'; +export const TRIP_FEATURE_DEFAULT_PROGRAM_FILTER = Object.freeze({ + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], + acquisitionLevelLabels: [AcquisitionLevelCodes.TRIP, AcquisitionLevelCodes.OPERATION, AcquisitionLevelCodes.CHILD_OPERATION] +}); +/** + * Define configuration options + */ +export const TRIP_CONFIG_OPTIONS = Object.freeze({ + TRIP_ENABLE: { + key: 'sumaris.trip.enable', + label: 'TRIP.OPTIONS.ENABLE', + type: 'boolean' + }, + TRIP_NAME: { + key: 'sumaris.trip.name', + label: 'TRIP.OPTIONS.NAME', + type: 'enum', + values: [ + { + key: 'MENU.TRIPS', + value: 'MENU.TRIPS' + }, + { + key: 'MENU.SCIENTIFIC_CRUISES', + value: 'MENU.SCIENTIFIC_CRUISES' + }, + { + key: 'MENU.LOGBOOKS', + value: 'MENU.LOGBOOKS' + } + ], + defaultValue: 'MENU.TRIPS' + }, + OBSERVED_LOCATION_ENABLE: { + key: 'sumaris.observedLocation.enable', + label: 'OBSERVED_LOCATION.OPTIONS.ENABLE', + type: 'boolean' + }, + OBSERVED_LOCATION_NAME: { + key: 'sumaris.observedLocation.name', + label: 'OBSERVED_LOCATION.OPTIONS.NAME', + type: 'enum', + values: [ + { + key: 'MENU.OBSERVATIONS', + value: 'MENU.OBSERVATIONS' + }, + { + key: 'MENU.OCCASIONS', + value: 'MENU.OCCASIONS' + }, + { + key: 'MENU.AUCTION_OCCASIONS', + value: 'MENU.AUCTION_OCCASIONS' + } + ], + defaultValue: 'MENU.OCCASIONS' + }, + OBSERVED_LOCATION_LANDINGS_TAB_ENABLE: { + key: 'sumaris.observedLocation.landings.tab.enable', + label: 'OBSERVED_LOCATION.OPTIONS.LANDINGS_TAB_ENABLE', + type: 'boolean', + defaultValue: 'false' + } +}); +export const TRIP_LOCAL_SETTINGS_OPTIONS = Object.freeze({ + SAMPLE_WEIGHT_UNIT: { + key: 'sumaris.trip.samples.weightUnit', + label: 'TRIP.SAMPLE.SETTINGS.SAMPLE_WEIGHT_UNIT', + type: 'enum', + values: [ + { + key: UnitLabel.KG, + value: UnitLabel.KG + }, + { + key: UnitLabel.GRAM, + value: UnitLabel.GRAM + }, + { + key: UnitLabel.MG, + value: UnitLabel.MG + }, + { + key: UnitLabel.TON, + value: UnitLabel.TON + } + ], + // No default value (keep program or PMFM unit) + //defaultValue: UnitLabel.KG + }, + OPERATION_GEOLOCATION_TIMEOUT: { + key: 'sumaris.trip.operation.geolocation.timeout', + label: 'TRIP.OPERATION.SETTINGS.GEOLOCATION_TIMEOUT', + type: 'enum', + values: [ + { + key: '20', + value: '20' + }, + { + key: '40', + value: '40' + }, + { + key: '60', + value: '60' + } + ], + // 40s + defaultValue: '40' + } +}); +export const TRIP_GRAPHQL_TYPE_POLICIES = { + MeasurementVO: { + keyFields: ['entityName', 'id'] + }, + AggregatedLandingVO: { + keyFields: ['observedLocationId', 'vesselSnapshot', ['id']] + }, + VesselActivityVO: { + keyFields: ['date', 'rankOrder', 'observedLocationId', 'tripId'] //'landingId', + } +}; +/** + * Define the way the entities will be stored into the local storage + */ +export const TRIP_STORAGE_TYPE_POLICIES = { + TripVO: { + mode: 'by-id', + skipNonLocalEntities: true, + lightFieldsExcludes: ['measurements', 'sale', 'gears', 'operationGroups', 'operations'] + }, + OperationVO: { + mode: 'by-id', + skipNonLocalEntities: false, + lightFieldsExcludes: [ + 'gearMeasurements', + 'catchBatch', + 'samples', + // Keep only childOperationId and parentOperationId, but NOT entities + 'childOperation', 'parentOperation' + ] + }, + ObservedLocationVO: { + mode: 'by-id', + skipNonLocalEntities: true + }, + LandingVO: { + mode: 'by-id', + skipNonLocalEntities: true, + lightFieldsExcludes: ['samples'] + }, + // 'AggregatedLandingVO': >{ + // mode: 'default', + // skipNonLocalEntities: true, + // lightFieldsExcludes: ['vesselActivities'] + // }, + // + // 'VesselActivityVO': >{ + // mode: 'default', + // skipNonLocalEntities: true, + // lightFieldsExcludes: ['metiers'] + // }, + // Entity used to to generate local ids, and store historical data + // TODO: use 'Remote#' for historical data + PhysicalGearVO: { + skipNonLocalEntities: false // Keep remote entities + }, + // Fake entity, use to store historical data + 'Remote#LandingVO': { + skipNonLocalEntities: false // Keep remote entities + } +}; +//# sourceMappingURL=trip.config.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip.config.js.map b/out-tsc/app/app/trip/trip.config.js.map new file mode 100644 index 000000000..b884de64a --- /dev/null +++ b/out-tsc/app/app/trip/trip.config.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip.config.js","sourceRoot":"","sources":["../../../../src/app/trip/trip.config.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip.errors.js b/out-tsc/app/app/trip/trip.errors.js new file mode 100644 index 000000000..44d9fbe1a --- /dev/null +++ b/out-tsc/app/app/trip/trip.errors.js @@ -0,0 +1,7 @@ +export const TripErrorCodes = { + UPDATE_OBSERVED_LOCATION_CHILDREN_DATE_ERROR: 248, + ADD_TRIP_GEAR_ERROR: 249, + CHILD_OPERATION_NOT_FOUND: 250, + PARENT_OPERATION_NOT_FOUND: 251 +}; +//# sourceMappingURL=trip.errors.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip.errors.js.map b/out-tsc/app/app/trip/trip.errors.js.map new file mode 100644 index 000000000..2e1ed54b3 --- /dev/null +++ b/out-tsc/app/app/trip/trip.errors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip.errors.js","sourceRoot":"","sources":["../../../../src/app/trip/trip.errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAE5B,4CAA4C,EAAE,GAAG;IACjD,mBAAmB,EAAE,GAAG;IACxB,yBAAyB,EAAE,GAAG;IAC9B,0BAA0B,EAAE,GAAG;CAChC,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip.testing.module.js b/out-tsc/app/app/trip/trip.testing.module.js new file mode 100644 index 000000000..8012ab1b2 --- /dev/null +++ b/out-tsc/app/app/trip/trip.testing.module.js @@ -0,0 +1,95 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { CommonModule } from '@angular/common'; +import { CoreModule } from '@sumaris-net/ngx-components'; +import { BatchTreeTestPage } from './batch/testing/batch-tree.test'; +import { AppTripModule } from './trip/trip.module'; +import { SharedModule } from '@sumaris-net/ngx-components'; +import { TranslateModule } from '@ngx-translate/core'; +import { BatchGroupFormTestPage } from '@app/trip/batch/group/testing/batch-group.form.test'; +import { MatCheckboxModule } from '@angular/material/checkbox'; +import { SampleTreeTestPage } from '@app/trip/sample/testing/sample-tree.test'; +import { PhysicalGearsTestPage } from '@app/trip/physicalgear/testing/physical-gears.test'; +import { AppSampleModule } from '@app/trip/sample/sample.module'; +import { AppBatchModule } from '@app/trip/batch/batch.module'; +import { AppPhysicalGearModule } from '@app/trip/physicalgear/physical-gear.module'; +import { BatchTreeContainerTestPage } from '@app/trip/batch/testing/batch-tree-container.test'; +import { BatchFormTestPage } from '@app/trip/batch/common/testing/batch.form.test'; +export const TRIP_TESTING_PAGES = [ + { label: 'Trip module', divider: true }, + { label: 'Physical gears', page: '/testing/trip/physicalGears' }, + { label: 'Batch form', page: '/testing/trip/batchForm' }, + { label: 'Batch group form', page: '/testing/trip/batchGroupForm' }, + { label: 'Batch tree', page: '/testing/trip/batchTree' }, + { label: 'Batch tree container', page: '/testing/trip/batchTreeContainer' }, + { label: 'Sample tree', page: '/testing/trip/sampleTree' } +]; +const routes = [ + { + path: 'batchTree', + pathMatch: 'full', + component: BatchTreeTestPage + }, + { + path: 'batchTreeContainer', + pathMatch: 'full', + component: BatchTreeContainerTestPage + }, + { + path: 'batchGroupForm', + pathMatch: 'full', + component: BatchGroupFormTestPage + }, + { + path: 'batchForm', + pathMatch: 'full', + component: BatchFormTestPage + }, + { + path: 'sampleTree', + pathMatch: 'full', + component: SampleTreeTestPage + }, + { + path: 'physicalGears', + pathMatch: 'full', + component: PhysicalGearsTestPage + }, +]; +let TripTestingModule = class TripTestingModule { +}; +TripTestingModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + SharedModule, + CoreModule, + TranslateModule.forChild(), + RouterModule.forChild(routes), + AppTripModule, + AppSampleModule, + AppBatchModule, + AppPhysicalGearModule, + MatCheckboxModule, + ], + declarations: [ + BatchFormTestPage, + BatchGroupFormTestPage, + BatchTreeTestPage, + BatchTreeContainerTestPage, + PhysicalGearsTestPage, + SampleTreeTestPage, + ], + exports: [ + BatchFormTestPage, + BatchGroupFormTestPage, + BatchTreeTestPage, + BatchTreeContainerTestPage, + SampleTreeTestPage, + PhysicalGearsTestPage + ] + }) +], TripTestingModule); +export { TripTestingModule }; +//# sourceMappingURL=trip.testing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip.testing.module.js.map b/out-tsc/app/app/trip/trip.testing.module.js.map new file mode 100644 index 000000000..57e046153 --- /dev/null +++ b/out-tsc/app/app/trip/trip.testing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip.testing.module.js","sourceRoot":"","sources":["../../../../src/app/trip/trip.testing.module.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/offline/trip-offline.modal.js b/out-tsc/app/app/trip/trip/offline/trip-offline.modal.js new file mode 100644 index 000000000..9f4ab3419 --- /dev/null +++ b/out-tsc/app/app/trip/trip/offline/trip-offline.modal.js @@ -0,0 +1,176 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { ModalController } from '@ionic/angular'; +import { TranslateService } from '@ngx-translate/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { AppForm, AppFormUtils, SharedValidators, slideUpDownAnimation, StatusIds } from '@sumaris-net/ngx-components'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { ProgramRefQueries, ProgramRefService } from '@app/referential/services/program-ref.service'; +import { TripSynchroImportFilter } from '@app/trip/trip/trip.filter'; +import { VesselSnapshotService } from '@app/referential/services/vessel-snapshot.service'; +import { DATA_IMPORT_PERIODS } from '@app/data/data.config'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import moment from 'moment'; +let TripOfflineModal = class TripOfflineModal extends AppForm { + constructor(injector, viewCtrl, translate, formBuilder, programRefService, referentialRefService, vesselSnapshotService, cd) { + super(injector, formBuilder.group({ + program: [null, Validators.compose([Validators.required, SharedValidators.entity])], + vesselSnapshot: [null, Validators.required], + periodDuration: ['15 day', Validators.required], + })); + this.viewCtrl = viewCtrl; + this.translate = translate; + this.formBuilder = formBuilder; + this.programRefService = programRefService; + this.referentialRefService = referentialRefService; + this.vesselSnapshotService = vesselSnapshotService; + this.cd = cd; + this.title = 'TRIP.OFFLINE_MODAL.TITLE'; + this._enable = false; // Disable by default + this.mobile = this.settings.mobile; + // Prepare start date items + const datePattern = translate.instant('COMMON.DATE_PATTERN'); + this.periodDurationLabels = DATA_IMPORT_PERIODS.map(v => { + const date = moment().utc(false) + .add(-1 * v.value, v.unit); // Substract the period, from now + return { + key: `${v.value} ${v.unit}`, + label: `${date.fromNow(true /*no suffix*/)} (${date.format(datePattern)})`, + startDate: date.startOf('day') // Reset time + }; + }); + } + get value() { + return this.getValue(); + } + set value(data) { + this.setValue(data); + } + get valid() { + return this.form.valid; + } + get modalName() { + return this.constructor.name; + } + ngOnInit() { + super.ngOnInit(); + // Program + this.registerAutocompleteField('program', { + service: this.programRefService, + filter: { + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], + acquisitionLevelLabels: [AcquisitionLevelCodes.TRIP, AcquisitionLevelCodes.OPERATION, AcquisitionLevelCodes.CHILD_OPERATION] + }, + mobile: this.mobile + }); + // Combo: vessels + this.vesselSnapshotService.getAutocompleteFieldOptions().then(opts => this.registerAutocompleteField('vesselSnapshot', opts)); + } + setValue(value) { + return __awaiter(this, void 0, void 0, function* () { + if (!value) + return; // skip + const json = { + program: null, + vesselSnapshot: null, + periodDuration: null + }; + // Program + if (value.programLabel) { + try { + json.program = yield this.programRefService.loadByLabel(value.programLabel, { query: ProgramRefQueries.loadLight }); + } + catch (err) { + console.error(err); + json.program = null; + if (err && err.message) { + this.setError(err.message); + } + } + } + if (value.vesselId) { + try { + json.vesselSnapshot = yield this.vesselSnapshotService.load(value.vesselId); + } + catch (err) { + console.error(err); + json.vesselSnapshot = null; + if (err && err.message) { + this.errorSubject.next(err.message); + } + } + } + // Duration period + if (value.periodDuration && value.periodDurationUnit) { + json.periodDuration = `${value.periodDuration} ${value.periodDurationUnit}`; + } + this.form.patchValue(json); + this.enable(); + this.markAsLoaded(); + }); + } + getValue() { + const json = this.form.value; + // DEBUG + console.debug('[trip-offline] Modal form.value:', json); + const value = new TripSynchroImportFilter(); + // Set program + value.programLabel = json.program && json.program.label || json.program; + value.vesselId = json.vesselSnapshot && json.vesselSnapshot.id || json.vesselSnapshot; + // Set start date + if (json.periodDuration) { + const periodDuration = this.periodDurationLabels.find(item => item.key === json.periodDuration); + value.startDate = periodDuration && periodDuration.startDate; + // Keep value of periodDuration (to be able to save it in local settings) + const parts = json.periodDuration.split(' '); + value.periodDuration = +parts[0]; + value.periodDurationUnit = parts[1]; + } + return value; + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.viewCtrl.dismiss(null, 'cancel'); + }); + } + validate(event) { + return __awaiter(this, void 0, void 0, function* () { + this.errorSubject.next(null); + this.markAllAsTouched(); + yield AppFormUtils.waitWhilePending(this.form); + if (this.form.invalid) { + AppFormUtils.logFormErrors(this.form, '[offline-import-config] '); + return; // stop + } + return this.viewCtrl.dismiss(this.getValue(), 'OK'); + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], TripOfflineModal.prototype, "title", void 0); +TripOfflineModal = __decorate([ + Component({ + selector: 'app-trip-offline-modal', + styleUrls: [ + './trip-offline.modal.scss' + ], + templateUrl: './trip-offline.modal.html', + animations: [slideUpDownAnimation], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + ModalController, + TranslateService, + UntypedFormBuilder, + ProgramRefService, + ReferentialRefService, + VesselSnapshotService, + ChangeDetectorRef]) +], TripOfflineModal); +export { TripOfflineModal }; +//# sourceMappingURL=trip-offline.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/offline/trip-offline.modal.js.map b/out-tsc/app/app/trip/trip/offline/trip-offline.modal.js.map new file mode 100644 index 000000000..3f601c0db --- /dev/null +++ b/out-tsc/app/app/trip/trip/offline/trip-offline.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip-offline.modal.js","sourceRoot":"","sources":["../../../../../../src/app/trip/trip/offline/trip-offline.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/base-trip.report.js b/out-tsc/app/app/trip/trip/report/base-trip.report.js new file mode 100644 index 000000000..72ae3e214 --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/base-trip.report.js @@ -0,0 +1,471 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { Directive, Injector, Optional, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core'; +import { arrayDistinct, collectByProperty, Color, DateUtils, firstTruePromise, fromDateISOString, getProperty, isEmptyArray, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, isNotNilOrNaN, removeDuplicatesFromArray, sleep, toDateISOString, waitFor, } from '@sumaris-net/ngx-components'; +import { BehaviorSubject } from 'rxjs'; +import { ChartJsUtils, ChartJsUtilsColor } from '@app/shared/chartsjs.utils'; +import { TripReportService } from '@app/trip/trip/report/trip-report.service'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { PmfmNamePipe } from '@app/referential/pipes/pmfms.pipe'; +import { collectByFunction } from '@app/shared/functions'; +import { ExtractionUtils } from '@app/extraction/common/extraction.utils'; +import { ExtractionFilter, ExtractionType } from '@app/extraction/type/extraction-type.model'; +import { AppExtractionReport, ExtractionReportStats } from '@app/data/report/extraction-report.class'; +import { VesselSnapshot } from '@app/referential/services/model/vessel-snapshot.model'; +import { VesselSnapshotService } from '@app/referential/services/vessel-snapshot.service'; +import { Operation, Trip } from '@app/trip/trip/trip.model'; +import { TripService } from '@app/trip/trip/trip.service'; +export class BaseTripReportStats extends ExtractionReportStats { + fromObject(source) { + var _a, _b, _c; + super.fromObject(source); + this.programLabel = source.programLabel; + this.startDate = fromDateISOString(source.startDate); + this.endDate = fromDateISOString(source.endDate); + this.trips = ((_a = source.trips) === null || _a === void 0 ? void 0 : _a.map(Trip.fromObject)) || []; + this.operations = ((_b = source.operations) === null || _b === void 0 ? void 0 : _b.map(Operation.fromObject)) || []; + this.vesselSnapshots = ((_c = source.vesselSnapshots) === null || _c === void 0 ? void 0 : _c.map(VesselSnapshot.fromObject)) || []; + this.vesselLength = source.vesselLength; + // Do not compute species here, they are re-computed whit TripReport.computeSpecies + } + asObject(opts) { + var _a, _b; + const target = super.asObject(opts); + return Object.assign(Object.assign({}, target), { programLabel: this.programLabel, startDate: toDateISOString(this.startDate), endDate: toDateISOString(this.endDate), trips: this.trips.map(item => item.asObject(opts)), operations: (_a = this.operations) === null || _a === void 0 ? void 0 : _a.map(item => item.asObject(opts)), vesselSnapshots: (_b = this.vesselSnapshots) === null || _b === void 0 ? void 0 : _b.map(item => item.asObject(opts)), vesselLength: this.vesselLength }); + } +} +let BaseTripReport = class BaseTripReport extends AppExtractionReport { + constructor(injector, tripReportService, statsType) { + super(injector, null, statsType || BaseTripReportStats); + this.logPrefix = 'base-trip-report '; + this.defaultOptions = { + responsive: true, + animation: false, + plugins: { + title: { + display: true, + font: { + size: 26 + }, + color: Color.get('secondary').rgba(1) + }, + legend: { + position: 'right' // or 'right' + } + } + }; + this.scaleLabelDefaultOption = { + display: true, + font: { + size: 18, + weight: 'bold' + } + }; + this.defaultOpacity = 0.8; + this.landingColor = Color.get('tertiary'); + this.discardColor = Color.get('danger'); + this.mapReadySubject = new BehaviorSubject(false); + this.tripReportService = tripReportService; + this.tripService = injector.get(TripService); + this.vesselSnapshotService = injector.get(VesselSnapshotService); + this.pmfmNamePipe = injector.get(PmfmNamePipe); + ChartJsUtils.register(); + // TODO : check this + // this.onRefresh + // .pipe(filter(_ => this.loaded)) + // .subscribe(() => this.reload({cache: false})); + } + loadFromRoute(opts) { + return __awaiter(this, void 0, void 0, function* () { + const id = this.getIdFromPathIdAttribute(this._pathIdAttribute); + if (isNotNil(id)) { + const trip = yield this.tripService.load(id, { withOperation: false }); + // Load report data + this.filter = ExtractionUtils.createTripFilter(trip.program.label, [trip.id]); + } + else { + const { label, category, q } = this.route.snapshot.queryParams; + this.type = ExtractionType.fromObject({ label, category }); + const criteria = q && ExtractionUtils.parseCriteriaFromString(q); + if (isNotEmptyArray(criteria)) { + this.filter = ExtractionFilter.fromObject({ criteria }); + } + } + if (!this.filter || this.filter.isEmpty()) + throw { message: 'ERROR.LOAD_DATA_ERROR' }; + return this.load(this.filter, Object.assign(Object.assign({}, opts), { type: this.type })); + }); + } + load(filter, opts) { + return __awaiter(this, arguments, void 0, function* () { + if (this.debug) + console.debug(`[${this.logPrefix}] load`, arguments); + // Load data + return this.loadData(filter, opts); + }); + } + loadData(filter, opts) { + var _a; + return this.tripReportService.loadAll(filter, Object.assign(Object.assign({}, opts), { formatLabel: (_a = opts.type) === null || _a === void 0 ? void 0 : _a.label, fetchPolicy: 'no-cache' })); + } + loadFromClipboard(clipboard, opts) { + const _super = Object.create(null, { + loadFromClipboard: { get: () => super.loadFromClipboard } + }); + return __awaiter(this, void 0, void 0, function* () { + const consumed = yield _super.loadFromClipboard.call(this, clipboard, false); + // TODO Re-compute stats.species + if (isNotNil(this.stats)) { + this.stats.species = yield this.computeSpecies(this.data, this.stats, opts); + } + return consumed; + }); + } + computeStats(data, opts) { + return __awaiter(this, void 0, void 0, function* () { + const stats = (opts === null || opts === void 0 ? void 0 : opts.stats) || new this.statsType(); + // Fill trips and operatsions + stats.trips = (data.TR || []).map(tr => tr.asTrip()); + stats.operations = (data.HH || []).map(s => s.asOperation()); + stats.programLabel = stats.trips.map(t => { var _a; return (_a = t.program) === null || _a === void 0 ? void 0 : _a.label; }).find(isNotNil); + stats.program = stats.programLabel && (yield this.programRefService.loadByLabel(stats.programLabel)); + stats.vesselSnapshots = yield this.computeVesselSnapshots(data.TR); + // Compute startDate (from trips or from operations) + stats.startDate = stats.trips.reduce((date, t) => { var _a; return DateUtils.min(date, ((_a = t.departureDateTime) === null || _a === void 0 ? void 0 : _a.isValid()) && t.departureDateTime); }, undefined); + if (!stats.startDate || !stats.startDate.isValid()) { + stats.startDate = stats.operations.reduce((date, o) => { var _a; return DateUtils.min(date, ((_a = o.startDateTime) === null || _a === void 0 ? void 0 : _a.isValid()) && o.startDateTime); }, undefined); + } + // Compute endDate (from trips or from operations) + stats.endDate = stats.trips.reduce((date, t) => { var _a; return DateUtils.max(date, ((_a = t.returnDateTime) === null || _a === void 0 ? void 0 : _a.isValid()) && t.returnDateTime); }, undefined); + if (!stats.endDate || !stats.endDate.isValid()) { + stats.endDate = stats.operations.reduce((date, o) => { var _a; return DateUtils.max(date, ((_a = o.endDateTime) === null || _a === void 0 ? void 0 : _a.isValid()) && o.endDateTime); }, undefined); + } + stats.vesselLength = this.computeNumericStats(data.TR, 'vesselLength'); + stats.species = yield this.computeSpecies(data, stats, opts); + return stats; + }); + } + computeShareBasePath() { + return 'trips/report'; + } + computeSpecies(data, stats, opts) { + return __awaiter(this, void 0, void 0, function* () { + // Split SL and HL by species + const slMap = collectByProperty(data.SL, 'species'); + const hlMap = collectByProperty(data.HL, 'species'); + // For each species (found in SL, because HL is not always filled) + const speciesNames = Object.keys(slMap); + return (yield Promise.all(speciesNames.map((species) => __awaiter(this, void 0, void 0, function* () { + const speciesData = Object.assign(Object.assign({}, data), { SL: slMap[species], HL: hlMap[species] }); + const speciesOpts = Object.assign(Object.assign({ getSubCategory: undefined }, opts), { stats }); + const charts = yield this.computeSpeciesCharts(species, speciesData, speciesOpts); + if (isNotEmptyArray(charts)) { + return { label: species, charts }; + } + })))).filter(isNotNil); + }); + } + computeVesselSnapshots(data) { + return __awaiter(this, void 0, void 0, function* () { + const vesselIds = removeDuplicatesFromArray((data || []).map(tr => tr.vesselIdentifier)); + return yield Promise.all(vesselIds.map(id => this.vesselSnapshotService.load(id, { fetchPolicy: 'cache-first' }))); + }); + } + computeSpeciesCharts(species, data, opts) { + return __awaiter(this, void 0, void 0, function* () { + return this.computeSpeciesLengthCharts(species, data.HL, opts); + }); + } + computeSpeciesLengthCharts(species, data, opts) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (isEmptyArray(data) || !((_a = opts === null || opts === void 0 ? void 0 : opts.stats) === null || _a === void 0 ? void 0 : _a.programLabel)) + return []; + // Load individual batch pmfms + const lengthPmfms = (yield this.programRefService.loadProgramPmfms(opts.stats.programLabel, { + acquisitionLevel: AcquisitionLevelCodes.SORTING_BATCH_INDIVIDUAL + })).filter(PmfmUtils.isLength); + // Get data + const taxonGroupId = (data || []).map(hl => hl.taxonGroupId).find(isNotNil); + // Get sub categories + const subCategories = opts.getSubCategory && this.computeSubCategories(data, opts); + // Create landing/discard colors for each sub categories + const landingColors = ChartJsUtilsColor.getDerivativeColor(this.landingColor, Math.max(2, (subCategories === null || subCategories === void 0 ? void 0 : subCategories.length) || 0)); + const discardColors = ChartJsUtilsColor.getDerivativeColor(this.discardColor, Math.max(2, (subCategories === null || subCategories === void 0 ? void 0 : subCategories.length) || 0)); + // Search the right length pmfms + const lengthPmfm = (lengthPmfms || []).find(p => isNil(taxonGroupId) || isEmptyArray(p.taxonGroupIds) || p.taxonGroupIds.includes(taxonGroupId)); + const threshold = undefined; // TODO load threshold by species + const charts = []; + // Total catch + { + const catchChart = this.computeSpeciesLengthBarChart(species, data, lengthPmfm, { + subtitle: this.translate.instant('TRIP.REPORT.CHART.TOTAL_CATCH'), + threshold, + catchCategories: ['LAN', 'DIS'], + catchCategoryColors: [landingColors, discardColors], + subCategories, + getSubCategory: opts === null || opts === void 0 ? void 0 : opts.getSubCategory + }); + if (catchChart) + charts.push(catchChart); + } + // Landing + { + const landingChart = this.computeSpeciesLengthBarChart(species, data, lengthPmfm, { + subtitle: this.translate.instant('TRIP.REPORT.LANDING'), + filter: (sl) => sl.catchCategory === 'LAN', + catchCategoryColors: [landingColors], + subCategories, + getSubCategory: opts === null || opts === void 0 ? void 0 : opts.getSubCategory + }); + if (landingChart) + charts.push(landingChart); + } + // Discard + { + const discardFilter = (sl) => sl.catchCategory === 'DIS'; + const discardChart = this.computeSpeciesLengthBarChart(species, data, lengthPmfm, { + subtitle: this.translate.instant('TRIP.REPORT.DISCARD'), + filter: discardFilter, + catchCategoryColors: [discardColors], + subCategories, + getSubCategory: opts === null || opts === void 0 ? void 0 : opts.getSubCategory + }); + if (discardChart) + charts.push(discardChart); + } + return charts; + }); + } + computeSpeciesLengthBarChart(species, data, lengthPmfm, opts) { + const pmfmName = lengthPmfm && this.pmfmNamePipe.transform(lengthPmfm, { withUnit: true, html: false }) + || this.translate.instant('TRIP.REPORT.CHART.LENGTH'); + const unitConversion = (lengthPmfm === null || lengthPmfm === void 0 ? void 0 : lengthPmfm.unitLabel) === 'cm' ? 0.1 : 1; + // Filter data + if (opts === null || opts === void 0 ? void 0 : opts.filter) + data = data.filter(opts.filter); + // if no data: skip + if (isEmptyArray(data)) + return null; + const translations = this.translate.instant([ + 'TRIP.REPORT.CHART.SPECIES_LENGTH', + 'TRIP.REPORT.CHART.TOTAL_CATCH', + 'TRIP.REPORT.DISCARD', + 'TRIP.REPORT.LANDING', + ]); + const chart = { + type: 'bar', + data: { + datasets: [], + labels: [] + }, + options: Object.assign(Object.assign({}, this.defaultOptions), { plugins: Object.assign(Object.assign({}, this.defaultOptions.plugins), { title: Object.assign(Object.assign({}, this.defaultOptions.plugins.title), { text: [ + species, + [translations['TRIP.REPORT.CHART.SPECIES_LENGTH'], opts === null || opts === void 0 ? void 0 : opts.subtitle].filter(isNotNilOrNaN).join(' - ') + ] }), thresholdLine: ((opts === null || opts === void 0 ? void 0 : opts.threshold) > 0) && { + color: Color.get('red').rgba(this.defaultOpacity), + style: 'dashed', + width: opts.threshold, + value: opts.threshold, + orientation: 'x' + }, labels: { + render(args) { + const lines = args.text.split('\n'); + const fontSize = args.index === 0 ? 18 : 14; + const lineHeight = args.index === 0 ? 1.2 : 1.5; + return lines + .map((line) => `
${line}
`) + .join(''); + } + } }), scales: { + x: { + stacked: true, + title: Object.assign(Object.assign({}, this.scaleLabelDefaultOption), { text: pmfmName }) + }, + y: { + stacked: true, + title: Object.assign(Object.assign({}, this.scaleLabelDefaultOption), { text: this.translate.instant('TRIP.REPORT.CHART.INDIVIDUAL_COUNT') }) + } + } }) + }; + // FInd min/max (and check if can used elevatedNumberAtLength) + let min = 99999; + let max = 0; + let hasElevatedNumberAtLength = true; + data.forEach(sl => { + const length = sl.lengthClass * unitConversion; + min = Math.min(min, length); + max = Math.max(max, length); + if (hasElevatedNumberAtLength && isNil(sl.elevatedNumberAtLength)) + hasElevatedNumberAtLength = false; + }); + // Add labels + const labelCount = Math.max(1, Math.abs(max - min) + 1); + const xAxisLabels = new Array(labelCount) + .fill(Math.min(min, max)) + .map((v, index) => (v + index).toString()); + ChartJsUtils.pushLabels(chart, xAxisLabels); + if (!hasElevatedNumberAtLength) { + console.warn(`[${this.constructor.name}] Cannot used elevatedNumberAtLength, for species '${species}'`); + } + const getNumberAtLength = (opts === null || opts === void 0 ? void 0 : opts.getNumberAtLength) + || (hasElevatedNumberAtLength && ((hl) => hl.elevatedNumberAtLength)) + || ((hl) => hl.numberAtLength); + const createCatchCategorySeries = (data, seriesIndex = 0, subCategory) => { + const dataByCatchCategory = collectByProperty(data, 'catchCategory'); + // For each LAN, DIS + const catchCategories = (opts === null || opts === void 0 ? void 0 : opts.catchCategories) || Object.keys(dataByCatchCategory); + catchCategories + .forEach((catchCategory, index) => { + const data = new Array(xAxisLabels.length).fill(0); + (dataByCatchCategory[catchCategory] || []).forEach(hl => { + const labelIndex = hl.lengthClass * unitConversion - min; + data[labelIndex] += (getNumberAtLength(hl) || 0); + }); + const color = opts.catchCategoryColors[index][seriesIndex]; + const label = (!opts.filter || isNil(subCategory)) + ? [translations[catchCategory === 'DIS' ? 'TRIP.REPORT.DISCARD' : 'TRIP.REPORT.LANDING'], subCategory].filter(isNotNil).join(' - ') + : subCategory; + ChartJsUtils.pushDataSet(chart, { + label, + backgroundColor: color.rgba(this.defaultOpacity), + stack: `${seriesIndex}`, + data + }); + }); + }; + if (opts.getSubCategory) { + const dataBySubCategory = collectByFunction(data, opts.getSubCategory); + const subCategories = removeDuplicatesFromArray([...opts === null || opts === void 0 ? void 0 : opts.subCategories, ...Object.keys(dataBySubCategory)]); + if (isNotEmptyArray(subCategories)) { + console.warn(`[${this.constructor.name}] No sub categories found for species '${species}'`); + subCategories.forEach((subCategory, index) => { + createCatchCategorySeries(dataBySubCategory[subCategory], index, subCategory); + }); + } + else { + createCatchCategorySeries(data); + } + } + else { + createCatchCategorySeries(data); + } + return chart; + } + computeSubCategories(data, opts) { + if (isNotEmptyArray(opts === null || opts === void 0 ? void 0 : opts.subCategories)) + return opts.subCategories; // Skip if already computed + // Compute sub category, in meta + opts.subCategories = []; + const getSubCategory = opts.getSubCategory; + data.forEach(sl => { + sl.meta = sl.meta || {}; + sl.meta.subCategory = sl.meta.subCategory || getSubCategory(sl); + // Append to list + if (sl.meta.subCategory && !opts.subCategories.includes(sl.meta.subCategory)) + opts.subCategories.push(sl.meta.subCategory); + }); + // Make to keep sub category first + if (opts.firstSubCategory) { + return removeDuplicatesFromArray([opts.firstSubCategory, ...opts.subCategories].filter(isNotNilOrBlank)); + } + return opts.subCategories; + } + onMapReady() { + this.mapReadySubject.next(true); + } + updateView() { + return __awaiter(this, void 0, void 0, function* () { + console.debug(`[${this.constructor.name}.updateView]`); + this.cd.detectChanges(); + yield waitFor(() => !!this.reveal); + yield this.reveal.initialize(); + if (this.reveal.printing) { + yield sleep(500); + yield this.showMap(); + yield sleep(500); + yield this.reveal.print(); + } + }); + } + showMap() { + return __awaiter(this, void 0, void 0, function* () { + this.mapContainer.createEmbeddedView(this.mapTemplate); + yield firstTruePromise(this.mapReadySubject); + }); + } + computeDefaultBackHref(data, stats) { + var _a; + if (((_a = stats.trips) === null || _a === void 0 ? void 0 : _a.length) === 1) { + const baseTripPath = `/trips/${stats.trips[0].id}`; + return `${baseTripPath}?tab=1`; + } + // Back to extraction + else { + const queryString = Object.entries(this.route.snapshot.queryParams || {}) + .map(([key, value]) => `${key}=${value}`).join('&'); + return `/extraction/data?${queryString}`; + } + } + computeTitle(data, stats) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + if (((_a = stats.vesselSnapshots) === null || _a === void 0 ? void 0 : _a.length) === 1 && ((_b = stats.startDate) === null || _b === void 0 ? void 0 : _b.isValid())) { + return this.translate.instant('TRIP.REPORT.TITLE', { + departureDate: this.dateFormat.transform(stats.startDate, { time: false }), + vessel: stats.vesselSnapshots[0].exteriorMarking + }); + } + return this.translate.instant('TRIP.REPORT.TITLE_SLIDE'); + }); + } + collectDistinctStringPropertyValues(data, propertyName) { + return arrayDistinct(data.map(v => getProperty(v, propertyName)).filter(v => typeof v === 'string')); + } + collectNumericPropertyValues(data, propertyName) { + return data.map(v => +getProperty(v, propertyName)) + .filter(isNotNilOrNaN); + } + computeNumericStats(data, propertyName) { + const values = this.collectNumericPropertyValues(data, propertyName); + if (isEmptyArray(values)) + return undefined; // SKip if cannot compute min/max/avg + return { + min: Math.min(...values), + max: Math.max(...values), + avg: values.reduce((a, b) => a + b, 0) / values.length + }; + } + collectDistinctQualitativeValue(data, propertyName) { + return this.collectDistinctStringPropertyValues(data, propertyName) + .map(value => value.indexOf(' - ') !== -1 ? value.split(' - ')[1] : value); + } + dataAsObject(source, opts) { + return { + TR: source.TR.map(item => item.asObject(opts)), + HH: source.HH.map(item => item.asObject(opts)), + SL: source.SL.map(item => item.asObject(opts)), + HL: source.HL.map(item => item.asObject(opts)), + }; + } + ; + isNotEmptySpecies(species) { + return isNotEmptyArray(species === null || species === void 0 ? void 0 : species.charts); + } +}; +__decorate([ + ViewChild('mapContainer', { read: ViewContainerRef }), + __metadata("design:type", Object) +], BaseTripReport.prototype, "mapContainer", void 0); +__decorate([ + ViewChild('mapTemplate'), + __metadata("design:type", TemplateRef) +], BaseTripReport.prototype, "mapTemplate", void 0); +BaseTripReport = __decorate([ + Directive(), + __param(2, Optional()), + __metadata("design:paramtypes", [Injector, + TripReportService, Function]) +], BaseTripReport); +export { BaseTripReport }; +//# sourceMappingURL=base-trip.report.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/base-trip.report.js.map b/out-tsc/app/app/trip/trip/report/base-trip.report.js.map new file mode 100644 index 000000000..939ac6bd9 --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/base-trip.report.js.map @@ -0,0 +1 @@ +{"version":3,"file":"base-trip.report.js","sourceRoot":"","sources":["../../../../../../src/app/trip/trip/report/base-trip.report.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report-routing.module.js b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report-routing.module.js new file mode 100644 index 000000000..a099cf6e5 --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report-routing.module.js @@ -0,0 +1,25 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { SelectivityTripReportModule } from '@app/trip/trip/report/selectivity/selectivity-trip-report.module'; +import { SelectivityTripReport } from '@app/trip/trip/report/selectivity/selectivity-trip.report'; +const routes = [ + { + path: '', + pathMatch: 'full', + component: SelectivityTripReport, + } +]; +let SelectivityTripReportRoutingModule = class SelectivityTripReportRoutingModule { +}; +SelectivityTripReportRoutingModule = __decorate([ + NgModule({ + imports: [ + RouterModule.forChild(routes), + SelectivityTripReportModule, + ], + exports: [RouterModule] + }) +], SelectivityTripReportRoutingModule); +export { SelectivityTripReportRoutingModule }; +//# sourceMappingURL=selectivity-trip-report-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report-routing.module.js.map b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report-routing.module.js.map new file mode 100644 index 000000000..b0478f519 --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"selectivity-trip-report-routing.module.js","sourceRoot":"","sources":["../../../../../../../src/app/trip/trip/report/selectivity/selectivity-trip-report-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,kEAAkE,CAAC;AAC/G,OAAO,EAAE,qBAAqB,EAAE,MAAM,2DAA2D,CAAC;AAElG,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,qBAAqB;KACjC;CACF,CAAC;AASK,IAAM,kCAAkC,GAAxC,MAAM,kCAAkC;CAAI,CAAA;AAAtC,kCAAkC;IAP9C,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,2BAA2B;SAC5B;QACD,OAAO,EAAE,CAAC,YAAY,CAAC;KACxB,CAAC;GACW,kCAAkC,CAAI;SAAtC,kCAAkC"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.model.js b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.model.js new file mode 100644 index 000000000..305146cce --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.model.js @@ -0,0 +1,37 @@ +import { Entity, toNumber } from '@sumaris-net/ngx-components'; +import { RdbPmfmSpeciesLength, RdbPmfmSpeciesList, RdbPmfmStation, RdbPmfmTrip } from '@app/trip/trip/report/trip-report.model'; +export class SelectivityTrip extends RdbPmfmTrip { +} +export class SelectivityGear extends Entity { + fromObject(source) { + super.fromObject(source); + this.gearIdentifier = toNumber(source.gearIdentifier); + this.subGearIdentifier = toNumber(source.subGearIdentifier); + this.selectionDevice = source.selectionDevice || source.selectivityDevice || source.selectivityDeviceApase; + } +} +export class SelectivityStation extends RdbPmfmStation { + fromObject(source) { + super.fromObject(source); + this.gearIdentifier = toNumber(source.gearIdentifier); + this.seabedFeatures = source.seabedFeatures; + this.seaState = source.seaState; + this.gearSpeed = toNumber(source.gearSpeed); + } +} +export class SelectivitySpeciesList extends RdbPmfmSpeciesList { + fromObject(source) { + super.fromObject(source); + this.gearIdentifier = toNumber(source.gearIdentifier); + this.subGearIdentifier = toNumber(source.subGearIdentifier); + this.subGearPosition = source.subGearPosition; + } +} +export class SelectivitySpeciesLength extends RdbPmfmSpeciesLength { + fromObject(source) { + super.fromObject(source); + this.subGearPosition = source.subGearPosition; + this.subGearIdentifier = toNumber(source.subGearIdentifier); + } +} +//# sourceMappingURL=selectivity-trip-report.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.model.js.map b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.model.js.map new file mode 100644 index 000000000..6b0ae840a --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"selectivity-trip-report.model.js","sourceRoot":"","sources":["../../../../../../../src/app/trip/trip/report/selectivity/selectivity-trip-report.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAqB,oBAAoB,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAanJ,MAAM,OAAO,eAAgB,SAAQ,WAA4B;CAEhE;AAED,MAAM,OAAO,eAAgB,SAAQ,MAAuB;IAK1D,UAAU,CAAC,MAAW;QACpB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACtD,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC5D,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,iBAAiB,IAAG,MAAM,CAAC,sBAAsB,CAAC;IAC5G,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,cAAkC;IAMxE,UAAU,CAAC,MAAW;QACpB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACtD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC5C,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,kBAA0C;IAKpF,UAAU,CAAC,MAAW;QACpB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACtD,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC5D,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;IAChD,CAAC;CACF;AAED,MAAM,OAAO,wBAAyB,SAAQ,oBAA8C;IAI1F,UAAU,CAAC,MAAW;QACpB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAC9C,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC9D,CAAC;CACF"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.module.js b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.module.js new file mode 100644 index 000000000..0edeef947 --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.module.js @@ -0,0 +1,27 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppSharedReportModule } from '@app/shared/report/report.module'; +import { AppOperationModule } from '@app/trip/operation/operation.module'; +import { SelectivityTripReport } from '@app/trip/trip/report/selectivity/selectivity-trip.report'; +import { AppReferentialModule } from '@app/referential/referential.module'; +let SelectivityTripReportModule = class SelectivityTripReportModule { +}; +SelectivityTripReportModule = __decorate([ + NgModule({ + declarations: [ + SelectivityTripReport + ], + imports: [ + AppCoreModule, + AppSharedReportModule, + AppOperationModule, + AppReferentialModule + ], + exports: [ + SelectivityTripReport + ], + }) +], SelectivityTripReportModule); +export { SelectivityTripReportModule }; +//# sourceMappingURL=selectivity-trip-report.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.module.js.map b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.module.js.map new file mode 100644 index 000000000..b64466bdc --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"selectivity-trip-report.module.js","sourceRoot":"","sources":["../../../../../../../src/app/trip/trip/report/selectivity/selectivity-trip-report.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2DAA2D,CAAC;AAClG,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAiBpE,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;CAAI,CAAA;AAA/B,2BAA2B;IAdvC,QAAQ,CAAC;QACR,YAAY,EAAE;YACZ,qBAAqB;SACtB;QACD,OAAO,EAAE;YACP,aAAa;YACb,qBAAqB;YACrB,kBAAkB;YAClB,oBAAoB;SACrB;QACD,OAAO,EAAE;YACP,qBAAqB;SACtB;KACF,CAAC;GACW,2BAA2B,CAAI;SAA/B,2BAA2B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.service.js b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.service.js new file mode 100644 index 000000000..a49d271f4 --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.service.js @@ -0,0 +1,26 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { GraphqlService } from '@sumaris-net/ngx-components'; +import { TripReportService } from '@app/trip/trip/report/trip-report.service'; +import { SelectivityGear, SelectivitySpeciesLength, SelectivitySpeciesList, SelectivityStation, SelectivityTrip } from './selectivity-trip-report.model'; +let SelectivityTripReportService = class SelectivityTripReportService extends TripReportService { + constructor(graphql) { + super(graphql); + this.graphql = graphql; + } + loadAll(filter, opts) { + return super.loadAll(filter, Object.assign(Object.assign({}, opts), { formatLabel: 'apase', sheetNames: ['TR', 'HH', 'FG', 'SL', 'HL'], dataTypes: { + TR: SelectivityTrip, + FG: SelectivityGear, + HH: SelectivityStation, + SL: SelectivitySpeciesList, + HL: SelectivitySpeciesLength + } })); + } +}; +SelectivityTripReportService = __decorate([ + Injectable(), + __metadata("design:paramtypes", [GraphqlService]) +], SelectivityTripReportService); +export { SelectivityTripReportService }; +//# sourceMappingURL=selectivity-trip-report.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.service.js.map b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.service.js.map new file mode 100644 index 000000000..52e8d3fa4 --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip-report.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"selectivity-trip-report.service.js","sourceRoot":"","sources":["../../../../../../../src/app/trip/trip/report/selectivity/selectivity-trip-report.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAA6B,eAAe,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAI7K,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,iBAAmI;IAEnL,YACY,OAAuB;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFL,YAAO,GAAP,OAAO,CAAgB;IAGnC,CAAC;IAED,OAAO,CAAC,MAAiC,EACjC,IAIE;QACR,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,kCACtB,IAAI,KACP,WAAW,EAAE,OAAO,EACpB,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAC1C,SAAS,EAAE;gBACT,EAAE,EAAE,eAAe;gBACnB,EAAE,EAAE,eAAe;gBACnB,EAAE,EAAE,kBAAkB;gBACtB,EAAE,EAAE,sBAAsB;gBAC1B,EAAE,EAAE,wBAAwB;aAC7B,IACD,CAAC;IACL,CAAC;CAEF,CAAA;AA5BY,4BAA4B;IADxC,UAAU,EAAE;qCAIU,cAAc;GAHxB,4BAA4B,CA4BxC;SA5BY,4BAA4B"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip.report.js b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip.report.js new file mode 100644 index 000000000..2b9d76542 --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip.report.js @@ -0,0 +1,440 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Component, Injector, ViewEncapsulation } from '@angular/core'; +import { collectByProperty, Color, isEmptyArray, isNilOrBlank, isNotEmptyArray, isNotNil, ReferentialRef, removeDuplicatesFromArray, } from '@sumaris-net/ngx-components'; +import { ChartJsUtils, ChartJsUtilsColor } from '@app/shared/chartsjs.utils'; +import { TripReportService } from '@app/trip/trip/report/trip-report.service'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { SelectivityTripReportService } from '@app/trip/trip/report/selectivity/selectivity-trip-report.service'; +import { SelectivitySpeciesLength, SelectivitySpeciesList, SelectivityStation, SelectivityTrip, } from '@app/trip/trip/report/selectivity/selectivity-trip-report.model'; +import { MathUtils } from '@app/shared/math.utils'; +import { environment } from '@environments/environment'; +import { BaseTripReport, BaseTripReportStats } from '@app/trip/trip/report/base-trip.report'; +export class SelectivityTripReportStats extends BaseTripReportStats { + fromObject(source) { + super.fromObject(source); + this.gearIdentifierByOperationId = source.gearIdentifierByOperationId; + this.selectivityDeviceMap = source.selectivityDeviceMap; + this.selectivityDevices = source.selectivityDevices; + this.seaStates = source.seaStates; + this.seabedFeatures = source.seabedFeatures; + this.gearSpeed = source.gearSpeed; + this.subCategories = source.subCategories; + this.weights = source.weights; + } + asObject(opts) { + return Object.assign(Object.assign({}, super.asObject(opts)), { gearIdentifierByOperationId: this.gearIdentifierByOperationId, selectivityDeviceMap: this.gearIdentifierByOperationId, selectivityDevices: this.selectivityDevices, seaStates: this.seaStates, seabedFeatures: this.seabedFeatures, gearSpeed: this.gearSpeed, subCategories: this.subCategories, weights: this.weights }); + } +} +let SelectivityTripReport = class SelectivityTripReport extends BaseTripReport { + constructor(injector, tripReportService) { + super(injector, tripReportService, SelectivityTripReportStats); + } + dataAsObject(source, opts) { + return Object.assign(Object.assign({}, super.dataAsObject(source, opts)), { FG: source.FG.map(item => item.asObject(opts)) }); + } + ; + loadData(filter, opts) { + return this.tripReportService.loadAll(filter, Object.assign(Object.assign({}, opts), { formatLabel: 'apase', dataTypes: { + TR: SelectivityTrip, + HH: SelectivityStation, + SL: SelectivitySpeciesList, + HL: SelectivitySpeciesLength, + }, fetchPolicy: 'no-cache' })); + } + computeStats(data, opts) { + const _super = Object.create(null, { + computeStats: { get: () => super.computeStats } + }); + return __awaiter(this, void 0, void 0, function* () { + const stats = (opts === null || opts === void 0 ? void 0 : opts.stats) || new this.statsType(); + const programLabel = (data.TR || []).map(t => t.project).find(isNotNil); + stats.program = stats.programLabel && (yield this.programRefService.loadByLabel(stats.programLabel)); + const standardSubCategory = this.translate.instant('TRIP.REPORT.CHART.TRAWL_SELECTIVITY.STANDARD'); + stats.gearSpeed = this.computeNumericStats(data.HH, 'gearSpeed'); + stats.seaStates = this.collectDistinctQualitativeValue(data.HH, 'seaState') + .map(seaState => { + // Clean value (e.g. remove ", vagues de X à Xm") + const separatorIndex = seaState.indexOf(','); + if (separatorIndex !== -1) + return seaState.substring(0, separatorIndex); + return seaState; + }); + stats.seabedFeatures = this.collectDistinctQualitativeValue(data.HH, 'seabedFeatures'); + const gearPmfms = yield this.programRefService.loadProgramPmfms(programLabel, { + acquisitionLevels: [AcquisitionLevelCodes.PHYSICAL_GEAR, AcquisitionLevelCodes.CHILD_PHYSICAL_GEAR] + }); + stats.selectivityDeviceMap = this.computeSelectivityDevices(data, gearPmfms); + stats.selectivityDevices = removeDuplicatesFromArray(Object.values(stats.selectivityDeviceMap).filter(r => r.label !== 'NA').map(r => r.name)); + // Translate + Object.values(stats.selectivityDeviceMap) + .filter(isNotNil) + .forEach(selectiveDevice => { + if (selectiveDevice.label === 'NA') { + selectiveDevice.name = standardSubCategory; + } + else { + selectiveDevice.description = selectiveDevice.name; + selectiveDevice.name = this.translate.instant('TRIP.REPORT.CHART.TRAWL_SELECTIVITY.SELECTIVE', { label: selectiveDevice.name }); + } + }); + // Load selectivity devices, by gear or sub gear + stats.gearIdentifierByOperationId = (data.HH || []).reduce((res, s) => { + res[s.stationNumber] = s.gearIdentifier; + return res; + }, {}); + // Compute sub categories (and store result in meta) + const getSubCategory = this.createGetSubCategory(stats); + stats.subCategories = this.computeSubCategories(data.SL, { getSubCategory, firstSubCategory: standardSubCategory }); + stats.weights = this.computeWeightStats(data.SL, { getSubCategory: (sl) => { var _a; return (_a = sl.meta) === null || _a === void 0 ? void 0 : _a.subCategory; }, standardSubCategory }); + return _super.computeStats.call(this, data, Object.assign(Object.assign({}, opts), { stats, getSubCategory })); + }); + } + computeSpecies(data, stats, opts) { + const _super = Object.create(null, { + computeSpecies: { get: () => super.computeSpecies } + }); + return __awaiter(this, void 0, void 0, function* () { + // Make sure to have opts.getSubCategory, in shared report + const getSubCategory = (opts === null || opts === void 0 ? void 0 : opts.getSubCategory) || this.createGetSubCategory(stats); + return _super.computeSpecies.call(this, data, stats, Object.assign(Object.assign({}, opts), { getSubCategory })); + }); + } + computeWeightStats(data, opts) { + const result = { + catchCategories: { + LAN: { + key: 'LAN', + label: 'TRIP.REPORT.LANDING', + species: [], + enableAvgVariation: false + }, DIS: { + key: 'DIS', + label: 'TRIP.REPORT.DISCARD', + species: [], + enableAvgVariation: false + } + } + }; + // Compute sub categories (and store result in meta) + const subCategories = this.computeSubCategories(data, opts); + if (subCategories.length < 2) + return result; // Skip + // Split data by species + const dataBySpecies = collectByProperty(data, 'species'); + // Compute stats on each species + Object.keys(dataBySpecies).forEach(species => { + console.debug(`[selectivity-trip-report] Computing stats for species '${species}'...`); + const speciesStats = { + LAN: { label: species, total: 0, totalVariation: undefined, avgVariation: undefined, subCategories: {} }, + DIS: { label: species, total: 0, totalVariation: undefined, avgVariation: undefined, subCategories: {} } + }; + subCategories.forEach(subCategory => { + speciesStats.LAN.subCategories[subCategory] = { total: 0, stations: {} }; + speciesStats.DIS.subCategories[subCategory] = { total: 0, stations: {} }; + }); + const speciesData = dataBySpecies[species]; + // Compute total weights, by catch categories and sub categories + speciesData.forEach(sl => { + const catchCategoryStats = speciesStats[sl.catchCategory]; + const weight = (sl.weight || 0) / 1000; // Convert to kg + catchCategoryStats.total += weight; + // Increment sub category + const subCategory = opts.getSubCategory(sl); + { + const subCategoryStats = catchCategoryStats.subCategories[subCategory]; + subCategoryStats.total += weight; + // Increment by station + const stationKey = `${sl.tripCode}|${sl.stationNumber}`; + subCategoryStats.stations[stationKey] = subCategoryStats.stations[stationKey] || 0; + subCategoryStats.stations[stationKey] += weight; + } + }); + // Compute weight total variation, between sub categories + if (speciesStats.LAN.total > 0) { + this.computeWeightTotalVariation(speciesStats.LAN, opts.standardSubCategory); + result.catchCategories.LAN.species.push(speciesStats.LAN); + } + if (speciesStats.DIS.total > 0) { + this.computeWeightTotalVariation(speciesStats.DIS, opts.standardSubCategory); + result.catchCategories.DIS.species.push(speciesStats.DIS); + } + // Compute AVG variation + const hasSubGearIdentifier = subCategories.length >= 2 && speciesData.findIndex(sl => isNotNil(sl.subGearIdentifier)) !== -1; + if (hasSubGearIdentifier) { + // Compute weight total variation, between sub categories + if (speciesStats.LAN.total > 0) { + result.catchCategories.LAN.enableAvgVariation = true; + this.computeWeightAvgVariation('LAN', speciesStats.LAN, opts.standardSubCategory); + } + if (speciesStats.DIS.total > 0) { + result.catchCategories.DIS.enableAvgVariation = true; + this.computeWeightAvgVariation('DIS', speciesStats.DIS, opts.standardSubCategory); + } + } + }); + return result; + } + computeWeightTotalVariation(weights, standardSubCategory) { + weights.totalVariation = this.computeWeightVariation(weights, standardSubCategory, stats => stats.total); + } + computeWeightAvgVariation(catchCategory, weights, standardSubCategory) { + // Collect all station keys, found on every sub category + const stationKeys = Object.keys(weights.subCategories).reduce((res, subCategory) => Object.keys(weights.subCategories[subCategory].stations).reduce((res, stationKey) => res.includes(stationKey) ? res : res.concat(stationKey), res), []); + const stationVariations = stationKeys.map(stationKey => this.computeWeightVariation(weights, standardSubCategory, stats => stats.stations[stationKey])) + .filter(isNotNil); // Exclude when standard = 0 + if (isNotEmptyArray(stationVariations)) { + console.debug(`[selectivity-trip-report] Weight variations by station for {${catchCategory} - ${weights.label}}: `, stationVariations); + weights.avgVariation = MathUtils.averageWithDetails(stationVariations); + } + } + /** + * Calcul le taux de variation, suivant la formule : ( - ) / + * + * @param weights + * @param standardSubCategory libellé de correspond au chalut standard. + * @param weightGetter function pour lire le poids. + * @protected + */ + computeWeightVariation(weights, standardSubCategory, weightGetter) { + const selective = Object.keys(weights.subCategories) + .filter(sc => sc !== standardSubCategory).reduce((sum, subCategory) => sum + (weightGetter(weights.subCategories[subCategory]) || 0), 0); + const standard = (weightGetter(weights.subCategories[standardSubCategory]) || 0); + if (standard > 0) { + return ((selective - standard) / standard) * 100; + } + return undefined; + } + /** + * Extract selectivity devices, by gear or sub gear + * + * @param trip + * @param gearPmfms + * @protected + */ + computeSelectivityDevices(data, gearPmfms) { + const selectivityDevicePmfmIds = (gearPmfms || []).filter(PmfmUtils.isSelectivityDevice); + if (isEmptyArray(selectivityDevicePmfmIds)) + return {}; + const getSelectivityDevice = (gear) => { + const value = gear.selectionDevice; + if (isNilOrBlank(value)) + return undefined; + const parts = value.split(' - ', 2); + return gear.selectionDevice && ReferentialRef.fromObject({ label: parts[0], name: parts[1] }); //selectiveDevice; + }; + return (data.FG || []).reduce((res, gear) => { + const selectionDevice = getSelectivityDevice(gear); + if (selectionDevice) { + const gearKey = isNotNil(gear.subGearIdentifier) ? `${gear.gearIdentifier}|${gear.subGearIdentifier}` : `${gear.gearIdentifier}`; + res[gearKey] = selectionDevice; + } + return res; + }, {}); + } + computeSpeciesCharts(species, data, opts) { + const _super = Object.create(null, { + computeSpeciesCharts: { get: () => super.computeSpeciesCharts } + }); + return __awaiter(this, void 0, void 0, function* () { + let charts = yield _super.computeSpeciesCharts.call(this, species, data, opts); + // Add bubble charts, by category (= selective device) + if (opts === null || opts === void 0 ? void 0 : opts.getSubCategory) { + // Add bubble charts, by category (= selective device) + const bubbleCharts = this.computeSpeciesBubbleChart(species, data.SL, { + subCategories: opts.stats.subCategories, + getSubCategory: opts.getSubCategory, + catchCategories: ['LAN', 'DIS'] + }); + if (isNotEmptyArray(bubbleCharts)) + charts = charts.concat(...bubbleCharts); + // Add boxplot chart + if (opts.stats.weights) { + // TODO finish this feature, then enable + if (!environment.production) { + /*const boxPlotChart = this.createSpeciesBoxPlot(species, { + stats: opts.stats, + subCategories: this.stats.subCategories, + catchCategories: ['LAN', 'DIS'] + }); + if (boxPlotChart) charts.push(boxPlotChart); + */ + } + } + } + return charts; + }); + } + computeSpeciesLengthBarChart(species, data, lengthPmfm, opts) { + return super.computeSpeciesLengthBarChart(species, data, lengthPmfm, Object.assign(Object.assign({}, opts), { getNumberAtLength: (hl => hl.elevatedNumberAtLength) })); + } + computeSpeciesBubbleChart(species, data, opts) { + const translations = this.translate.instant([ + 'TRIP.REPORT.CHART.TRAWL_SELECTIVITY.STANDARD', + 'TRIP.REPORT.CHART.TRAWL_SELECTIVITY.QUANTITY_IN_STANDARD', + 'TRIP.REPORT.CHART.TRAWL_SELECTIVITY.QUANTITY_IN_SELECTIVE', + 'TRIP.REPORT.DISCARD', + 'TRIP.REPORT.LANDING', + ]); + const dataByCatchCategory = collectByProperty(data, 'catchCategory'); + const catchCategories = opts.catchCategories + ? removeDuplicatesFromArray([...opts.catchCategories, ...Object.keys(dataByCatchCategory)]) + : Object.keys(dataByCatchCategory); + // Compute sub categories (and store result in meta) + let subCategories = this.computeSubCategories(data, opts); + if (subCategories.length !== 2) + return []; // Skip + subCategories = removeDuplicatesFromArray([translations['TRIP.REPORT.CHART.TRAWL_SELECTIVITY.STANDARD'], ...subCategories]); + translations['TRIP.REPORT.CHART.TRAWL_SELECTIVITY.QUANTITY_IN_SELECTIVE'] = this.translate.instant('TRIP.REPORT.CHART.TRAWL_SELECTIVITY.QUANTITY_IN_SELECTIVE', { selectionDevice: subCategories[1] }); + const chart = { + type: 'bubble', + data: { + datasets: [], + labels: [] + }, + options: Object.assign(Object.assign({}, this.defaultOptions), { plugins: Object.assign(Object.assign({}, this.defaultOptions.plugins), { title: Object.assign(Object.assign({}, this.defaultOptions.plugins.title), { text: [ + species, + this.translate.instant('TRIP.REPORT.CHART.LANDING_AND_DISCARD_COMPARISON') + ] }), medianLine: { + color: Color.get('medium').rgba(this.defaultOpacity), + orientation: 'b', + style: 'dashed', + width: 2 + } }), scales: { + x: { + scaleLabel: Object.assign(Object.assign({}, this.scaleLabelDefaultOption), { labelString: translations['TRIP.REPORT.CHART.TRAWL_SELECTIVITY.QUANTITY_IN_SELECTIVE'] }) + }, + y: { + scaleLabel: Object.assign(Object.assign({}, this.scaleLabelDefaultOption), { labelString: translations['TRIP.REPORT.CHART.TRAWL_SELECTIVITY.QUANTITY_IN_STANDARD'] }) + } + } }) + }; + let max = 0; + // For each LAN, DIS + catchCategories.forEach(catchCategory => { + const label = [species, translations[catchCategory === 'DIS' ? 'TRIP.REPORT.DISCARD' : 'TRIP.REPORT.LANDING']].join(' - '); + const color = catchCategory !== 'DIS' ? this.landingColor : this.discardColor; + const dataByStation = collectByProperty(dataByCatchCategory[catchCategory], 'stationNumber'); + const values = Object.keys(dataByStation).map(station => dataByStation[station].reduce((res, sl) => { + const index = subCategories.indexOf(sl.meta.subCategory); + const weight = sl.weight / 1000; // Convert to kg + if (index !== -1) { + res[index] += weight; + max = Math.max(max, weight); + } + return res; + }, new Array(subCategories.length).fill(0))); + ChartJsUtils.pushDataSet(chart, { + label, + backgroundColor: color.rgba(this.defaultOpacity), + data: ChartJsUtils.computeChartPoints(values) + }); + }); + // Set max scale + const scaleMax = Math.ceil(max / 10 + 0.5) * 10; + chart.options.scales.x = Object.assign(Object.assign({}, chart.options.scales.x), { min: 0, max: scaleMax }); + chart.options.scales.y = Object.assign(Object.assign({}, chart.options.scales.y), { min: 0, max: scaleMax }); + return [chart]; + } + createSpeciesBoxPlot(species, opts) { + const weights = opts === null || opts === void 0 ? void 0 : opts.stats.weights; + const catchCategories = (opts === null || opts === void 0 ? void 0 : opts.catchCategories) || Object.keys(weights.catchCategories); + const subCategories = (opts === null || opts === void 0 ? void 0 : opts.subCategories) || []; + const speciesData = catchCategories.reduce((res, catchCategory) => { + var _a, _b; + const catchCategoryStats = (_b = (_a = weights.catchCategories[catchCategory]) === null || _a === void 0 ? void 0 : _a.species) === null || _b === void 0 ? void 0 : _b.find(stats => stats.label === species); + if (catchCategoryStats) { + Object.keys(catchCategoryStats).forEach(subCategory => { + if (!subCategories.includes(subCategory)) + subCategories.push(subCategory); + }); + res[catchCategory] = catchCategoryStats; + } + return res; + }, {}); + const landingColors = ChartJsUtilsColor.getDerivativeColor(this.landingColor, Math.max(2, subCategories.length)); + const discardColors = ChartJsUtilsColor.getDerivativeColor(this.discardColor, Math.max(2, subCategories.length)); + const colors = []; // TODO + // Box plot + const chart = { + type: 'boxplot', + // colors: [ + // // Color should be specified, in order to works well + // discardColors[0].rgba(this.defaultOpacity), + // discardColors[1].rgba(this.defaultOpacity), + // landingColors[0].rgba(this.defaultOpacity), + // landingColors[1].rgba(this.defaultOpacity), + // ], + options: Object.assign(Object.assign({}, this.defaultOptions), { plugins: Object.assign(Object.assign({}, this.defaultOptions.plugins), { title: Object.assign(Object.assign({}, this.defaultOptions.plugins.title), { text: ['Comparaison des débarquements et rejets', '(sous trait)'] }) }), scales: { + x: { + scaleLabel: Object.assign(Object.assign({}, this.scaleLabelDefaultOption), { labelString: 'Fraction' }) + }, + y: { + scaleLabel: Object.assign(Object.assign({}, this.scaleLabelDefaultOption), { labelString: 'Poids capturés par OP (kg)' }) + } + } }), + data: { + labels: ['Débarquement', 'Rejet'], + datasets: [ + { + label: 'Dataset 1', + backgroundColor: 'rgba(255,0,0,0.5)', + borderColor: 'red', + borderWidth: 1, + //outlierColor: "#999999", + //padding: 10, + //itemRadius: 0, + data: [ + [1000, 2000, 3000, 1000, 2000, 3000, 5000] + ] + }, + { + label: 'Dataset 2', + backgroundColor: 'rgba(0,0,255,0.5)', + borderColor: 'blue', + borderWidth: 1, + //outlierColor: + //"#999999", + //padding: + //10, + //itemRadius: 0, + data: [ + [1000, 2000, 3000, 1000, 2000, 3000, 5000] + ] + } + ] + } + }; + return chart; + } + createGetSubCategory(stats) { + return (sl) => { + const gearRankOrder = stats.gearIdentifierByOperationId[+sl.stationNumber]; + const gearKey = isNotNil(sl.subGearIdentifier) ? `${gearRankOrder}|${sl.subGearIdentifier}` : `${gearRankOrder}`; + const selectiveDevice = stats.selectivityDeviceMap[gearKey]; + return selectiveDevice && selectiveDevice.name; + }; + } + computeShareBasePath() { + return 'trips/report/selectivity'; + } +}; +SelectivityTripReport = __decorate([ + Component({ + selector: 'app-selectivity-trip-report', + templateUrl: './selectivity-trip.report.html', + styleUrls: [ + '../trip.report.scss', + './selectivity-trip.report.scss', + '../../../../data/report/base-report.scss', + ], + providers: [ + { provide: TripReportService, useClass: SelectivityTripReportService } + ], + encapsulation: ViewEncapsulation.None + }), + __metadata("design:paramtypes", [Injector, + TripReportService]) +], SelectivityTripReport); +export { SelectivityTripReport }; +//# sourceMappingURL=selectivity-trip.report.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip.report.js.map b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip.report.js.map new file mode 100644 index 000000000..ec6b5f70a --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/selectivity/selectivity-trip.report.js.map @@ -0,0 +1 @@ +{"version":3,"file":"selectivity-trip.report.js","sourceRoot":"","sources":["../../../../../../../src/app/trip/trip/report/selectivity/selectivity-trip.report.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/trip-report-routing.module.js b/out-tsc/app/app/trip/trip/report/trip-report-routing.module.js new file mode 100644 index 000000000..e2c047042 --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/trip-report-routing.module.js @@ -0,0 +1,29 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { TripReportModule } from './trip-report.module'; +import { TripReport } from './trip.report'; +const routes = [ + { + path: '', + pathMatch: 'full', + component: TripReport, + }, + { + path: 'selectivity', + loadChildren: () => import('./selectivity/selectivity-trip-report-routing.module').then(m => m.SelectivityTripReportRoutingModule) + }, +]; +let TripReportRoutingModule = class TripReportRoutingModule { +}; +TripReportRoutingModule = __decorate([ + NgModule({ + imports: [ + RouterModule.forChild(routes), + TripReportModule, + ], + exports: [RouterModule] + }) +], TripReportRoutingModule); +export { TripReportRoutingModule }; +//# sourceMappingURL=trip-report-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/trip-report-routing.module.js.map b/out-tsc/app/app/trip/trip/report/trip-report-routing.module.js.map new file mode 100644 index 000000000..0711e709f --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/trip-report-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip-report-routing.module.js","sourceRoot":"","sources":["../../../../../../src/app/trip/trip/report/trip-report-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,UAAU;KACtB;IACD;QACE,IAAI,EAAE,aAAa;QACnB,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,sDAAsD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kCAAkC,CAAC;KACnI;CACF,CAAC;AASK,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;CACnC,CAAA;AADY,uBAAuB;IAPnC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,gBAAgB;SACjB;QACD,OAAO,EAAE,CAAC,YAAY,CAAC;KACxB,CAAC;GACW,uBAAuB,CACnC;SADY,uBAAuB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/trip-report.model.js b/out-tsc/app/app/trip/trip/report/trip-report.model.js new file mode 100644 index 000000000..63322a663 --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/trip-report.model.js @@ -0,0 +1,101 @@ +import { DateUtils, Entity, fromDateISOString, ReferentialRef, toNumber } from '@sumaris-net/ngx-components'; +import { Operation, Trip } from '@app/trip/trip/trip.model'; +import { VesselPosition } from '@app/data/position/vessel/vessel-position.model'; +import { VesselSnapshot } from '@app/referential/services/model/vessel-snapshot.model'; +export class RdbTrip extends Entity { + clone(opts) { + return super.clone(opts); + } + fromObject(source) { + this.tripCode = toNumber(source.tripCode); + this.project = source.project; + this.vesselIdentifier = toNumber(source.vesselIdentifier); + this.vesselLength = toNumber(source.vesselLength); + this.vesselSize = toNumber(source.vesselSize); + } + asTrip() { + const target = new Trip(); + target.id = this.tripCode; + target.program = ReferentialRef.fromObject({ label: this.project }); + target.vesselSnapshot = VesselSnapshot.fromObject({ id: this.vesselIdentifier, lengthOverAll: this.vesselLength, grossTonnageGt: this.vesselSize }); + return target; + } +} +export class RdbStation extends Entity { + fromObject(source) { + this.tripCode = +source.tripCode; + this.stationNumber = toNumber(source.stationNumber); + this.date = source.date; + this.time = source.time; + this.fishingTime = toNumber(source.fishingTime, source.fishingDuration); + this.posStartLat = +source.posStartLat; + this.posStartLon = +source.posStartLon; + this.posEndLat = +source.posEndLat; + this.posEndLon = +source.posEndLon; + } + asOperation() { + const target = new Operation(); + target.id = this.stationNumber; + target.tripId = this.tripCode; + target.startDateTime = fromDateISOString(`${this.date}T${this.time}:00.000Z`); + target.fishingStartDateTime = target.startDateTime; + target.endDateTime = fromDateISOString(target.fishingStartDateTime.clone().add(this.fishingTime, 'minutes')); + target.fishingEndDateTime = target.endDateTime; + target.startPosition = VesselPosition.fromObject({ latitude: this.posStartLat, longitude: this.posStartLon, dateTime: target.fishingStartDateTime, operationId: target.id }); + target.endPosition = VesselPosition.fromObject({ latitude: this.posEndLat, longitude: this.posEndLon, dateTime: target.fishingEndDateTime, operationId: target.id }); + target.positions = [target.startPosition, target.endPosition]; + return target; + } +} +export class RdbSpeciesList extends Entity { + fromObject(source) { + this.tripCode = toNumber(source.tripCode); + this.stationNumber = toNumber(source.stationNumber); + this.species = source.species; + this.catchCategory = source.catchCategory; + this.weight = toNumber(source.weight); + this.subsampleWeight = toNumber(source.subsampleWeight); + this.lengthCode = source.lengthCode; + } + get isLanding() { + return this.catchCategory === 'LAN'; + } + get isDiscard() { + return this.catchCategory === 'DIS'; + } +} +export class RdbSpeciesLength extends Entity { + fromObject(source) { + this.stationNumber = toNumber(source.stationNumber); + this.species = source.species; + this.catchCategory = source.catchCategory; + this.lengthClass = toNumber(source.lengthClass); + this.numberAtLength = toNumber(source.numberAtLength); + } +} +export class RdbPmfmTrip extends RdbTrip { + fromObject(source) { + super.fromObject(source); + this.departureDateTime = source.departureDateTime; + this.returnDateTime = source.returnDateTime; + } + asTrip() { + const target = super.asTrip(); + target.departureDateTime = DateUtils.moment(this.departureDateTime, 'YYYY-MM-DD HH:mm:ss.SSSZ'); + target.returnDateTime = DateUtils.moment(this.returnDateTime, 'YYYY-MM-DD HH:mm:ss.SSSZ'); + return target; + } +} +export class RdbPmfmStation extends RdbStation { +} +export class RdbPmfmSpeciesList extends RdbSpeciesList { +} +export class RdbPmfmSpeciesLength extends RdbSpeciesLength { + fromObject(source) { + super.fromObject(source); + this.elevatedNumberAtLength = toNumber(source.elevatedNumberAtLength); + this.taxonGroupId = toNumber(source.taxonGroupId); + this.referenceTaxonId = toNumber(source.referenceTaxonId); + } +} +//# sourceMappingURL=trip-report.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/trip-report.model.js.map b/out-tsc/app/app/trip/trip/report/trip-report.model.js.map new file mode 100644 index 000000000..68b51211e --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/trip-report.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip-report.model.js","sourceRoot":"","sources":["../../../../../../src/app/trip/trip/report/trip-report.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/trip-report.module.js b/out-tsc/app/app/trip/trip/report/trip-report.module.js new file mode 100644 index 000000000..5bd10e0c1 --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/trip-report.module.js @@ -0,0 +1,27 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { AppCoreModule } from '@app/core/core.module'; +import { AppSharedReportModule } from '@app/shared/report/report.module'; +import { AppOperationModule } from '@app/trip/operation/operation.module'; +import { TripReport } from './trip.report'; +import { AppReferentialModule } from '@app/referential/referential.module'; +let TripReportModule = class TripReportModule { +}; +TripReportModule = __decorate([ + NgModule({ + declarations: [ + TripReport + ], + imports: [ + AppCoreModule, + AppReferentialModule, + AppSharedReportModule, + AppOperationModule + ], + exports: [ + TripReport + ], + }) +], TripReportModule); +export { TripReportModule }; +//# sourceMappingURL=trip-report.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/trip-report.module.js.map b/out-tsc/app/app/trip/trip/report/trip-report.module.js.map new file mode 100644 index 000000000..d62085dda --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/trip-report.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip-report.module.js","sourceRoot":"","sources":["../../../../../../src/app/trip/trip/report/trip-report.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAiBpE,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAAI,CAAA;AAApB,gBAAgB;IAd5B,QAAQ,CAAC;QACR,YAAY,EAAE;YACZ,UAAU;SACX;QACD,OAAO,EAAE;YACP,aAAa;YACb,oBAAoB;YACpB,qBAAqB;YACrB,kBAAkB;SACnB;QACD,OAAO,EAAE;YACP,UAAU;SACX;KACF,CAAC;GACW,gBAAgB,CAAI;SAApB,gBAAgB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/trip-report.service.js b/out-tsc/app/app/trip/trip/report/trip-report.service.js new file mode 100644 index 000000000..bc4999946 --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/trip-report.service.js @@ -0,0 +1,82 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { BaseGraphqlService, GraphqlService } from '@sumaris-net/ngx-components'; +import { gql } from '@apollo/client/core'; +import { ExtractionFilter } from '@app/extraction/type/extraction-type.model'; +import { RdbPmfmSpeciesLength, RdbPmfmTrip, RdbSpeciesList, RdbStation } from '@app/trip/trip/report/trip-report.model'; +const Queries = { + extraction: gql `query Extraction($formatLabel: String!, $filter: ExtractionFilterVOInput!, $offset: Int, $size: Int, $cacheDuration: String) { + data: extraction( + type: {format: $formatLabel}, + offset: $offset, + size: $size, + cacheDuration: $cacheDuration, + filter: $filter + ) + }` +}; +let TripReportService = class TripReportService extends BaseGraphqlService { + constructor(graphql) { + super(graphql); + this.graphql = graphql; + } + loadAll(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + opts = Object.assign({ sheetNames: ['TR', 'HH', 'SL', 'HL'], dataTypes: { + TR: RdbPmfmTrip, + HH: RdbStation, + SL: RdbSpeciesList, + HL: RdbPmfmSpeciesLength + } }, opts); + const withCache = (!opts || opts.cache !== false); + const cacheDuration = withCache ? (opts && opts.cacheDuration || 'default') : undefined; + filter = ExtractionFilter.fromObject(filter); + if (filter.isEmpty()) + throw new Error('Cannot load trip data: filter is empty!'); + const podFilter = filter.asPodObject(); + podFilter.sheetNames = opts === null || opts === void 0 ? void 0 : opts.sheetNames; + delete podFilter.sheetName; + const variables = { + filter: podFilter, + formatLabel: opts.formatLabel || 'pmfm_trip', + offset: 0, + size: 10000, + sortDirection: 'asc', + cacheDuration + }; + const now = Date.now(); + console.debug(`[trip-report-service] Loading extraction data... {cache: ${withCache}${withCache ? ', cacheDuration: \'' + cacheDuration + '\'' : ''}}`, variables); + const query = (opts === null || opts === void 0 ? void 0 : opts.query) || Queries.extraction; + const { data } = yield this.graphql.query({ + query, + variables, + fetchPolicy: opts && opts.fetchPolicy || 'no-cache' + }); + const result = Object.keys(data).reduce((map, sheetName) => { + const jsonArray = data[sheetName]; + const dataType = opts === null || opts === void 0 ? void 0 : opts.dataTypes[sheetName]; + if (dataType) { + const entities = (jsonArray || []).map(json => { + const entity = new dataType(); + entity.fromObject(json); + return entity; + }); + map[sheetName] = entities; + } + else { + console.warn('Unknown dataType for sheetName: ' + sheetName); + map[sheetName] = jsonArray; // Unknown data type + } + return map; + }, {}); + console.debug(`[trip-report-service] Extraction data loaded in ${Date.now() - now}ms`, result); + return result; + }); + } +}; +TripReportService = __decorate([ + Injectable(), + __metadata("design:paramtypes", [GraphqlService]) +], TripReportService); +export { TripReportService }; +//# sourceMappingURL=trip-report.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/trip-report.service.js.map b/out-tsc/app/app/trip/trip/report/trip-report.service.js.map new file mode 100644 index 000000000..34098bf84 --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/trip-report.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip-report.service.js","sourceRoot":"","sources":["../../../../../../src/app/trip/trip/report/trip-report.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/trip.report.js b/out-tsc/app/app/trip/trip/report/trip.report.js new file mode 100644 index 000000000..f072baaf0 --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/trip.report.js @@ -0,0 +1,28 @@ +import { __decorate, __metadata } from "tslib"; +import { Component, Injector, ViewEncapsulation } from '@angular/core'; +import { TripReportService } from '@app/trip/trip/report/trip-report.service'; +import { BaseTripReport } from '@app/trip/trip/report/base-trip.report'; +let TripReport = class TripReport extends BaseTripReport { + constructor(injector, tripReportService) { + super(injector, tripReportService); + this.logPrefix = 'trip-report '; + } +}; +TripReport = __decorate([ + Component({ + selector: 'app-trip-report', + templateUrl: './trip.report.html', + styleUrls: [ + './trip.report.scss', + '../../../data/report/base-report.scss', + ], + providers: [ + { provide: TripReportService, useClass: TripReportService } + ], + encapsulation: ViewEncapsulation.None + }), + __metadata("design:paramtypes", [Injector, + TripReportService]) +], TripReport); +export { TripReport }; +//# sourceMappingURL=trip.report.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/report/trip.report.js.map b/out-tsc/app/app/trip/trip/report/trip.report.js.map new file mode 100644 index 000000000..deca13edd --- /dev/null +++ b/out-tsc/app/app/trip/trip/report/trip.report.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip.report.js","sourceRoot":"","sources":["../../../../../../src/app/trip/trip/report/trip.report.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAcjE,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,cAAqC;IAEnE,YAAY,QAAkB,EAClB,iBAA2D;QACrE,KAAK,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC;IAClC,CAAC;CAEF,CAAA;AARY,UAAU;IAZtB,SAAS,CAAC;QACT,QAAQ,EAAE,iBAAiB;QAC3B,WAAW,EAAE,oBAAoB;QACjC,SAAS,EAAE;YACT,oBAAoB;YACpB,uCAAuC;SACxC;QACD,SAAS,EAAE;YACT,EAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,EAAC;SAC1D;QACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;KACtC,CAAC;qCAGsB,QAAQ;QACC,iBAAiB;GAHrC,UAAU,CAQtB;SARY,UAAU"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trash/trip-trash.modal.js b/out-tsc/app/app/trip/trip/trash/trip-trash.modal.js new file mode 100644 index 000000000..07645bafc --- /dev/null +++ b/out-tsc/app/app/trip/trip/trash/trip-trash.modal.js @@ -0,0 +1,236 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { AccountService, AppTable, chainPromises, EntitiesStorage, EntitiesTableDataSource, isEmptyArray, isNotNil, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, toBoolean } from '@sumaris-net/ngx-components'; +import { Trip } from '../trip.model'; +import { TripService } from '../trip.service'; +import { TripFilter } from '../trip.filter'; +import { UntypedFormBuilder } from '@angular/forms'; +import { environment } from '@environments/environment'; +import { TrashRemoteService } from '@app/core/services/trash-remote.service'; +let TripTrashModal = class TripTrashModal extends AppTable { + constructor(injector, accountService, service, entities, trashRemoteService, formBuilder, cd) { + super(injector, RESERVED_START_COLUMNS + .concat([ + 'updateDate', + 'program', + 'vessel', + 'departureLocation', + 'departureDateTime', + 'returnDateTime', + 'observers', + 'comments' + ]) + .concat(RESERVED_END_COLUMNS), new EntitiesTableDataSource(Trip, service, null, { + prependNewElements: false, + suppressErrors: environment.production, + saveOnlyDirtyRows: true, + readOnly: true, + watchAllOptions: { + trash: true + } + }), null // Filter + ); + this.accountService = accountService; + this.service = service; + this.entities = entities; + this.trashRemoteService = trashRemoteService; + this.formBuilder = formBuilder; + this.cd = cd; + this.i18nColumnPrefix = 'TRIP.TABLE.'; + this.readOnly = true; + this.inlineEdition = false; + this.confirmBeforeDelete = true; + this.saveBeforeSort = false; + this.saveBeforeFilter = false; + this.saveBeforeDelete = false; + this.autoLoad = false; + this.defaultSortBy = 'updateDate'; + this.defaultSortDirection = 'desc'; + // FOR DEV ONLY ---- + this.debug = !environment.production; + } + get isOfflineMode() { + return !this.synchronizationStatus || this.synchronizationStatus !== 'SYNC'; + } + get isOnlineMode() { + return !this.isOfflineMode; + } + ngOnInit() { + super.ngOnInit(); + this.showIdColumn = toBoolean(this.showIdColumn, this.accountService.isAdmin()); + this.canDelete = this.isOnlineMode && this.accountService.isAdmin(); + this.displayedAttributes = { + vesselSnapshot: this.settings.getFieldDisplayAttributes('vesselSnapshot'), + location: this.settings.getFieldDisplayAttributes('location') + }; + const filter = TripFilter.fromObject(Object.assign(Object.assign({}, this.filter), { synchronizationStatus: this.synchronizationStatus })); + this.setFilter(filter, { emitEvent: true }); + } + ngOnDestroy() { + super.ngOnDestroy(); + } + closeAndRestore(event, rows) { + return __awaiter(this, void 0, void 0, function* () { + const data = yield this.restore(event, rows); + if (isEmptyArray(data)) + return; // User cancelled + return this.close(null, data); + }); + } + restore(event, rows) { + return __awaiter(this, void 0, void 0, function* () { + if (this.loading) + return; // Skip + const confirm = yield this.askRestoreConfirmation(); + if (!confirm) + return; + if (event) { + event.stopPropagation(); + event.preventDefault(); + } + this.markAsLoading(); + try { + let entities = (rows || []).map(row => row.currentData).filter(isNotNil); + if (isEmptyArray(entities)) + return; // Skip + // If online: get trash data full content + if (this.isOnlineMode) { + entities = (yield chainPromises(entities.map(e => () => this.trashRemoteService.load('Trip', e.id)))) + .map(Trip.fromObject); + } + // Copy locally + entities = yield this.service.copyAllLocally(entities, { + deletedFromTrash: this.isOfflineMode, + displaySuccessToast: false + }); + // Deselect rows + this.selection.deselect(...rows); + // Success toast + setTimeout(() => { + this.showToast({ + type: 'info', + message: rows.length === 1 ? + 'TRIP.TRASH.INFO.ONE_TRIP_RESTORED' : + 'TRIP.TRASH.INFO.MANY_TRIPS_RESTORED' + }); + }, 200); + return entities; + } + catch (err) { + console.error(err && err.message || err, err); + this.error = err && err.message || err; + return; + } + finally { + this.markAsLoaded(); + } + }); + } + toggleRow(event, row) { + return __awaiter(this, void 0, void 0, function* () { + if (event && event.defaultPrevented) + return; // Skip + if (this.selection.isEmpty()) { + this.selection.select(row); + } + else if (!this.selection.isSelected(row)) { + if (!event.ctrlKey) { + this.selection.clear(); + } + this.selection.select(row); + } + else { + this.selection.toggle(row); + } + return true; + }); + } + close(event, data) { + return __awaiter(this, void 0, void 0, function* () { + yield this.modalCtrl.dismiss(data); + }); + } + cancel(event) { + return __awaiter(this, void 0, void 0, function* () { + yield this.modalCtrl.dismiss(null, 'cancel'); + }); + } + cleanLocalTrash(event, confirm) { + return __awaiter(this, void 0, void 0, function* () { + if (!confirm) { + confirm = yield this.askDeleteConfirmation(event); + if (!confirm) + return; // skip + } + console.debug('[trip-trash] Cleaning the trash...'); + yield this.entities.clearTrash(Trip.TYPENAME); + yield this.close(); + // Success toast + setTimeout(() => { + this.showToast({ + type: 'info', + message: 'TRIP.TRASH.INFO.LOCAL_TRASH_CLEANED' + }); + }, 200); + }); + } + cleanRemoteTrash(event, rows) { + return __awaiter(this, void 0, void 0, function* () { + if (this.loading) + return; // Skip + if (!(yield this.askRestoreConfirmation(event))) + return; // User cancelled + if (event) { + event.stopPropagation(); + event.preventDefault(); + } + this.markAsLoading(); + try { + const remoteIds = rows.map(row => row.currentData) + .map(trip => trip.id) + .filter(id => isNotNil(id) && id >= 0); + if (isEmptyArray(remoteIds)) + return; // Skip if no remote ids + yield this.trashRemoteService.deleteAll(Trip.ENTITY_NAME, remoteIds); + // Unselect rows, then refresh + this.selection.deselect(...rows); + this.onRefresh.emit(); + } + catch (err) { + console.error(err && err.message || err, err); + this.error = err && err.message || err; + } + finally { + this.markAsLoaded(); + } + }); + } + /* -- protected method -- */ + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Boolean) +], TripTrashModal.prototype, "showIdColumn", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], TripTrashModal.prototype, "synchronizationStatus", void 0); +TripTrashModal = __decorate([ + Component({ + selector: 'app-trip-trash-modal', + templateUrl: './trip-trash.modal.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + AccountService, + TripService, + EntitiesStorage, + TrashRemoteService, + UntypedFormBuilder, + ChangeDetectorRef]) +], TripTrashModal); +export { TripTrashModal }; +//# sourceMappingURL=trip-trash.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trash/trip-trash.modal.js.map b/out-tsc/app/app/trip/trip/trash/trip-trash.modal.js.map new file mode 100644 index 000000000..1f218423a --- /dev/null +++ b/out-tsc/app/app/trip/trip/trash/trip-trash.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip-trash.modal.js","sourceRoot":"","sources":["../../../../../../src/app/trip/trip/trash/trip-trash.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trip-ref.model.js b/out-tsc/app/app/trip/trip/trip-ref.model.js new file mode 100644 index 000000000..9ab917593 --- /dev/null +++ b/out-tsc/app/app/trip/trip/trip-ref.model.js @@ -0,0 +1,29 @@ +var TripRef_1; +import { __decorate, __metadata } from "tslib"; +import { EntityClass, fromDateISOString, toDateISOString } from '@sumaris-net/ngx-components'; +import { DataRootVesselEntity } from '@app/data/services/model/root-vessel-entity.model'; +let TripRef = TripRef_1 = class TripRef extends DataRootVesselEntity { + constructor() { + super(TripRef_1.TYPENAME); + } + asObject(options) { + const target = super.asObject(options); + target.departureDateTime = toDateISOString(this.departureDateTime); + target.returnDateTime = toDateISOString(this.returnDateTime); + return target; + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.departureDateTime = fromDateISOString(source.departureDateTime); + this.returnDateTime = fromDateISOString(source.returnDateTime); + } + getStrategyDateTime() { + return this.departureDateTime || this.returnDateTime; + } +}; +TripRef = TripRef_1 = __decorate([ + EntityClass({ typename: 'TripVO' }), + __metadata("design:paramtypes", []) +], TripRef); +export { TripRef }; +//# sourceMappingURL=trip-ref.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trip-ref.model.js.map b/out-tsc/app/app/trip/trip/trip-ref.model.js.map new file mode 100644 index 000000000..0136ba238 --- /dev/null +++ b/out-tsc/app/app/trip/trip/trip-ref.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip-ref.model.js","sourceRoot":"","sources":["../../../../../src/app/trip/trip/trip-ref.model.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,mDAAmD,CAAC;AAGlF,IAAM,OAAO,eAAb,MAAM,OAAQ,SAAQ,oBAA6B;IAMxD;QACE,KAAK,CAAC,SAAO,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAED,QAAQ,CAAC,OAAmC;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,CAAC,iBAAiB,GAAG,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACnE,MAAM,CAAC,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,MAAW,EAAE,IAAU;QAChC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACrE,IAAI,CAAC,cAAc,GAAG,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACjE,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,cAAc,CAAC;IACvD,CAAC;CACF,CAAA;AA1BY,OAAO;IADnB,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;;GACvB,OAAO,CA0BnB;SA1BY,OAAO"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trip-routing.module.js b/out-tsc/app/app/trip/trip/trip-routing.module.js new file mode 100644 index 000000000..e6755d5e2 --- /dev/null +++ b/out-tsc/app/app/trip/trip/trip-routing.module.js @@ -0,0 +1,82 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { AuthGuardService, ComponentDirtyGuard } from '@sumaris-net/ngx-components'; +import { TripTable } from './trips.table'; +import { TripPage } from './trip.page'; +import { AppTripModule } from './trip.module'; +const routes = [ + // Table + { + path: '', + pathMatch: 'full', + canActivate: [AuthGuardService], + component: TripTable, + }, + // Page + { + path: ':tripId', + runGuardsAndResolvers: 'pathParamsChange', + canActivate: [AuthGuardService], + data: { + profile: 'USER', + pathIdParam: 'tripId', + }, + children: [ + { + path: '', + pathMatch: 'full', + component: TripPage, + runGuardsAndResolvers: 'pathParamsChange', + canDeactivate: [ComponentDirtyGuard], + data: { + profile: 'USER', + pathIdParam: 'tripId', + }, + }, + { + path: 'operation', + loadChildren: () => import('../operation/operation-routing.module').then((m) => m.AppOperationRoutingModule), + }, + { + path: 'landing', + loadChildren: () => import('../landing/landing-routing.module').then((m) => m.AppLandingRoutingModule), + }, + { + path: 'report', + loadChildren: () => import('./report/trip-report-routing.module').then((m) => m.TripReportRoutingModule), + }, + ], + }, + // Shared report + { + path: 'report', + children: [ + { + path: '', + pathMatch: 'full', + loadChildren: () => import('./report/trip-report-routing.module').then((m) => m.TripReportRoutingModule), + }, + { + path: 'selectivity', + pathMatch: 'full', + loadChildren: () => import('./report/selectivity/selectivity-trip-report-routing.module').then((m) => m.SelectivityTripReportRoutingModule), + }, + ], + }, +]; +let AppTripRoutingModule = class AppTripRoutingModule { +}; +AppTripRoutingModule = __decorate([ + NgModule({ + imports: [ + AppTripModule, + RouterModule.forChild(routes) + ], + exports: [ + RouterModule + ] + }) +], AppTripRoutingModule); +export { AppTripRoutingModule }; +//# sourceMappingURL=trip-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trip-routing.module.js.map b/out-tsc/app/app/trip/trip/trip-routing.module.js.map new file mode 100644 index 000000000..7455eff37 --- /dev/null +++ b/out-tsc/app/app/trip/trip/trip-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip-routing.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/trip/trip-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,MAAM,GAAW;IACrB,QAAQ;IACR;QACE,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,WAAW,EAAE,CAAC,gBAAgB,CAAC;QAC/B,SAAS,EAAE,SAAS;KACrB;IAED,OAAO;IACP;QACE,IAAI,EAAE,SAAS;QACf,qBAAqB,EAAE,kBAAkB;QACzC,WAAW,EAAE,CAAC,gBAAgB,CAAC;QAC/B,IAAI,EAAE;YACJ,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,QAAQ;SACtB;QACD,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,EAAE;gBACR,SAAS,EAAE,MAAM;gBACjB,SAAS,EAAE,QAAQ;gBACnB,qBAAqB,EAAE,kBAAkB;gBACzC,aAAa,EAAE,CAAC,mBAAmB,CAAC;gBACpC,IAAI,EAAE;oBACJ,OAAO,EAAE,MAAM;oBACf,WAAW,EAAE,QAAQ;iBACtB;aACF;YACD;gBACE,IAAI,EAAE,WAAW;gBACjB,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC;aAC7G;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC;aACvG;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC;aACzG;SACF;KACF;IAED,gBAAgB;IAChB;QACE,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,EAAE;gBACR,SAAS,EAAE,MAAM;gBACjB,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC;aACzG;YACD;gBACE,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,MAAM;gBACjB,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,6DAA6D,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kCAAkC,CAAC;aAC5I;SACF;KACF;CACF,CAAC;AAYK,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAChC,CAAA;AADY,oBAAoB;IAThC,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,aAAa;YACb,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC9B;QACD,OAAO,EAAE;YACP,YAAY;SACb;KACF,CAAC;GACW,oBAAoB,CAChC;SADY,oBAAoB"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trip.filter.js b/out-tsc/app/app/trip/trip/trip.filter.js new file mode 100644 index 000000000..3ae91c830 --- /dev/null +++ b/out-tsc/app/app/trip/trip/trip.filter.js @@ -0,0 +1,149 @@ +var TripFilter_1; +import { __decorate, __metadata } from "tslib"; +import { RootDataEntityFilter } from '@app/data/services/model/root-data-filter.model'; +import { EntityClass, fromDateISOString, isNil, isNotEmptyArray, isNotNil, Person, ReferentialRef, ReferentialUtils, } from '@sumaris-net/ngx-components'; +import { VesselSnapshot } from '@app/referential/services/model/vessel-snapshot.model'; +import { OperationFilter } from '@app/trip/operation/operation.filter'; +import { PhysicalGearFilter } from '@app/trip/physicalgear/physical-gear.filter'; +import { DataSynchroImportFilter } from '@app/data/services/root-data-synchro-service.class'; +let TripFilter = TripFilter_1 = class TripFilter extends RootDataEntityFilter { + constructor() { + super(); + this.vesselId = null; + this.vesselSnapshot = null; + this.location = null; + this.startDate = null; + this.endDate = null; + this.dataQualityStatus = 'VALIDATED'; + } + static toPhysicalGearFilter(f) { + if (!f) + return undefined; + return PhysicalGearFilter.fromObject({ + program: f.program, + vesselId: f.vesselId, + startDate: f.startDate, + endDate: f.endDate, + }); + } + static toOperationFilter(f) { + var _a; + if (!f) + return undefined; + return OperationFilter.fromObject({ + programLabel: (_a = f.program) === null || _a === void 0 ? void 0 : _a.label, + vesselId: f.vesselId, + startDate: f.startDate, + endDate: f.endDate, + boundingBox: f.boundingBox, + }); + } + fromObject(source, opts) { + super.fromObject(source, opts); + this.vesselId = source.vesselId; + this.vesselSnapshot = source.vesselSnapshot && VesselSnapshot.fromObject(source.vesselSnapshot); + this.startDate = fromDateISOString(source.startDate); + this.endDate = fromDateISOString(source.endDate); + this.location = ReferentialRef.fromObject(source.location); + this.observers = (source.observers && source.observers.map(Person.fromObject).filter(isNotNil)) || []; + this.includedIds = source.includedIds; + this.excludedIds = source.excludedIds; + this.boundingBox = source.boundingBox; + this.observedLocationId = source.observedLocationId; + this.hasScientificCruise = source.hasScientificCruise; + this.hasObservedLocation = source.hasObservedLocation; + } + asObject(opts) { + var _a; + const target = super.asObject(opts); + if (opts && opts.minify) { + // Vessel + target.vesselId = isNotNil(this.vesselId) ? this.vesselId : (_a = this.vesselSnapshot) === null || _a === void 0 ? void 0 : _a.id; + delete target.vesselSnapshot; + // Location + target.locationId = (this.location && this.location.id) || undefined; + delete target.location; + // Observers + target.observerPersonIds = (isNotEmptyArray(this.observers) && this.observers.map((o) => o && o.id).filter(isNotNil)) || undefined; + delete target.observers; + // Exclude scientific cruise by default + if (isNil(target.hasScientificCruise)) { + target.hasScientificCruise = false; + } + // Exclude observed location by default + if (isNil(target.hasObservedLocation)) { + target.hasObservedLocation = false; + } + } + else { + target.vesselSnapshot = (this.vesselSnapshot && this.vesselSnapshot.asObject(opts)) || undefined; + target.location = (this.location && this.location.asObject(opts)) || undefined; + target.observers = (this.observers && this.observers.map((o) => o && o.asObject(opts)).filter(isNotNil)) || []; + } + return target; + } + buildFilter() { + var _a, _b; + const filterFns = super.buildFilter(); + // Filter excluded ids + if (isNotEmptyArray(this.excludedIds)) { + filterFns.push((t) => isNil(t.id) || !this.excludedIds.includes(t.id)); + } + // Filter included ids + if (isNotEmptyArray(this.includedIds)) { + filterFns.push((t) => isNotNil(t.id) && this.includedIds.includes(t.id)); + } + // Vessel + const vesselId = isNotNil(this.vesselId) ? this.vesselId : (_a = this.vesselSnapshot) === null || _a === void 0 ? void 0 : _a.id; + if (isNotNil(vesselId)) { + filterFns.push((t) => { var _a; return ((_a = t.vesselSnapshot) === null || _a === void 0 ? void 0 : _a.id) === vesselId; }); + } + // Location + if (ReferentialUtils.isNotEmpty(this.location)) { + const locationId = this.location.id; + filterFns.push((t) => (t.departureLocation && t.departureLocation.id === locationId) || (t.returnLocation && t.returnLocation.id === locationId)); + } + // Start/end period + if (this.startDate) { + const startDate = this.startDate.clone(); + filterFns.push((t) => (t.returnDateTime ? startDate.isSameOrBefore(t.returnDateTime) : startDate.isSameOrBefore(t.departureDateTime))); + } + if (this.endDate) { + const endDate = this.endDate.clone().add(1, 'day').startOf('day'); + filterFns.push((t) => t.departureDateTime && endDate.isAfter(t.departureDateTime)); + } + // Observers + const observerIds = (_b = this.observers) === null || _b === void 0 ? void 0 : _b.map((o) => o.id).filter(isNotNil); + if (isNotEmptyArray(observerIds)) { + filterFns.push((t) => { var _a; return (_a = t.observers) === null || _a === void 0 ? void 0 : _a.some((o) => o && observerIds.includes(o.id)); }); + } + // has scientific cruise + // TODO + return filterFns; + } + isEmpty() { + return super.isEmpty(); + } + isCriteriaNotEmpty(key, value) { + return !TripFilter_1.EXCLUDED_CRITERIA_COUNT_KEYS.includes(key) && super.isCriteriaNotEmpty(key, value); + } +}; +TripFilter.EXCLUDED_CRITERIA_COUNT_KEYS = ['hasScientificCruise', 'hasObservedLocation']; +TripFilter = TripFilter_1 = __decorate([ + EntityClass({ typename: 'TripFilterVO' }), + __metadata("design:paramtypes", []) +], TripFilter); +export { TripFilter }; +export class TripSynchroImportFilter extends DataSynchroImportFilter { + static toTripFilter(f) { + if (!f) + return undefined; + return TripFilter.fromObject({ + program: { label: f.programLabel }, + vesselId: f.vesselId, + startDate: f.startDate, + endDate: f.endDate + }); + } +} +//# sourceMappingURL=trip.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trip.filter.js.map b/out-tsc/app/app/trip/trip/trip.filter.js.map new file mode 100644 index 000000000..30b90b01c --- /dev/null +++ b/out-tsc/app/app/trip/trip/trip.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip.filter.js","sourceRoot":"","sources":["../../../../../src/app/trip/trip/trip.filter.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AACvF,OAAO,EAEL,WAAW,EAEX,iBAAiB,EACjB,KAAK,EACL,eAAe,EACf,QAAQ,EACR,MAAM,EACN,cAAc,EACd,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,cAAc,EAAE,MAAM,uDAAuD,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oDAAoD,CAAC;AAItF,IAAM,UAAU,kBAAhB,MAAM,UAAW,SAAQ,oBAAsC;IAsCpE;QACE,KAAK,EAAE,CAAC;QAdV,aAAQ,GAAW,IAAI,CAAC;QACxB,mBAAc,GAAmB,IAAI,CAAC;QACtC,aAAQ,GAAmB,IAAI,CAAC;QAChC,cAAS,GAAW,IAAI,CAAC;QACzB,YAAO,GAAW,IAAI,CAAC;QAWrB,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC;IACvC,CAAC;IArCD,MAAM,CAAC,oBAAoB,CAAC,CAAsB;QAChD,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzB,OAAO,kBAAkB,CAAC,UAAU,CAAC;YACnC,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,CAAsB;;QAC7C,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzB,OAAO,eAAe,CAAC,UAAU,CAAC;YAChC,YAAY,EAAE,MAAA,CAAC,CAAC,OAAO,0CAAE,KAAK;YAC9B,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,WAAW,EAAE,CAAC,CAAC,WAAW;SAC3B,CAAC,CAAC;IACL,CAAC;IAoBD,UAAU,CAAC,MAAW,EAAE,IAAU;QAChC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAChG,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACtG,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;QACpD,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;QACtD,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;IACxD,CAAC;IAED,QAAQ,CAAC,IAA4B;;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YACvB,SAAS;YACT,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,cAAc,0CAAE,EAAE,CAAC;YACpF,OAAO,MAAM,CAAC,cAAc,CAAC;YAE7B,WAAW;YACX,MAAM,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC;YACrE,OAAO,MAAM,CAAC,QAAQ,CAAC;YAEvB,YAAY;YACZ,MAAM,CAAC,iBAAiB,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,SAAS,CAAC;YACnI,OAAO,MAAM,CAAC,SAAS,CAAC;YAExB,uCAAuC;YACvC,IAAI,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE;gBACrC,MAAM,CAAC,mBAAmB,GAAG,KAAK,CAAC;aACpC;YAED,uCAAuC;YACvC,IAAI,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE;gBACrC,MAAM,CAAC,mBAAmB,GAAG,KAAK,CAAC;aACpC;SACF;aAAM;YACL,MAAM,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC;YACjG,MAAM,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC;YAC/E,MAAM,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;SAChH;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW;;QACT,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEtC,sBAAsB;QACtB,IAAI,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACrC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACxE;QAED,sBAAsB;QACtB,IAAI,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACrC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC1E;QAED,SAAS;QACT,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,cAAc,0CAAE,EAAE,CAAC;QACnF,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;YACtB,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,CAAC,CAAC,cAAc,0CAAE,EAAE,MAAK,QAAQ,CAAA,EAAA,CAAC,CAAC;SAC1D;QAED,WAAW;QACX,IAAI,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,SAAS,CAAC,IAAI,CACZ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,iBAAiB,CAAC,EAAE,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,KAAK,UAAU,CAAC,CAClI,CAAC;SACH;QAED,mBAAmB;QACnB,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACzC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;SACxI;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAClE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;SACpF;QAED,YAAY;QACZ,MAAM,WAAW,GAAG,MAAA,IAAI,CAAC,SAAS,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtE,IAAI,eAAe,CAAC,WAAW,CAAC,EAAE;YAChC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,SAAS,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,EAAA,CAAC,CAAC;SAClF;QAED,wBAAwB;QACxB,OAAO;QAEP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;IAES,kBAAkB,CAAC,GAAqB,EAAE,KAAU;QAC5D,OAAO,CAAC,YAAU,CAAC,4BAA4B,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxG,CAAC;;AAjJM,uCAA4B,GAAyB,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;AAFhG,UAAU;IADtB,WAAW,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;;GAC7B,UAAU,CAoJtB;SApJY,UAAU;AAsJvB,MAAM,OAAO,uBAAwB,SAAQ,uBAAuB;IAGlE,MAAM,CAAC,YAAY,CAAC,CAA0B;QAC5C,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzB,OAAO,UAAU,CAAC,UAAU,CAAC;YAC3B,OAAO,EAAE,EAAC,KAAK,EAAE,CAAC,CAAC,YAAY,EAAC;YAChC,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC,CAAC;IACL,CAAC;CAEF"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trip.form.js b/out-tsc/app/app/trip/trip/trip.form.js new file mode 100644 index 000000000..e44758aac --- /dev/null +++ b/out-tsc/app/app/trip/trip/trip.form.js @@ -0,0 +1,452 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Injector, Input, Output, QueryList, ViewChild, ViewChildren, } from '@angular/core'; +import { TripValidatorService } from './trip.validator'; +import { ModalController } from '@ionic/angular'; +import { AcquisitionLevelCodes, LocationLevelIds } from '@app/referential/services/model/model.enum'; +import { AppForm, DateUtils, EntityUtils, equals, fromDateISOString, isEmptyArray, isNotEmptyArray, isNotNil, isNotNilOrBlank, MatAutocompleteField, NetworkService, PersonService, PersonUtils, ReferentialRef, referentialToString, ReferentialUtils, StatusIds, toBoolean, toDateISOString, } from '@sumaris-net/ngx-components'; +import { VesselSnapshotService } from '@app/referential/services/vessel-snapshot.service'; +import { UntypedFormBuilder } from '@angular/forms'; +import { Vessel } from '@app/vessel/services/model/vessel.model'; +import { METIER_DEFAULT_FILTER, MetierService } from '@app/referential/services/metier.service'; +import { Trip } from './trip.model'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { debounceTime, filter, map } from 'rxjs/operators'; +import { VesselModal } from '@app/vessel/modal/vessel-modal'; +import { VesselSnapshot } from '@app/referential/services/model/vessel-snapshot.model'; +import { combineLatest } from 'rxjs'; +import { ProgramRefService } from '@app/referential/services/program-ref.service'; +const TRIP_METIER_DEFAULT_FILTER = METIER_DEFAULT_FILTER; +let TripForm = class TripForm extends AppForm { + constructor(injector, formBuilder, validatorService, vesselSnapshotService, referentialRefService, programRefService, metierService, personService, modalCtrl, network, cd) { + super(injector, validatorService.getFormGroup()); + this.formBuilder = formBuilder; + this.validatorService = validatorService; + this.vesselSnapshotService = vesselSnapshotService; + this.referentialRefService = referentialRefService; + this.programRefService = programRefService; + this.metierService = metierService; + this.personService = personService; + this.modalCtrl = modalCtrl; + this.network = network; + this.cd = cd; + this.mobile = this.settings.mobile; + //readonly appearance = this.mobile ? 'outline' : 'legacy'; + this.observerFocusIndex = -1; + this.enableMetierFilter = false; + this.metierFocusIndex = -1; + this.canFilterMetier = false; + this.showComment = true; + this.allowAddNewVessel = true; + this.showError = true; + this.vesselDefaultStatus = StatusIds.TEMPORARY; + this.metierHistoryNbDays = 60; + this.locationLevelIds = [LocationLevelIds.PORT]; + this.departureDateTimeChanges = new EventEmitter(); + this.departureLocationChanges = new EventEmitter(); + this.maxDateChanges = new EventEmitter(); + this.referentialToString = referentialToString; + } + set showObservers(value) { + if (this._showObservers !== value) { + this._showObservers = value; + if (!this.loading) + this.updateFormGroup(); + } + } + get showObservers() { + return this._showObservers; + } + set showMetiers(value) { + if (this._showMetiers !== value) { + this._showMetiers = value; + if (!this.loading) + this.updateFormGroup(); + } + } + get showMetiers() { + return this._showMetiers; + } + set locationSuggestLengthThreshold(value) { + if (this._locationSuggestLengthThreshold !== value) { + this._locationSuggestLengthThreshold = value; + // Update fields + if (this.autocompleteFields.location) { + this.autocompleteFields.location.suggestLengthThreshold = value; + this.locationFields.forEach((field) => { + field.suggestLengthThreshold = value; + field.reloadItems(); + }); + } + } + } + set returnFieldsRequired(value) { + if (this._returnFieldsRequired !== value) { + this._returnFieldsRequired = value; + if (!this.loading) + this.updateFormGroup(); + } + } + get returnFieldsRequired() { + return this._returnFieldsRequired; + } + get vesselSnapshot() { + return this.form.get('vesselSnapshot').value; + } + get value() { + const json = this.form.value; + // Add program, because if control disabled the value is missing + json.program = this.form.get('program').value; + if (!this._showObservers) + json.observers = []; // Remove observers, if hide + if (!this._showMetiers) + json.metiers = []; // Remove metiers, if hide + return json; + } + set value(json) { + this.setValue(json); + } + get observersForm() { + return this.form.controls.observers; + } + get metiersForm() { + return this.form.controls.metiers; + } + ngOnInit() { + super.ngOnInit(); + // Default values + this.showObservers = toBoolean(this.showObservers, false); // Will init the observers helper + this.showMetiers = toBoolean(this.showMetiers, false); // Will init the metiers helper + this.tabindex = isNotNil(this.tabindex) ? this.tabindex : 1; + this.returnFieldsRequired = toBoolean(this.returnFieldsRequired, !this.settings.isOnFieldMode); + if (isEmptyArray(this.locationLevelIds)) + this.locationLevelIds = [LocationLevelIds.PORT]; + // Combo: programs + this.registerAutocompleteField('program', { + service: this.programRefService, + filter: { + statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], + acquisitionLevelLabels: [AcquisitionLevelCodes.TRIP, AcquisitionLevelCodes.OPERATION], + }, + mobile: this.mobile, + showAllOnFocus: this.mobile, + }); + // Combo: vessels + this.vesselSnapshotService.getAutocompleteFieldOptions().then((opts) => this.registerAutocompleteField('vesselSnapshot', opts)); + // Combo location + this.registerAutocompleteField('location', { + suggestFn: (value, filter) => this.referentialRefService.suggest(value, Object.assign(Object.assign({}, filter), { levelIds: this.locationLevelIds })), + filter: { + entityName: 'Location', + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE], + }, + suggestLengthThreshold: this._locationSuggestLengthThreshold || 0, + mobile: this.mobile, + }); + // Combo: observers + this.registerAutocompleteField('person', { + // Important, to get the current (focused) control value, in suggestObservers() function (otherwise it will received '*'). + showAllOnFocus: false, + suggestFn: (value, filter) => this.suggestObservers(value, filter), + // Default filter. An excludedIds will be add dynamically + filter: { + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE], + userProfiles: ['SUPERVISOR', 'USER', 'GUEST'], + }, + attributes: ['lastName', 'firstName', 'department.name'], + displayWith: PersonUtils.personToString, + mobile: this.mobile, + }); + // Combo: metiers + const metierAttributes = this.settings.getFieldDisplayAttributes('metier'); + this.registerAutocompleteField('metier', { + // Important, to get the current (focused) control value, in suggestMetiers() function (otherwise it will received '*'). + //showAllOnFocus: false, + suggestFn: (value, options) => this.suggestMetiers(value, options), + // Default filter. An excludedIds will be add dynamically + filter: { + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE], + }, + // Increase default size (=3) of 'label' column + columnSizes: metierAttributes.map((a) => (a === 'label' ? 4 : undefined) /*auto*/), + attributes: metierAttributes, + mobile: this.mobile, + }); + // Update metier filter when form changed (if filter enable) + this.registerSubscription(this.form.valueChanges + .pipe(debounceTime(250), filter((_) => this._showMetiers)) + .subscribe((value) => this.updateMetierFilter(value))); + } + ngOnReady() { + this.updateFormGroup(); + const departureLocation$ = this.form.get('departureLocation').valueChanges; + const departureDateTime$ = this.form.get('departureDateTime').valueChanges; + const returnDateTime$ = this.form.get('returnDateTime').valueChanges; + this.registerSubscription(departureLocation$.subscribe(departureLocation => this.departureLocationChanges.next(ReferentialRef.fromObject(departureLocation)))); + this.registerSubscription(departureDateTime$ + .subscribe(departureDateTime => this.departureDateTimeChanges.next(fromDateISOString(departureDateTime)))); + this.registerSubscription(combineLatest([departureDateTime$, returnDateTime$]) + .pipe(map(([d1, d2]) => DateUtils.max(d1, d2))) + .subscribe(max => this.maxDateChanges.next(max))); + } + registerAutocompleteField(fieldName, opts) { + return super.registerAutocompleteField(fieldName, opts); + } + toggleFilteredMetier() { + if (this.enableMetierFilter) { + this.enableMetierFilter = false; + } + else { + const value = this.form.value; + const date = value.returnDateTime || value.departureDateTime; + const vesselId = value.vesselSnapshot && value.vesselSnapshot.id; + this.enableMetierFilter = date && isNotNil(vesselId); + } + // Update the metier filter + this.updateMetierFilter(); + } + reset(data, opts) { + this.setValue(data || new Trip(), opts); + } + setValue(data, opts) { + const _super = Object.create(null, { + setValue: { get: () => super.setValue } + }); + return __awaiter(this, void 0, void 0, function* () { + // Wait ready (= form group updated, by the parent page) + yield this.ready(); + // Make sure to have (at least) one observer + // Resize observers array + if (this._showObservers) { + data.observers = data.observers && data.observers.length ? data.observers : [null]; + } + else { + data.observers = []; + } + // Make sure to have (at least) one metier + this._showMetiers = this._showMetiers || isNotEmptyArray(data === null || data === void 0 ? void 0 : data.metiers); + if (this._showMetiers) { + data.metiers = data.metiers && data.metiers.length ? data.metiers : [null]; + } + else { + data.metiers = []; + } + this.maxDateChanges.emit(DateUtils.max(data.departureDateTime, data.returnDateTime)); + // Send value for form + _super.setValue.call(this, data, opts); + }); + } + addVesselModal(event) { + return __awaiter(this, void 0, void 0, function* () { + if (event) { + event.preventDefault(); + event.stopPropagation(); + } + const maxDate = this.form.get('departureDateTime').value; + const modal = yield this.modalCtrl.create({ + component: VesselModal, + componentProps: { + defaultStatus: this.vesselDefaultStatus, + maxDate: isNotNil(maxDate) ? toDateISOString(maxDate) : undefined, + }, + }); + yield modal.present(); + const res = yield modal.onDidDismiss(); + // if new vessel added, use it + const vessel = res && res.data; + if (vessel) { + const vesselSnapshot = vessel instanceof VesselSnapshot ? vessel : vessel instanceof Vessel ? VesselSnapshot.fromVessel(vessel) : VesselSnapshot.fromObject(vessel); + console.debug('[trip-form] New vessel added : updating form...', vesselSnapshot); + this.form.controls['vesselSnapshot'].setValue(vesselSnapshot); + this.markForCheck(); + } + else { + console.debug('[trip-form] No vessel added (user cancelled)'); + } + }); + } + addObserver() { + this.observersForm.add(); + if (!this.mobile) { + this.observerFocusIndex = this.observersForm.length - 1; + } + } + addMetier() { + this.metiersForm.add(); + if (!this.mobile) { + this.metierFocusIndex = this.metiersForm.length - 1; + } + } + /* -- protected methods-- */ + updateMetierFilter(value) { + console.debug('[trip-form] Updating metier filter...'); + value = value || this.form.value; + const program = value.program || this.form.get('program').value; + const programLabel = program && program.label; + const endDate = fromDateISOString(value.returnDateTime || value.departureDateTime); + const vesselId = value.vesselSnapshot && value.vesselSnapshot.id; + const canFilterMetier = endDate && isNotNilOrBlank(programLabel) && isNotNil(vesselId); + let metierFilter; + if (!this.enableMetierFilter || !canFilterMetier) { + metierFilter = TRIP_METIER_DEFAULT_FILTER; + } + else { + const startDate = endDate + .clone() + .startOf('day') + .add(-1 * this.metierHistoryNbDays, 'day'); + const excludedTripId = EntityUtils.isRemote(value) ? value.id : undefined; + metierFilter = Object.assign(Object.assign({}, TRIP_METIER_DEFAULT_FILTER), { programLabel, + vesselId, + startDate, + endDate, + excludedTripId }); + } + if (this.canFilterMetier !== canFilterMetier || this.metierFilter !== metierFilter) { + this.canFilterMetier = canFilterMetier; + this.metierFilter = metierFilter; + this.markForCheck(); + this.metierField.reloadItems(); + } + } + suggestObservers(value, filter) { + const currentControlValue = ReferentialUtils.isNotEmpty(value) ? value : null; + const newValue = currentControlValue ? '*' : value; + // Excluded existing observers, BUT keep the current control value + const excludedIds = (this.observersForm.value || []) + .filter(ReferentialUtils.isNotEmpty) + .filter((person) => !currentControlValue || currentControlValue !== person) + .map((person) => parseInt(person.id)); + return this.personService.suggest(newValue, Object.assign(Object.assign({}, filter), { excludedIds })); + } + suggestMetiers(value, filter) { + const currentControlValue = ReferentialUtils.isNotEmpty(value) ? value : null; + const newValue = currentControlValue ? '*' : value; + // Excluded existing observers, BUT keep the current control value + const excludedIds = (this.metiersForm.value || []) + .filter(ReferentialUtils.isNotEmpty) + .filter((item) => !currentControlValue || currentControlValue !== item) + .map((item) => parseInt(item.id)); + return this.metierService.suggest(newValue, Object.assign(Object.assign(Object.assign({}, filter), this.metierFilter), { excludedIds })); + } + updateFormGroup() { + const validatorOpts = { + returnFieldsRequired: this._returnFieldsRequired, + minDurationInHours: this.minDurationInHours, + maxDurationInHours: this.maxDurationInHours, + withMetiers: this.showMetiers, + withObservers: this.showObservers + }; + if (!equals(validatorOpts, this._lastValidatorOpts)) { + console.info('[trip-form] Updating form group, using opts', validatorOpts); + this.validatorService.updateFormGroup(this.form, validatorOpts); + // Need to refresh the form state (otherwise the returnLocation is still invalid) + if (!this.loading) { + this.updateValueAndValidity(); + // Not need to markForCheck (should be done inside updateValueAndValidity()) + //this.markForCheck(); + } + else { + // Need to toggle return date time to required + this.markForCheck(); + } + // Remember used opts, for next call + this._lastValidatorOpts = validatorOpts; + } + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], TripForm.prototype, "showComment", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], TripForm.prototype, "allowAddNewVessel", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], TripForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], TripForm.prototype, "vesselDefaultStatus", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], TripForm.prototype, "metierHistoryNbDays", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], TripForm.prototype, "showObservers", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], TripForm.prototype, "showMetiers", null); +__decorate([ + Input(), + __metadata("design:type", Object) +], TripForm.prototype, "locationLevelIds", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], TripForm.prototype, "minDurationInHours", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], TripForm.prototype, "maxDurationInHours", void 0); +__decorate([ + Input(), + __metadata("design:type", Number), + __metadata("design:paramtypes", [Number]) +], TripForm.prototype, "locationSuggestLengthThreshold", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], TripForm.prototype, "returnFieldsRequired", null); +__decorate([ + Output(), + __metadata("design:type", Object) +], TripForm.prototype, "departureDateTimeChanges", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], TripForm.prototype, "departureLocationChanges", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], TripForm.prototype, "maxDateChanges", void 0); +__decorate([ + ViewChild('metierField'), + __metadata("design:type", MatAutocompleteField) +], TripForm.prototype, "metierField", void 0); +__decorate([ + ViewChildren('locationField'), + __metadata("design:type", QueryList) +], TripForm.prototype, "locationFields", void 0); +TripForm = __decorate([ + Component({ + selector: 'app-form-trip', + templateUrl: './trip.form.html', + styleUrls: ['./trip.form.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + UntypedFormBuilder, + TripValidatorService, + VesselSnapshotService, + ReferentialRefService, + ProgramRefService, + MetierService, + PersonService, + ModalController, + NetworkService, + ChangeDetectorRef]) +], TripForm); +export { TripForm }; +//# sourceMappingURL=trip.form.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trip.form.js.map b/out-tsc/app/app/trip/trip/trip.form.js.map new file mode 100644 index 000000000..9fb2a5951 --- /dev/null +++ b/out-tsc/app/app/trip/trip/trip.form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip.form.js","sourceRoot":"","sources":["../../../../../src/app/trip/trip/trip.form.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trip.model.js b/out-tsc/app/app/trip/trip/trip.model.js new file mode 100644 index 000000000..267228b1c --- /dev/null +++ b/out-tsc/app/app/trip/trip/trip.model.js @@ -0,0 +1,643 @@ +var Operation_1, OperationGroup_1, Trip_1; +import { __decorate, __metadata } from "tslib"; +import { isMoment } from 'moment'; +import { DataEntity, MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE } from '@app/data/services/model/data-entity.model'; +import { Measurement, MeasurementUtils, MeasurementValuesUtils } from '@app/data/measurement/measurement.model'; +import { Sale } from '../sale/sale.model'; +import { DateUtils, EntityClass, fromDateISOString, isEmptyArray, isNil, isNotEmptyArray, isNotNil, Person, ReferentialRef, toDateISOString } from '@sumaris-net/ngx-components'; +import { FishingArea } from '@app/data/fishing-area/fishing-area.model'; +import { DataRootVesselEntity } from '@app/data/services/model/root-vessel-entity.model'; +import { Landing } from '../landing/landing.model'; +import { Sample } from '../sample/sample.model'; +import { Batch } from '../batch/common/batch.model'; +import { Product } from '../product/product.model'; +import { Packet } from '../packet/packet.model'; +import { ExpectedSale } from '@app/trip/sale/expected-sale.model'; +import { VesselSnapshot } from '@app/referential/services/model/vessel-snapshot.model'; +import { Metier } from '@app/referential/metier/metier.model'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +import { VesselPosition } from '@app/data/position/vessel/vessel-position.model'; +import { PhysicalGear } from '@app/trip/physicalgear/physical-gear.model'; +import { OperationPasteFlags } from '@app/referential/services/config/program.config'; +import { hasFlag } from '@app/shared/flags.utils'; +import { PositionUtils } from '@app/data/position/position.utils'; +import { PmfmIds } from '@app/referential/services/model/model.enum'; +export const MINIFY_OPERATION_FOR_LOCAL_STORAGE = Object.freeze(Object.assign(Object.assign({}, MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE), { batchAsTree: false, sampleAsTree: false, keepTrip: true // Trip is needed to apply filter on it + })); +export const FISHING_AREAS_LOCATION_REGEXP = /^fishingAreas\.[0-9]+\.location$/; +export const POSITIONS_REGEXP = /^startPosition|fishingStartPosition|fishingEndPosition|endPosition$/; +let Operation = Operation_1 = class Operation extends DataEntity { + constructor() { + super(Operation_1.TYPENAME); + this.startDateTime = null; + this.endDateTime = null; + this.fishingStartDateTime = null; + this.fishingEndDateTime = null; + this.comments = null; + this.rankOrder = null; // This attribute is not stored in the DB, but used to retrieve an operation locally, after saving it + this.rankOrderOnPeriod = null; + this.hasCatch = null; + this.positions = null; + this.startPosition = null; + this.fishingStartPosition = null; + this.fishingEndPosition = null; + this.endPosition = null; + this.metier = null; + this.physicalGear = null; + this.tripId = null; + this.vesselId = null; // Copy from trip (need by local filter) + this.programLabel = null; // Copy from trip (need by local filter) + this.measurements = []; + this.samples = null; + this.catchBatch = null; + this.fishingAreas = []; + this.parentOperationId = null; + this.parentOperation = null; + this.childOperationId = null; + this.childOperation = null; + } + static rankOrderComparator(sortDirection = 'asc') { + return !sortDirection || sortDirection !== 'desc' ? Operation_1.sortByAscRankOrder : Operation_1.sortByDescRankOrder; + } + ; + static sortByAscRankOrder(n1, n2) { + return n1.rankOrder === n2.rankOrder ? 0 : + (n1.rankOrder > n2.rankOrder ? 1 : -1); + } + static sortByDescRankOrder(n1, n2) { + return n1.rankOrder === n2.rankOrder ? 0 : + (n1.rankOrder > n2.rankOrder ? -1 : 1); + } + static sortByEndDateOrStartDate(n1, n2) { + const d1 = n1.endDateTime || n1.startDateTime; + const d2 = n2.endDateTime || n2.startDateTime; + return d1.isSame(d2) ? 0 : (d1.isAfter(d2) ? 1 : -1); + } + ; + asObject(opts) { + var _a, _b; + const target = super.asObject(opts); + target.startDateTime = toDateISOString(this.startDateTime); + target.endDateTime = toDateISOString(this.endDateTime); + target.fishingStartDateTime = toDateISOString(this.fishingStartDateTime); + target.fishingEndDateTime = toDateISOString(this.fishingEndDateTime); + // Fill date of start position (if valid) + if (PositionUtils.isNotNilAndValid(target.startPosition)) { + target.startPosition.dateTime = target.startDateTime; + } + else { + // Invalid position: remove it + delete target.startPosition; + } + // Fill date of fishing start position (if valid) + if (PositionUtils.isNotNilAndValid(target.fishingStartPosition)) { + // Make sure to fill fishing start date, using start date if need + target.fishingStartDateTime = target.fishingStartDateTime || target.startDateTime; + target.fishingStartPosition.dateTime = target.fishingStartDateTime; + } + else { + // Invalid position: remove it + delete target.fishingStartPosition; + } + // Fill fishing start position (if valid) + if (PositionUtils.isNotNilAndValid(target.fishingEndPosition)) { + target.fishingEndDateTime = target.fishingEndDateTime || target.fishingStartDateTime || target.startDateTime; + target.fishingEndPosition.dateTime = target.fishingEndDateTime; + } + else { + // Invalid position: remove it + delete target.fishingEndPosition; + } + // Fill end date, by using start date (because NOT NULL constraint on Pod) + target.endDateTime = target.endDateTime || target.fishingEndDateTime || target.fishingStartDateTime || target.startDateTime; + // Fill end position date/time (if valid = has latitude AND longitude) + if (PositionUtils.isNotNilAndValid(target.endPosition)) { + target.endPosition.dateTime = target.endDateTime; + } + // Invalid position (missing latitude or longitude - allowed in on FIELD mode): remove it + else { + delete target.endPosition; + } + // Create an array of position, instead of start/end + target.positions = [ + target.startPosition, + target.fishingStartPosition, + target.fishingEndPosition, + target.endPosition + ] + .filter(p => p === null || p === void 0 ? void 0 : p.dateTime) + .map(p => p && p.asObject(opts)) || undefined; + delete target.startPosition; + delete target.fishingStartPosition; + delete target.fishingEndPosition; + delete target.endPosition; + // Physical gear + target.physicalGear = this.physicalGear && this.physicalGear.asObject(Object.assign(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS), { withChildren: false })); + if (target.physicalGear) { + if (opts === null || opts === void 0 ? void 0 : opts.minify) + delete target.physicalGear.synchronizationStatus; + delete target.physicalGear.measurementValues; + } + target.physicalGearId = (_a = this.physicalGear) === null || _a === void 0 ? void 0 : _a.id; + if (opts && opts.keepLocalId === false && target.physicalGearId < 0) { + delete target.physicalGearId; // Remove local id + } + // Metier + target.metier = this.metier && this.metier.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS /*Always minify=false, because of operations tables cache*/)) || undefined; + // Measurements + target.measurements = this.measurements && this.measurements.filter(MeasurementUtils.isNotEmpty).map(m => m.asObject(opts)) || undefined; + // Samples + { + // Serialize samples into a tree (will keep only children arrays, and removed parentId and parent) + if (!opts || opts.sampleAsTree !== false) { + target.samples = this.samples + // Select root samples + && this.samples.filter(s => isNil(s.parentId) && isNil(s.parent)) + .map(s => s.asObject(Object.assign(Object.assign({}, opts), { withChildren: true }))) || undefined; + } + else { + // Serialize as samples array (this will fill parentId, and remove children and parent properties) + target.samples = Sample.treeAsObjectArray(this.samples, opts); + } + } + // Batch + if (target.catchBatch) { + // Serialize batches into a tree (will keep only children arrays, and removed parentId and parent) + if (!opts || opts.batchAsTree !== false) { + target.catchBatch = this.catchBatch && this.catchBatch.asObject(Object.assign(Object.assign({}, opts), { withChildren: true })) || undefined; + } + // Serialize as batches array (this will fill parentId, and remove children and parent properties) + else { + target.batches = Batch.treeAsObjectArray(target.catchBatch, opts); + delete target.catchBatch; + } + } + // Fishing areas + target.fishingAreas = this.fishingAreas && this.fishingAreas.map(value => value.asObject(opts)) || undefined; + // Child/Parent operation id + target.parentOperationId = this.parentOperationId || this.parentOperation && this.parentOperation.id; + target.childOperationId = this.childOperationId || this.childOperation && this.childOperation.id; + if (opts === null || opts === void 0 ? void 0 : opts.minify) { + delete target.childOperation; + // When store into local storage, keep tripId on parent local operation (if not same trip) + // This is need at validation time (see OperationValidators.remoteParent) to detect local parent outside the trip + if (opts.keepTrip + && target.parentOperationId < 0 + && isNotNil((_b = this.parentOperation) === null || _b === void 0 ? void 0 : _b.tripId) + // Integrity check: make sure parentOperation reference same operation as 'target.parentOperationId' + && this.parentOperation.id === target.parentOperationId) { + target.parentOperation = { + id: this.parentOperation.id, + tripId: this.parentOperation.tripId + }; + } + else { + delete target.parentOperation; + } + } + else { + target.parentOperation = this.parentOperation && this.parentOperation.asObject(opts) || undefined; + target.childOperation = this.childOperation && this.childOperation.asObject(opts) || undefined; + } + // Clean properties copied from the parent trip (need by filter) + if (!opts || opts.keepTrip !== true) { + delete target.programLabel; + delete target.vesselId; + } + return target; + } + fromObject(source, opts) { + var _a; + super.fromObject(source, opts); + this.tripId = source.tripId; + this.programLabel = source.programLabel; + this.vesselId = source.vesselId; + this.hasCatch = source.hasCatch; + this.comments = source.comments; + this.physicalGear = (source.physicalGear || source.physicalGearId) ? PhysicalGear.fromObject(source.physicalGear || { id: source.physicalGearId }) : undefined; + this.startDateTime = fromDateISOString(source.startDateTime); + this.endDateTime = fromDateISOString(source.endDateTime); + this.fishingStartDateTime = fromDateISOString(source.fishingStartDateTime); + this.fishingEndDateTime = fromDateISOString(source.fishingEndDateTime); + this.rankOrder = source.rankOrder; + this.rankOrderOnPeriod = source.rankOrderOnPeriod; + this.metier = source.metier && Metier.fromObject(source.metier, { useChildAttributes: 'TaxonGroup' }) || undefined; + if (source.startPosition || source.endPosition || source.fishingStartPosition || source.fishingEndPosition) { + this.startPosition = VesselPosition.fromObject(source.startPosition); + this.endPosition = VesselPosition.fromObject(source.endPosition); + this.fishingStartPosition = VesselPosition.fromObject(source.fishingStartPosition); + this.fishingEndPosition = VesselPosition.fromObject(source.fishingEndPosition); + this.positions = undefined; + } + else { + const sortedPositions = ((_a = source.positions) === null || _a === void 0 ? void 0 : _a.map(VesselPosition.fromObject).sort(VesselPositionUtils.dateTimeComparator())) || undefined; + if (isNotEmptyArray(sortedPositions)) { + // DEBUG + //console.debug('[operation] Find sorted positions: ', sortedPositions.map(p => toDateISOString(p.dateTime)).join(', ')); + // Warn : should be extracted in this order, because startDateTime can be equals to endDateTime + this.startPosition = VesselPositionUtils.findByDate(sortedPositions, this.startDateTime, true); + this.fishingStartPosition = VesselPositionUtils.findByDate(sortedPositions, this.fishingStartDateTime, true); + this.fishingEndPosition = VesselPositionUtils.findByDate(sortedPositions, this.fishingEndDateTime, true); + this.endPosition = VesselPositionUtils.findByDate(sortedPositions, this.endDateTime, true); + this.positions = undefined; + if (sortedPositions.length > 0) { + console.warn('[operation] Some positions have no date matches, with start/end or fishingStart/fishingEnd dates', sortedPositions); + // Fallback for previous version compatibility, if invalid dates in position + if ((sortedPositions.length === 1 || sortedPositions.length === 2) && !this.startPosition && !this.endPosition) { + this.startPosition = sortedPositions[0]; + this.fishingStartPosition = undefined; + this.fishingEndPosition = undefined; + this.endPosition = sortedPositions[1] || undefined; + } + } + } + else { + this.startPosition = undefined; + this.fishingStartPosition = undefined; + this.fishingEndPosition = undefined; + this.endPosition = undefined; + this.positions = sortedPositions; + } + } + this.measurements = [ + ...(source.measurements && source.measurements.map(Measurement.fromObject) || []), + ...(source.gearMeasurements && source.gearMeasurements.map(Measurement.fromObject) || []) + ]; + // Remove fake dates (e.g. if endDateTime = startDateTime) + // Warn: keept this order: must start with endDateTime, then fishingEndDateTime, then fishingStartDateTime + if (this.endDateTime && this.endDateTime.isSameOrBefore(this.fishingEndDateTime || this.fishingStartDateTime || this.startDateTime)) { + this.endDateTime = undefined; + } + if (this.fishingEndDateTime && this.fishingEndDateTime.isSameOrBefore(this.fishingStartDateTime || this.startDateTime)) { + this.fishingEndDateTime = undefined; + } + if (this.fishingStartDateTime && this.fishingStartDateTime.isSameOrBefore(this.startDateTime)) { + this.fishingStartDateTime = undefined; + } + // Update positions dates + if (this.endPosition) + this.endPosition.dateTime = this.endDateTime; + if (this.fishingEndPosition) + this.fishingEndPosition.dateTime = this.fishingEndDateTime; + if (this.fishingStartPosition) + this.fishingStartPosition.dateTime = this.fishingStartDateTime; + // Fishing areas + this.fishingAreas = source.fishingAreas && source.fishingAreas.map(FishingArea.fromObject) || undefined; + // Samples + if (!opts || opts.withSamples !== false) { + this.samples = source.samples && source.samples.map(json => Sample.fromObject(json, { withChildren: true })) || undefined; + } + // Batches + if (!opts || opts.withBatchTree !== false) { + this.catchBatch = source.catchBatch && !source.batches ? + // Reuse existing catch batch (useful for local entity) + Batch.fromObject(source.catchBatch, { withChildren: true }) : + // Convert list to tree (useful when fetching from a pod) + Batch.fromObjectArrayAsTree(source.batches); + } + //Parent Operation + this.parentOperationId = source.parentOperationId; + this.parentOperation = (source.parentOperation || isNotNil(source.parentOperationId)) + ? Operation_1.fromObject(source.parentOperation || { id: source.parentOperationId }) + : undefined; + //Child Operation + this.childOperationId = source.childOperationId; + this.childOperation = (source.childOperation || isNotNil(source.childOperationId)) + ? Operation_1.fromObject(source.childOperation || { id: source.childOperationId }) + : undefined; + } + paste(source, flags = OperationPasteFlags.ALL) { + if (hasFlag(flags, OperationPasteFlags.DATE)) { + if (hasFlag(flags, OperationPasteFlags.TIME)) { + this.startDateTime = source.startDateTime; + this.fishingStartDateTime = source.fishingStartDateTime; + this.fishingEndDateTime = source.fishingEndDateTime; + this.endDateTime = source.endDateTime; + } + // Reset time if there is no OperationCopyFlags.TIME + else { + this.startDateTime = DateUtils.markNoTime(DateUtils.resetTime(source.startDateTime)); + this.fishingStartDateTime = DateUtils.markNoTime(DateUtils.resetTime(source.fishingStartDateTime)); + this.fishingEndDateTime = DateUtils.markNoTime(DateUtils.resetTime(source.fishingEndDateTime)); + this.endDateTime = DateUtils.markNoTime(DateUtils.resetTime(source.endDateTime)); + } + } + if (hasFlag(flags, OperationPasteFlags.POSITION)) { + this.startPosition = VesselPosition.fromObject(Object.assign(Object.assign({}, source.startPosition), { id: null })); + this.fishingStartPosition = VesselPosition.fromObject(Object.assign(Object.assign({}, source.fishingStartPosition), { id: null })); + this.fishingEndPosition = VesselPosition.fromObject(Object.assign(Object.assign({}, source.fishingEndPosition), { id: null })); + this.endPosition = VesselPosition.fromObject(Object.assign(Object.assign({}, source.endPosition), { id: null })); + } + if (hasFlag(flags, OperationPasteFlags.FISHING_AREA)) { + this.fishingAreas = source.fishingAreas; + } + if (hasFlag(flags, OperationPasteFlags.GEAR)) { + this.physicalGear = source.physicalGear; + } + if (hasFlag(flags, OperationPasteFlags.METIER)) { + this.metier = source.metier; + } + if (hasFlag(flags, OperationPasteFlags.MEASUREMENT)) { + //TODO : measurements are empty when duplicate from table + this.measurements = source.measurements; + } + } + equals(other) { + return (super.equals(other) && isNotNil(this.id)) + // Functional test + || ( + // Dates + (this.startDateTime === other.startDateTime || (!this.startDateTime && !other.startDateTime && this.fishingStartDateTime === other.fishingStartDateTime)) + // RankOrder + && ((!this.rankOrder && !other.rankOrder) || (this.rankOrder === other.rankOrder)) + // RankOrder on period + && ((!this.rankOrderOnPeriod && !other.rankOrderOnPeriod) || (this.rankOrderOnPeriod === other.rankOrderOnPeriod))); + } + get abnormal() { + var _a; + return ((_a = this.measurements) === null || _a === void 0 ? void 0 : _a.some(m => m.pmfmId === PmfmIds.TRIP_PROGRESS && m.numericalValue === 0)) || false; + } + getStrategyDateTime() { + return this.endDateTime || this.fishingEndDateTime || this.fishingEndDateTime || this.startDateTime; + } +}; +Operation.ENTITY_NAME = 'Operation'; +Operation = Operation_1 = __decorate([ + EntityClass({ typename: 'OperationVO' }), + __metadata("design:paramtypes", []) +], Operation); +export { Operation }; +export class OperationUtils { + static isOperation(data) { + return (data === null || data === void 0 ? void 0 : data.__typename) === Operation.TYPENAME; + } + static isAbnormal(data) { + var _a; + return ((_a = data === null || data === void 0 ? void 0 : data.measurements) === null || _a === void 0 ? void 0 : _a.some(m => m.pmfmId === PmfmIds.TRIP_PROGRESS && m.numericalValue === 0)) || false; + } + static hasParentOperation(data) { + var _a; + return data && isNotNil(data.parentOperationId) || isNotNil((_a = data.parentOperation) === null || _a === void 0 ? void 0 : _a.id); + } +} +let OperationGroup = OperationGroup_1 = class OperationGroup extends DataEntity { + constructor() { + super(OperationGroup_1.TYPENAME); + this.metier = null; + this.measurements = []; + this.gearMeasurements = []; + // all measurements in table + this.measurementValues = {}; + this.products = []; + this.samples = []; + this.packets = []; + this.fishingAreas = []; + } + static equals(o1, o2) { + return o1 && o2 && ((isNotNil(o1.id) && o1.id === o2.id) + // Or by functional attributes + || ( + // Same metier + (o1.metier && o1.metier.equals(o2.metier)) + // Same rankOrderOnPeriod + && ((isNil(o1.rankOrderOnPeriod) && isNil(o2.rankOrderOnPeriod)) || (o1.rankOrderOnPeriod === o2.rankOrderOnPeriod)))); + } + asObject(opts) { + const target = super.asObject(opts); + target.metier = this.metier && this.metier.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS /*Always minify=false, because of operations tables cache*/)) || undefined; + // Measurements + target.measurements = this.measurements && this.measurements.filter(MeasurementUtils.isNotEmpty).map(m => m.asObject(opts)) || undefined; + target.gearMeasurements = this.gearMeasurements && this.gearMeasurements.filter(MeasurementUtils.isNotEmpty).map(m => m.asObject(opts)) || undefined; + target.measurementValues = MeasurementValuesUtils.asObject(this.measurementValues, opts); + delete target.gearMeasurementValues; // all measurements are stored only measurementValues + // Products + target.products = this.products && this.products.map(product => { + const p = product.asObject(opts); + // Affect parent link + p.operationId = target.id; + return p; + }) || undefined; + // Samples + target.samples = this.samples && this.samples.map(sample => { + const s = sample.asObject(Object.assign(Object.assign({}, opts), { withChildren: true })); + // Affect parent link + s.operationId = target.id; + return s; + }) || undefined; + // Packets + target.packets = this.packets && this.packets.map(packet => { + const p = packet.asObject(opts); + // Affect parent link + p.operationId = target.id; + return p; + }) || undefined; + // Fishing areas + target.fishingAreas = this.fishingAreas && this.fishingAreas.map(value => value.asObject(opts)) || undefined; + return target; + } + fromObject(source) { + super.fromObject(source); + this.hasCatch = source.hasCatch; + this.comments = source.comments; + this.tripId = source.tripId; + this.rankOrderOnPeriod = source.rankOrderOnPeriod; + this.metier = source.metier && Metier.fromObject(source.metier) || undefined; + this.physicalGearId = source.physicalGearId; + // Measurements + this.measurements = source.measurements && source.measurements.map(Measurement.fromObject) || []; + this.gearMeasurements = source.gearMeasurements && source.gearMeasurements.map(Measurement.fromObject) || []; + this.measurementValues = Object.assign(Object.assign(Object.assign({}, MeasurementUtils.toMeasurementValues(this.measurements)), MeasurementUtils.toMeasurementValues(this.gearMeasurements)), source.measurementValues // important: keep at last assignment + ); + if (Object.keys(this.measurementValues).length === 0) { + console.warn('Source as no measurement. Should never occur! ', source); + } + // Products + this.products = source.products && source.products.map(Product.fromObject) || []; + // Affect parent + this.products.forEach(product => { + product.parent = this; + product.operationId = this.id; + }); + // Samples + this.samples = source.samples && source.samples.map(json => Sample.fromObject(json, { withChildren: true })) || []; + // Affect parent + this.samples.forEach(sample => { + sample.operationId = this.id; + }); + // Packets + this.packets = source.packets && source.packets.map(Packet.fromObject) || []; + // Affect parent + this.packets.forEach(packet => { + packet.parent = this; + }); + // Fishing areas + this.fishingAreas = source.fishingAreas && source.fishingAreas.map(FishingArea.fromObject) || undefined; + return this; + } + equals(other) { + return (super.equals(other) && isNotNil(this.id)) + || (this.metier.equals(other.metier) && ((!this.rankOrderOnPeriod && !other.rankOrderOnPeriod) || (this.rankOrderOnPeriod === other.rankOrderOnPeriod))); + } +}; +OperationGroup = OperationGroup_1 = __decorate([ + EntityClass({ typename: 'OperationGroupVO' }), + __metadata("design:paramtypes", []) +], OperationGroup); +export { OperationGroup }; +let Trip = Trip_1 = class Trip extends DataRootVesselEntity { + constructor() { + super(Trip_1.TYPENAME); + this.departureDateTime = null; + this.returnDateTime = null; + this.departureLocation = null; + this.returnLocation = null; + this.sale = null; + this.expectedSale = null; + this.gears = null; + this.measurements = null; + this.observers = null; + this.metiers = null; + this.operations = null; + this.operationGroups = null; + this.fishingAreas = null; + this.landing = null; + this.observedLocationId = null; + this.scientificCruiseId = null; + } + asObject(opts) { + const target = super.asObject(opts); + target.departureDateTime = toDateISOString(this.departureDateTime); + target.returnDateTime = toDateISOString(this.returnDateTime); + target.departureLocation = this.departureLocation && this.departureLocation.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS)) || undefined; + target.returnLocation = this.returnLocation && this.returnLocation.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS)) || undefined; + target.sale = this.sale && this.sale.asObject(opts) || undefined; + target.expectedSale = this.expectedSale && this.expectedSale.asObject(opts) || undefined; + target.measurements = this.measurements && this.measurements.filter(MeasurementUtils.isNotEmpty).map(m => m.asObject(opts)) || undefined; + target.observers = this.observers && this.observers.map(p => p && p.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))) || undefined; + // Metiers + target.metiers = this.metiers && this.metiers.filter(isNotNil).map(p => p && p.asObject(Object.assign(Object.assign({}, opts), NOT_MINIFY_OPTIONS))) || undefined; + if (isEmptyArray(target.metiers)) + delete target.metiers; // Clean is empty, for compat with previous version + // Physical gears + if (!opts || opts.gearAsTree !== false) { + target.gears = this.gears && this.gears.map(g => g.asObject(Object.assign(Object.assign({}, opts), { withChildren: true }))) || undefined; + } + // Serialize as batches array (this will fill parentId, and remove children and parent properties) + else { + target.gears = PhysicalGear.treeAsObjectArray(this.gears, opts); + } + // Operations + target.operations = this.operations && this.operations.map(o => o.asObject(opts)) || undefined; + // Operation groups + target.operationGroups = this.operationGroups && this.operationGroups.filter(isNotNil).map(o => o.asObject(opts)) || undefined; + // FIXME: remove in the future, to allow sampling landing page to force as empty (=[]) and avoid a refetch after saving, on pod + if (isEmptyArray(target.operationGroups)) + delete target.operationGroups; // Clean if empty, for compat with previous version + // Fishing areas + target.fishingAreas = this.fishingAreas && this.fishingAreas.map(p => p && p.asObject(opts)) || undefined; + // Landing + target.landing = this.landing && this.landing.asObject(opts) || undefined; + if (opts === null || opts === void 0 ? void 0 : opts.minify) { + //delete target.scientificCruise; + } + return target; + } + fromObject(source, opts) { + var _a; + super.fromObject(source); + this.departureDateTime = fromDateISOString(source.departureDateTime); + this.returnDateTime = fromDateISOString(source.returnDateTime); + this.departureLocation = source.departureLocation && ReferentialRef.fromObject(source.departureLocation); + this.returnLocation = source.returnLocation && ReferentialRef.fromObject(source.returnLocation); + this.sale = source.sale && Sale.fromObject(source.sale) || undefined; + this.expectedSale = source.expectedSale && ExpectedSale.fromObject(source.expectedSale) || undefined; + this.measurements = source.measurements && source.measurements.map(Measurement.fromObject) || []; + this.observers = source.observers && source.observers.map(Person.fromObject) || []; + this.metiers = source.metiers && source.metiers.map(ReferentialRef.fromObject) || []; + // Physical gears + // - Convert array to tree (when fetching from pod) + // - Already converted as tree (when fetching locally) + const convertGearsAsTree = source.gears && source.gears.some(g => isNotNil(g.parentId)) + && source.gears.every(g => isEmptyArray(g.children)) + && source.gears.every(g => isNil(g.parent)) || false; + const gears = convertGearsAsTree + ? PhysicalGear.fromObjectArrayAsTree(source.gears) + : (_a = source.gears) === null || _a === void 0 ? void 0 : _a.filter(isNotNil).map(PhysicalGear.fromObject); + // Sort by rankOrder (useful for gears combo, in the operation form) + this.gears = gears && gears.sort(PhysicalGear.rankOrderComparator) || undefined; + // Set gears tripId (e. Old local DB may miss it) + (this.gears || []).forEach(g => g.tripId = this.id); + if (source.operations) { + if (!Array.isArray(source.operations) && Array.isArray(source.operations.data)) { + console.warn('[trip] Fix invalid operations model (was found a LoadResult, instead of an array) - fixed'); + source.operations = source.operations.data; + } + this.operations = source.operations + .map(Operation.fromObject) + .map((o) => { + o.tripId = this.id; + // Link to trip's gear + o.physicalGear = o.physicalGear && (this.gears || []).find(g => o.physicalGear.equals(g)) + // Or keep existing gear, if not exists + || o.physicalGear; + return o; + }); + } + this.operationGroups = source.operationGroups && source.operationGroups.map(OperationGroup.fromObject) || []; + // Remove fake dates (e.g. if returnDateTime = departureDateTime) + if (this.returnDateTime && this.returnDateTime.isSameOrBefore(this.departureDateTime)) { + this.returnDateTime = undefined; + } + // Fishing areas + this.fishingAreas = source.fishingAreas && source.fishingAreas.map(FishingArea.fromObject) || []; + this.landing = source.landing && Landing.fromObject(source.landing) || undefined; + this.observedLocationId = source.observedLocationId; + this.scientificCruiseId = source.scientificCruiseId; + this.vesselSnapshot = source.vesselSnapshot && VesselSnapshot.fromObject(source.vesselSnapshot) || undefined; + return this; + } + equals(other) { + return (super.equals(other) && isNotNil(this.id)) + || ( + // Same vessel + (this.vesselSnapshot && other.vesselSnapshot && this.vesselSnapshot.id === other.vesselSnapshot.id) + // Same departure date (or, if not set, same return date) + && (DateUtils.equals(this.departureDateTime, other.departureDateTime) + || (!this.departureDateTime && !other.departureDateTime && DateUtils.equals(this.returnDateTime, other.returnDateTime)))); + } + getStrategyDateTime() { + return this.departureDateTime; + } +}; +Trip.ENTITY_NAME = 'Trip'; +Trip = Trip_1 = __decorate([ + EntityClass({ typename: 'TripVO' }), + __metadata("design:paramtypes", []) +], Trip); +export { Trip }; +export class VesselPositionUtils { + static isNoNilOrEmpty(pos) { + return pos && isNotNil(pos.latitude) && isNotNil(pos.longitude); + } + static dateTimeComparator(sortDirection) { + const side = sortDirection !== 'desc' ? 1 : -1; + return (n1, n2) => n1.dateTime.isSame(n2.dateTime) ? 0 : (n1.dateTime.isAfter(n2.dateTime) ? side : -1 * side); + } + static findByDate(positions, dateTime, removeFromArray) { + if (!positions || !dateTime) + return undefined; + // Make sure we have a valid moment object + if (!isMoment(dateTime)) + dateTime = fromDateISOString(dateTime); + const index = positions.findIndex(p => dateTime.isSame(p.dateTime)); + if (index === -1) + return undefined; + if (removeFromArray) { + return positions.splice(index, 1)[0]; + } + else { + return positions[index]; + } + } +} +//# sourceMappingURL=trip.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trip.model.js.map b/out-tsc/app/app/trip/trip/trip.model.js.map new file mode 100644 index 000000000..349b81d62 --- /dev/null +++ b/out-tsc/app/app/trip/trip/trip.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip.model.js","sourceRoot":"","sources":["../../../../../src/app/trip/trip/trip.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trip.module.js b/out-tsc/app/app/trip/trip/trip.module.js new file mode 100644 index 000000000..57db7fb1f --- /dev/null +++ b/out-tsc/app/app/trip/trip/trip.module.js @@ -0,0 +1,58 @@ +import { __decorate, __metadata } from "tslib"; +import { NgModule } from '@angular/core'; +import { TripTable } from './trips.table'; +import { TripPage } from './trip.page'; +import { TripForm } from './trip.form'; +import { AppReferentialModule } from '@app/referential/referential.module'; +import { AppDataModule } from '@app/data/data.module'; +import { TranslateModule } from '@ngx-translate/core'; +import { CommonModule } from '@angular/common'; +import { TripTrashModal } from './trash/trip-trash.modal'; +import { AppCoreModule } from '@app/core/core.module'; +import { TripOfflineModal } from '@app/trip/trip/offline/trip-offline.modal'; +import { A11yModule } from '@angular/cdk/a11y'; +import { VesselModule } from '@app/vessel/vessel.module'; +import { AppMeasurementModule } from '@app/data/measurement/measurement.module'; +import { AppPhysicalGearModule } from '@app/trip/physicalgear/physical-gear.module'; +import { AppOperationModule } from '@app/trip/operation/operation.module'; +import { AppSaleModule } from '@app/trip/sale/sale.module'; +import { AppSocialModule } from '@app/social/social.module'; +import { AppExtractionButtonModule } from '@app/extraction/button/extraction-button.module'; +import { MatTabsModule } from '@angular/material/tabs'; +let AppTripModule = class AppTripModule { + constructor() { + console.debug('[trip] Creating module...'); + } +}; +AppTripModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + TranslateModule.forChild(), + AppSocialModule, + A11yModule, + // App module + AppCoreModule, + AppReferentialModule, + AppDataModule, + VesselModule, + AppExtractionButtonModule, + // Functional modules + AppMeasurementModule, + AppPhysicalGearModule, + AppOperationModule, + AppSaleModule, + MatTabsModule, + ], + declarations: [TripTable, TripForm, TripPage, TripTrashModal, TripOfflineModal], + exports: [ + // Components + TripTable, + TripPage, + TripForm, + ], + }), + __metadata("design:paramtypes", []) +], AppTripModule); +export { AppTripModule }; +//# sourceMappingURL=trip.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trip.module.js.map b/out-tsc/app/app/trip/trip/trip.module.js.map new file mode 100644 index 000000000..97a378767 --- /dev/null +++ b/out-tsc/app/app/trip/trip/trip.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip.module.js","sourceRoot":"","sources":["../../../../../src/app/trip/trip/trip.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAgChD,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB;QACE,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC7C,CAAC;CACF,CAAA;AAJY,aAAa;IA9BzB,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,eAAe,CAAC,QAAQ,EAAE;YAE1B,eAAe;YACf,UAAU;YAEV,aAAa;YACb,aAAa;YACb,oBAAoB;YACpB,aAAa;YACb,YAAY;YACZ,yBAAyB;YAEzB,qBAAqB;YACrB,oBAAoB;YACpB,qBAAqB;YACrB,kBAAkB;YAClB,aAAa;YACb,aAAa;SACd;QACD,YAAY,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,CAAC;QAC/E,OAAO,EAAE;YACP,aAAa;YACb,SAAS;YACT,QAAQ;YACR,QAAQ;SACT;KACF,CAAC;;GACW,aAAa,CAIzB;SAJY,aAAa"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trip.page.js b/out-tsc/app/app/trip/trip/trip.page.js new file mode 100644 index 000000000..c910af784 --- /dev/null +++ b/out-tsc/app/app/trip/trip/trip.page.js @@ -0,0 +1,885 @@ +var TripPage_1; +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { ChangeDetectionStrategy, Component, Inject, Injector, Input, Self, ViewChild } from "@angular/core"; +import { TripService } from "./trip.service"; +import { TripForm } from "./trip.form"; +import { SaleForm } from "../sale/sale.form"; +import { OperationsTable } from "../operation/operations.table"; +import { MeasurementsForm } from "@app/data/measurement/measurements.form.component"; +import { PhysicalGearTable } from "../physicalgear/physical-gears.table"; +import { AcquisitionLevelCodes, PmfmIds } from "@app/referential/services/model/model.enum"; +import { AppRootDataEntityEditor } from "@app/data/form/root-data-editor.class"; +import { Validators } from "@angular/forms"; +import { + AccountService, + Alerts, + AppHelpModal, + DateUtils, + EntitiesStorage, + EntityUtils, + equals, + fadeInOutAnimation, + FilesUtils, + InMemoryEntitiesService, + isNil, + isNotEmptyArray, + isNotNil, + isNotNilOrBlank, + MINIFY_ENTITY_FOR_LOCAL_STORAGE, + NetworkService, + ReferentialRef, + ReferentialUtils, + sleep +} from "@sumaris-net/ngx-components"; +import { TripsPageSettingsEnum } from "./trips.table"; +import { Trip } from "./trip.model"; +import { SelectPhysicalGearModal } from "../physicalgear/select-physical-gear.modal"; +import { ModalController } from "@ionic/angular"; +import { PhysicalGearFilter } from "../physicalgear/physical-gear.filter"; +import { ProgramProperties } from "@app/referential/services/config/program.config"; +import { VesselSnapshot } from "@app/referential/services/model/vessel-snapshot.model"; +import { + debounceTime, + distinctUntilChanged, + filter, + first, + map, + mergeMap, + startWith, + tap, + throttleTime +} from "rxjs/operators"; +import { environment } from "@environments/environment"; +import { TRIP_FEATURE_NAME } from "@app/trip/trip.config"; +import { from, merge, Subscription } from "rxjs"; +import { OperationService } from "@app/trip/operation/operation.service"; +import { ContextService } from "@app/shared/context.service"; +import { TripContextService } from "@app/trip/trip-context.service"; +import { Sale } from "@app/trip/sale/sale.model"; +import { PhysicalGear } from "@app/trip/physicalgear/physical-gear.model"; +import { PHYSICAL_GEAR_DATA_SERVICE_TOKEN } from "@app/trip/physicalgear/physicalgear.service"; +import moment from "moment"; +import { ExtractionType } from "@app/extraction/type/extraction-type.model"; +import { ExtractionUtils } from "@app/extraction/common/extraction.utils"; +import { APP_DATA_ENTITY_EDITOR, DataStrategyResolutions } from "@app/data/form/data-editor.utils"; + +export const TripPageSettingsEnum = { + PAGE_ID: 'trip', + FEATURE_ID: TRIP_FEATURE_NAME, +}; +let TripPage = TripPage_1 = class TripPage extends AppRootDataEntityEditor { + constructor(injector, entities, modalCtrl, operationService, context, tripContext, accountService, network, physicalGearService) { + super(injector, Trip, injector.get(TripService), { + pathIdAttribute: 'tripId', + tabCount: 3, + enableListenChanges: true, + i18nPrefix: 'TRIP.', + acquisitionLevel: AcquisitionLevelCodes.TRIP, + settingsId: TripPageSettingsEnum.PAGE_ID + }); + this.entities = entities; + this.modalCtrl = modalCtrl; + this.operationService = operationService; + this.context = context; + this.tripContext = tripContext; + this.accountService = accountService; + this.network = network; + this.physicalGearService = physicalGearService; + this._forceMeasurementAsOptionalOnFieldMode = false; + this.showSaleForm = false; + this.showGearTable = false; + this.showOperationTable = false; + this.devAutoFillData = false; + this.canCopyLocally = false; + this.canDownload = false; + this.toolbarColor = 'primary'; + this.defaultBackHref = '/trips'; + this.operationPasteFlags = this.operationPasteFlags || 0; + // FOR DEV ONLY ---- + this.logPrefix = '[trip-page] '; + } + get dirty() { + var _a; + return (this.dirtySubject.value || + // Ignore operation table, when computing dirty state + ((_a = this.children) === null || _a === void 0 ? void 0 : _a.filter((form) => form !== this.operationsTable).findIndex((c) => c.dirty)) !== -1); + } + get forceMeasurementAsOptional() { + return this._forceMeasurementAsOptionalOnFieldMode && this.isOnFieldMode; + } + ngOnInit() { + super.ngOnInit(); + // Listen some field + this._state.connect('departureDateTime', this.tripForm.departureDateTimeChanges.pipe(filter(d => d === null || d === void 0 ? void 0 : d.isValid()))); + this._state.connect('departureLocation', this.tripForm.departureLocationChanges); + // Update the data context + this.registerSubscription(merge(this.selectedTabIndexChange.pipe(filter((tabIndex) => tabIndex === TripPage_1.TABS.OPERATIONS && this.showOperationTable)), from(this.ready())) + .pipe(debounceTime(500), throttleTime(500)) + .subscribe((_) => this.updateDataContext())); + } + ngAfterViewInit() { + super.ngAfterViewInit(); + // Cascade refresh to operation tables + this.registerSubscription(this.onUpdateView + .pipe(filter((_) => !this.loading), debounceTime(250)) + .subscribe(() => this.operationsTable.onRefresh.emit())); + // Before delete gears, check if used in operations + this.registerSubscription(this.physicalGearsTable.onBeforeDeleteRows.subscribe((event) => __awaiter(this, void 0, void 0, function* () { + const rows = event.detail.rows; + const canDelete = yield this.operationService.areUsedPhysicalGears(this.data.id, rows.map((row) => row.currentData.id)); + event.detail.success(canDelete); + if (!canDelete) { + yield Alerts.showError('TRIP.PHYSICAL_GEAR.ERROR.CANNOT_DELETE_USED_GEAR_HELP', this.alertCtrl, this.translate, { + titleKey: 'TRIP.PHYSICAL_GEAR.ERROR.CANNOT_DELETE', + }); + } + }))); + // Allow to show operations tab, when add gear + this.registerSubscription(this.physicalGearsTable.onConfirmEditCreateRow.subscribe((_) => (this.showOperationTable = true))); + if (this.measurementsForm) { + this.registerSubscription(this.measurementsForm.pmfms$ + .pipe( + //debounceTime(400), + filter(isNotNil), mergeMap((_) => this.measurementsForm.ready())) + .subscribe((_) => this.onMeasurementsFormReady())); + } + // Auto fill form, in DEV mode + if (!environment.production) { + this.registerSubscription(this.program$ + .pipe(filter(isNotNil), filter(() => this.isNewData && this.devAutoFillData)) + .subscribe((program) => this.setTestValue(program))); + } + } + ngOnDestroy() { + var _a; + super.ngOnDestroy(); + (_a = this._measurementSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + } + setError(error, opts) { + var _a, _b, _c, _d; + // If errors in operations + if (typeof error !== 'string' && ((_b = (_a = error === null || error === void 0 ? void 0 : error.details) === null || _a === void 0 ? void 0 : _a.errors) === null || _b === void 0 ? void 0 : _b.operations)) { + // Show error in operation table + this.operationsTable.setError('TRIP.ERROR.INVALID_OPERATIONS', { + showOnlyInvalidRows: true, + }); + // Open the operation tab + this.tabGroup.selectedIndex = TripPage_1.TABS.OPERATIONS; + // Reset other errors + this.physicalGearsTable.resetError(opts); + super.setError(undefined, opts); + } + // If errors in gears + else if (typeof error !== 'string' && ((_d = (_c = error === null || error === void 0 ? void 0 : error.details) === null || _c === void 0 ? void 0 : _c.errors) === null || _d === void 0 ? void 0 : _d.gears)) { + // Show error in operation table + this.physicalGearsTable.setError('TRIP.ERROR.INVALID_GEARS'); + // Open the operation tab + this.tabGroup.selectedIndex = TripPage_1.TABS.PHYSICAL_GEARS; + // Reset other errors + this.operationsTable.resetError(opts); + super.setError(undefined, opts); + } + // Error in the main form + else { + super.setError(error, opts); + // Reset error in table (and filter in op table) + this.physicalGearsTable.resetError(opts); + this.operationsTable.resetError(opts); + } + } + // change visibility to public + resetError(opts) { + this.setError(undefined, opts); + } + translateControlPath(controlPath) { + return this.dataService.translateControlPath(controlPath, { i18nPrefix: this.i18nContext.prefix }); + } + registerForms() { + this.addChildForms([this.tripForm, this.saleForm, this.measurementsForm, this.physicalGearsTable, this.operationsTable]); + } + setProgram(program) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + if (!program) + return; // Skip load Trip + if (this.debug) + console.debug(`[trip] Program ${program.label} loaded, with properties: `, program.properties); + // Update the context + if (this.tripContext.program !== program) { + this.tripContext.setValue('program', program); + } + this.strategyResolution = program.getProperty(ProgramProperties.DATA_STRATEGY_RESOLUTION); + let i18nSuffix = program.getProperty(ProgramProperties.I18N_SUFFIX); + i18nSuffix = i18nSuffix !== 'legacy' ? i18nSuffix : ''; + this.i18nContext.suffix = i18nSuffix; + this.operationEditor = program.getProperty(ProgramProperties.TRIP_OPERATION_EDITOR); + this.enableReport = program.getPropertyAsBoolean(ProgramProperties.TRIP_REPORT_ENABLE); + // Trip form + this.tripForm.showObservers = program.getPropertyAsBoolean(ProgramProperties.TRIP_OBSERVERS_ENABLE); + if (!this.tripForm.showObservers && ((_a = this.data) === null || _a === void 0 ? void 0 : _a.observers)) { + this.data.observers = []; // make sure to reset data observers, if any + } + this.tripForm.showMetiers = program.getPropertyAsBoolean(ProgramProperties.TRIP_METIERS_ENABLE); + if (!this.tripForm.showMetiers && ((_b = this.data) === null || _b === void 0 ? void 0 : _b.metiers)) { + this.data.metiers = []; // make sure to reset data metiers, if any + } + this.tripForm.locationLevelIds = program.getPropertyAsNumbers(ProgramProperties.TRIP_LOCATION_LEVEL_IDS); + this.tripForm.locationSuggestLengthThreshold = program.getPropertyAsInt(ProgramProperties.TRIP_LOCATION_FILTER_MIN_LENGTH); + this.tripForm.minDurationInHours = program.getPropertyAsInt(ProgramProperties.TRIP_MIN_DURATION_HOURS); + this.tripForm.maxDurationInHours = program.getPropertyAsInt(ProgramProperties.TRIP_MAX_DURATION_HOURS); + // Sale form + this.showSaleForm = program.getPropertyAsBoolean(ProgramProperties.TRIP_SALE_ENABLE); + // Measurement form + this._forceMeasurementAsOptionalOnFieldMode = program.getPropertyAsBoolean(ProgramProperties.TRIP_MEASUREMENTS_OPTIONAL_ON_FIELD_MODE); + this.measurementsForm.forceOptional = this._forceMeasurementAsOptionalOnFieldMode; + this.measurementsForm.maxVisibleButtons = program.getPropertyAsInt(ProgramProperties.MEASUREMENTS_MAX_VISIBLE_BUTTONS); + this.measurementsForm.maxItemCountForButtons = program.getPropertyAsInt(ProgramProperties.MEASUREMENTS_MAX_VISIBLE_BUTTONS); + // Physical gears + this.physicalGearsTable.canEditRankOrder = program.getPropertyAsBoolean(ProgramProperties.TRIP_PHYSICAL_GEAR_RANK_ORDER_ENABLE); + this.physicalGearsTable.allowChildrenGears = program.getPropertyAsBoolean(ProgramProperties.TRIP_PHYSICAL_GEAR_ALLOW_CHILDREN); + this.physicalGearsTable.showSubGearsCountColumn = this.physicalGearsTable.allowChildrenGears; + this.physicalGearsTable.setModalOption('helpMessage', program.getProperty(ProgramProperties.TRIP_PHYSICAL_GEAR_HELP_MESSAGE)); + this.physicalGearsTable.setModalOption('maxVisibleButtons', program.getPropertyAsInt(ProgramProperties.MEASUREMENTS_MAX_VISIBLE_BUTTONS)); + this.physicalGearsTable.setModalOption('maxItemCountForButtons', program.getPropertyAsInt(ProgramProperties.MEASUREMENTS_MAX_ITEM_COUNT_FOR_BUTTONS)); + this.physicalGearsTable.setModalOption('minChildrenCount', program.getPropertyAsInt(ProgramProperties.TRIP_PHYSICAL_GEAR_MIN_CHILDREN_COUNT)); + this.physicalGearsTable.i18nColumnSuffix = i18nSuffix; + // Operation table + const positionEnabled = program.getPropertyAsBoolean(ProgramProperties.TRIP_POSITION_ENABLE); + this.operationsTable.showPosition = positionEnabled; + this.operationsTable.showFishingArea = !positionEnabled; + const allowParentOperation = program.getPropertyAsBoolean(ProgramProperties.TRIP_ALLOW_PARENT_OPERATION); + this.operationsTable.allowParentOperation = allowParentOperation; + this.operationsTable.showMap = this.network.online && program.getPropertyAsBoolean(ProgramProperties.TRIP_MAP_ENABLE); + this.operationsTable.showEndDateTime = program.getPropertyAsBoolean(ProgramProperties.TRIP_OPERATION_END_DATE_ENABLE); + this.operationsTable.showFishingEndDateTime = + !this.operationsTable.showEndDateTime && program.getPropertyAsBoolean(ProgramProperties.TRIP_OPERATION_FISHING_END_DATE_ENABLE); + this.operationsTable.i18nColumnSuffix = i18nSuffix; + this.operationsTable.detailEditor = this.operationEditor; + this.operationPasteFlags = program.getPropertyAsInt(ProgramProperties.TRIP_OPERATION_PASTE_FLAGS); + this.helpUrl = program.getProperty(ProgramProperties.TRIP_HELP_URL); + // Toggle showMap to false, when offline + if (this.operationsTable.showMap) { + const subscription = this.network.onNetworkStatusChanges.pipe(filter((status) => status === 'none')).subscribe((_) => { + this.operationsTable.showMap = false; + this.markForCheck(); + subscription.unsubscribe(); // Remove the subscription (not need anymore) + }); + this.registerSubscription(subscription); + } + // If new data, enable gears tab + if (this.isNewData) + this.showGearTable = true; + // If new data: update trip form (need to update validator, with min/maxDurationInHours) + if (this.isNewData) + this.tripForm.updateFormGroup(); + // Disabled operations tab, while no gear + // But enable anyway, when parent operation allowed + this.showOperationTable = this.showOperationTable || allowParentOperation; + this.markAsReady(); + this.markForCheck(); + // Listen program, to reload if changes + if (this.network.online) + this.startListenProgramRemoteChanges(program); + }); + } + watchStrategyFilter(program) { + console.debug(this.logPrefix + 'Using strategy resolution: ' + this.strategyResolution); + switch (this.strategyResolution) { + // Spatio-temporal + case DataStrategyResolutions.SPATIO_TEMPORAL: + return this._state.select(['acquisitionLevel', 'departureDateTime', 'departureLocation'], (_) => _, { + acquisitionLevel: equals, + departureDateTime: DateUtils.equals, + departureLocation: ReferentialUtils.equals + }) + .pipe(map(({ acquisitionLevel, departureDateTime, departureLocation }) => { + return { + acquisitionLevel, + programId: program.id, + startDate: departureDateTime, + endDate: departureDateTime, + location: departureLocation, + }; + }), + // DEBUG + tap(values => console.debug(this.logPrefix + 'Strategy filter changed:', values))); + default: + return super.watchStrategyFilter(program); + } + } + canLoadStrategy(program, strategyFilter) { + switch (this.strategyResolution) { + case DataStrategyResolutions.SPATIO_TEMPORAL: + return super.canLoadStrategy(program, strategyFilter) && ReferentialUtils.isNotEmpty(strategyFilter === null || strategyFilter === void 0 ? void 0 : strategyFilter.location) && isNotNil(strategyFilter === null || strategyFilter === void 0 ? void 0 : strategyFilter.startDate); + default: + return super.canLoadStrategy(program, strategyFilter); + } + } + setStrategy(strategy) { + const _super = Object.create(null, { + setStrategy: { get: () => super.setStrategy } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.setStrategy.call(this, strategy); + // Update the context + if (this.tripContext.strategy !== strategy) { + if (this.debug) + console.debug(this.logPrefix + "Update context's strategy...", strategy); + this.tripContext.setValue('strategy', strategy); + } + }); + } + onNewEntity(data, options) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[trip] New entity: applying defaults...'); + if (this.isOnFieldMode) { + data.departureDateTime = moment(); + // Listen first opening the operations tab, then save + this.registerSubscription(this.tabGroup.selectedTabChange + .pipe(filter((event) => this.showOperationTable && event.index === TripPage_1.TABS.OPERATIONS), + // Save trip when opening the operation tab + mergeMap((_) => this.save()), filter((saved) => saved === true), first(), + // If save succeed, propagate the tripId to the table + tap((_) => this.operationsTable.setTripId(this.data.id))) + .subscribe()); + } + // Fill defaults, from table's filter + const tableId = this.queryParams['tableId']; + const searchFilter = tableId && this.settings.getPageSettings(tableId, TripsPageSettingsEnum.FILTER_KEY); + if (searchFilter) { + // Synchronization status + if (searchFilter.synchronizationStatus && searchFilter.synchronizationStatus !== 'SYNC') { + data.synchronizationStatus = 'DIRTY'; + } + // program + if (searchFilter.program && searchFilter.program.label) { + data.program = ReferentialRef.fromObject(searchFilter.program); + } + // Vessel + if (searchFilter.vesselSnapshot) { + data.vesselSnapshot = VesselSnapshot.fromObject(searchFilter.vesselSnapshot); + } + // Location + if (searchFilter.location) { + data.departureLocation = ReferentialRef.fromObject(searchFilter.location); + } + } + // Set contextual program, if any + if (!data.program) { + const contextualProgram = this.context.getValue('program'); + if (contextualProgram === null || contextualProgram === void 0 ? void 0 : contextualProgram.label) { + data.program = ReferentialRef.fromObject(contextualProgram); + } + } + this.showGearTable = false; + this.showOperationTable = false; + // Propagate program + const programLabel = data.program && data.program.label; + this.programLabel = programLabel; + // Enable forms (do not wait for program load) + if (!programLabel) + this.markAsReady(); + }); + } + onEntityLoaded(data, options) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const programLabel = (_a = data.program) === null || _a === void 0 ? void 0 : _a.label; + if (programLabel) + this.programLabel = programLabel; + this.canDownload = !this.mobile && EntityUtils.isRemoteId(data === null || data === void 0 ? void 0 : data.id); + this.canCopyLocally = this.accountService.isAdmin() && EntityUtils.isRemoteId(data === null || data === void 0 ? void 0 : data.id); + this._state.set({ departureDateTime: data.departureDateTime, departureLocation: data.departureLocation }); + console.log('TODO loaded', this.program); + }); + } + updateViewState(data, opts) { + super.updateViewState(data, opts); + // Update tabs state (show/hide) + this.updateTabsState(data); + } + updateTabsState(data) { + // Enable gears tab if a program has been selected + this.showGearTable = !this.isNewData || isNotNilOrBlank(this.programLabel); + // Enable operations tab if has gears + this.showOperationTable = this.showOperationTable || (this.showGearTable && isNotEmptyArray(data.gears)); + } + openReport(event) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (this.dirty) { + const data = yield this.saveAndGetDataIfValid(); + if (!data) + return; // Cancel + } + const reportType = ((_a = this.program) === null || _a === void 0 ? void 0 : _a.getProperty(ProgramProperties.TRIP_REPORT_TYPE)) || ProgramProperties.TRIP_REPORT_TYPE.defaultValue; + const typePath = reportType !== 'legacy' ? [reportType] : []; + return this.router.navigateByUrl([this.computePageUrl(this.data.id), 'report', ...typePath].join('/')); + }); + } + setValue(data) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + try { + const isNewData = isNil(data.id); + const jobs = []; + // Set data to form + jobs.push(this.tripForm.setValue(data)); + this.saleForm.value = (data && data.sale) || new Sale(); + // Measurements + if (isNewData) { + this.measurementsForm.value = (data === null || data === void 0 ? void 0 : data.measurements) || []; + } + else { + this.measurementsForm.programLabel = (_a = data.program) === null || _a === void 0 ? void 0 : _a.label; + jobs.push(this.measurementsForm.setValue((data === null || data === void 0 ? void 0 : data.measurements) || [])); + } + // Set physical gears + this.physicalGearsTable.tripId = data.id; + this.physicalGearService.value = (data && data.gears) || []; + if (!isNewData) + jobs.push(this.physicalGearsTable.waitIdle({ timeout: 2000 })); + // Operations table + if (!isNewData && this.operationsTable) + this.operationsTable.setTripId(data.id); + yield Promise.all(jobs); + // DEBUG + //console.debug('[trip] setValue() [OK]'); + } + catch (err) { + const error = (err === null || err === void 0 ? void 0 : err.message) || err; + console.debug('[trip] Error during setValue(): ' + error, err); + this.setError(error); + } + }); + } + onOpenOperation(row) { + return __awaiter(this, void 0, void 0, function* () { + const saved = this.isOnFieldMode && this.dirty ? yield this.save(undefined) : yield this.saveIfDirtyAndConfirm(); + if (!saved) + return; // Cannot saved + this.markAsLoading(); + // Propagate the usage mode (e.g. when try to 'terminate' the trip) + this.tripContext.setValue('usageMode', this.usageMode); + // Store the trip in context + this.tripContext.setValue('trip', this.data.clone()); + // Store the selected operation (e.g. useful to avoid rankOrder computation, in the operation page) + this.tripContext.setValue('operation', row.currentData); + // Propagate the past flags to clipboard + this.tripContext.setValue('clipboard', { + data: null, + pasteFlags: this.operationPasteFlags, // Keep flags + }); + setTimeout(() => __awaiter(this, void 0, void 0, function* () { + const editorPath = this.operationEditor !== 'legacy' ? [this.operationEditor] : []; + yield this.router.navigate(['trips', this.data.id, 'operation', ...editorPath, row.currentData.id], { queryParams: {} /*reset query params*/ }); + this.markAsLoaded(); + })); + }); + } + onNewOperation(event, operationQueryParams) { + return __awaiter(this, void 0, void 0, function* () { + const saved = this.isOnFieldMode && this.dirty + ? // If on field mode: try to save silently + yield this.save(event) + : // If desktop mode: ask before save + yield this.saveIfDirtyAndConfirm(); + if (!saved) + return; // Cannot save + this.markAsLoading(); + // Store the trip in context + this.tripContext.setValue('trip', this.data.clone()); + // Propagate the usage mode (e.g. when try to 'terminate' the trip) + this.tripContext.setValue('usageMode', this.usageMode); + // Reset operation + this.tripContext.resetValue('operation'); + // Open the operation editor + setTimeout(() => __awaiter(this, void 0, void 0, function* () { + const editorPath = this.operationEditor !== 'legacy' ? [this.operationEditor] : []; + yield this.router.navigate(['trips', this.data.id, 'operation', ...editorPath, 'new'], { + queryParams: operationQueryParams || {}, + }); + this.markAsLoaded(); + })); + }); + } + onDuplicateOperation(event) { + return __awaiter(this, void 0, void 0, function* () { + if (!(event === null || event === void 0 ? void 0 : event.data)) + return; // Skip + // Fill clipboard + this.tripContext.setValue('clipboard', { + data: event.data.clone(), + pasteFlags: this.operationPasteFlags, + }); + yield this.onNewOperation(event); + }); + } + // For DEV only + setTestValue(program) { + var _a; + const departureDate = moment().startOf('minutes'); + const returnDate = departureDate.clone().add(15, 'day'); + const trip = Trip.fromObject({ + program, + departureDateTime: departureDate, + departureLocation: { id: 11, label: 'FRDRZ', name: 'Douarnenez', entityName: 'Location', __typename: 'ReferentialVO' }, + returnDateTime: returnDate, + returnLocation: { id: 11, label: 'FRDRZ', name: 'Douarnenez', entityName: 'Location', __typename: 'ReferentialVO' }, + vesselSnapshot: { + id: 1, + vesselId: 1, + name: 'Vessel 1', + basePortLocation: { id: 11, label: 'FRDRZ', name: 'Douarnenez', __typename: 'ReferentialVO' }, + __typename: 'VesselSnapshotVO', + }, + measurements: [ + { numericalValue: 1, pmfmId: 21 }, + { numericalValue: 1, pmfmId: 188 }, // GPS_USED + ], + // Keep existing synchronizationStatus + synchronizationStatus: (_a = this.data) === null || _a === void 0 ? void 0 : _a.synchronizationStatus, + }); + this.measurementsForm.value = trip.measurements; + this.form.patchValue(trip); + } + devToggleAutoFillData() { + this.devAutoFillData = !this.devAutoFillData; + this.settings.savePageSetting(this.settingsId, this.devAutoFillData, 'devAutoFillData'); + } + devToggleOfflineMode() { + if (this.network.offline) { + this.network.setForceOffline(false); + } + else { + this.network.setForceOffline(); + } + } + copyLocally() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.data) + return; + // Copy the trip + yield this.dataService.copyLocallyById(this.data.id, { withOperations: true, displaySuccessToast: true }); + }); + } + /** + * Open a modal to select a previous gear + * + * @param event + */ + openSearchPhysicalGearModal(event) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!event || !event.detail.success) + return; // Skip (missing callback) + const trip = Trip.fromObject(this.tripForm.value); + const vessel = trip.vesselSnapshot; + const date = trip.departureDateTime || trip.returnDateTime; + const withOffline = EntityUtils.isLocal(trip) || trip.synchronizationStatus === 'DIRTY'; + if (!vessel || !date) + return; // Skip + const programLabel = this.programLabel; + const acquisitionLevel = event.type || this.physicalGearsTable.acquisitionLevel; + const filter = { + program: { label: programLabel }, + vesselId: vessel.id, + excludeTripId: trip.id, + startDate: DateUtils.min(moment(), date && date.clone()).add(-1, 'month'), + endDate: date && date.clone(), + excludeChildGear: acquisitionLevel === AcquisitionLevelCodes.PHYSICAL_GEAR, + excludeParentGear: acquisitionLevel === AcquisitionLevelCodes.CHILD_PHYSICAL_GEAR, + }; + const showGearColumn = acquisitionLevel === AcquisitionLevelCodes.PHYSICAL_GEAR; + const includedPmfmIds = (_a = this.tripContext.program) === null || _a === void 0 ? void 0 : _a.getPropertyAsNumbers(ProgramProperties.TRIP_PHYSICAL_GEARS_COLUMNS_PMFM_IDS); + const distinctBy = [ + 'gear.id', + 'rankOrder', + ...(this.physicalGearsTable.pmfms || []) + .filter((p) => (p.required && !p.hidden) || (includedPmfmIds === null || includedPmfmIds === void 0 ? void 0 : includedPmfmIds.includes(p.id))) + .map((p) => `measurementValues.${p.id}`), + ]; + const hasTopModal = !!(yield this.modalCtrl.getTop()); + const modal = yield this.modalCtrl.create({ + component: SelectPhysicalGearModal, + componentProps: { + allowMultiple: false, + programLabel, + acquisitionLevel, + filter, + distinctBy, + withOffline, + showGearColumn, + }, + backdropDismiss: false, + keyboardClose: true, + cssClass: hasTopModal ? 'modal-large stack-modal' : 'modal-large', + }); + // Open the modal + yield modal.present(); + // On dismiss + const { data } = yield modal.onDidDismiss(); + if (isNotEmptyArray(data)) { + const gearToCopy = PhysicalGear.fromObject(data[0]); + console.debug('[trip] Result of select gear modal:', gearToCopy); + // Call resolve callback + event.detail.success(gearToCopy); + } + else { + // User cancelled + event.detail.error('CANCELLED'); + } + }); + } + save(event, opts) { + const _super = Object.create(null, { + save: { get: () => super.save } + }); + return __awaiter(this, void 0, void 0, function* () { + if (this.saving || this.loading) + return false; + // Workaround to avoid the option menu to be selected + if (this.mobile) + yield sleep(50); + return _super.save.call(this, event, opts); + }); + } + /* -- protected methods -- */ + get form() { + return this.tripForm.form; + } + computeUsageMode(data) { + return this.settings.isUsageMode('FIELD') || data.synchronizationStatus === 'DIRTY' ? 'FIELD' : 'DESK'; + } + computeNextTabIndex() { + return super.computeNextTabIndex() || this.selectedTabIndex; + } + computeTitle(data) { + // new data + if (!data || isNil(data.id)) { + return this.translate.get('TRIP.NEW.TITLE').toPromise(); + } + // Existing data + return this.translate + .get('TRIP.EDIT.TITLE', { + vessel: data.vesselSnapshot && (data.vesselSnapshot.exteriorMarking || data.vesselSnapshot.name), + departureDateTime: data.departureDateTime && this.dateFormat.transform(data.departureDateTime), + }) + .toPromise(); + } + computePageHistory(title) { + const _super = Object.create(null, { + computePageHistory: { get: () => super.computePageHistory } + }); + return __awaiter(this, void 0, void 0, function* () { + return Object.assign(Object.assign({}, (yield _super.computePageHistory.call(this, title))), { icon: 'boat' }); + }); + } + getJsonValueToSave() { + const _super = Object.create(null, { + getJsonValueToSave: { get: () => super.getJsonValueToSave } + }); + return __awaiter(this, void 0, void 0, function* () { + const json = yield _super.getJsonValueToSave.call(this); + json.sale = !this.saleForm.empty ? this.saleForm.value : null; + return json; + }); + } + getValue() { + const _super = Object.create(null, { + getValue: { get: () => super.getValue } + }); + return __awaiter(this, void 0, void 0, function* () { + const data = yield _super.getValue.call(this); + data.measurements = this.measurementsForm.value; + if (this.physicalGearsTable.dirty) { + yield this.physicalGearsTable.save(); + } + data.gears = this.physicalGearService.value; + return data; + }); + } + getFirstInvalidTabIndex() { + const invalidTabs = [ + this.tripForm.invalid || this.measurementsForm.invalid, + this.showGearTable && this.physicalGearsTable.invalid, + this.showOperationTable && this.operationsTable.invalid, + ]; + return invalidTabs.findIndex((invalid) => invalid === true); + } + /** + * Configure specific behavior + */ + onMeasurementsFormReady() { + var _a; + return __awaiter(this, void 0, void 0, function* () { + // Wait program to be loaded + yield this.ready(); + // DEBUG + //console.debug('[operation-page] Measurement form is ready'); + // Clean existing subscription (e.g. when acquisition level change, this function can= be called many times) + (_a = this._measurementSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); + this._measurementSubscription = new Subscription(); + const formGroup = this.measurementsForm.form; + // If PMFM "Use of a GPS ?" exists, then use to enable/disable positions or fishing area + const isGPSUsed = formGroup === null || formGroup === void 0 ? void 0 : formGroup.controls[PmfmIds.GPS_USED]; + if (isNotNil(isGPSUsed)) { + isGPSUsed.setValidators(Validators.required); + this._measurementSubscription.add(isGPSUsed.valueChanges + .pipe(debounceTime(400), startWith(isGPSUsed.value), filter(isNotNil), distinctUntilChanged()) + .subscribe((value) => { + if (this.debug) + console.debug('[trip] Enable/Disable positions or fishing area, because GPS_USED=' + value); + // Enable positions, when has gps + this.operationsTable.showPosition = value; + // Enable fishing area, when has not gps + this.operationsTable.showFishingArea = !value; + this.markForCheck(); + })); + } + }); + } + /** + * Update context, for batch validator + * + * @protected + */ + updateDataContext() { + console.debug(this.logPrefix + 'Updating data context...'); + // Program + const program = this.program; + if (this.tripContext.program !== program) { + this.tripContext.setValue('program', program); + } + // Strategy + const strategy = this.strategy; + if (this.tripContext.strategy !== strategy) { + this.tripContext.setValue('strategy', strategy); + } + } + downloadAsJson(event) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const confirmed = yield this.saveIfDirtyAndConfirm(event); + if (confirmed === false) + return; + if (!EntityUtils.isRemoteId((_a = this.data) === null || _a === void 0 ? void 0 : _a.id)) + return; // Skip + // Create file content + const data = yield this.dataService.load(this.data.id, { fullLoad: true, withOperation: true }); + const json = data.asObject(MINIFY_ENTITY_FOR_LOCAL_STORAGE); + const content = JSON.stringify([json]); + // Write to file + FilesUtils.writeTextToFile(content, { + filename: this.translate.instant('TRIP.TABLE.DOWNLOAD_JSON_FILENAME'), + type: 'application/json', + }); + }); + } + openDownloadPage(type) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const confirmed = yield this.saveIfDirtyAndConfirm(); + if (confirmed === false) + return; + if (!EntityUtils.isRemoteId((_a = this.data) === null || _a === void 0 ? void 0 : _a.id)) + return; // Skip + // Create extraction type and filter + type = type || ExtractionType.fromLiveLabel('PMFM_TRIP'); + const programLabel = (_b = this.data.program) === null || _b === void 0 ? void 0 : _b.label; + const tripId = this.data.id; + const filter = ExtractionUtils.createTripFilter(programLabel, [tripId]); + const queryParams = ExtractionUtils.asQueryParams(type, filter); + // Open extraction + yield this.router.navigate(['extraction', 'data'], { queryParams }); + }); + } + openHelpModal(event) { + return __awaiter(this, void 0, void 0, function* () { + if (event) + event.preventDefault(); + if (!this.helpUrl) { + yield Alerts.showError('TRIP.WARNING.NO_HELP_URL', this.alertCtrl, this.translate, { + titleKey: 'WARNING.OOPS_DOTS', + }, { + programLabel: this.programLabel, + }); + return; + } + console.debug(`[trip-page] Open help page {${this.helpUrl}}...`); + const modal = yield this.modalCtrl.create({ + component: AppHelpModal, + componentProps: { + title: this.translate.instant('COMMON.HELP.TITLE'), + markdownUrl: this.helpUrl, + }, + backdropDismiss: true, + }); + return modal.present(); + }); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +TripPage.TABS = { + GENERAL: 0, + PHYSICAL_GEARS: 1, + OPERATIONS: 2, +}; +__decorate([ + Input(), + __metadata("design:type", String) +], TripPage.prototype, "toolbarColor", void 0); +__decorate([ + ViewChild('tripForm', { static: true }), + __metadata("design:type", TripForm) +], TripPage.prototype, "tripForm", void 0); +__decorate([ + ViewChild('saleForm', { static: true }), + __metadata("design:type", SaleForm) +], TripPage.prototype, "saleForm", void 0); +__decorate([ + ViewChild('physicalGearsTable', { static: true }), + __metadata("design:type", PhysicalGearTable) +], TripPage.prototype, "physicalGearsTable", void 0); +__decorate([ + ViewChild('measurementsForm', { static: true }), + __metadata("design:type", MeasurementsForm) +], TripPage.prototype, "measurementsForm", void 0); +__decorate([ + ViewChild('operationsTable', { static: true }), + __metadata("design:type", OperationsTable) +], TripPage.prototype, "operationsTable", void 0); +TripPage = TripPage_1 = __decorate([ + Component({ + selector: 'app-trip-page', + templateUrl: './trip.page.html', + styleUrls: ['./trip.page.scss'], + animations: [fadeInOutAnimation], + providers: [ + { provide: APP_DATA_ENTITY_EDITOR, useExisting: TripPage_1 }, + { + provide: PHYSICAL_GEAR_DATA_SERVICE_TOKEN, + useFactory: () => new InMemoryEntitiesService(PhysicalGear, PhysicalGearFilter, { + equals: PhysicalGear.equals, + sortByReplacement: { id: 'rankOrder' }, + }), + }, + ], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __param(8, Self()), + __param(8, Inject(PHYSICAL_GEAR_DATA_SERVICE_TOKEN)), + __metadata("design:paramtypes", [Injector, + EntitiesStorage, + ModalController, + OperationService, + ContextService, + TripContextService, + AccountService, + NetworkService, + InMemoryEntitiesService]) +], TripPage); +export { TripPage }; +//# sourceMappingURL=trip.page.js.map diff --git a/out-tsc/app/app/trip/trip/trip.page.js.map b/out-tsc/app/app/trip/trip/trip.page.js.map new file mode 100644 index 000000000..fe24ed86c --- /dev/null +++ b/out-tsc/app/app/trip/trip/trip.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip.page.js","sourceRoot":"","sources":["../../../../../src/app/trip/trip/trip.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trip.service.js b/out-tsc/app/app/trip/trip/trip.service.js new file mode 100644 index 000000000..8c0b9b584 --- /dev/null +++ b/out-tsc/app/app/trip/trip/trip.service.js @@ -0,0 +1,1635 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { Inject, Injectable, Injector, Optional } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { filter, map } from 'rxjs/operators'; +import { APP_USER_EVENT_SERVICE, AppFormUtils, chainPromises, DateUtils, EntitiesStorage, Entity, EntityUtils, FormErrorTranslator, GraphqlService, isEmptyArray, isNil, isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrBlank, JobUtils, LocalSettingsService, NetworkService, PersonService, splitById, splitByProperty, Toasts, toNumber, } from '@sumaris-net/ngx-components'; +import { COPY_LOCALLY_AS_OBJECT_OPTIONS, MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE, SAVE_AS_OBJECT_OPTIONS, SERIALIZE_FOR_OPTIMISTIC_RESPONSE, } from '@app/data/services/model/data-entity.model'; +import { BehaviorSubject } from 'rxjs'; +import { OperationService } from '../operation/operation.service'; +import { VesselSnapshotFragments, VesselSnapshotService } from '@app/referential/services/vessel-snapshot.service'; +import { IMPORT_REFERENTIAL_ENTITIES, ReferentialRefService, WEIGHT_CONVERSION_ENTITIES } from '@app/referential/services/referential-ref.service'; +import { TripValidatorService } from './trip.validator'; +import { OperationGroup, Trip } from './trip.model'; +import { RootDataEntityUtils } from '@app/data/services/model/root-data-entity.model'; +import { fillRankOrder, fillTreeRankOrder, SynchronizationStatusEnum } from '@app/data/services/model/model.utils'; +import { TranslateService } from '@ngx-translate/core'; +import { ToastController } from '@ionic/angular'; +import { TRIP_FEATURE_DEFAULT_PROGRAM_FILTER, TRIP_FEATURE_NAME } from '../trip.config'; +import { RootDataSynchroService, } from '@app/data/services/root-data-synchro-service.class'; +import { environment } from '@environments/environment'; +import { DataErrorCodes } from '@app/data/services/errors'; +import { VESSEL_FEATURE_NAME } from '@app/vessel/services/config/vessel.config'; +import { TripFilter } from './trip.filter'; +import { TrashRemoteService } from '@app/core/services/trash-remote.service'; +import { PhysicalGearService } from '@app/trip/physicalgear/physicalgear.service'; +import { Packet } from '@app/trip/packet/packet.model'; +import { TripErrorCodes } from '@app/trip/trip.errors'; +import { PmfmUtils } from '@app/referential/services/model/pmfm.model'; +import { MEASUREMENT_PMFM_ID_REGEXP } from '@app/data/measurement/measurement.model'; +import { MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { ProgramUtils } from '@app/referential/services/model/program.model'; +import { Geometries } from '@app/shared/geometries.utils'; +import { PhysicalGear } from '@app/trip/physicalgear/physical-gear.model'; +import { UserEventTypeEnum } from '@app/social/user-event/user-event.model'; +import moment from 'moment'; +import { ProgressionModel } from '@app/shared/progression/progression.model'; +import { DataCommonFragments, DataFragments, ExpectedSaleFragments, OperationGroupFragment, PhysicalGearFragments, SaleFragments } from '@app/trip/common/data.fragments'; +export const TripFragments = { + lightTrip: gql ` + fragment LightTripFragment on TripVO { + id + program { + id + label + } + departureDateTime + returnDateTime + creationDate + updateDate + controlDate + validationDate + qualificationDate + qualityFlagId + comments + departureLocation { + ...LocationFragment + } + returnLocation { + ...LocationFragment + } + vesselSnapshot { + ...LightVesselSnapshotFragment + } + recorderDepartment { + ...LightDepartmentFragment + } + recorderPerson { + ...LightPersonFragment + } + observers { + ...LightPersonFragment + } + } + ${DataCommonFragments.location} + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + ${VesselSnapshotFragments.lightVesselSnapshot} + ${DataCommonFragments.referential} + `, + trip: gql `fragment TripFragment on TripVO { + id + program { + id + label + } + departureDateTime + returnDateTime + creationDate + updateDate + controlDate + validationDate + qualificationDate + qualityFlagId + comments + departureLocation { + ...LocationFragment + } + returnLocation { + ...LocationFragment + } + vesselSnapshot { + ...LightVesselSnapshotFragment + } + sale { + ...LightSaleFragment + } + gears { + ...PhysicalGearFragment + } + measurements { + ...MeasurementFragment + } + recorderDepartment { + ...LightDepartmentFragment + } + recorderPerson { + ...LightPersonFragment + } + observers { + ...LightPersonFragment + } + metiers { + ...MetierFragment + } + fishingAreas { + ...FishingAreaFragment + } + } + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + ${DataCommonFragments.measurement} + ${DataCommonFragments.referential} + ${DataCommonFragments.location} + ${VesselSnapshotFragments.lightVesselSnapshot} + ${PhysicalGearFragments.physicalGear} + ${DataCommonFragments.metier}, + ${DataFragments.fishingArea}, + ${SaleFragments.lightSale}`, + landedTrip: gql ` + fragment LandedTripFragment on TripVO { + id + program { + id + label + } + departureDateTime + returnDateTime + creationDate + updateDate + controlDate + validationDate + qualificationDate + qualityFlagId + comments + landing { + id + rankOrder + } + observedLocationId + departureLocation { + ...LocationFragment + } + returnLocation { + ...LocationFragment + } + vesselSnapshot { + ...LightVesselSnapshotFragment + } + gears { + ...PhysicalGearFragment + } + measurements { + ...MeasurementFragment + } + recorderDepartment { + ...LightDepartmentFragment + } + recorderPerson { + ...LightPersonFragment + } + observers { + ...LightPersonFragment + } + metiers { + ...MetierFragment + } + operationGroups { + ...OperationGroupFragment + } + expectedSale { + ...ExpectedSaleFragment + } + fishingAreas { + ...FishingAreaFragment + } + } + ${DataCommonFragments.lightDepartment} + ${DataCommonFragments.lightPerson} + ${DataCommonFragments.measurement} + ${DataCommonFragments.referential} + ${DataCommonFragments.location} + ${VesselSnapshotFragments.lightVesselSnapshot} + ${DataCommonFragments.metier} + ${PhysicalGearFragments.physicalGear} + ${OperationGroupFragment.operationGroup} + ${ExpectedSaleFragments.expectedSale} + ${DataFragments.fishingArea} + `, + embeddedLandedTrip: gql ` + fragment EmbeddedLandedTripFragment on TripVO { + id + program { + id + label + } + departureDateTime + returnDateTime + creationDate + updateDate + controlDate + validationDate + qualificationDate + qualityFlagId + comments + landing { + id + rankOrder + } + recorderDepartment { + ...LightDepartmentFragment + } + recorderPerson { + ...LightPersonFragment + } + metiers { + ...MetierFragment + } + operationGroups { + ...OperationGroupFragment + } + fishingAreas { + ...FishingAreaFragment + } + } + ${DataCommonFragments.metier} + ${DataFragments.fishingArea} + ${OperationGroupFragment.operationGroup} + `, +}; +const TripQueries = { + // Load a trip + load: gql ` query Trip($id: Int!) { + data: trip(id: $id) { + ...TripFragment + } + } + ${TripFragments.trip}`, + loadAll: gql ` query Trips($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $trash: Boolean, $filter: TripFilterVOInput){ + data: trips(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, trash: $trash){ + ...LightTripFragment + } + } + ${TripFragments.lightTrip}`, + loadAllWithTotal: gql ` query Trips($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $trash: Boolean, $filter: TripFilterVOInput){ + data: trips(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, trash: $trash){ + ...LightTripFragment + } + total: tripsCount(filter: $filter, trash: $trash) + } + ${TripFragments.lightTrip}`, + // Load a landed trip + loadLandedTrip: gql `query Trip($id: Int!) { + data: trip(id: $id) { + ...LandedTripFragment + } + } + ${TripFragments.landedTrip}` +}; +// Save a trip +const TripMutations = { + save: gql `mutation saveTrip($trip:TripVOInput!, $options: TripSaveOptionsInput!){ + data: saveTrip(trip: $trip, options: $options){ + ...TripFragment + } + } + ${TripFragments.trip}`, + // Save a landed trip + saveLandedTrip: gql `mutation saveTrip($trip:TripVOInput!, $options: TripSaveOptionsInput!){ + data: saveTrip(trip: $trip, options: $options){ + ...LandedTripFragment + } + } + ${TripFragments.landedTrip}`, + // Delete + deleteAll: gql `mutation DeleteTrips($ids:[Int]!){ + deleteTrips(ids: $ids) + }`, + // Terminate + terminate: gql `mutation ControlTrip($data:TripVOInput!){ + data: controlTrip(trip: $data){ + ...TripFragment + } + } + ${TripFragments.trip}`, + validate: gql `mutation ValidateTrip($data:TripVOInput!){ + data: validateTrip(trip: $data){ + ...TripFragment + } + } + ${TripFragments.trip}`, + qualify: gql `mutation QualifyTrip($data:TripVOInput!){ + data: qualifyTrip(trip: $data){ + ...TripFragment + } + } + ${TripFragments.trip}`, + unvalidate: gql `mutation UnvalidateTrip($data:TripVOInput!){ + data: unvalidateTrip(trip: $data){ + ...TripFragment + } + } + ${TripFragments.trip}` +}; +const TripSubscriptions = { + listenChanges: gql `subscription UpdateTrip($id: Int!, $interval: Int){ + data: updateTrip(id: $id, interval: $interval) { + ...LightTripFragment + } + } + ${TripFragments.lightTrip}` +}; +export class TripComparators { + static sortByDepartureDateFn(n1, n2) { + const d1 = n1.departureDateTime; + const d2 = n2.departureDateTime; + return d1.isSame(d2) ? 0 : (d1.isAfter(d2) ? 1 : -1); + } +} +let TripService = class TripService extends RootDataSynchroService { + constructor(injector, graphql, network, referentialRefService, vesselSnapshotService, personService, entities, operationService, physicalGearService, settings, validatorService, trashRemoteService, formErrorTranslator, userEventService, translate, toastController) { + super(injector, Trip, TripFilter, { + queries: TripQueries, + mutations: TripMutations, + subscriptions: TripSubscriptions + }); + this.graphql = graphql; + this.network = network; + this.referentialRefService = referentialRefService; + this.vesselSnapshotService = vesselSnapshotService; + this.personService = personService; + this.entities = entities; + this.operationService = operationService; + this.physicalGearService = physicalGearService; + this.settings = settings; + this.validatorService = validatorService; + this.trashRemoteService = trashRemoteService; + this.formErrorTranslator = formErrorTranslator; + this.userEventService = userEventService; + this.translate = translate; + this.toastController = toastController; + this._featureName = TRIP_FEATURE_NAME; + // Register user event actions + if (userEventService) { + userEventService.registerListener({ + accept: (e) => this.isDebugData(e), + onReceived: (event) => { + event.addAction({ + name: this.translate.instant('SOCIAL.USER_EVENT.BTN_COPY_TO_LOCAL'), + color: 'success', + iconRef: { + matIcon: 'content_copy' + }, + executeAction: (e) => __awaiter(this, void 0, void 0, function* () { + // Fetch event's content, if not present + if (!event.content) { + event = yield userEventService.load(e.id, { withContent: true }); + } + const context = this.getEventContext(event); + if (context) { + yield this.copyLocally(Trip.fromObject(context), { displaySuccessToast: true }); + } + else { + yield this.showToast({ message: 'ERROR.LOAD_DATA_ERROR', type: 'error' }); + } + }), + }); + return event; + } + }); + } + // Register self (avoid loop dependency) + operationService.tripService = this; + // FOR DEV ONLY + this._debug = !environment.production; + if (this._debug) + console.debug('[trip-service] Creating service'); + } + getEventContext(event) { + var _a; + const context = (_a = event.content) === null || _a === void 0 ? void 0 : _a.context; + if (context && typeof context === 'string') { + try { + return JSON.parse(context); + } + catch (e) { + // Invalid JSON: continue + } + } + return context; + } + isDebugData(event) { + var _a; + return event.type === UserEventTypeEnum.DEBUG_DATA + && ( + // If content not fetched, use only the hasContent flag (BUT insecrued, because data can be NOT a Trip) + (!event.content && event.hasContent) + // If content fetched, make sure data is a Trip + || ((_a = this.getEventContext(event)) === null || _a === void 0 ? void 0 : _a.__typename) === Trip.TYPENAME); + } + loadAll(offset, size, sortBy, sortDirection, filter, opts) { + const _super = Object.create(null, { + loadAll: { get: () => super.loadAll } + }); + return __awaiter(this, void 0, void 0, function* () { + const offlineData = this.network.offline || (filter && filter.synchronizationStatus && filter.synchronizationStatus !== 'SYNC') || false; + if (offlineData) { + return this.loadAllLocally(offset, size, sortBy, sortDirection, filter, opts); + } + return _super.loadAll.call(this, offset, size, sortBy, sortDirection, filter, opts); + }); + } + loadAllLocally(offset, size, sortBy, sortDirection, filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + filter = this.asFilter(filter); + const variables = { + offset: offset || 0, + size: size >= 0 ? size : 1000, + sortBy: (sortBy !== 'id' && sortBy) || (opts && opts.trash ? 'updateDate' : 'endDateTime'), + sortDirection: sortDirection || (opts && opts.trash ? 'desc' : 'asc'), + trash: opts && opts.trash || false, + filter: filter.asFilterFn() + }; + const res = yield this.entities.loadAll('TripVO', variables, { fullLoad: opts && opts.fullLoad }); + const entities = (!opts || opts.toEntity !== false) ? + (res.data || []).map(json => this.fromObject(json)) : + (res.data || []); + return { data: entities, total: res.total }; + }); + } + /** + * Load many trips + * + * @param offset + * @param size + * @param sortBy + * @param sortDirection + * @param dataFilter + * @param opts + */ + watchAll(offset, size, sortBy, sortDirection, dataFilter, opts) { + // Load offline + const offline = this.network.offline || (dataFilter && dataFilter.synchronizationStatus && dataFilter.synchronizationStatus !== 'SYNC') || false; + if (offline) { + return this.watchAllLocally(offset, size, sortBy, sortDirection, dataFilter, opts); + } + dataFilter = this.asFilter(dataFilter); + const variables = { + offset: offset || 0, + size: size || 20, + sortBy: sortBy || (opts && opts.trash ? 'updateDate' : 'departureDateTime'), + sortDirection: sortDirection || (opts && opts.trash ? 'desc' : 'asc'), + trash: opts && opts.trash || false, + filter: dataFilter && dataFilter.asPodObject() + }; + let now = this._debug && Date.now(); + if (this._debug) + console.debug('[trip-service] Watching trips... using options:', variables); + const withTotal = (!opts || opts.withTotal !== false); + const query = (opts === null || opts === void 0 ? void 0 : opts.query) || (withTotal ? TripQueries.loadAllWithTotal : TripQueries.loadAll); + return this.mutableWatchQuery({ + queryName: withTotal ? 'LoadAllWithTotal' : 'LoadAll', + query, + arrayFieldName: 'data', + totalFieldName: withTotal ? 'total' : undefined, + insertFilterFn: dataFilter === null || dataFilter === void 0 ? void 0 : dataFilter.asFilterFn(), + variables, + error: { code: DataErrorCodes.LOAD_ENTITIES_ERROR, message: 'ERROR.LOAD_ENTITIES_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || 'cache-and-network' + }) + .pipe( + // Skip update during load() + filter(() => !this.loading), map(({ data, total }) => { + const entities = (!opts || opts.toEntity !== false) + ? (data || []).map((json) => this.fromObject(json)) + : (data || []); + if (now) { + console.debug(`[trip-service] Loaded {${entities.length || 0}} trips in ${Date.now() - now}ms`, entities); + now = undefined; + } + return { data: entities, total }; + })); + } + watchAllLocally(offset, size, sortBy, sortDirection, dataFilter, options) { + dataFilter = this.asFilter(dataFilter); + const variables = { + offset: offset || 0, + size: size || 20, + sortBy: sortBy || 'departureDateTime', + sortDirection: sortDirection || 'asc', + trash: options && options.trash || false, + filter: dataFilter && dataFilter.asFilterFn() + }; + if (this._debug) + console.debug('[trip-service] Watching local trips... using options:', variables); + return this.entities.watchAll(Trip.TYPENAME, variables) + .pipe(map(res => { + const data = (res && res.data || []).map(Trip.fromObject); + const total = res && isNotNil(res.total) ? res.total : undefined; + return { data, total }; + })); + } + load(id, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (isNil(id)) + throw new Error('Missing argument \'id\''); + // use landedTrip option if itself or withOperationGroups is present in service options + const isLandedTrip = opts && (opts.isLandedTrip || opts.withOperationGroup); + const isLocalTrip = id < 0; + const now = this._debug && Date.now(); + if (this._debug) + console.debug(`[trip-service] Loading trip #${id}...`); + this.loading = true; + try { + let source; + // If local entity + if (isLocalTrip) { + source = yield this.entities.load(id, Trip.TYPENAME, opts); + if (!source) + throw { code: DataErrorCodes.LOAD_ENTITY_ERROR, message: 'ERROR.LOAD_ENTITY_ERROR' }; + } + else { + const query = isLandedTrip ? TripQueries.loadLandedTrip : TripQueries.load; + // Load remotely + const { data } = yield this.graphql.query({ + query, + variables: { id }, + error: { code: DataErrorCodes.LOAD_ENTITY_ERROR, message: 'ERROR.LOAD_ENTITY_ERROR' }, + fetchPolicy: opts && opts.fetchPolicy || undefined + }); + source = data; + } + // Add operations + if (opts === null || opts === void 0 ? void 0 : opts.withOperation) { + source = Object.assign({}, source); // Copy because remote object is not extensible + const { data } = yield this.operationService.loadAllByTrip({ tripId: id }, { + fetchPolicy: !isLocalTrip && 'network-only' || undefined, + fullLoad: isLocalTrip + }); + source.operations = isLocalTrip ? data + // Full load entities remotely + : yield Promise.all(data.map(lightOperation => this.operationService.load(lightOperation.id))); + } + // Transform to entity + const target = (!opts || opts.toEntity !== false) ? Trip.fromObject(source) : source; + if (target && this._debug) + console.debug(`[trip-service] Trip #${id} loaded in ${Date.now() - now}ms`, target); + return target; + } + finally { + this.loading = false; + } + }); + } + hasOfflineData() { + const _super = Object.create(null, { + hasOfflineData: { get: () => super.hasOfflineData } + }); + return __awaiter(this, void 0, void 0, function* () { + const result = yield _super.hasOfflineData.call(this); + if (result) + return result; + const res = yield this.entities.loadAll(Trip.TYPENAME, { + offset: 0, + size: 0 + }); + return res && res.total > 0; + }); + } + listenChanges(id, opts) { + if (isNil(id)) + throw new Error('Missing argument \'id\' '); + if (EntityUtils.isLocalId(id)) { + if (this._debug) + console.debug(this._logPrefix + `Listening for local changes on ${this._logTypeName} {${id}}...`); + return this.entities.watchAll(Trip.TYPENAME, { offset: 0, size: 1, filter: (t) => t.id === id }) + .pipe(map(({ data }) => { + const json = isNotEmptyArray(data) && data[0]; + const entity = (!opts || opts.toEntity !== false) ? this.fromObject(json) : json; + // Set an updateDate, to force update detection + if (entity && this._debug) + console.debug(this._logPrefix + `${this._logTypeName} {${id}} updated locally !`, entity); + return entity; + })); + } + return super.listenChanges(id, opts); + } + /** + * Save many trips + * + * @param entities + * @param opts + */ + saveAll(entities, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (isEmptyArray(entities)) + return entities; + if (this._debug) + console.debug(`[trip-service] Saving ${entities.length} trips...`); + const jobsFactories = (entities || []).map(entity => () => this.save(entity, Object.assign({}, opts))); + const result = yield chainPromises(jobsFactories); + this.onSave.next(result); + return result; + }); + } + /** + * Save many trips locally + * + * @param entities + * @param opts + */ + saveAllLocally(entities, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (!entities) + return entities; + if (this._debug) + console.debug(`[landing-service] Saving ${entities.length} trips locally...`); + const jobsFactories = (entities || []).map(entity => () => this.saveLocally(entity, Object.assign({}, opts))); + return chainPromises(jobsFactories); + }); + } + /** + * Save a trip + * + * @param entity + * @param opts + */ + save(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + // If is a local entity: force a local save + if (RootDataEntityUtils.isLocal(entity)) { + entity.updateDate = DateUtils.moment(); // Set a local time (need be EntityEditor.listenChanges()) + return this.saveLocally(entity, opts); + } + opts = Object.assign({ withLanding: false, withOperation: false, withOperationGroup: false }, opts); + const now = Date.now(); + if (this._debug) + console.debug('[trip-service] Saving trip...', entity); + // Prepare to save + this.fillDefaultProperties(entity); + // Reset quality properties + this.resetQualityProperties(entity); + // Provide an optimistic response, if connection lost + const offlineResponse = (!opts || opts.enableOptimisticResponse !== false) ? + (context) => __awaiter(this, void 0, void 0, function* () { + // Make sure to fill id, with local ids + yield this.fillOfflineDefaultProperties(entity); + // For the query to be tracked (see tracked query link) with a unique serialization key + context.tracked = (!entity.synchronizationStatus || entity.synchronizationStatus === 'SYNC'); + if (isNotNil(entity.id)) + context.serializationKey = `${Trip.TYPENAME}:${entity.id}`; + return { + data: [this.asObject(entity, SERIALIZE_FOR_OPTIMISTIC_RESPONSE)] + }; + }) : undefined; + // Transform into json + const json = this.asObject(entity, SAVE_AS_OBJECT_OPTIONS); + if (this._debug) + console.debug('[trip-service] Using minify object, to send:', json); + const variables = { + trip: json, + options: { + withLanding: opts.withLanding, + withOperation: opts.withOperation, + withOperationGroup: opts.withOperationGroup + } + }; + const mutation = (opts.withLanding || opts.withOperationGroup) ? TripMutations.saveLandedTrip : this.mutations.save; + yield this.graphql.mutate({ + mutation, + variables, + offlineResponse, + refetchQueries: this.getRefetchQueriesForMutation(opts), + awaitRefetchQueries: opts && opts.awaitRefetchQueries, + error: { code: DataErrorCodes.SAVE_ENTITY_ERROR, message: 'ERROR.SAVE_ENTITY_ERROR' }, + update: (cache, { data }) => __awaiter(this, void 0, void 0, function* () { + const savedEntity = data && data.data; + // Local entity (optimistic response): save it + if (savedEntity.id < 0) { + if (this._debug) + console.debug('[trip-service] [offline] Saving trip locally...', savedEntity); + // Save response locally + yield this.entities.save(savedEntity); + } + // Update the entity and update GraphQL cache + else { + // Remove existing entity from the local storage + if (entity.id < 0 && (savedEntity.id > 0 || savedEntity.updateDate)) { + if (this._debug) + console.debug(`[trip-service] Deleting trip {${entity.id}} from local storage`); + yield this.entities.delete(entity); + try { + // Remove linked operations + if (opts && opts.withOperation) { + yield this.operationService.deleteAllLocallyByFilter({ tripId: entity.id }); + } + } + catch (err) { + console.error(`[trip-service] Failed to locally delete operations of trip {${entity.id}}`, err); + } + } + // Copy id and update Date + this.copyIdAndUpdateDate(savedEntity, entity, opts); + // Insert into the cache + if (RootDataEntityUtils.isNew(entity) && this.watchQueriesUpdatePolicy === 'update-cache') { + this.insertIntoMutableCachedQueries(cache, { + queries: this.getLoadQueries(), + data: savedEntity + }); + } + if (opts && opts.update) { + opts.update(cache, { data }); + } + if (this._debug) + console.debug(`[trip-service] Trip saved remotely in ${Date.now() - now}ms`, entity); + } + }) + }); + if (!opts || opts.emitEvent !== false) { + this.onSave.next([entity]); + } + return entity; + }); + } + saveLocally(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (entity.id >= 0) + throw new Error('Must be a local entity'); + opts = Object.assign({ withLanding: false, withOperation: false, withOperationGroup: false }, opts); + this.fillDefaultProperties(entity); + // Reset quality properties + this.resetQualityProperties(entity); + // Make sure to fill id, with local ids + yield this.fillOfflineDefaultProperties(entity); + // Reset synchro status + entity.synchronizationStatus = SynchronizationStatusEnum.DIRTY; + // Extract operations (saved just after) + const operations = entity.operations; + delete entity.operations; + // Extract landing (saved just after) + const landing = entity.landing; + delete entity.landing; + const jsonLocal = this.asObject(entity, Object.assign(Object.assign({}, MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE), { batchAsTree: false })); + if (this._debug) + console.debug('[trip-service] [offline] Saving trip locally...', jsonLocal); + // Save trip locally + yield this.entities.save(jsonLocal, { entityName: Trip.TYPENAME }); + // Save operations + if (opts.withOperation && isNotEmptyArray(operations)) { + // Link to physical gear id, using the rankOrder + operations.forEach(o => { + var _a, _b; + o.id = null; // Clean ID, to force new ids + o.updateDate = undefined; + o.physicalGear = o.physicalGear && (entity.gears || []).find(g => g.rankOrder === o.physicalGear.rankOrder); + o.tripId = entity.id; + o.vesselId = (_a = entity.vesselSnapshot) === null || _a === void 0 ? void 0 : _a.id; + o.programLabel = (_b = entity.program) === null || _b === void 0 ? void 0 : _b.label; + }); + // TODO: need to pass opts.trip ?? + entity.operations = yield this.operationService.saveAll(operations, { tripId: entity.id, trip: entity }); + } + if (opts.withLanding && landing) { + entity.landing = landing; + entity.landing.tripId = entity.id; + entity.landing.observedLocationId = entity.observedLocationId; + entity.landing.program = entity.program; + entity.landing.vesselSnapshot = entity.vesselSnapshot; + entity.landing.dateTime = entity.returnDateTime; + entity.landing.observers = entity.observers; + entity.landing.observedLocationId = entity.observedLocationId; + } + this.onSave.next([entity]); + return entity; + }); + } + synchronize(entity, opts) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const isLandedTrip = isNotNil(entity.observedLocationId); + opts = Object.assign({ withOperation: !isLandedTrip, withLanding: isLandedTrip && !!entity.landing, withOperationGroup: isLandedTrip, enableOptimisticResponse: false }, opts); + const localId = entity.id; + if (isNil(localId) || localId >= 0) { + throw new Error('Entity must be a local entity'); + } + if (this.network.offline) { + throw new Error('Cannot synchronize: app is offline'); + } + // Clone (to keep original entity unchanged) + entity = entity instanceof Entity ? entity.clone() : entity; + entity.synchronizationStatus = 'SYNC'; + entity.id = undefined; + const firstPassOperations = []; + const childOperationsWithLocalParent = []; + const parentOperationsWithLocalChild = []; + if (opts.withOperation) { + // Fill operations + const { data: operations } = yield this.operationService.loadAllByTrip({ tripId: +localId }, { fullLoad: true, computeRankOrder: false }); + //sort operations to saving in good order + if (isNotEmptyArray(operations)) { + operations.forEach(operation => { + if (operation.parentOperationId && operation.parentOperationId < 0) { + childOperationsWithLocalParent.push(operation); + } + else if (operation.childOperationId && operation.childOperationId < 0) { + parentOperationsWithLocalChild.push(operation); + } + else { + // Can save this operation in the first pass (will be saved with the trip) + firstPassOperations.push(operation); + } + }); + // Clean gears, to keep only : + // - gears set manually, and not automatically (e.g. getOrAddGear() will marked as TEMPORARY) + // - OR used gears + entity.gears = (entity.gears || []).filter(physicalGear => physicalGear.synchronizationStatus !== SynchronizationStatusEnum.TEMPORARY + // IF temporary: check if used by an operation + || operations.some(o => o.physicalGear.id === physicalGear.id)); + } + // Check no child operation without a local parent outside this trip + if (childOperationsWithLocalParent.some(child => !parentOperationsWithLocalChild.some(parent => parent.id === child.parentOperationId))) { + throw new Error('ERROR.SYNCHRONIZE_CHILD_BEFORE_PARENT_ERROR'); + } + // Excludes operations that cannot be saved in the first pass + entity.operations = firstPassOperations; + } + let packets; + let expectedSaleProducts; + if (opts.withOperationGroup) { + // Remove local ids. + packets = entity.operationGroups.reduce((res, operationGroup) => { + operationGroup.id = undefined; + operationGroup.packets.forEach(packet => { + res = res.concat([packet.clone()]); + packet.id = undefined; + }); + return res; + }, []); + //packet ids are needed to save expected sale product => it will be save later. + expectedSaleProducts = entity.expectedSale.products; + entity.expectedSale.products = []; + } + try { + // Save trip (and operations or operation groups) + entity = yield this.save(entity, opts); + // Check return entity has a valid id + if (isNil(entity.id) || entity.id < 0) { + throw { code: DataErrorCodes.SYNCHRONIZE_ENTITY_ERROR }; + } + if (!opts || opts.emitEvent !== false) { + this.onSynchronize.next({ localId, remoteEntity: entity }); + } + } + catch (err) { + throw Object.assign(Object.assign({}, err), { code: DataErrorCodes.SYNCHRONIZE_ENTITY_ERROR, message: 'ERROR.SYNCHRONIZE_ENTITY_ERROR', context: entity.asObject(MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE) }); + } + // Operations: second save to save parent then child + if (opts.withOperation) { + const parentOperationsByLocalId = splitById(parentOperationsWithLocalChild); + const parentOperationsByChildLocalId = splitByProperty(parentOperationsWithLocalChild, 'childOperationId'); + // Save parent operations with a local child + if (isNotEmptyArray(parentOperationsWithLocalChild)) { + parentOperationsWithLocalChild.forEach(o => o.tripId = entity.id); + yield this.operationService.saveAll(parentOperationsWithLocalChild, { trip: entity }); + } + // Update child with the remote parent id, then save it + if (isNotEmptyArray(childOperationsWithLocalParent)) { + childOperationsWithLocalParent.forEach(child => { + child.tripId = entity.id; + const savedParent = parentOperationsByLocalId[child.parentOperationId]; + child.parentOperationId = savedParent.id; + child.parentOperation = null; + // remove from the maps + delete parentOperationsByLocalId[child.parentOperationId]; + delete parentOperationsByChildLocalId[child.id]; + }); + yield this.operationService.saveAll(childOperationsWithLocalParent, { trip: entity }); + // Add to entity operations + entity.operations = [ + ...entity.operations, + ...childOperationsWithLocalParent + ]; + } + // If still have some parent in the map, it means that their child are local, BUT in another trip + // => Update outdated link to parent (replace local id by the remote id) + const parentOperationLocalIdsWithoutChild = Object.keys(parentOperationsByLocalId).map(id => +id); + if (isNotEmptyArray(parentOperationLocalIdsWithoutChild)) { + const localChildOperations = yield Promise.all(Object.keys(parentOperationsByChildLocalId).map(id => +id) + .map((childLocalId) => this.operationService.load(childLocalId, { fullLoad: true }))); + const localChildOperationsToUpdate = localChildOperations + .map(child => { + const parent = parentOperationsByLocalId[child.parentOperationId]; + if (!parent) + return; // Skip if parent not found (e.g. changed without updating the parent operation) + child.parentOperationId = parent.id; + child.parentOperation = null; // Clean cache + return child; + }) + .filter(isNotNil); + yield this.operationService.saveAll(localChildOperationsToUpdate); + } + } + // OperationGroups: Second save is only needed when expectedSale has some products + if (opts.withOperationGroup && expectedSaleProducts) { + const savedPackets = entity.operationGroups.reduce((res, operationGroup) => res.concat(operationGroup.packets), []); + entity.expectedSale.products = expectedSaleProducts; + savedPackets.forEach(savedPacket => { + const localPacket = packets.find(packet => savedPacket.equals(packet)); + if (localPacket) { + const product = entity.expectedSale.products.find(p => p.batchId === localPacket.id); + if (product) { + product.batchId = savedPacket.id; + } + } + }); + try { + entity = yield this.save(entity, opts); + } + catch (err) { + console.error(`[trip-service] Failed to locally re save trip {${entity.id}} for expectedSale`, err); + // Continue + } + } + // Clean local trip + try { + if (this._debug) + console.debug(`[trip-service] Deleting trip {${entity.id}} from local storage`); + // Delete trip's operations + if (opts.withOperation) { + yield this.operationService.deleteAllLocallyByFilter({ tripId: +localId }); + } + // Delete trip + yield this.entities.deleteById(localId, { entityName: Trip.TYPENAME }); + } + catch (err) { + console.error(`[trip-service] Failed to locally delete trip {${entity.id}} and its operations`, err); + // Continue + } + // Importing historical data (need to get parent operation in the local storage) + try { + const filter = ((_a = this.settings.getOfflineFeature(this.featureName)) === null || _a === void 0 ? void 0 : _a.filter) || {}; + // Force the data program, because user can fill data on many programs (e.g. PIFIL and ACOST) but have configured only once for offline data importation + filter.programLabel = entity.program.label; + filter.program = entity.program; + // Force the vessel + filter.vesselId = toNumber((_b = entity.vesselSnapshot) === null || _b === void 0 ? void 0 : _b.id, filter.vesselId); + // Prepare the start/end date + if (filter.periodDuration && filter.periodDurationUnit) { + filter.startDate = DateUtils.moment().utc(false) + .add(-1 * filter.periodDuration, filter.periodDurationUnit) // Substract the period, from now + .startOf('day'); // Reset time + } + else { + filter.startDate = null; + } + // Make sure the period include the actual trip + filter.startDate = DateUtils.min(entity.departureDateTime.clone().utc(false).startOf('day'), filter.startDate); + filter.endDate = null; + // Run importation + yield this.importHistoricalData(filter, {}); + } + catch (err) { + console.error(`[trip-service] Failed to import historical data`, err); + // Continue, after warn + this.showToast({ message: 'WARNING.SYNCHRONIZE_NO_HISTORICAL_DATA', type: 'warning' }); + } + // Clear page history + try { + // FIXME: find a way o clean only synchronized data ? + yield this.settings.clearPageHistory(); + } + catch (err) { /* Continue */ } + return entity; + }); + } + /** + * Control the validity of an trip + * + * @param entity + * @param opts + */ + control(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + const now = this._debug && Date.now(); + const maxProgression = toNumber(opts === null || opts === void 0 ? void 0 : opts.maxProgression, 100); + opts = Object.assign(Object.assign({}, opts), { maxProgression }); + opts.progression = opts.progression || new ProgressionModel({ total: maxProgression }); + const progressionStep = maxProgression / 20; + if (this._debug) + console.debug(`[trip-service] Control {${entity.id}}...`, entity); + const programLabel = entity.program && entity.program.label || null; + if (!programLabel) + throw new Error('Missing trip\'s program. Unable to control the trip'); + const program = yield this.programRefService.loadByLabel(programLabel); + const form = this.validatorService.getFormGroup(entity, Object.assign(Object.assign({}, opts), { program, isOnFieldMode: false, withMeasurements: true // Need by full validation + })); + if (!form.valid) { + // Wait end of validation (e.g. async validators) + yield AppFormUtils.waitWhilePending(form); + // Get form errors + if (form.invalid) { + const errors = AppFormUtils.getFormErrors(form); + if (this._debug) + console.debug(`[trip-service] Control trip {${entity.id}} [INVALID] in ${Date.now() - now}ms`, errors); + return { + message: 'COMMON.FORM.HAS_ERROR', + details: { + errors + } + }; + } + } + if (opts === null || opts === void 0 ? void 0 : opts.progression) + opts.progression.increment(progressionStep); + // If trip is valid: continue + if (!opts || !opts.withOperationGroup) { + // Control physical gears + // FIXME remove this 'if' special case for APASE - this is a workaround for issue #409 + if (programLabel !== 'APASE') { + const errors = yield this.physicalGearService.controlAllByTrip(entity, { + program, + progression: opts === null || opts === void 0 ? void 0 : opts.progression, + maxProgression: progressionStep + }); + if (errors) { + return { + message: 'TRIP.ERROR.INVALID_GEARS', + details: { + errors: { + gears: errors + } + } + }; + } + } + // Control operations + { + const errors = yield this.operationService.controlAllByTrip(entity, { + program, + progression: opts === null || opts === void 0 ? void 0 : opts.progression, + maxProgression: maxProgression - progressionStep * 2 + }); + if (errors) { + return { + message: 'TRIP.ERROR.INVALID_OPERATIONS', + details: { + errors: { + operations: errors + } + } + }; + } + } + } + if (this._debug) + console.debug(`[trip-service] Control trip {${entity.id}} [OK] in ${Date.now() - now}ms`); + return undefined; + }); + } + delete(data) { + return __awaiter(this, void 0, void 0, function* () { + if (!data) + return; // skip + yield this.deleteAll([data]); + }); + } + /** + * Delete many trips + * + * @param entities + * @param opts + */ + deleteAll(entities, opts) { + return __awaiter(this, void 0, void 0, function* () { + // Delete local entities + const localEntities = entities === null || entities === void 0 ? void 0 : entities.filter(RootDataEntityUtils.isLocal); + if (isNotEmptyArray(localEntities)) { + return this.deleteAllLocally(localEntities, opts); + } + const remoteEntities = entities && entities.filter(t => t.id >= 0); + const ids = remoteEntities && remoteEntities.map(t => t.id); + if (isEmptyArray(ids)) + return; // stop if empty + const now = Date.now(); + if (this._debug) + console.debug(`[trip-service] Deleting trips ids: {${ids.join(',')}`); + yield this.graphql.mutate({ + mutation: this.mutations.deleteAll, + variables: { ids }, + update: (proxy) => { + // Update the cache + this.removeFromMutableCachedQueriesByIds(proxy, { + queryNames: ['loadAll', 'loadAllWithTotal'], + ids + }); + if (this._debug) + console.debug(`[trip-service] Trips deleted remotely in ${Date.now() - now}ms`); + this.onDelete.next(remoteEntities); + } + }); + }); + } + /** + * Delete many local entities + * + * @param entities + * @param opts + */ + deleteAllLocally(entities, opts) { + return __awaiter(this, void 0, void 0, function* () { + // Get local entities + const localEntities = entities === null || entities === void 0 ? void 0 : entities.filter(RootDataEntityUtils.isLocal); + // Delete, one by one + yield chainPromises((localEntities || []) + .map(entity => () => this.deleteLocally(entity, opts))); + }); + } + deleteLocallyById(id, opts) { + return __awaiter(this, void 0, void 0, function* () { + const trip = yield this.load(id); + return this.deleteLocally(trip, opts); + }); + } + deleteLocally(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + const trash = !opts || opts !== false; + const trashUpdateDate = trash && moment(); + if (this._debug) + console.debug(`[trip-service] Deleting trip #${entity.id}... {trash: ${trash}`); + try { + // Load trip's operations + const res = yield this.operationService.loadAllByTrip({ tripId: entity.id }, { fullLoad: true, computeRankOrder: false }); + const operations = res && res.data; + yield this.entities.delete(entity, { entityName: Trip.TYPENAME }); + this.onDelete.next([entity]); + if (isNotNil(operations)) { + yield this.operationService.deleteAll(operations, { trash: false }); + } + if (trash) { + // Fill trip's operation, before moving it to trash + entity.operations = operations; + const json = entity.asObject(Object.assign(Object.assign({}, MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE), { keepLocalId: false })); + // Force the updateDate + json.updateDate = trashUpdateDate; + // Add to trash + yield this.entities.saveToTrash(json, { entityName: Trip.TYPENAME }); + } + } + catch (err) { + console.error('Error during trip deletion: ', err); + throw { code: DataErrorCodes.DELETE_ENTITY_ERROR, message: 'ERROR.DELETE_ENTITY_ERROR' }; + } + this.onDelete.next([entity]); + }); + } + /** + * Copy entities (local or remote) to the local storage + * + * @param entities + * @param opts + */ + copyAllLocally(entities, opts) { + return chainPromises(entities.map(source => () => this.copyLocally(source, opts))); + } + copyLocallyById(id, opts) { + return __awaiter(this, void 0, void 0, function* () { + const isLocalTrip = id < 0; + // Load existing data + const source = yield this.load(id, Object.assign(Object.assign({}, opts), { fetchPolicy: 'network-only' })); + // Add operations + if (!opts || opts.withOperation !== false) { + const { data } = yield this.operationService.loadAllByTrip({ tripId: id }, { + fetchPolicy: !isLocalTrip && 'network-only' || undefined, + fullLoad: isLocalTrip + }); + source.operations = isLocalTrip ? data + // Full load entities remotely + : yield Promise.all(data.map(lightOperation => this.operationService.load(lightOperation.id))); + } + // Copy remote trip to local storage + const target = yield this.copyLocally(source, opts); + return target; + }); + } + /** + * Copy an entity (local or remote) to the local storage + * + * @param source + * @param opts + */ + copyLocally(source, opts) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[trip-service] Copy trip locally...', source); + opts = Object.assign({ keepRemoteId: false, deletedFromTrash: false, withOperation: true, withOperationGroup: true }, opts); + const isLocal = RootDataEntityUtils.isLocal(source); + // Create a new entity (without id and updateDate) + const json = this.asObject(source, Object.assign(Object.assign({}, COPY_LOCALLY_AS_OBJECT_OPTIONS), { keepRemoteId: opts.keepRemoteId })); + json.synchronizationStatus = SynchronizationStatusEnum.DIRTY; // To make sure it will be saved locally + // Save + const target = yield this.saveLocally(Trip.fromObject(json), opts); + // Remove from the local trash + if (opts.deletedFromTrash) { + if (isLocal) { + yield this.entities.deleteFromTrash(source, { entityName: Trip.TYPENAME }); + } + else { + yield this.trashRemoteService.delete(Trip.ENTITY_NAME, source.id); + } + } + if (opts.displaySuccessToast) { + yield this.showToast({ message: 'SOCIAL.USER_EVENT.INFO.COPIED_LOCALLY', type: 'info' }); + } + return target; + }); + } + copyIdAndUpdateDate(source, target, opts) { + if (!source) + return; + // Update (id and updateDate) + super.copyIdAndUpdateDate(source, target); + // Update parent link + target.observedLocationId = source.observedLocationId; + if (opts && opts.withLanding && source.landing && target.landing) { + EntityUtils.copyIdAndUpdateDate(source.landing, target.landing); + } + // Update sale + if (source.sale && target.sale) { + EntityUtils.copyIdAndUpdateDate(source.sale, target.sale); + RootDataEntityUtils.copyControlAndValidationDate(source.sale, target.sale); + // For a landedTrip with operationGroups, copy directly sale's product, a reload must be done after service call + if (opts && opts.withLanding && source.sale.products) { + target.sale.products = source.sale.products; + } + } + // Update fishing areas + if (target.fishingAreas && source.fishingAreas) { + target.fishingAreas.forEach(entity => { + const savedFishingArea = source.fishingAreas.find(f => entity.equals(f)); + EntityUtils.copyIdAndUpdateDate(savedFishingArea, entity); + }); + } + // Update gears (recursively) + if (target.gears && source.gears) { + this.copyIdAndUpdateDateOnGears(source.gears, target.gears, source); + } + // Update measurements + if (target.measurements && source.measurements) { + target.measurements.forEach(entity => { + const savedMeasurement = source.measurements.find(m => entity.equals(m)); + EntityUtils.copyIdAndUpdateDate(savedMeasurement, entity); + }); + } + // Update operation groups + if (source.operationGroups && target.operationGroups && opts && opts.withOperationGroup) { + target.operationGroups.forEach(targetOperationGroup => { + const sourceOperationGroup = source.operationGroups.find(json => targetOperationGroup.equals(json)); + EntityUtils.copyIdAndUpdateDate(sourceOperationGroup, targetOperationGroup); + targetOperationGroup.physicalGearId = sourceOperationGroup.physicalGearId; + // Operation group's measurements + if (sourceOperationGroup && sourceOperationGroup.measurements && targetOperationGroup.measurements) { + targetOperationGroup.measurements.forEach(targetMeasurement => { + const sourceMeasurement = sourceOperationGroup.measurements.find(m => targetMeasurement.equals(m)); + EntityUtils.copyIdAndUpdateDate(sourceMeasurement, targetMeasurement); + }); + } + // Operation group's products + if (sourceOperationGroup && sourceOperationGroup.products && targetOperationGroup.products) { + targetOperationGroup.products.forEach(targetProduct => { + const sourceProduct = sourceOperationGroup.products.find(json => targetProduct.equals(json)); + EntityUtils.copyIdAndUpdateDate(sourceProduct, targetProduct); + }); + } + // Operation group's samples (recursively) + if (sourceOperationGroup && sourceOperationGroup.samples && targetOperationGroup.samples) { + this.copyIdAndUpdateDateOnSamples(sourceOperationGroup.samples, targetOperationGroup.samples); + } + // Operation group's packets + if (sourceOperationGroup && sourceOperationGroup.packets && targetOperationGroup.packets) { + targetOperationGroup.packets.forEach(targetPacket => { + const sourcePacket = sourceOperationGroup.packets.find(json => targetPacket.equals(json)); + EntityUtils.copyIdAndUpdateDate(sourcePacket, targetPacket); + // Packet's compositions + if (sourcePacket && sourcePacket.composition && targetPacket.composition) { + targetPacket.composition.forEach(targetComposition => { + const sourceComposition = sourcePacket.composition.find(json => targetComposition.equals(json)); + EntityUtils.copyIdAndUpdateDate(sourceComposition, targetComposition); + }); + } + }); + } + }); + } + } + /** + * Copy Id and update, in gear tree (recursively) + * + * @param sources + * @param targets + */ + copyIdAndUpdateDateOnGears(sources, targets, savedTrip, parentGear) { + // DEBUG + //console.debug("[trip-service] Calling copyIdAndUpdateDateOnGears()"); + // Update gears + if (sources && targets) { + // Copy source, to be able to use splice() if array is a readonly (apollo cache) + sources = [...sources]; + targets.forEach(target => { + var _a; + // Set the trip id (required by equals function) + target.tripId = savedTrip.id; + // Try to set parent id (need by equals, when new entity) + target.parentId = (parentGear === null || parentGear === void 0 ? void 0 : parentGear.id) || target.parentId; + const index = sources.findIndex(json => target.equals(json)); + if (index !== -1) { + // Remove from sources list, as it has been found + const source = sources.splice(index, 1)[0]; + EntityUtils.copyIdAndUpdateDate(source, target); + RootDataEntityUtils.copyControlAndValidationDate(source, target); + // Copy parent Id (need for link to parent) + target.parentId = source.parentId; + target.parent = null; + } + else { + console.warn('Missing a gear, equals to this target: ', target); + } + // Update children + if ((_a = target.children) === null || _a === void 0 ? void 0 : _a.length) { + this.copyIdAndUpdateDateOnGears(sources, target.children, savedTrip, target); + } + }); + } + } + /*** + * Add gear on trip from a physical gear of another trip + * (used on new child operation when parent operation come from a different trip) + * @param tripId + * @param entity + */ + getOrAddGear(tripId, entity) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const now = Date.now(); + console.info('[operation-service] Get or add physical gear...'); + try { + // Make sure to get an entity + entity = PhysicalGear.fromObject(entity); + // Load the trip + const trip = yield this.load(tripId); + if (!trip) + throw new Error(`Cannot find trip #${tripId}`); // Should never occur + // Search if entity exists in the existing gears (e.g. if was copied just before) + const existingGear = (_a = trip.gears) === null || _a === void 0 ? void 0 : _a.find(gear => PhysicalGear.equals(gear, entity, { withMeasurementValues: true, withRankOrder: false })); + if (existingGear) { + console.info('[operation-service] Find an existing physical gear. Will use it', existingGear); + return existingGear; + } + // Mark as temporary (to force to clear unused gears, in save() ) + entity.synchronizationStatus = SynchronizationStatusEnum.TEMPORARY; + // Compute new rankOrder, according to existing gears + // RankOrder was compute for original trip, it can be used on actual trip and needed to be re-computed + const maxRankOrder = (trip.gears || []).map(gear => gear.rankOrder) + .reduce((max, rankOrder) => Math.max(max, rankOrder), 0); + if (isNil(entity.rankOrder) || ((_b = trip.gears) === null || _b === void 0 ? void 0 : _b.some(gear => gear.rankOrder === entity.rankOrder))) { + entity.rankOrder = maxRankOrder + 1; + } + // Add it to the trip + trip.gears.push(entity); + // Save the full trip + const savedTrip = yield this.save(trip); + // Return the saved gear + const savedEntity = savedTrip.gears.find(g => g.rankOrder === entity.rankOrder); + // Check that the gear has been added + if (!savedEntity) + throw new Error('Cannot find expected physical gear, in the saved trip!'); + console.info(`[operation-service] Physical gear successfully added to trip, in ${Date.now() - now}ms`); + return savedEntity.clone(); + } + catch (err) { + console.error(`[trip⁻service] Error while adding physical gear to trip: ${err && err.message || err}`, err); + throw { code: TripErrorCodes.ADD_TRIP_GEAR_ERROR, message: 'TRIP.ERROR.ADD_GEAR' }; + } + }); + } + translateControlPath(path, opts) { + opts = Object.assign({ i18nPrefix: 'TRIP.EDIT.' }, opts); + // Translate PMFM fields + if (MEASUREMENT_PMFM_ID_REGEXP.test(path) && opts.pmfms) { + const pmfmId = parseInt(path.split('.').pop()); + const pmfm = opts.pmfms.find(p => p.id === pmfmId); + return PmfmUtils.getPmfmName(pmfm); + } + // Default translation + return this.formErrorTranslator.translateControlPath(path, opts); + } + /* -- protected methods -- */ + asObject(entity, opts) { + opts = Object.assign(Object.assign({}, MINIFY_OPTIONS), opts); + const copy = entity.asObject(opts); + // Fill return date using departure date + copy.returnDateTime = copy.returnDateTime || copy.departureDateTime; + // Fill return location using departure location + if (!copy.returnLocation || !copy.returnLocation.id) { + copy.returnLocation = Object.assign({}, copy.departureLocation); + } + // Full json optimisation + if (opts.minify && !opts.keepEntityName && !opts.keepTypename) { + // Clean vessel features object, before saving + copy.vesselSnapshot = { id: entity.vesselSnapshot && entity.vesselSnapshot.id }; + } + return copy; + } + fillDefaultProperties(entity) { + super.fillDefaultProperties(entity); + if (entity.operationGroups) { + this.fillRecorderDepartment(entity.operationGroups, entity.recorderDepartment); + entity.operationGroups.forEach(operationGroup => { + this.fillRecorderDepartment(operationGroup.products, entity.recorderDepartment); + this.fillRecorderDepartment(operationGroup.packets, entity.recorderDepartment); + }); + } + // todo maybe others tables ? + // Physical gears: compute rankOrder + fillTreeRankOrder(entity.gears); + // Measurement: compute rankOrder + fillRankOrder(entity.measurements); + } + fillOfflineDefaultProperties(entity) { + const _super = Object.create(null, { + fillOfflineDefaultProperties: { get: () => super.fillOfflineDefaultProperties } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.fillOfflineDefaultProperties.call(this, entity); + // Fill gear ids + if (isNotEmptyArray(entity.gears)) { + const gears = EntityUtils.listOfTreeToArray(entity.gears); + yield EntityUtils.fillLocalIds(gears, (_, count) => this.entities.nextValues(PhysicalGear.TYPENAME, count)); + gears.forEach(g => { + g.tripId = entity.id; + // Keep existing, if already set (e.g. getOrAddGear() can set ) + g.synchronizationStatus = g.synchronizationStatus || entity.synchronizationStatus; + }); + } + // Fill packets ids + if (isNotEmptyArray(entity.operationGroups)) { + yield EntityUtils.fillLocalIds(entity.operationGroups, (_, count) => this.entities.nextValues(OperationGroup.TYPENAME, count)); + const packets = entity.operationGroups.reduce((res, operationGroup) => res.concat(operationGroup.packets.filter(packet => !packet.id)), []); + yield EntityUtils.fillLocalIds(packets, (_, count) => this.entities.nextValues(Packet.TYPENAME, count)); + } + }); + } + /** + * List of importation jobs. + * + * @protected + * @param filter + * @param opts + */ + getImportJobs(filter, opts) { + var _a, _b; + filter = filter || ((_a = this.settings.getOfflineFeature(this.featureName)) === null || _a === void 0 ? void 0 : _a.filter); + filter = this.asFilter(filter); + let programLabel = (_b = filter === null || filter === void 0 ? void 0 : filter.program) === null || _b === void 0 ? void 0 : _b.label; + return [ + // Store program to opts, for other services (e.g. used by OperationService) + JobUtils.defer((o) => __awaiter(this, void 0, void 0, function* () { + var _c; + // No program: Try to find one (and only one) for this user + if (isNilOrBlank(programLabel)) { + console.warn('[trip-service] [import] Trying to find a unique program to configure the import...'); + const { data: programs, total: programCount } = yield this.programRefService.loadAll(0, 1, null, null, TRIP_FEATURE_DEFAULT_PROGRAM_FILTER, { fetchPolicy: 'no-cache', withTotal: true }); + if (programCount === 1) { + programLabel = (_c = programs[0]) === null || _c === void 0 ? void 0 : _c.label; + } + else { + console.warn(`[trip-service] [import] No unique program found, but found ${programCount} program(s)`); + } + } + // No program + if (isNilOrBlank(programLabel)) { + console.warn('[trip-service] [import] Cannot reducing importation (no program): can be long!'); + opts.entityNames = [ + ...IMPORT_REFERENTIAL_ENTITIES, + ...WEIGHT_CONVERSION_ENTITIES + ]; + } + // Fill options using program + else { + console.debug(`[trip-service] [import] Reducing importation to program {${programLabel}}`); + const program = yield this.programRefService.loadByLabel(programLabel, { fetchPolicy: 'network-only' }); + opts.program = program; + opts.acquisitionLevels = ProgramUtils.getAcquisitionLevels(program); + // Import weight conversion entities, if enable on program + const enableWeightConversion = program.getPropertyAsBoolean(ProgramProperties.TRIP_BATCH_LENGTH_WEIGHT_CONVERSION_ENABLE); + if (enableWeightConversion) { + console.debug('[trip-service] [import] WeightLengthConversion - import enabled (by program)'); + opts.entityNames = [ + ...IMPORT_REFERENTIAL_ENTITIES, + ...WEIGHT_CONVERSION_ENTITIES + ]; + // Limit round weight, to the default country location id + const countryId = program.getPropertyAsInt(ProgramProperties.TRIP_BATCH_ROUND_WEIGHT_CONVERSION_COUNTRY_ID); + if (isNotNilOrBlank(countryId)) { + console.debug('[trip-service] [import] WeightLengthConversion - country id: ' + countryId); + opts.countryIds = opts.countryIds || []; + if (!opts.countryIds.includes(countryId)) + opts.countryIds.push(countryId); + } + } + // Limit locations (e.g. rectangle) + opts.locationLevelIds = program.getPropertyAsNumbers(ProgramProperties.TRIP_OFFLINE_IMPORT_LOCATION_LEVEL_IDS); + if (isNotEmptyArray(opts.locationLevelIds)) + console.debug('[trip-service] [import] Location - level ids: ' + opts.locationLevelIds.join(',')); + opts.boundingBox = Geometries.parseAsBBox(program.getProperty(ProgramProperties.TRIP_POSITION_BOUNDING_BOX)); + if (Geometries.isNotNilBBox(opts.boundingBox)) + console.debug('[trip-service] [import] Bounding box: ' + opts.boundingBox.join(',')); + // TODO limit vessels (e.g. for OBSBIO, OBSMER) + } + })), + ...super.getImportJobs(filter, opts), + // Import pending operations + JobUtils.defer(o => { + const operationFilter = TripFilter.toOperationFilter(filter); + if (isNil(operationFilter === null || operationFilter === void 0 ? void 0 : operationFilter.vesselId)) + return Promise.resolve(); // Skip if no vessel + return this.operationService.executeImport(operationFilter, o); + }, opts), + // Import physical gears + JobUtils.defer(o => { + const gearFilter = TripFilter.toPhysicalGearFilter(filter); + if (isNil(gearFilter === null || gearFilter === void 0 ? void 0 : gearFilter.vesselId)) + return Promise.resolve(); // Skip if no vessel + return this.physicalGearService.executeImport(gearFilter, o); + }, opts) + ]; + } + /** + * Reimport historical gears, or pending operations (parent OP without child) + * + * @param filter + * @param opts + * @protected + */ + importHistoricalData(filter, opts) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const maxProgression = opts && opts.maxProgression || 100; + opts = Object.assign({ maxProgression }, opts); + opts.progression = opts.progression || new BehaviorSubject(0); + filter = filter || ((_a = this.settings.getOfflineFeature(this.featureName)) === null || _a === void 0 ? void 0 : _a.filter); + filter = this.asFilter(filter); + const programLabel = (_b = filter === null || filter === void 0 ? void 0 : filter.program) === null || _b === void 0 ? void 0 : _b.label; + if (isNotNilOrBlank(programLabel)) { + console.info('[trip-service] Importing historical data, from filter: ', filter); + // Import pending operations + const operationFilter = TripFilter.toOperationFilter(filter); + yield this.operationService.executeImport(operationFilter, Object.assign(Object.assign({}, opts), { maxProgression: maxProgression / 2 })); + // Import physical gears + const gearFilter = TripFilter.toPhysicalGearFilter(filter); + yield this.physicalGearService.executeImport(gearFilter, Object.assign(Object.assign({}, opts), { maxProgression: maxProgression / 2 })); + } + if (opts === null || opts === void 0 ? void 0 : opts.progression) + opts === null || opts === void 0 ? void 0 : opts.progression.next(maxProgression); + }); + } + /** + * Copy Id and update, in sample tree (recursively) + * + * @param sources + * @param targets + */ + // TODO BLA: Utiliser celle de operation-servive, en la passant en public + copyIdAndUpdateDateOnSamples(sources, targets) { + // Update samples + if (sources && targets) { + targets.forEach(target => { + const source = sources.find(json => target.equals(json)); + EntityUtils.copyIdAndUpdateDate(source, target); + // Apply to children + if (target.children && target.children.length) { + this.copyIdAndUpdateDateOnSamples(sources, target.children); + } + }); + } + } + showToast(opts) { + return Toasts.show(this.toastController, this.translate, opts); + } + finishImport() { + super.finishImport(); + // Add vessel offline feature + this.settings.markOfflineFeatureAsSync(VESSEL_FEATURE_NAME); + } +}; +TripService = __decorate([ + Injectable({ providedIn: 'root' }), + __param(13, Inject(APP_USER_EVENT_SERVICE)), + __param(13, Optional()), + __param(14, Optional()), + __param(15, Optional()), + __metadata("design:paramtypes", [Injector, + GraphqlService, + NetworkService, + ReferentialRefService, + VesselSnapshotService, + PersonService, + EntitiesStorage, + OperationService, + PhysicalGearService, + LocalSettingsService, + TripValidatorService, + TrashRemoteService, + FormErrorTranslator, Object, TranslateService, + ToastController]) +], TripService); +export { TripService }; +//# sourceMappingURL=trip.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trip.service.js.map b/out-tsc/app/app/trip/trip/trip.service.js.map new file mode 100644 index 000000000..7d552b42e --- /dev/null +++ b/out-tsc/app/app/trip/trip/trip.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip.service.js","sourceRoot":"","sources":["../../../../../src/app/trip/trip/trip.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trip.validator.js b/out-tsc/app/app/trip/trip/trip.validator.js new file mode 100644 index 000000000..eff24f76b --- /dev/null +++ b/out-tsc/app/app/trip/trip/trip.validator.js @@ -0,0 +1,156 @@ +var TripValidatorService_1; +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { AppFormArray, LocalSettingsService, ReferentialUtils, SharedFormArrayValidators, SharedFormGroupValidators, SharedValidators, toBoolean, toNumber, } from '@sumaris-net/ngx-components'; +import { SaleValidatorService } from '../sale/sale.validator'; +import { MeasurementsValidatorService } from '@app/data/measurement/measurement.validator'; +import { AcquisitionLevelCodes } from '@app/referential/services/model/model.enum'; +import { Trip } from './trip.model'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +import { DataRootVesselEntityValidatorService } from '@app/data/services/validator/root-vessel-entity.validator'; +import { FishingAreaValidatorService } from '@app/data/fishing-area/fishing-area.validator'; +import { TranslateService } from '@ngx-translate/core'; +let TripValidatorService = TripValidatorService_1 = class TripValidatorService extends DataRootVesselEntityValidatorService { + constructor(formBuilder, translate, settings, saleValidator, fishingAreaValidator, measurementsValidatorService) { + super(formBuilder, translate, settings); + this.saleValidator = saleValidator; + this.fishingAreaValidator = fishingAreaValidator; + this.measurementsValidatorService = measurementsValidatorService; + } + getFormGroup(data, opts) { + opts = this.fillDefaultOptions(opts); + const form = super.getFormGroup(data, opts); + // Add sale form + if (opts.withSale) { + form.addControl('sale', this.saleValidator.getFormGroup(data && data.sale, { + required: false + })); + } + // Add measurement form + if (opts.withMeasurements) { + const pmfms = (opts.program && opts.program.strategies[0] && opts.program.strategies[0].denormalizedPmfms || []) + .filter(p => p.acquisitionLevel === AcquisitionLevelCodes.TRIP); + form.addControl('measurements', this.measurementsValidatorService.getFormGroup(data && data.measurements, { + isOnFieldMode: opts.isOnFieldMode, + pmfms + })); + } + return form; + } + getFormGroupConfig(data, opts) { + const formConfig = Object.assign(super.getFormGroupConfig(data, opts), { + __typename: [Trip.TYPENAME], + departureDateTime: [data && data.departureDateTime || null, !opts.departureDateTimeRequired ? null : Validators.required], + departureLocation: [data && data.departureLocation || null, Validators.compose([Validators.required, SharedValidators.entity])], + returnDateTime: [data && data.returnDateTime || null, this.getReturnDateTimeValidator(opts)], + returnLocation: [data && data.returnLocation || null, this.getReturnLocationValidator(opts)] + }); + // Add observers + if (opts.withObservers) { + formConfig.observers = this.getObserversFormArray(data === null || data === void 0 ? void 0 : data.observers); + } + // Add metiers + if (opts.withMetiers) { + formConfig.metiers = this.getMetiersArray(data === null || data === void 0 ? void 0 : data.metiers); + } + // Add fishing Ares + if (opts.withFishingAreas) { + formConfig.fishingAreas = this.getFishingAreasArray(data); + } + return formConfig; + } + getFormGroupOptions(data, opts) { + return { + validator: Validators.compose([ + SharedFormGroupValidators.dateRange('departureDateTime', 'returnDateTime'), + SharedFormGroupValidators.dateMinDuration('departureDateTime', 'returnDateTime', (opts === null || opts === void 0 ? void 0 : opts.minDurationInHours) || TripValidatorService_1.DEFAULT_MIN_DURATION_HOURS, 'hour'), + SharedFormGroupValidators.dateMaxDuration('departureDateTime', 'returnDateTime', (opts === null || opts === void 0 ? void 0 : opts.maxDurationInHours) || TripValidatorService_1.DEFAULT_MAX_DURATION_HOURS, 'hour') + ]) + }; + } + updateFormGroup(form, opts) { + var _a; + opts = this.fillDefaultOptions(opts); + const enabled = form.enabled; + form.get('returnDateTime').setValidators(this.getReturnDateTimeValidator(opts)); + form.get('returnLocation').setValidators(this.getReturnLocationValidator(opts)); + // Metier array + if (opts === null || opts === void 0 ? void 0 : opts.withMetiers) { + if (!form.controls.metiers) + form.addControl('metiers', this.getMetiersArray(null, { required: true })); + } + else { + if (form.controls.metiers) + form.removeControl('metiers'); + } + // Observers + if (opts === null || opts === void 0 ? void 0 : opts.withObservers) { + if (!form.controls.observers) + form.addControl('observers', this.getObserversFormArray(null, { required: true })); + } + else { + if (form.controls.observers) + form.removeControl('observers'); + } + // Update form group validators + const formValidators = (_a = this.getFormGroupOptions(null, opts)) === null || _a === void 0 ? void 0 : _a.validators; + form.setValidators(formValidators); + return form; + } + getMetiersArray(data, opts) { + const required = !opts || opts.required !== false; + const formArray = new AppFormArray((metier) => this.getMetierControl(metier, { required }), ReferentialUtils.equals, ReferentialUtils.isEmpty, { + allowEmptyArray: false, + validators: required ? SharedFormArrayValidators.requiredArrayMinLength(1) : null, + }); + if (data || required) { + formArray.patchValue(data || [null]); + } + return formArray; + } + getMetierControl(value, opts) { + const required = !opts || opts.required !== false; + return this.formBuilder.control(value || null, required ? [Validators.required, SharedValidators.entity] : SharedValidators.entity); + } + getFishingAreasArray(data, opts) { + const required = !opts || opts.required !== false; + return this.formBuilder.array((data && data.fishingAreas || []).map(fa => this.fishingAreaValidator.getFormGroup(fa)), required ? SharedFormArrayValidators.requiredArrayMinLength(1) : undefined); + } + /* -- protected methods -- */ + fillDefaultOptions(opts) { + var _a, _b, _c, _d, _e; + opts = super.fillDefaultOptions(opts); + opts.withObservers = toBoolean(opts.withObservers, toBoolean((_a = opts.program) === null || _a === void 0 ? void 0 : _a.getPropertyAsBoolean(ProgramProperties.TRIP_OBSERVERS_ENABLE), ProgramProperties.TRIP_OBSERVERS_ENABLE.defaultValue === 'true')); + opts.withMetiers = toBoolean(opts.withMetiers, toBoolean((_b = opts.program) === null || _b === void 0 ? void 0 : _b.getPropertyAsBoolean(ProgramProperties.TRIP_METIERS_ENABLE), ProgramProperties.TRIP_METIERS_ENABLE.defaultValue === 'true')); + opts.withSale = toBoolean(opts.withSale, toBoolean((_c = opts.program) === null || _c === void 0 ? void 0 : _c.getPropertyAsBoolean(ProgramProperties.TRIP_SALE_ENABLE), false)); + opts.withMeasurements = toBoolean(opts.withMeasurements, !!opts.program); + opts.returnFieldsRequired = toBoolean(opts.returnFieldsRequired, !opts.isOnFieldMode); + opts.minDurationInHours = toNumber(opts.minDurationInHours, (_d = opts.program) === null || _d === void 0 ? void 0 : _d.getPropertyAsInt(ProgramProperties.TRIP_MIN_DURATION_HOURS)); + opts.maxDurationInHours = toNumber(opts.maxDurationInHours, (_e = opts.program) === null || _e === void 0 ? void 0 : _e.getPropertyAsInt(ProgramProperties.TRIP_MAX_DURATION_HOURS)); + return opts; + } + getReturnDateTimeValidator(opts) { + return Validators.compose([ + opts.returnFieldsRequired ? Validators.required : Validators.nullValidator, + SharedValidators.dateRangeEnd('departureDateTime'), + SharedValidators.copyParentErrors(['dateRange', 'dateMaxDuration', 'dateMinDuration']) + ]); + } + getReturnLocationValidator(opts) { + return opts.returnFieldsRequired ? Validators.compose([Validators.required, SharedValidators.entity]) : SharedValidators.entity; + } +}; +TripValidatorService.DEFAULT_MIN_DURATION_HOURS = 1; // 1 hour +TripValidatorService.DEFAULT_MAX_DURATION_HOURS = 100 * 24; // 100 days +TripValidatorService = TripValidatorService_1 = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + TranslateService, + LocalSettingsService, + SaleValidatorService, + FishingAreaValidatorService, + MeasurementsValidatorService]) +], TripValidatorService); +export { TripValidatorService }; +//# sourceMappingURL=trip.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trip.validator.js.map b/out-tsc/app/app/trip/trip/trip.validator.js.map new file mode 100644 index 000000000..35b8fee89 --- /dev/null +++ b/out-tsc/app/app/trip/trip/trip.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trip.validator.js","sourceRoot":"","sources":["../../../../../src/app/trip/trip/trip.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trips.table.js b/out-tsc/app/app/trip/trip/trips.table.js new file mode 100644 index 000000000..5cdd360fc --- /dev/null +++ b/out-tsc/app/app/trip/trip/trips.table.js @@ -0,0 +1,453 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; +import { TripComparators, TripService } from './trip.service'; +import { TripFilter, TripSynchroImportFilter } from './trip.filter'; +import { UntypedFormBuilder } from '@angular/forms'; +import { arrayDistinct, chainPromises, ConfigService, FilesUtils, isEmptyArray, isNil, isNilOrBlank, isNotEmptyArray, isNotNil, MINIFY_ENTITY_FOR_LOCAL_STORAGE, PersonService, PersonUtils, SharedValidators, slideUpDownAnimation, splitByProperty, StatusIds, } from '@sumaris-net/ngx-components'; +import { VesselSnapshotService } from '@app/referential/services/vessel-snapshot.service'; +import { Operation, Trip } from './trip.model'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { LocationLevelIds, QualityFlagIds } from '@app/referential/services/model/model.enum'; +import { TripTrashModal } from './trash/trip-trash.modal'; +import { TRIP_CONFIG_OPTIONS, TRIP_FEATURE_DEFAULT_PROGRAM_FILTER, TRIP_FEATURE_NAME } from '../trip.config'; +import { AppRootDataTable, AppRootTableSettingsEnum } from '@app/data/table/root-table.class'; +import { environment } from '@environments/environment'; +import { DATA_CONFIG_OPTIONS } from '@app/data/data.config'; +import { filter, tap } from 'rxjs/operators'; +import { BehaviorSubject } from 'rxjs'; +import { TripOfflineModal } from '@app/trip/trip/offline/trip-offline.modal'; +import { DataQualityStatusEnum, DataQualityStatusList } from '@app/data/services/model/model.utils'; +import { ContextService } from '@app/shared/context.service'; +import { TripContextService } from '@app/trip/trip-context.service'; +import { OperationService } from '@app/trip/operation/operation.service'; +import { OperationsMapModal } from '@app/trip/operation/map/operations-map.modal'; +import { ExtractionUtils } from '@app/extraction/common/extraction.utils'; +import { ExtractionType } from '@app/extraction/type/extraction-type.model'; +import { ProgramProperties } from '@app/referential/services/config/program.config'; +export const TripsPageSettingsEnum = { + PAGE_ID: 'trips', + FILTER_KEY: AppRootTableSettingsEnum.FILTER_KEY, + FEATURE_ID: TRIP_FEATURE_NAME, +}; +let TripTable = class TripTable extends AppRootDataTable { + constructor(injector, _dataService, operationService, personService, referentialRefService, vesselSnapshotService, configService, context, tripContext, formBuilder, cd) { + super(injector, Trip, TripFilter, ['quality', + 'program', + 'vessel', + 'departureLocation', + 'departureDateTime', + 'returnDateTime', + 'observers', + 'recorderPerson', + 'comments'], _dataService, null); + this._dataService = _dataService; + this.operationService = operationService; + this.personService = personService; + this.referentialRefService = referentialRefService; + this.vesselSnapshotService = vesselSnapshotService; + this.configService = configService; + this.context = context; + this.tripContext = tripContext; + this.formBuilder = formBuilder; + this.cd = cd; + this.$title = new BehaviorSubject(''); + this.statusList = DataQualityStatusList; + this.statusById = DataQualityStatusEnum; + this.showRecorder = true; + this.showObservers = true; + this.canDownload = false; + this.canUpload = false; + this.canOpenMap = false; + this.i18nColumnPrefix = 'TRIP.TABLE.'; + this.filterForm = formBuilder.group({ + program: [null, SharedValidators.entity], + vesselSnapshot: [null, SharedValidators.entity], + location: [null, SharedValidators.entity], + startDate: [null, SharedValidators.validDate], + endDate: [null, SharedValidators.validDate], + synchronizationStatus: [null], + recorderDepartment: [null, SharedValidators.entity], + recorderPerson: [null, SharedValidators.entity], + observers: formBuilder.array([[null, SharedValidators.entity]]), + dataQualityStatus: [null], + qualityFlagId: [null, SharedValidators.integer], + hasScientificCruise: [null], + hasObservedLocation: [null] + }); + this.autoLoad = false; // See restoreFilterOrLoad() + this.inlineEdition = false; + this.defaultSortBy = 'departureDateTime'; + this.defaultSortDirection = 'desc'; + this.confirmBeforeDelete = true; + this.canEdit = this.accountService.isUser(); + const showAdvancedFeatures = this.accountService.isAdmin(); + this.canDownload = showAdvancedFeatures; + this.canUpload = showAdvancedFeatures; + this.canOpenMap = showAdvancedFeatures; + this.settingsId = TripsPageSettingsEnum.PAGE_ID; // Fixed value, to be able to reuse it in the editor page + this.featureName = TripsPageSettingsEnum.FEATURE_ID; + // FOR DEV ONLY ---- + this.debug = !environment.production; + } + get filterObserversForm() { + return this.filterForm.controls.observers; + } + get filterDataQualityControl() { + return this.filterForm.controls.dataQualityStatus; + } + ngOnInit() { + super.ngOnInit(); + // Programs combo (filter) + this.registerAutocompleteField('program', { + service: this.programRefService, + filter: TRIP_FEATURE_DEFAULT_PROGRAM_FILTER, + mobile: this.mobile + }); + // Locations combo (filter) + this.registerAutocompleteField('location', { + service: this.referentialRefService, + filter: { + entityName: 'Location', + levelId: LocationLevelIds.PORT + }, + mobile: this.mobile + }); + // Combo: vessels + this.vesselSnapshotService.getAutocompleteFieldOptions().then(opts => this.registerAutocompleteField('vesselSnapshot', opts)); + // Combo: recorder department + this.registerAutocompleteField('department', { + service: this.referentialRefService, + filter: { + entityName: 'Department' + }, + mobile: this.mobile + }); + // Combo: recorder person + const personAttributes = this.settings.getFieldDisplayAttributes('person', ['lastName', 'firstName', 'department.name']); + this.registerAutocompleteField('person', { + service: this.personService, + filter: { + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE] + }, + attributes: personAttributes, + displayWith: PersonUtils.personToString, + mobile: this.mobile + }); + this.registerSubscription(this.configService.config + .pipe(filter(isNotNil), tap(config => { + console.info('[trips] Init from config', config); + const title = config && config.getProperty(TRIP_CONFIG_OPTIONS.TRIP_NAME); + this.$title.next(title); + this.showQuality = config.getPropertyAsBoolean(DATA_CONFIG_OPTIONS.QUALITY_PROCESS_ENABLE); + this.setShowColumn('quality', this.showQuality, { emitEvent: false }); + if (this.showQuality) { + this.referentialRefService.loadQualityFlags().then(items => { + this.qualityFlags = items; + this.qualityFlagsById = splitByProperty(items, 'id'); + }); + } + // Recorder + this.showRecorder = config.getPropertyAsBoolean(DATA_CONFIG_OPTIONS.SHOW_RECORDER); + this.setShowColumn('recorderPerson', this.showRecorder, { emitEvent: false }); + // Observers + this.showObservers = config.getPropertyAsBoolean(DATA_CONFIG_OPTIONS.SHOW_OBSERVERS); + this.setShowColumn('observers', this.showObservers, { emitEvent: false }); + this.updateColumns(); + // Restore filter from settings, or load all + this.restoreFilterOrLoad(); + })) + .subscribe()); + // Clear the existing trip context + this.resetContext(); + } + /** + * Action triggered when user swipes + */ + onSwipeTab(event) { + // DEBUG + // if (this.debug) console.debug("[trips] onSwipeTab()"); + // Skip, if not a valid swipe event + if (!event + || event.defaultPrevented || (event.srcEvent && event.srcEvent.defaultPrevented) + || event.pointerType !== 'touch') { + return false; + } + this.toggleSynchronizationStatus(); + return true; + } + openTrashModal(event) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[trips] Opening trash modal...'); + const modalOptions = { + synchronizationStatus: this.filter && this.filter.synchronizationStatus || 'SYNC' + }; + const modal = yield this.modalCtrl.create({ + component: TripTrashModal, + componentProps: modalOptions, + keyboardClose: true, + cssClass: 'modal-large' + }); + // Open the modal + yield modal.present(); + // On dismiss + const { data, role } = yield modal.onDidDismiss(); + if (role === 'cancel' || isEmptyArray(data)) + return; // CANCELLED + // Select the local trips tab + this.setSynchronizationStatus('DIRTY'); + // If only one restored: open it + const trip = (data === null || data === void 0 ? void 0 : data.length) === 1 && data[0]; + if (isNotNil(trip.id)) { + yield this.navController.navigateForward([trip.id], { + relativeTo: this.route + }); + } + }); + } + prepareOfflineMode(event, opts) { + const _super = Object.create(null, { + prepareOfflineMode: { get: () => super.prepareOfflineMode } + }); + return __awaiter(this, void 0, void 0, function* () { + if (this.importing) + return; // Skip + const feature = this.settings.getOfflineFeature(this._dataService.featureName) || { + name: this._dataService.featureName + }; + // eslint-disable-next-line @typescript-eslint/no-shadow + const filter = this.asFilter(this.filterForm.value); + const synchroFilter = Object.assign({ vesselId: filter.vesselId || filter.vesselSnapshot && filter.vesselSnapshot.id || undefined, programLabel: filter.program && filter.program.label || undefined }, feature.filter); + // Open offline, if missing program or vesselId + if (event || isNilOrBlank(synchroFilter === null || synchroFilter === void 0 ? void 0 : synchroFilter.programLabel) || isNil(synchroFilter === null || synchroFilter === void 0 ? void 0 : synchroFilter.vesselId)) { + const modal = yield this.modalCtrl.create({ + component: TripOfflineModal, + componentProps: { + value: synchroFilter + }, keyboardClose: true + }); + // Open the modal + modal.present(); + // Wait until closed + const { data, role } = yield modal.onDidDismiss(); + if (!data || role === 'cancel') + return; // User cancelled + // Update feature filter, and save it into settings + feature.filter = TripSynchroImportFilter.fromObject(data).asObject(); + this.settings.saveOfflineFeature(feature); + // DEBUG + console.debug('[trip-table] Will prepare offline mode, using filter:', feature.filter); + } + else { + // Saving feature's filter, to order to use it in TripService.runImport() + feature.filter = TripSynchroImportFilter.fromObject(synchroFilter).asObject(); + this.settings.saveOfflineFeature(feature); + } + return _super.prepareOfflineMode.call(this, event, opts); + }); + } + importFromFile(event) { + const _super = Object.create(null, { + importFromFile: { get: () => super.importFromFile } + }); + return __awaiter(this, void 0, void 0, function* () { + const data = yield _super.importFromFile.call(this, event); + if (isEmptyArray(data)) + return; // Skip + const entities = []; + const errors = []; + for (const json of data) { + try { + const entity = Trip.fromObject(json); + const savedEntity = yield this._dataService.copyLocally(entity); + entities.push(savedEntity); + } + catch (err) { + const message = err && err.message || err; + errors.push(message); + console.error(message, err); + } + } + if (isEmptyArray(entities) && isEmptyArray(errors)) { + // Nothing to import (empty file ?) + return; + } + else if (isEmptyArray(entities) && isNotEmptyArray(errors)) { + yield this.showToast({ + type: 'error', + message: 'TRIP.TABLE.ERROR.IMPORT_FILE_FAILED', messageParams: { error: errors.join('\n') } + }); + } + else if (isNotEmptyArray(errors)) { + yield this.showToast({ + type: 'warning', + message: 'TRIP.TABLE.INFO.IMPORT_FILE_SUCCEED_WITH_ERRORS', messageParams: { inserts: entities.length, errors: errors.length } + }); + } + else { + yield this.showToast({ + type: 'info', + message: 'TRIP.TABLE.INFO.IMPORT_FILE_SUCCEED', messageParams: { inserts: entities.length } + }); + } + return entities; + }); + } + downloadSelectionAsJson(event) { + return __awaiter(this, void 0, void 0, function* () { + const ids = (this.selection.selected || []) + .map(row => { var _a; return (_a = row.currentData) === null || _a === void 0 ? void 0 : _a.id; }); + return this.downloadAsJson(ids); + }); + } + openDownloadPage(type) { + return __awaiter(this, void 0, void 0, function* () { + const trips = (this.selection.selected || []) + .map(row => row.currentData).filter(isNotNil) + .sort(TripComparators.sortByDepartureDateFn); + if (isEmptyArray(trips)) + return; // Skip if empty + const programs = arrayDistinct(trips.map(t => t.program), 'label'); + if (programs.length !== 1) { + this.showToast({ + type: 'warning', + message: 'TRIP.TABLE.WARNING.NEED_ONE_PROGRAM' + }); + return; // Skip if no program + } + // Clear selection + this.selection.clear(); + this.markForCheck(); + // Create extraction type and filter + type = type || ExtractionType.fromLiveLabel('PMFM_TRIP'); + const programLabel = programs[0].label; + const tripIds = trips.map(t => t.id); + const filter = ExtractionUtils.createTripFilter(programLabel, tripIds); + const queryParams = ExtractionUtils.asQueryParams(type, filter); + // Open extraction + yield this.router.navigate(['extraction', 'data'], { queryParams }); + }); + } + openSelectionMap(event) { + return __awaiter(this, void 0, void 0, function* () { + const trips = (this.selection.selected || []) + .map(row => row.currentData).filter(isNotNil) + .sort(TripComparators.sortByDepartureDateFn); + if (isEmptyArray(trips)) + return; // Skip if empty + const programs = arrayDistinct(trips.map(t => t.program), 'label'); + if (programs.length !== 1) { + this.showToast({ + type: 'warning', + message: 'TRIP.TABLE.WARNING.NEED_ONE_PROGRAM' + }); + return; // Skip if no program + } + const programLabel = programs[0].label; + const operations = yield chainPromises(trips.map(trip => () => this.operationService.loadAllByTrip({ tripId: trip.id }, { fetchPolicy: 'cache-first', fullLoad: false, withTotal: true /*better chance to get a cached value*/ }) + .then(res => (Object.assign(Object.assign({}, trip), { operations: res.data }))))); + const modal = yield this.modalCtrl.create({ + component: OperationsMapModal, + componentProps: { + data: operations, + programLabel, + latLongPattern: this.settings.latLongFormat + }, + keyboardClose: true, + cssClass: 'modal-large' + }); + // Open the modal + yield modal.present(); + // Wait until closed + const { data } = yield modal.onDidDismiss(); + if (data instanceof Operation) { + console.info('[trips-table] User select an operation from the map:', data); + this.selection.clear(); + this.markForCheck(); + //Full load the program + const program = yield this.programRefService.loadByLabel(programLabel); + // Build the final path + const operationEditor = program.getProperty(ProgramProperties.TRIP_OPERATION_EDITOR); + const editorPath = operationEditor !== 'legacy' ? [operationEditor] : []; + yield this.router.navigate(['trips', data.tripId, 'operation', ...editorPath, data.id]); + return; + } + }); + } + clearFilterValue(key, event) { + if (event) { + event.preventDefault(); + event.stopPropagation(); + } + this.filterForm.get(key).reset(null); + } + /* -- protected methods -- */ + markForCheck() { + this.cd.markForCheck(); + } + resetContext() { + // Consume all context data, to avoid reusing it somewhere + // We should do that at each menu entry point + this.context.reset(); + this.tripContext.reset(); + } + downloadAsJson(ids) { + return __awaiter(this, void 0, void 0, function* () { + if (isEmptyArray(ids)) + return; // Skip if empty + // Create file content + const entities = (yield Promise.all(ids.map(id => this._dataService.load(id, { fullLoad: true, withOperation: true })))) + .map(entity => entity.asObject(MINIFY_ENTITY_FOR_LOCAL_STORAGE)); + const content = JSON.stringify(entities); + // Write to file + FilesUtils.writeTextToFile(content, { + filename: this.translate.instant('TRIP.TABLE.DOWNLOAD_JSON_FILENAME'), + type: 'application/json' + }); + }); + } + excludeNotQualified(qualityFlag) { + return (qualityFlag === null || qualityFlag === void 0 ? void 0 : qualityFlag.id) !== QualityFlagIds.NOT_QUALIFIED; + } +}; +__decorate([ + Input(), + __metadata("design:type", Object) +], TripTable.prototype, "showRecorder", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], TripTable.prototype, "showObservers", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], TripTable.prototype, "canDownload", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], TripTable.prototype, "canUpload", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], TripTable.prototype, "canOpenMap", void 0); +TripTable = __decorate([ + Component({ + selector: 'app-trips-table', + templateUrl: 'trips.table.html', + styleUrls: ['./trips.table.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + animations: [slideUpDownAnimation] + }), + __metadata("design:paramtypes", [Injector, + TripService, + OperationService, + PersonService, + ReferentialRefService, + VesselSnapshotService, + ConfigService, + ContextService, + TripContextService, + UntypedFormBuilder, + ChangeDetectorRef]) +], TripTable); +export { TripTable }; +//# sourceMappingURL=trips.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/trip/trip/trips.table.js.map b/out-tsc/app/app/trip/trip/trips.table.js.map new file mode 100644 index 000000000..71b1f5fcc --- /dev/null +++ b/out-tsc/app/app/trip/trip/trips.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trips.table.js","sourceRoot":"","sources":["../../../../../src/app/trip/trip/trips.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/form/form-vessel.js b/out-tsc/app/app/vessel/form/form-vessel.js new file mode 100644 index 000000000..2589cc4bf --- /dev/null +++ b/out-tsc/app/app/vessel/form/form-vessel.js @@ -0,0 +1,237 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Directive, HostListener, Injector, Input } from '@angular/core'; +import { VesselValidatorService } from '../services/validator/vessel.validator'; +import { LocationLevelIds } from '@app/referential/services/model/model.enum'; +import { AccountService, AppForm, AppFormUtils, isNil, LocalSettingsService, ReferentialRef, StatusById, StatusIds, StatusList, toBoolean } from '@sumaris-net/ngx-components'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +import { VESSEL_CONFIG_OPTIONS } from '@app/vessel/services/config/vessel.config'; +// eslint-disable-next-line @angular-eslint/directive-selector +let ToRegistrationCodeDirective = class ToRegistrationCodeDirective { + constructor() { + } + onInput(event) { + // Filters only A-Z 0-9 characters + event.target.value = event.target.value.toUpperCase().replace(/[^A-Z0-9]/g, ''); + } +}; +__decorate([ + HostListener('input', ['$event']), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", void 0) +], ToRegistrationCodeDirective.prototype, "onInput", null); +ToRegistrationCodeDirective = __decorate([ + Directive({ selector: 'input[toRegistrationCode]' }), + __metadata("design:paramtypes", []) +], ToRegistrationCodeDirective); +export { ToRegistrationCodeDirective }; +let VesselForm = class VesselForm extends AppForm { + constructor(injector, vesselValidatorService, referentialRefService, cd, settings, accountService) { + super(injector, vesselValidatorService.getFormGroup()); + this.vesselValidatorService = vesselValidatorService; + this.referentialRefService = referentialRefService; + this.cd = cd; + this.settings = settings; + this.accountService = accountService; + this._basePortLocationSuggestLengthThreshold = +VESSEL_CONFIG_OPTIONS.VESSEL_BASE_PORT_LOCATION_SEARCH_TEXT_MIN_LENGTH.defaultValue; + this.statusList = StatusList; + this.statusById = StatusById; + this.filterNumberInput = AppFormUtils.filterNumberInput; + this.mobile = settings.mobile; + this.canEditStatus = this.accountService.isAdmin(); + } + set defaultStatus(value) { + if (this._defaultStatus !== value) { + this._defaultStatus = value; + console.debug('[form-vessel] Changing default status to:' + value); + if (this.form) { + this.form.patchValue({ statusId: this.defaultStatus }); + } + this.canEditStatus = !this._defaultStatus || this.isAdmin(); + } + } + get defaultStatus() { + return this._defaultStatus; + } + set defaultRegistrationLocation(value) { + var _a; + if (this._defaultRegistrationLocation !== value) { + console.debug('[form-vessel] Changing default registration location to:' + value); + this._defaultRegistrationLocation = value; + // Apply value, if possible (not yt set) + const registrationLocationControl = (_a = this.registrationForm) === null || _a === void 0 ? void 0 : _a.get('registrationLocation'); + if (registrationLocationControl && isNil(registrationLocationControl.value)) { + registrationLocationControl.patchValue({ registrationLocation: value }); + } + } + } + get defaultRegistrationLocation() { + return this._defaultRegistrationLocation; + } + set basePortLocationSuggestLengthThreshold(value) { + if (this._basePortLocationSuggestLengthThreshold !== value) { + this._basePortLocationSuggestLengthThreshold = value; + // Update fields + if (this.autocompleteFields.basePortLocation) { + this.autocompleteFields.basePortLocation.suggestLengthThreshold = value; + } + } + } + get basePortLocationSuggestLengthThreshold() { + return this._basePortLocationSuggestLengthThreshold; + } + set withNameRequired(value) { + if (this._withNameRequired !== value) { + this._withNameRequired = value; + if (this.form) { + this.updateFormGroup(); + } + } + } + get withNameRequired() { + return this._withNameRequired; + } + set maxDate(value) { + if (this._maxDate !== value) { + this._maxDate = value; + if (this.form) { + this.updateFormGroup(); + } + } + } + get maxDate() { + return this._maxDate; + } + get registrationForm() { + return this.form.controls.vesselRegistrationPeriod; + } + get featuresForm() { + return this.form.controls.vesselFeatures; + } + ngOnInit() { + super.ngOnInit(); + // Compute defaults + this.showError = toBoolean(this.showError, true); + this.canEditStatus = toBoolean(this.canEditStatus, !this._defaultStatus || this.isAdmin()); + // Combo location + this.registerAutocompleteField('basePortLocation', { + service: this.referentialRefService, + filter: { + entityName: 'Location', + levelId: LocationLevelIds.PORT, + statusId: StatusIds.ENABLE + }, + suggestLengthThreshold: this._basePortLocationSuggestLengthThreshold, + mobile: this.mobile + }); + this.registerAutocompleteField('registrationLocation', { + service: this.referentialRefService, + filter: { + entityName: 'Location', + levelId: LocationLevelIds.COUNTRY, + statusId: StatusIds.ENABLE + }, + mobile: this.mobile + }); + this.registerAutocompleteField('vesselType', { + service: this.referentialRefService, + attributes: ['name'], + filter: { + entityName: 'VesselType', + statusId: StatusIds.ENABLE + }, + mobile: this.mobile + }); + // Combo hull material + this.registerAutocompleteField('hullMaterial', { + // TODO use suggest function, and load Pmfm qualitative value, using PmfmIds.HULL_MATERIAL + service: this.referentialRefService, + attributes: ['name'], + filter: { + entityName: 'QualitativeValue', + levelLabel: 'HULL_MATERIAL', + statusId: StatusIds.ENABLE + }, + mobile: this.mobile + }); + if (this._defaultStatus) { + this.form.patchValue({ + statusId: this._defaultStatus + }); + } + if (this._defaultRegistrationLocation) { + this.registrationForm.patchValue({ + registrationLocation: this._defaultRegistrationLocation + }); + } + } + isAdmin() { + return this.accountService.isAdmin(); + } + /* -- protected methods -- */ + updateFormGroup(opts) { + const validatorOpts = { + withNameRequired: this.withNameRequired, + maxDate: this.maxDate + }; + // DEBUG + console.debug(`[form-vessel] Updating form group (validators)`, validatorOpts); + this.vesselValidatorService.updateFormGroup(this.form, validatorOpts); + if (!opts || opts.emitEvent !== false) { + this.form.updateValueAndValidity(); + this.markForCheck(); + } + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Boolean) +], VesselForm.prototype, "canEditStatus", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], VesselForm.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Number), + __metadata("design:paramtypes", [Number]) +], VesselForm.prototype, "defaultStatus", null); +__decorate([ + Input(), + __metadata("design:type", ReferentialRef), + __metadata("design:paramtypes", [ReferentialRef]) +], VesselForm.prototype, "defaultRegistrationLocation", null); +__decorate([ + Input(), + __metadata("design:type", Number), + __metadata("design:paramtypes", [Number]) +], VesselForm.prototype, "basePortLocationSuggestLengthThreshold", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], VesselForm.prototype, "withNameRequired", null); +__decorate([ + Input(), + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], VesselForm.prototype, "maxDate", null); +VesselForm = __decorate([ + Component({ + selector: 'app-form-vessel', + templateUrl: './form-vessel.html', + styleUrls: ['./form-vessel.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + VesselValidatorService, + ReferentialRefService, + ChangeDetectorRef, + LocalSettingsService, + AccountService]) +], VesselForm); +export { VesselForm }; +//# sourceMappingURL=form-vessel.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/form/form-vessel.js.map b/out-tsc/app/app/vessel/form/form-vessel.js.map new file mode 100644 index 000000000..00a10bd06 --- /dev/null +++ b/out-tsc/app/app/vessel/form/form-vessel.js.map @@ -0,0 +1 @@ +{"version":3,"file":"form-vessel.js","sourceRoot":"","sources":["../../../../../src/app/vessel/form/form-vessel.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/list/vessels.page.js b/out-tsc/app/app/vessel/list/vessels.page.js new file mode 100644 index 000000000..a5b285d85 --- /dev/null +++ b/out-tsc/app/app/vessel/list/vessels.page.js @@ -0,0 +1,182 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ViewChild } from '@angular/core'; +import { AlertController, ModalController, PopoverController } from '@ionic/angular'; +import { ActivatedRoute, Router } from '@angular/router'; +import { AccountService, Alerts, ConfigService, FilesUtils, isNil, isNotEmptyArray, isNotNil, LocalSettingsService, referentialToString, StatusIds, } from '@sumaris-net/ngx-components'; +import { Location } from '@angular/common'; +import { VesselsTable } from './vessels.table'; +import { VESSEL_CONFIG_OPTIONS, VESSEL_FEATURE_NAME } from '../services/config/vessel.config'; +import { SelectVesselsModal } from '@app/vessel/modal/select-vessel.modal'; +import { VesselSnapshot } from '@app/referential/services/model/vessel-snapshot.model'; +import { Subscription } from 'rxjs'; +import { TranslateService } from '@ngx-translate/core'; +import { VesselService } from '@app/vessel/services/vessel-service'; +import { FileTransferService } from '@app/shared/service/file-transfer.service'; +import { Vessel } from '@app/vessel/services/model/vessel.model'; +export const VesselsPageSettingsEnum = { + PAGE_ID: 'vessels', + FEATURE_ID: VESSEL_FEATURE_NAME, +}; +let VesselsPage = class VesselsPage { + constructor(route, router, location, modalCtrl, alertCtrl, accountService, configService, translate, settings, vesselService, popoverController, transferService, cd) { + this.route = route; + this.router = router; + this.location = location; + this.modalCtrl = modalCtrl; + this.alertCtrl = alertCtrl; + this.accountService = accountService; + this.configService = configService; + this.translate = translate; + this.settings = settings; + this.vesselService = vesselService; + this.popoverController = popoverController; + this.transferService = transferService; + this.cd = cd; + this.enableReplacement = false; + this.enableFileImport = false; + this._subscription = new Subscription(); + this.mobile = settings.mobile; + const isAdmin = this.accountService.isAdmin(); + this.canEdit = isAdmin || this.accountService.isUser(); + this.canDelete = isAdmin; + this.canReplace = isAdmin; + this.canImportFile = isAdmin; + } + get replacementDisabled() { + return (!this.canReplace && this.table.selection.isEmpty()) + || this.table.selection.selected.some(row => row.currentData.statusId !== StatusIds.TEMPORARY); + } + ngOnInit() { + this.table.settingsId = VesselsPageSettingsEnum.PAGE_ID; + this._subscription.add(this.configService.config.subscribe((config) => { + this.enableReplacement = config.getPropertyAsBoolean(VESSEL_CONFIG_OPTIONS.TEMPORARY_VESSEL_REPLACEMENT_ENABLE); + this.enableFileImport = config.getPropertyAsBoolean(VESSEL_CONFIG_OPTIONS.REFERENTIAL_VESSEL_IMPORT_ENABLE); + this.vesselTypeId = config.getPropertyAsInt(VESSEL_CONFIG_OPTIONS.VESSEL_FILTER_DEFAULT_TYPE_ID); + this.table.vesselTypeId = this.vesselTypeId; + this.table.showVesselTypeFilter = isNil(this.vesselTypeId); + this.table.showVesselTypeColumn = isNil(this.vesselTypeId); + this.table.markAsReady(); + })); + } + ngOnDestroy() { + this._subscription.unsubscribe(); + } + /** + * Action triggered when user swipes + */ + onSwipeTab(event) { + // DEBUG + // console.debug("[vessels] onSwipeTab()"); + // Skip, if not a valid swipe event + if (!event + || event.defaultPrevented || (event.srcEvent && event.srcEvent.defaultPrevented) + || event.pointerType !== 'touch') { + return false; + } + this.table.toggleSynchronizationStatus(); + return true; + } + replace(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.table.selection.isEmpty()) + return; + const modal = yield this.modalCtrl.create({ + component: SelectVesselsModal, + componentProps: { + titleI18n: 'VESSEL.SELECT_MODAL.REPLACE_TITLE', + vesselFilter: { + statusId: StatusIds.ENABLE, + onlyWithRegistration: true + }, + disableStatusFilter: true, + showVesselTypeColumn: isNil(this.vesselTypeId), + showBasePortLocationColumn: true, + }, + keyboardClose: true, + cssClass: 'modal-large' + }); + // Open the modal + yield modal.present(); + // Wait until closed + const { data } = yield modal.onDidDismiss(); + if (data && data[0] instanceof VesselSnapshot) { + console.debug('[vessels-page] Vessel selection modal result:', data); + const vessel = data[0]; + if (yield Alerts.askConfirmation('VESSEL.ACTION.REPLACE_MANY_CONFIRMATION', this.alertCtrl, this.translate, event, { vessel: referentialToString(vessel, ['registrationCode', 'name']) })) { + try { + // Replace temp vessels (from selected rows) + yield this.vesselService.replaceTemporaryVessel(this.table.selection.selected.map(row => row.currentData.id), vessel.id); + } + catch (e) { + yield Alerts.showError(e.message, this.alertCtrl, this.translate); + } + // Clear selection and refresh + this.table.selection.clear(); + this.table.onRefresh.emit(); + this.markForCheck(); + } + } + else { + console.debug('[observed-location] Vessel selection modal was cancelled'); + } + }); + } + /* -- protected methods -- */ + markForCheck() { + this.cd.markForCheck(); + } + onOpenRow(row) { + return __awaiter(this, void 0, void 0, function* () { + return yield this.router.navigateByUrl(`/vessels/${row.currentData.id}`); + }); + } + importFromCsv(event, format = 'siop') { + return __awaiter(this, void 0, void 0, function* () { + const { data } = yield FilesUtils.showUploadPopover(this.popoverController, event, { + uniqueFile: true, + fileExtension: '.csv', + uploadFn: (file) => this.transferService.uploadResource(file, { + resourceType: Vessel.ENTITY_NAME, + resourceId: Date.now().toString(), + replace: true + }) + }); + console.debug('[vessel] Vessel files uploaded! Response: ', data); + const uploadedFileNames = (data || []) + .map(file => { var _a; return (_a = file.response) === null || _a === void 0 ? void 0 : _a.body; }) + .filter(isNotNil) + .map(({ fileName }) => fileName); + if (isNotEmptyArray(uploadedFileNames)) { + const jobs = yield Promise.all(uploadedFileNames.map(uploadedFileName => this.vesselService.importFile(uploadedFileName, format))); + console.info('[vessel] Vessel imported with success!: ', jobs); + } + }); + } +}; +__decorate([ + ViewChild('table', { static: true }), + __metadata("design:type", VesselsTable) +], VesselsPage.prototype, "table", void 0); +VesselsPage = __decorate([ + Component({ + selector: 'app-vessels-page', + styleUrls: ['vessels.page.scss'], + templateUrl: 'vessels.page.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [ActivatedRoute, + Router, + Location, + ModalController, + AlertController, + AccountService, + ConfigService, + TranslateService, + LocalSettingsService, + VesselService, + PopoverController, + FileTransferService, + ChangeDetectorRef]) +], VesselsPage); +export { VesselsPage }; +//# sourceMappingURL=vessels.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/list/vessels.page.js.map b/out-tsc/app/app/vessel/list/vessels.page.js.map new file mode 100644 index 000000000..6f4177a66 --- /dev/null +++ b/out-tsc/app/app/vessel/list/vessels.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessels.page.js","sourceRoot":"","sources":["../../../../../src/app/vessel/list/vessels.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/list/vessels.table.js b/out-tsc/app/app/vessel/list/vessels.table.js new file mode 100644 index 000000000..50547c748 --- /dev/null +++ b/out-tsc/app/app/vessel/list/vessels.table.js @@ -0,0 +1,282 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Injector, Input, ViewChild } from "@angular/core"; +import { ValidatorService } from "@e-is/ngx-material-table"; +import { VesselValidatorService } from "../services/validator/vessel.validator"; +import { VesselService } from "../services/vessel-service"; +import { VesselModal } from "../modal/vessel-modal"; +import { Vessel } from "../services/model/vessel.model"; +import { AccountService, isNil, isNotEmptyArray, isNotNil, LocalSettingsService, ReferentialUtils, SharedValidators, StatusById, StatusIds, StatusList, trimEmptyToNull } from "@sumaris-net/ngx-components"; +import { tap } from "rxjs"; +import { UntypedFormBuilder } from "@angular/forms"; +import { SynchronizationStatusEnum } from "@app/data/services/model/model.utils"; +import { LocationLevelIds } from "@app/referential/services/model/model.enum"; +import { ReferentialRefService } from "@app/referential/services/referential-ref.service"; +import { environment } from "@environments/environment"; +import { AppRootDataTable } from "@app/data/table/root-table.class"; +import { VESSEL_FEATURE_NAME } from "../services/config/vessel.config"; +import { VesselFilter } from "../services/filter/vessel.filter"; +import { MatExpansionPanel } from "@angular/material/expansion"; +import { debounceTime, filter } from "rxjs/operators"; +export const VesselsTableSettingsEnum = { + TABLE_ID: 'vessels', + FEATURE_ID: VESSEL_FEATURE_NAME, +}; +let VesselsTable = class VesselsTable extends AppRootDataTable { + constructor(injector, formBuilder, accountService, settings, vesselService, referentialRefService, cd) { + super(injector, Vessel, VesselFilter, + // columns + ['status', 'vesselFeatures.exteriorMarking', 'vesselRegistrationPeriod.registrationCode'] + .concat(settings.mobile ? [] : ['vesselFeatures.startDate', 'vesselFeatures.endDate']) + .concat(['vesselFeatures.name', 'vesselType', 'vesselFeatures.basePortLocation']) + .concat(settings.mobile ? [] : ['comments']), vesselService, null, { + prependNewElements: false, + suppressErrors: environment.production, + saveOnlyDirtyRows: true, + watchAllOptions: { + fetchPolicy: 'cache-and-network', + }, + }); + this.accountService = accountService; + this.settings = settings; + this.vesselService = vesselService; + this.referentialRefService = referentialRefService; + this.cd = cd; + this.statusList = StatusList; + this.statusById = StatusById; + this.onSearchBarChanged = new EventEmitter(); + this.showFabButton = false; + this.showError = true; + this.useSticky = true; + this.disableStatusFilter = false; + this.showVesselTypeFilter = true; + this.showSearchbar = false; + this.showToolbarFilterButton = true; + this.i18nColumnPrefix = 'VESSEL.'; + this.defaultSortBy = 'vesselFeatures.exteriorMarking'; + this.defaultSortDirection = 'asc'; + this.filterForm = formBuilder.group({ + program: [null, SharedValidators.entity], + basePortLocation: [null, SharedValidators.entity], + registrationLocation: [null, SharedValidators.entity], + vesselType: [null, SharedValidators.entity], + date: [null, SharedValidators.validDate], + searchText: [null], + statusId: [null], + synchronizationStatus: [null], + onlyWithRegistration: [null], + }); + this.searchTextControl = this.filterForm.get('searchText'); + this.inlineEdition = false; + this.confirmBeforeDelete = true; + this.autoLoad = false; + this.showIdColumn = accountService.isAdmin(); + this.debug = !environment.production; + } + set showIdColumn(value) { + this.setShowColumn('id', value); + } + get showIdColumn() { + return this.getShowColumn('id'); + } + set showVesselTypeColumn(value) { + this.setShowColumn('vesselType', value); + } + get showVesselTypeColumn() { + return this.getShowColumn('vesselType'); + } + set showBasePortLocationColumn(value) { + this.setShowColumn('vesselFeatures.basePortLocation', value); + } + get showBasePortLocationColumn() { + return this.getShowColumn('vesselFeatures.basePortLocation'); + } + get searchText() { + return this.searchTextControl.value; + } + ngOnInit() { + // Use a fixed value, to be able to restore settings. + // Keep a special case when filter's status field is disable (to avoid a restoration the status column - e.g. in select vessel modal) + this.settingsId = VesselsTableSettingsEnum.TABLE_ID + (this.disableStatusFilter ? '_statusFilterDisabled' : ''); + this.featureName = VesselsTableSettingsEnum.FEATURE_ID; + super.ngOnInit(); + // Locations + const locationAttributes = this.settings.getFieldDisplayAttributes('location'); + // Base port locations + this.registerAutocompleteField('basePortLocation', { + attributes: locationAttributes, + service: this.referentialRefService, + filter: { + entityName: 'Location', + levelId: LocationLevelIds.PORT, + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE], + }, + mobile: this.mobile, + }); + // Registration locations + this.registerAutocompleteField('registrationLocation', { + attributes: locationAttributes, + service: this.referentialRefService, + filter: { + entityName: 'Location', + levelId: LocationLevelIds.COUNTRY, + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE], + }, + mobile: this.mobile, + }); + // Vessel type + this.registerAutocompleteField('vesselType', { + attributes: ['name'], + service: this.referentialRefService, + filter: { + entityName: 'VesselType', + statusIds: [StatusIds.TEMPORARY, StatusIds.ENABLE], + }, + mobile: this.mobile, + }); + // Restore filter from settings, or load all + this.ready().then(() => this.restoreFilterOrLoad()); + } + ionSearchBarChanged(event) { + // Applying the filter, on any changes + if (!this.onSearchBarChanged.observed) { + this.registerSubscription(this.onSearchBarChanged + .pipe(filter((_) => !this.filterExpansionPanel.expanded), tap((_) => this.markAsLoading()), debounceTime(650)) + .subscribe((searchText) => this.patchFilter({ searchText }))); + } + const value = trimEmptyToNull(event === null || event === void 0 ? void 0 : event.detail.value); + this.onSearchBarChanged.emit(value); + } + openNewRowDetail() { + return __awaiter(this, void 0, void 0, function* () { + if (this.loading) + return Promise.resolve(false); + const defaultStatus = this.synchronizationStatus !== 'SYNC' ? StatusIds.TEMPORARY : undefined; + const modal = yield this.modalCtrl.create({ + component: VesselModal, + componentProps: { + defaultStatus, + synchronizationStatus: this.synchronizationStatus !== 'SYNC' ? SynchronizationStatusEnum.DIRTY : undefined, + canEditStatus: isNil(defaultStatus), + }, + backdropDismiss: false, + cssClass: 'modal-large', + }); + yield modal.present(); + const { data } = yield modal.onDidDismiss(); + // if new vessel added, refresh the table + if (isNotNil(data)) + this.onRefresh.emit(); + return true; + }); + } + resetFilter(event) { + const defaultFilter = { + statusId: this.disableStatusFilter ? this.filter.statusId : undefined, + vesselType: !this.showVesselTypeFilter ? this.filter.vesselType : undefined, + synchronizationStatus: this.synchronizationStatus, + }; + // Keep searchbar text + if (this.showSearchbar && this.showToolbar) { + defaultFilter.searchText = this.searchText; + } + super.resetFilter(defaultFilter); + } + clearFilterStatus(event) { + if (event) { + event.preventDefault(); + event.stopPropagation(); + } + this.filterForm.patchValue({ statusId: null }); + } + /* -- protected methods -- */ + setFilter(filter, opts) { + if (isNotNil(this.vesselTypeId)) { + super.setFilter(Object.assign(Object.assign({}, filter), { vesselType: { id: this.vesselTypeId } }), opts); + } + else { + super.setFilter(filter, opts); + } + } + countNotEmptyCriteria(filter) { + return super.countNotEmptyCriteria(filter) + // Remove fixed value + - (this.disableStatusFilter && (isNotNil(filter.statusId) || isNotEmptyArray(filter.statusIds)) ? 1 : 0) + - (!this.showVesselTypeFilter && ReferentialUtils.isNotEmpty(filter.vesselType) ? 1 : 0); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + Input(), + __metadata("design:type", Boolean) +], VesselsTable.prototype, "canDelete", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], VesselsTable.prototype, "showFabButton", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], VesselsTable.prototype, "showError", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], VesselsTable.prototype, "useSticky", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], VesselsTable.prototype, "disableStatusFilter", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], VesselsTable.prototype, "showVesselTypeFilter", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], VesselsTable.prototype, "showSearchbar", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], VesselsTable.prototype, "showToolbarFilterButton", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], VesselsTable.prototype, "vesselTypeId", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], VesselsTable.prototype, "showIdColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], VesselsTable.prototype, "showVesselTypeColumn", null); +__decorate([ + Input(), + __metadata("design:type", Boolean), + __metadata("design:paramtypes", [Boolean]) +], VesselsTable.prototype, "showBasePortLocationColumn", null); +__decorate([ + ViewChild(MatExpansionPanel, { static: true }), + __metadata("design:type", MatExpansionPanel) +], VesselsTable.prototype, "filterExpansionPanel", void 0); +VesselsTable = __decorate([ + Component({ + selector: 'app-vessels-table', + templateUrl: 'vessels.table.html', + styleUrls: ['./vessels.table.scss'], + providers: [{ provide: ValidatorService, useClass: VesselValidatorService }], + changeDetection: ChangeDetectionStrategy.OnPush, + }), + __metadata("design:paramtypes", [Injector, + UntypedFormBuilder, + AccountService, + LocalSettingsService, + VesselService, + ReferentialRefService, + ChangeDetectorRef]) +], VesselsTable); +export { VesselsTable }; +//# sourceMappingURL=vessels.table.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/list/vessels.table.js.map b/out-tsc/app/app/vessel/list/vessels.table.js.map new file mode 100644 index 000000000..516efcbd5 --- /dev/null +++ b/out-tsc/app/app/vessel/list/vessels.table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessels.table.js","sourceRoot":"","sources":["../../../../../src/app/vessel/list/vessels.table.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/modal/select-vessel.modal.js b/out-tsc/app/app/vessel/modal/select-vessel.modal.js new file mode 100644 index 000000000..d8807da08 --- /dev/null +++ b/out-tsc/app/app/vessel/modal/select-vessel.modal.js @@ -0,0 +1,127 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, ViewChild, ViewEncapsulation, } from '@angular/core'; +import { ModalController } from '@ionic/angular'; +import { VesselFilter } from '@app/vessel/services/filter/vessel.filter'; +import { VesselsTable } from '@app/vessel/list/vessels.table'; +import { isEmptyArray, isNil, isNotNil, toBoolean } from '@sumaris-net/ngx-components'; +import { VesselSnapshot } from '@app/referential/services/model/vessel-snapshot.model'; +import { Subscription } from 'rxjs'; +let SelectVesselsModal = class SelectVesselsModal { + constructor(viewCtrl, cd) { + this.viewCtrl = viewCtrl; + this.cd = cd; + this.subscription = new Subscription(); + this.titleI18n = 'VESSEL.SELECT_MODAL.TITLE'; + this.vesselFilter = null; + } + get loading() { + var _a; + return (_a = this.vesselsTable) === null || _a === void 0 ? void 0 : _a.loading; + } + get canValidate() { + return this.hasSelection(); + } + ngOnInit() { + var _a, _b; + // Set defaults + this.showVesselTypeColumn = toBoolean(this.showVesselTypeColumn, false); + this.showBasePortLocationColumn = toBoolean(this.showBasePortLocationColumn, true); + this.disableStatusFilter = toBoolean(this.disableStatusFilter, true); + this.showVesselTypeFilter = toBoolean(this.showVesselTypeFilter, isNil((_b = (_a = this.vesselFilter) === null || _a === void 0 ? void 0 : _a.vesselType) === null || _b === void 0 ? void 0 : _b.id)); + this.vesselsTable.dataSource.watchAllOptions = Object.assign(Object.assign({}, this.vesselsTable.dataSource.watchAllOptions), { fetchPolicy: 'no-cache' }); + } + ngAfterViewInit() { + setTimeout(() => { + // Init vessel table filter + this.vesselsTable.filter = this.vesselFilter; + this.vesselsTable.v; + this.vesselsTable.markAsReady(); + }); + } + ngOnDestroy() { + this.subscription.unsubscribe(); + } + selectRow(row) { + return __awaiter(this, void 0, void 0, function* () { + if (row && this.vesselsTable) { + this.vesselsTable.selection.clear(); + this.vesselsTable.selection.select(row); + } + }); + } + close(event) { + return __awaiter(this, void 0, void 0, function* () { + try { + let vessels; + if (this.hasSelection()) { + vessels = (this.vesselsTable.selection.selected || []) + .map(row => row.currentData) + .map(VesselSnapshot.fromVessel) + .filter(isNotNil); + } + if (isEmptyArray(vessels)) { + console.warn('[select-vessel-modal] no selection'); + } + this.viewCtrl.dismiss(vessels); + return true; + } + catch (err) { + // nothing to do + return false; + } + }); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.viewCtrl.dismiss(); + }); + } + hasSelection() { + var _a, _b; + return ((_a = this.vesselsTable) === null || _a === void 0 ? void 0 : _a.selection.hasValue()) && ((_b = this.vesselsTable) === null || _b === void 0 ? void 0 : _b.selection.selected.length) === 1; + } + markForCheck() { + this.cd.markForCheck(); + } +}; +__decorate([ + ViewChild('vesselsTable', { static: true }), + __metadata("design:type", VesselsTable) +], SelectVesselsModal.prototype, "vesselsTable", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], SelectVesselsModal.prototype, "titleI18n", void 0); +__decorate([ + Input(), + __metadata("design:type", VesselFilter) +], SelectVesselsModal.prototype, "vesselFilter", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectVesselsModal.prototype, "disableStatusFilter", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectVesselsModal.prototype, "showVesselTypeFilter", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectVesselsModal.prototype, "showVesselTypeColumn", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], SelectVesselsModal.prototype, "showBasePortLocationColumn", void 0); +SelectVesselsModal = __decorate([ + Component({ + selector: 'app-select-vessel-modal', + templateUrl: 'select-vessel.modal.html', + styleUrls: ['select-vessel.modal.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None + }), + __metadata("design:paramtypes", [ModalController, + ChangeDetectorRef]) +], SelectVesselsModal); +export { SelectVesselsModal }; +//# sourceMappingURL=select-vessel.modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/modal/select-vessel.modal.js.map b/out-tsc/app/app/vessel/modal/select-vessel.modal.js.map new file mode 100644 index 000000000..aefbbb8e5 --- /dev/null +++ b/out-tsc/app/app/vessel/modal/select-vessel.modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"select-vessel.modal.js","sourceRoot":"","sources":["../../../../../src/app/vessel/modal/select-vessel.modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/modal/vessel-modal.js b/out-tsc/app/app/vessel/modal/vessel-modal.js new file mode 100644 index 000000000..040b22a88 --- /dev/null +++ b/out-tsc/app/app/vessel/modal/vessel-modal.js @@ -0,0 +1,173 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Component, Input, ViewChild } from '@angular/core'; +import { Vessel } from '../services/model/vessel.model'; +import { IonContent, ModalController } from '@ionic/angular'; +import { VesselForm } from '../form/form-vessel'; +import { VesselService } from '../services/vessel-service'; +import { AppFormUtils, ConfigService, isNil, isNilOrBlank, isNotNil, ReferentialRef } from '@sumaris-net/ngx-components'; +import { Subscription } from 'rxjs'; +import { VESSEL_CONFIG_OPTIONS } from '@app/vessel/services/config/vessel.config'; +import { ReferentialRefService } from '@app/referential/services/referential-ref.service'; +let VesselModal = class VesselModal { + constructor(vesselService, configService, referentialRefService, viewCtrl) { + this.vesselService = vesselService; + this.configService = configService; + this.referentialRefService = referentialRefService; + this.viewCtrl = viewCtrl; + this.loading = false; + this.subscription = new Subscription(); + this.canEditStatus = true; + this.synchronizationStatus = null; + } + get disabled() { + return this.formVessel.disabled; + } + get enabled() { + return this.formVessel.enabled; + } + get valid() { + return this.formVessel.valid; + } + ngOnInit() { + this.enable(); // Enable the vessel form, by default + if (isNotNil(this.defaultStatus)) { + this.formVessel.defaultStatus = this.defaultStatus; + } + if (isNotNil(this.defaultRegistrationLocation)) { + this.formVessel.defaultRegistrationLocation = this.defaultRegistrationLocation; + } + if (isNotNil(this.withNameRequired)) { + this.formVessel.withNameRequired = this.withNameRequired; + } + if (isNil(this.defaultStatus) || isNil(this.defaultRegistrationLocation) || isNil(this.withNameRequired)) { + // Get default status by config + this.subscription.add(this.configService.config.subscribe((config) => __awaiter(this, void 0, void 0, function* () { + if (config && config.properties) { + if (isNil(this.defaultStatus)) { + const defaultStatus = config.properties[VESSEL_CONFIG_OPTIONS.VESSEL_DEFAULT_STATUS.key]; + if (defaultStatus) { + this.formVessel.defaultStatus = +defaultStatus; + } + } + if (isNil(this.defaultRegistrationLocation)) { + const defaultRegistrationLocationId = config.getPropertyAsInt(VESSEL_CONFIG_OPTIONS.VESSEL_FILTER_DEFAULT_COUNTRY_ID); + if (defaultRegistrationLocationId) { + this.formVessel.defaultRegistrationLocation = yield this.referentialRefService.loadById(defaultRegistrationLocationId, 'Location'); + } + } + if (isNil(this.withNameRequired)) { + this.withNameRequired = config.getPropertyAsBoolean(VESSEL_CONFIG_OPTIONS.VESSEL_NAME_REQUIRED); + this.formVessel.withNameRequired = this.withNameRequired; + } + this.formVessel.basePortLocationSuggestLengthThreshold = config.getPropertyAsInt(VESSEL_CONFIG_OPTIONS.VESSEL_BASE_PORT_LOCATION_SEARCH_TEXT_MIN_LENGTH); + } + }))); + } + } + ngOnDestroy() { + this.subscription.unsubscribe(); + } + onSave(event) { + return __awaiter(this, void 0, void 0, function* () { + console.debug('[vessel-modal] Saving new vessel...'); + // Avoid multiple call + if (this.disabled) + return; + yield AppFormUtils.waitWhilePending(this.formVessel); + if (this.formVessel.invalid) { + this.formVessel.markAllAsTouched(); + AppFormUtils.logFormErrors(this.formVessel.form); + return; + } + this.loading = true; + try { + const json = this.formVessel.value; + const data = Vessel.fromObject(json); + // Applying the input synchronisation status, if any (need for offline storage) + if (this.synchronizationStatus) { + data.synchronizationStatus = this.synchronizationStatus; + } + // If vessel name is not required and blank, copy exterior marking on name field + if (isNotNil(this.withNameRequired) && !this.withNameRequired && isNotNil(data.vesselFeatures) && isNilOrBlank(data.vesselFeatures.name)) { + data.vesselFeatures.name = data.vesselFeatures.exteriorMarking; + } + this.disable(); + this.formVessel.error = null; + const savedData = yield this.vesselService.save(data); + return yield this.viewCtrl.dismiss(savedData); + } + catch (err) { + this.formVessel.error = err && err.message || err; + this.enable(); + this.loading = false; + this.scrollToTop(); + } + }); + } + disable() { + this.formVessel.disable(); + } + enable() { + this.formVessel.enable(); + } + cancel() { + this.viewCtrl.dismiss(); + } + onReset(event) { + this.formVessel.setValue(Vessel.fromObject({})); + this.formVessel.markAsPristine(); + this.formVessel.markAsUntouched(); + this.scrollToTop(); + } + scrollToTop(duration) { + return __awaiter(this, void 0, void 0, function* () { + if (this.content) { + return this.content.scrollToTop(duration); + } + }); + } +}; +__decorate([ + Input(), + __metadata("design:type", Number) +], VesselModal.prototype, "defaultStatus", void 0); +__decorate([ + Input(), + __metadata("design:type", ReferentialRef) +], VesselModal.prototype, "defaultRegistrationLocation", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], VesselModal.prototype, "canEditStatus", void 0); +__decorate([ + Input(), + __metadata("design:type", Boolean) +], VesselModal.prototype, "withNameRequired", void 0); +__decorate([ + Input(), + __metadata("design:type", Object) +], VesselModal.prototype, "maxDate", void 0); +__decorate([ + Input(), + __metadata("design:type", String) +], VesselModal.prototype, "synchronizationStatus", void 0); +__decorate([ + ViewChild(VesselForm, { static: true }), + __metadata("design:type", VesselForm) +], VesselModal.prototype, "formVessel", void 0); +__decorate([ + ViewChild(IonContent, { static: true }), + __metadata("design:type", IonContent) +], VesselModal.prototype, "content", void 0); +VesselModal = __decorate([ + Component({ + selector: 'app-vessel-modal', + templateUrl: './vessel-modal.html' + }), + __metadata("design:paramtypes", [VesselService, + ConfigService, + ReferentialRefService, + ModalController]) +], VesselModal); +export { VesselModal }; +//# sourceMappingURL=vessel-modal.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/modal/vessel-modal.js.map b/out-tsc/app/app/vessel/modal/vessel-modal.js.map new file mode 100644 index 000000000..e7fe5766d --- /dev/null +++ b/out-tsc/app/app/vessel/modal/vessel-modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel-modal.js","sourceRoot":"","sources":["../../../../../src/app/vessel/modal/vessel-modal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/page/vessel-features-history.component.js b/out-tsc/app/app/vessel/page/vessel-features-history.component.js new file mode 100644 index 000000000..883d98acc --- /dev/null +++ b/out-tsc/app/app/vessel/page/vessel-features-history.component.js @@ -0,0 +1,63 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector } from '@angular/core'; +import { AppTable } from '@sumaris-net/ngx-components'; +import { VesselFeatures } from '../services/model/vessel.model'; +import { AccountService } from '@sumaris-net/ngx-components'; +import { LocalSettingsService } from '@sumaris-net/ngx-components'; +import { EntitiesTableDataSource } from '@sumaris-net/ngx-components'; +import { VesselFeaturesService } from '../services/vessel-features.service'; +import { referentialToString } from '@sumaris-net/ngx-components'; +import { environment } from '@environments/environment'; +let VesselFeaturesHistoryComponent = class VesselFeaturesHistoryComponent extends AppTable { + constructor(injector, accountService, settings, dataService, cd) { + super(injector, + // columns + ['id', + 'startDate', + 'endDate', + 'exteriorMarking', + 'name', + 'administrativePower', + 'lengthOverAll', + 'grossTonnageGt', + 'constructionYear', + 'ircs', + 'basePortLocation', + 'comments'], new EntitiesTableDataSource(VesselFeatures, dataService, null, { + prependNewElements: false, + suppressErrors: environment.production, + saveOnlyDirtyRows: true + }), null); + this.accountService = accountService; + this.settings = settings; + this.cd = cd; + this.referentialToString = referentialToString; + this.i18nColumnPrefix = 'VESSEL.'; + this.autoLoad = false; + this.inlineEdition = false; + this.confirmBeforeDelete = true; + this.debug = !environment.production; + } + ngOnInit() { + super.ngOnInit(); + this.isAdmin = this.accountService.isAdmin(); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +VesselFeaturesHistoryComponent = __decorate([ + Component({ + selector: 'app-vessel-features-history-table', + templateUrl: './vessel-features-history.component.html', + styleUrls: ['./vessel-features-history.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + AccountService, + LocalSettingsService, + VesselFeaturesService, + ChangeDetectorRef]) +], VesselFeaturesHistoryComponent); +export { VesselFeaturesHistoryComponent }; +//# sourceMappingURL=vessel-features-history.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/page/vessel-features-history.component.js.map b/out-tsc/app/app/vessel/page/vessel-features-history.component.js.map new file mode 100644 index 000000000..8c525891b --- /dev/null +++ b/out-tsc/app/app/vessel/page/vessel-features-history.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel-features-history.component.js","sourceRoot":"","sources":["../../../../../src/app/vessel/page/vessel-features-history.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAS,MAAM,eAAe,CAAC;AACtG,OAAO,EAAC,QAAQ,EAAC,MAAO,6BAA6B,CAAC;AACtD,OAAO,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AAI9D,OAAO,EAAC,cAAc,EAAC,MAAO,6BAA6B,CAAC;AAC5D,OAAO,EAAC,oBAAoB,EAAC,MAAO,6BAA6B,CAAC;AAClE,OAAO,EAAC,uBAAuB,EAAC,MAAO,6BAA6B,CAAC;AACrE,OAAO,EAAC,qBAAqB,EAAC,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAC,mBAAmB,EAAC,MAAO,6BAA6B,CAAC;AACjE,OAAO,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AAS/C,IAAM,8BAA8B,GAApC,MAAM,8BAA+B,SAAQ,QAA8C;IAKhG,YACE,QAAkB,EACR,cAA8B,EAC9B,QAA8B,EACxC,WAAkC,EACxB,EAAqB;QAG/B,KAAK,CAAC,QAAQ;QACZ,UAAU;QACV,CAAC,IAAI;YACH,WAAW;YACX,SAAS;YACT,iBAAiB;YACjB,MAAM;YACN,qBAAqB;YACrB,eAAe;YACf,gBAAgB;YAChB,kBAAkB;YAClB,MAAM;YACN,kBAAkB;YAClB,UAAU,CAAC,EACb,IAAI,uBAAuB,CAAiB,cAAc,EAAE,WAAW,EAAE,IAAI,EAAE;YAC7E,kBAAkB,EAAE,KAAK;YACzB,cAAc,EAAE,WAAW,CAAC,UAAU;YACtC,iBAAiB,EAAE,IAAI;SACxB,CAAC,EACF,IAAI,CACL,CAAC;QA1BQ,mBAAc,GAAd,cAAc,CAAgB;QAC9B,aAAQ,GAAR,QAAQ,CAAsB;QAE9B,OAAE,GAAF,EAAE,CAAmB;QARjC,wBAAmB,GAAG,mBAAmB,CAAC;QAiCxC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAElC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAEhC,IAAI,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;IACvC,CAAC;IAED,QAAQ;QACN,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IAC/C,CAAC;IAES,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;CAEF,CAAA;AAtDY,8BAA8B;IAN1C,SAAS,CAAC;QACT,QAAQ,EAAE,mCAAmC;QAC7C,WAAW,EAAE,0CAA0C;QACvD,SAAS,EAAE,CAAC,0CAA0C,CAAC;QACvD,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAOY,QAAQ;QACQ,cAAc;QACpB,oBAAoB;QAC3B,qBAAqB;QACpB,iBAAiB;GAVtB,8BAA8B,CAsD1C;SAtDY,8BAA8B"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/page/vessel-registration-history.component.js b/out-tsc/app/app/vessel/page/vessel-registration-history.component.js new file mode 100644 index 000000000..88746a464 --- /dev/null +++ b/out-tsc/app/app/vessel/page/vessel-registration-history.component.js @@ -0,0 +1,52 @@ +import { __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector } from '@angular/core'; +import { AccountService, AppTable, EntitiesTableDataSource, LocalSettingsService, referentialToString } from '@sumaris-net/ngx-components'; +import { VesselRegistrationService } from '../services/vessel-registration.service'; +import { VesselRegistrationPeriod } from '../services/model/vessel.model'; +import { environment } from '@environments/environment'; +let VesselRegistrationHistoryComponent = class VesselRegistrationHistoryComponent extends AppTable { + constructor(injector, accountService, settings, dataService, cd) { + super(injector, + // columns + ['id', + 'startDate', + 'endDate', + 'registrationCode', + 'intRegistrationCode', + 'registrationLocation'], new EntitiesTableDataSource(VesselRegistrationPeriod, dataService, null, { + prependNewElements: false, + suppressErrors: environment.production, + saveOnlyDirtyRows: true + }), null); + this.accountService = accountService; + this.settings = settings; + this.cd = cd; + this.referentialToString = referentialToString; + this.i18nColumnPrefix = 'VESSEL.'; + this.autoLoad = false; + this.inlineEdition = false; + this.confirmBeforeDelete = true; + } + ngOnInit() { + super.ngOnInit(); + this.isAdmin = this.accountService.isAdmin(); + } + markForCheck() { + this.cd.markForCheck(); + } +}; +VesselRegistrationHistoryComponent = __decorate([ + Component({ + selector: 'app-vessel-registration-history-table', + templateUrl: './vessel-registration-history.component.html', + styleUrls: ['./vessel-registration-history.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + AccountService, + LocalSettingsService, + VesselRegistrationService, + ChangeDetectorRef]) +], VesselRegistrationHistoryComponent); +export { VesselRegistrationHistoryComponent }; +//# sourceMappingURL=vessel-registration-history.component.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/page/vessel-registration-history.component.js.map b/out-tsc/app/app/vessel/page/vessel-registration-history.component.js.map new file mode 100644 index 000000000..ffb1f1d9c --- /dev/null +++ b/out-tsc/app/app/vessel/page/vessel-registration-history.component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel-registration-history.component.js","sourceRoot":"","sources":["../../../../../src/app/vessel/page/vessel-registration-history.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAU,MAAM,eAAe,CAAC;AACxG,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAC3I,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AASjD,IAAM,kCAAkC,GAAxC,MAAM,kCAAmC,SAAQ,QAA4D;IAKlH,YACE,QAAkB,EACR,cAA8B,EAC9B,QAA8B,EACxC,WAAsC,EAC5B,EAAqB;QAG/B,KAAK,CAAC,QAAQ;QACZ,UAAU;QACV,CAAC,IAAI;YACH,WAAW;YACX,SAAS;YACT,kBAAkB;YAClB,qBAAqB;YACrB,sBAAsB,CAAC,EAEzB,IAAI,uBAAuB,CAA2B,wBAAwB,EAAE,WAAW,EAAE,IAAI,EAAE;YACjG,kBAAkB,EAAE,KAAK;YACzB,cAAc,EAAE,WAAW,CAAC,UAAU;YACtC,iBAAiB,EAAE,IAAI;SACxB,CAAC,EACF,IAAI,CACL,CAAC;QArBQ,mBAAc,GAAd,cAAc,CAAgB;QAC9B,aAAQ,GAAR,QAAQ,CAAsB;QAE9B,OAAE,GAAF,EAAE,CAAmB;QARjC,wBAAmB,GAAG,mBAAmB,CAAC;QA4BxC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAElC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAElC,CAAC;IAED,QAAQ;QACN,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IAC/C,CAAC;IAES,YAAY;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;CACF,CAAA;AA/CY,kCAAkC;IAN9C,SAAS,CAAC;QACT,QAAQ,EAAE,uCAAuC;QACjD,WAAW,EAAE,8CAA8C;QAC3D,SAAS,EAAE,CAAC,8CAA8C,CAAC;QAC3D,eAAe,EAAE,uBAAuB,CAAC,MAAM;KAChD,CAAC;qCAOY,QAAQ;QACQ,cAAc;QACpB,oBAAoB;QAC3B,yBAAyB;QACxB,iBAAiB;GAVtB,kCAAkC,CA+C9C;SA/CY,kCAAkC"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/page/vessel.page.js b/out-tsc/app/app/vessel/page/vessel.page.js new file mode 100644 index 000000000..d840bd80b --- /dev/null +++ b/out-tsc/app/app/vessel/page/vessel.page.js @@ -0,0 +1,294 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { ChangeDetectionStrategy, Component, Injector, ViewChild } from '@angular/core'; +import { VesselService } from '../services/vessel-service'; +import { VesselForm } from '../form/form-vessel'; +import { Vessel } from '../services/model/vessel.model'; +import { AccountService, Alerts, AppEntityEditor, ConfigService, EntityUtils, isNil, isNotNilOrNaN, NetworkService, PlatformService, referentialToString, SharedValidators, StatusIds } from '@sumaris-net/ngx-components'; +import { Validators } from '@angular/forms'; +import { VesselFeaturesHistoryComponent } from './vessel-features-history.component'; +import { VesselRegistrationHistoryComponent } from './vessel-registration-history.component'; +import { VesselFeaturesFilter, VesselRegistrationFilter } from '../services/filter/vessel.filter'; +import { VesselFeaturesService } from '../services/vessel-features.service'; +import { VesselRegistrationService } from '../services/vessel-registration.service'; +import { MomentDateAdapter } from '@angular/material-moment-adapter'; +import moment from 'moment'; +import { VesselSnapshot } from '@app/referential/services/model/vessel-snapshot.model'; +import { ModalController } from '@ionic/angular'; +import { SelectVesselsModal } from '@app/vessel/modal/select-vessel.modal'; +import { VESSEL_CONFIG_OPTIONS } from '@app/vessel/services/config/vessel.config'; +let VesselPage = class VesselPage extends AppEntityEditor { + constructor(injector, vesselService, platform, network, accountService, vesselFeaturesService, vesselRegistrationService, dateAdapter, modalCtrl, configService) { + super(injector, Vessel, vesselService, { + tabCount: 2 + }); + this.network = network; + this.accountService = accountService; + this.vesselFeaturesService = vesselFeaturesService; + this.vesselRegistrationService = vesselRegistrationService; + this.dateAdapter = dateAdapter; + this.modalCtrl = modalCtrl; + this.configService = configService; + this._editing = false; + this.isNewFeatures = false; + this.isNewRegistration = false; + this.mobile = false; + this.replacementEnabled = false; + this.temporaryStatusId = StatusIds.TEMPORARY; + this.defaultBackHref = '/vessels'; + this.mobile = platform.mobile; + } + get editing() { + return this._editing || this.isNewFeatures || this.isNewRegistration; + } + set editing(value) { + if (!value) { + this.isNewFeatures = false; + this.isNewRegistration = false; + } + this._editing = value; + } + get form() { + return this.vesselForm.form; + } + ngOnInit() { + // Make sure template has a form + if (!this.form) + throw new Error('No form for value setting'); + this.form.disable(); + this.registerSubscription(this.configService.config.subscribe((config) => { + this.replacementEnabled = config.getPropertyAsBoolean(VESSEL_CONFIG_OPTIONS.TEMPORARY_VESSEL_REPLACEMENT_ENABLE); + })); + super.ngOnInit(); + } + ngAfterViewInit() { + super.ngAfterViewInit(); + this.registerSubscription(this.onUpdateView.subscribe(() => { + if (isNotNilOrNaN(this.data.id)) { + this.featuresHistoryTable.setFilter(VesselFeaturesFilter.fromObject({ vesselId: this.data.id }), { emitEvent: true }); + this.registrationHistoryTable.setFilter(VesselRegistrationFilter.fromObject({ vesselId: this.data.id }), { emitEvent: true }); + } + })); + } + registerForms() { + this.addChildForm(this.vesselForm); + } + onNewEntity(data, options) { + return __awaiter(this, void 0, void 0, function* () { + // If is on field mode, fill default values + if (this.isOnFieldMode) { + data.vesselFeatures.startDate = moment(); + data.vesselRegistrationPeriod.startDate = moment(); + } + this.markAsReady(); + }); + } + onEntityLoaded(data, options) { + return __awaiter(this, void 0, void 0, function* () { + this.markAsReady(); + }); + } + updateViewState(data, opts) { + super.updateViewState(data, opts); + this.form.disable(); + this.editing = false; + this.previousVessel = undefined; + } + canUserWrite(data) { + // Cannot edit a remote entity, when offline (e.g. when vessel was loaded from the local entity storage) + if (this.network.offline && EntityUtils.isRemote(data)) { + return false; + } + return !this.editing && this.accountService.canUserWriteDataForDepartment(data.recorderDepartment); + } + setValue(data) { + // Set data to form + this.vesselForm.value = data; + } + getFirstInvalidTabIndex() { + return this.vesselForm.invalid ? 0 : -1; + } + computeTitle(data) { + return __awaiter(this, void 0, void 0, function* () { + if (this.isNewData) { + return yield this.translate.get('VESSEL.NEW.TITLE').toPromise(); + } + return yield this.translate.get('VESSEL.EDIT.TITLE', data.vesselFeatures).toPromise(); + }); + } + computePageHistory(title) { + const _super = Object.create(null, { + computePageHistory: { get: () => super.computePageHistory } + }); + return __awaiter(this, void 0, void 0, function* () { + return Object.assign(Object.assign({}, (yield _super.computePageHistory.call(this, title))), { icon: 'boat', subtitle: 'MENU.VESSELS' }); + }); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.reloadWithConfirmation(); + }); + } + reload() { + return __awaiter(this, void 0, void 0, function* () { + this.markAsLoading(); + yield this.load(this.data && this.data.id); + }); + } + editFeatures() { + return __awaiter(this, void 0, void 0, function* () { + this.editing = true; + this.previousVessel = undefined; + this.form.enable(); + // Start date + const featureStartDate = this.form.get('vesselFeatures.startDate').value; + const canEditStartDate = isNil(featureStartDate) + || (yield this.vesselFeaturesService.count({ vesselId: this.data.id }, { fetchPolicy: 'cache-first' })); + if (!canEditStartDate) { + this.form.get('vesselFeatures.startDate').disable(); + } + // disable registration controls + this.form.get('vesselRegistrationPeriod').disable(); + this.form.get('statusId').disable(); + }); + } + newFeatures() { + this.isNewFeatures = true; + const json = this.form.value; + this.previousVessel = Vessel.fromObject(json); + this.form.setValue(Object.assign(Object.assign({}, json), { vesselFeatures: Object.assign(Object.assign({}, json.vesselFeatures), { id: null, startDate: null, endDate: null }) })); + this.form.get('vesselFeatures.startDate').setValidators([ + Validators.required, + SharedValidators.dateIsAfter(this.previousVessel.vesselFeatures.startDate, this.dateAdapter.format(this.previousVessel.vesselFeatures.startDate, this.translate.instant('COMMON.DATE_PATTERN')), 'day') + ]); + this.form.enable(); + this.form.get('vesselRegistrationPeriod').disable(); + this.form.get('statusId').disable(); + } + editRegistration() { + return __awaiter(this, void 0, void 0, function* () { + this.editing = true; + this.previousVessel = undefined; + this.form.enable(); + // Start date + const registrationStartDate = this.form.get('vesselRegistrationPeriod.startDate').value; + const canEditStartDate = isNil(registrationStartDate) + || (yield this.vesselRegistrationService.count({ vesselId: this.data.id }, { fetchPolicy: 'cache-first' })) <= 1; + if (!canEditStartDate) { + this.form.get('vesselRegistrationPeriod.startDate').disable(); + } + // disable features controls + this.form.get('vesselFeatures').disable(); + this.form.get('vesselType').disable(); + this.form.get('statusId').disable(); + }); + } + newRegistration() { + this.isNewRegistration = true; + const json = this.form.value; + this.previousVessel = Vessel.fromObject(json); + this.form.setValue(Object.assign(Object.assign({}, json), { vesselRegistrationPeriod: Object.assign(Object.assign({}, json.vesselRegistrationPeriod), { id: null, registrationCode: null, intRegistrationCode: null, startDate: null, endDate: null }) })); + this.form.get('vesselRegistrationPeriod.startDate').setValidators([ + Validators.required, + SharedValidators.dateIsAfter(this.previousVessel.vesselRegistrationPeriod.startDate, this.dateAdapter.format(this.previousVessel.vesselRegistrationPeriod.startDate, this.translate.instant('COMMON.DATE_PATTERN')), 'day') + ]); + this.form.enable(); + this.form.get('vesselFeatures').disable(); + this.form.get('vesselType').disable(); + this.form.get('statusId').disable(); + } + editStatus() { + this.editing = true; + this.previousVessel = undefined; + this.form.enable(); + // disable features controls + this.form.get('vesselFeatures').disable(); + this.form.get('vesselRegistrationPeriod').disable(); + this.form.get('vesselType').disable(); + } + replace(event) { + return __awaiter(this, void 0, void 0, function* () { + const modal = yield this.modalCtrl.create({ + component: SelectVesselsModal, + componentProps: { + titleI18n: 'VESSEL.SELECT_MODAL.REPLACE_TITLE', + vesselFilter: { + statusId: StatusIds.ENABLE, + onlyWithRegistration: true + }, + disableStatusFilter: true, + showVesselTypeColumn: true, + showBasePortLocationColumn: true, + }, + keyboardClose: true, + cssClass: 'modal-large' + }); + // Open the modal + yield modal.present(); + // Wait until closed + const { data } = yield modal.onDidDismiss(); + if (data && data[0] instanceof VesselSnapshot) { + console.debug('[vessel] Vessel selection modal result:', data); + const vessel = data[0]; + if (yield Alerts.askConfirmation('VESSEL.ACTION.REPLACE_CONFIRMATION', this.alertCtrl, this.translate, event, { vessel: referentialToString(vessel, ['registrationCode', 'name']) })) { + try { + yield this.service.replaceTemporaryVessel([this.data.id], vessel.id); + yield this.goBack(undefined); + } + catch (e) { + yield Alerts.showError(e.message, this.alertCtrl, this.translate); + } + } + } + else { + console.debug('[vessel] Vessel selection modal was cancelled'); + } + }); + } + save(event, options) { + const _super = Object.create(null, { + save: { get: () => super.save } + }); + return __awaiter(this, void 0, void 0, function* () { + const saved = yield _super.save.call(this, event, { + previousVessel: this.previousVessel, + isNewFeatures: this.isNewFeatures, + isNewRegistration: this.isNewRegistration + }); + return saved; + }); + } + getJsonValueToSave() { + return this.form.getRawValue(); + } +}; +__decorate([ + ViewChild('vesselForm', { static: true }), + __metadata("design:type", VesselForm) +], VesselPage.prototype, "vesselForm", void 0); +__decorate([ + ViewChild('featuresHistoryTable', { static: true }), + __metadata("design:type", VesselFeaturesHistoryComponent) +], VesselPage.prototype, "featuresHistoryTable", void 0); +__decorate([ + ViewChild('registrationHistoryTable', { static: true }), + __metadata("design:type", VesselRegistrationHistoryComponent) +], VesselPage.prototype, "registrationHistoryTable", void 0); +VesselPage = __decorate([ + Component({ + selector: 'app-vessel-page', + templateUrl: './vessel.page.html', + changeDetection: ChangeDetectionStrategy.OnPush + }), + __metadata("design:paramtypes", [Injector, + VesselService, + PlatformService, + NetworkService, + AccountService, + VesselFeaturesService, + VesselRegistrationService, + MomentDateAdapter, + ModalController, + ConfigService]) +], VesselPage); +export { VesselPage }; +//# sourceMappingURL=vessel.page.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/page/vessel.page.js.map b/out-tsc/app/app/vessel/page/vessel.page.js.map new file mode 100644 index 000000000..2d89e49c1 --- /dev/null +++ b/out-tsc/app/app/vessel/page/vessel.page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel.page.js","sourceRoot":"","sources":["../../../../../src/app/vessel/page/vessel.page.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/config/vessel.config.js b/out-tsc/app/app/vessel/services/config/vessel.config.js new file mode 100644 index 000000000..c17879239 --- /dev/null +++ b/out-tsc/app/app/vessel/services/config/vessel.config.js @@ -0,0 +1,110 @@ +import { StatusIds } from '@sumaris-net/ngx-components'; +import { LocationLevelIds } from '@app/referential/services/model/model.enum'; +export const VESSEL_FEATURE_NAME = 'vessel'; +export const VESSEL_GRAPHQL_TYPE_POLICIES = { + VesselSnapshotVO: { + keyFields: ['id' /*, 'vesselId'*/] + }, +}; +export const VESSEL_CONFIG_OPTIONS = { + VESSEL_DEFAULT_STATUS: { + key: 'sumaris.vessel.status.default', + label: 'CONFIGURATION.OPTIONS.VESSEL.DEFAULT_NEW_VESSEL_STATUS', + type: 'enum', + values: [ + { + key: StatusIds.ENABLE.toString(), + value: 'REFERENTIAL.STATUS_ENUM.ENABLE' + }, + { + key: StatusIds.TEMPORARY.toString(), + value: 'REFERENTIAL.STATUS_ENUM.TEMPORARY' + } + ] + }, + VESSEL_FILTER_DEFAULT_COUNTRY_ID: { + key: 'sumaris.vessel.filter.registrationCountry.id', + label: 'CONFIGURATION.OPTIONS.VESSEL.DEFAULT_FILTER_COUNTRY_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { entityName: 'Location', statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], levelId: LocationLevelIds.COUNTRY } + }, + }, + VESSEL_FILTER_DEFAULT_TYPE_ID: { + key: 'sumaris.vessel.filter.type.id', + label: 'CONFIGURATION.OPTIONS.VESSEL.DEFAULT_FILTER_TYPE_ID', + type: 'entity', + autocomplete: { + attributes: ['id', 'name'], + filter: { entityName: 'VesselType', statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY] } + }, + }, + VESSEL_FILTER_MIN_LENGTH: { + key: 'sumaris.vessel.filter.searchText.minLength', + label: 'CONFIGURATION.OPTIONS.VESSEL.FILTER_SEARCH_TEXT_MIN_LENGTH', + type: 'integer', + defaultValue: 0 + }, + VESSEL_FILTER_SEARCH_REGISTRATION_CODE_AS_PREFIX: { + key: 'sumaris.persistence.vessel.registrationCode.searchAsPrefix', + label: 'CONFIGURATION.OPTIONS.VESSEL.REGISTRATION_CODE_SEARCH_AS_PREFIX', + type: 'boolean', + defaultValue: true + }, + VESSEL_BASE_PORT_LOCATION_VISIBLE: { + key: 'sumaris.vessel.field.showBasePortLocation', + label: 'CONFIGURATION.OPTIONS.VESSEL.BASE_PORT_LOCATION_VISIBLE', + type: 'boolean', + defaultValue: false + }, + VESSEL_BASE_PORT_LOCATION_SEARCH_TEXT_MIN_LENGTH: { + key: 'sumaris.vessel.basePortLocation.filter.searchText.minLength', + label: 'CONFIGURATION.OPTIONS.VESSEL.BASE_PORT_LOCATION_FILTER_SEARCH_TEXT_MIN_LENGTH', + type: 'integer', + defaultValue: 0 + }, + VESSEL_NAME_REQUIRED: { + key: 'sumaris.persistence.vessel.name.required', + label: 'CONFIGURATION.OPTIONS.VESSEL.NAME_REQUIRED', + type: 'boolean', + defaultValue: true + }, + VESSEL_REGISTRATION_CODE_NATURAL_ORDER_ENABLE: { + key: 'sumaris.persistence.vessel.registrationCode.naturalOrder.enable', + label: 'CONFIGURATION.OPTIONS.VESSEL.REGISTRATION_CODE_NATURAL_ORDER_ENABLE', + type: 'boolean', + defaultValue: false + }, + REFERENTIAL_VESSEL_ENABLE: { + key: 'sumaris.referential.vessel.enable', + label: 'REFERENTIAL.OPTIONS.VESSELS_ENABLE', + type: 'boolean', + defaultValue: false + }, + REFERENTIAL_VESSEL_IMPORT_ENABLE: { + key: 'sumaris.referential.vessel.import.enable', + label: 'REFERENTIAL.OPTIONS.VESSELS_IMPORT_ENABLE', + type: 'boolean', + defaultValue: false + }, + TEMPORARY_VESSEL_REPLACEMENT_ENABLE: { + key: 'sumaris.referential.vessel.replacement.enable', + label: 'REFERENTIAL.OPTIONS.VESSELS_REPLACEMENT_ENABLE', + type: 'boolean', + defaultValue: false + }, +}; +export const VESSEL_LOCAL_SETTINGS_OPTIONS = Object.freeze({ + // Display attributes for vessel + FIELD_VESSEL_SNAPSHOT_ATTRIBUTES: { + key: 'sumaris.field.vesselSnapshot.attributes', + label: 'SETTINGS.FIELDS.VESSEL.NAME', + type: 'enum', + values: [ + { key: 'exteriorMarking,name', value: 'SETTINGS.FIELDS.VESSEL.ATTRIBUTES.EXTERIOR_MARKING_NAME' }, + { key: 'registrationCode,name', value: 'SETTINGS.FIELDS.VESSEL.ATTRIBUTES.REGISTRATION_CODE_NAME' } + ] + } +}); +//# sourceMappingURL=vessel.config.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/config/vessel.config.js.map b/out-tsc/app/app/vessel/services/config/vessel.config.js.map new file mode 100644 index 000000000..63a95db46 --- /dev/null +++ b/out-tsc/app/app/vessel/services/config/vessel.config.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel.config.js","sourceRoot":"","sources":["../../../../../../src/app/vessel/services/config/vessel.config.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/errors.js b/out-tsc/app/app/vessel/services/errors.js new file mode 100644 index 000000000..6d97f69c2 --- /dev/null +++ b/out-tsc/app/app/vessel/services/errors.js @@ -0,0 +1,5 @@ +export const VesselErrorCodes = { + REPLACE_VESSEL_ERROR: 220, + SIOP_IMPORT_ERROR: 221 +}; +//# sourceMappingURL=errors.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/errors.js.map b/out-tsc/app/app/vessel/services/errors.js.map new file mode 100644 index 000000000..07c360e04 --- /dev/null +++ b/out-tsc/app/app/vessel/services/errors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../../src/app/vessel/services/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,oBAAoB,EAAE,GAAG;IACzB,iBAAiB,EAAE,GAAG;CACvB,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/filter/vessel.filter.js b/out-tsc/app/app/vessel/services/filter/vessel.filter.js new file mode 100644 index 000000000..08e63f9f4 --- /dev/null +++ b/out-tsc/app/app/vessel/services/filter/vessel.filter.js @@ -0,0 +1,131 @@ +var VesselFilter_1; +import { __decorate } from "tslib"; +import { EntityClass, EntityFilter, EntityUtils, fromDateISOString, isNotEmptyArray, isNotNil, isNotNilOrBlank, ReferentialRef, toDateISOString } from '@sumaris-net/ngx-components'; +import { RootDataEntityFilter } from '@app/data/services/model/root-data-filter.model'; +let VesselFilter = VesselFilter_1 = class VesselFilter extends RootDataEntityFilter { + fromObject(source, opts) { + super.fromObject(source, opts); + this.searchText = source.searchText; + this.searchAttributes = source.searchAttributes || undefined; + this.date = fromDateISOString(source.date); + this.vesselId = source.vesselId; + this.statusId = source.statusId; + this.statusIds = source.statusIds; + this.onlyWithRegistration = source.onlyWithRegistration; + this.registrationLocation = ReferentialRef.fromObject(source.registrationLocation) || + isNotNilOrBlank(source.registrationLocationId) && ReferentialRef.fromObject({ id: source.registrationLocationId }) || undefined; + this.basePortLocation = ReferentialRef.fromObject(source.basePortLocation) || + isNotNilOrBlank(source.basePortLocationId) && ReferentialRef.fromObject({ id: source.basePortLocationId }) || undefined; + this.vesselType = ReferentialRef.fromObject(source.vesselType) || + isNotNilOrBlank(source.vesselTypeId) && ReferentialRef.fromObject({ id: source.vesselTypeId }) || undefined; + } + asObject(opts) { + var _a, _b, _c, _d, _e, _f; + const target = super.asObject(opts); + target.date = toDateISOString(this.date); + if (opts && opts.minify) { + target.statusIds = isNotNil(this.statusId) ? [this.statusId] : this.statusIds; + delete target.statusId; + target.registrationLocationId = (_a = this.registrationLocation) === null || _a === void 0 ? void 0 : _a.id; + delete target.registrationLocation; + target.basePortLocationId = (_b = this.basePortLocation) === null || _b === void 0 ? void 0 : _b.id; + delete target.basePortLocation; + target.vesselTypeId = (_c = this.vesselType) === null || _c === void 0 ? void 0 : _c.id; + delete target.vesselType; + if (target.onlyWithRegistration !== true) + delete target.onlyWithRegistration; + } + else { + target.registrationLocation = (_d = this.registrationLocation) === null || _d === void 0 ? void 0 : _d.asObject(opts); + target.basePortLocation = (_e = this.basePortLocation) === null || _e === void 0 ? void 0 : _e.asObject(opts); + target.vesselType = (_f = this.vesselType) === null || _f === void 0 ? void 0 : _f.asObject(opts); + } + return target; + } + buildFilter() { + var _a, _b, _c; + const filterFns = super.buildFilter(); + // Vessel id + if (isNotNil(this.vesselId)) { + filterFns.push(t => t.id === this.vesselId); + } + // Status + const statusIds = isNotNil(this.statusId) ? [this.statusId] : this.statusIds; + if (isNotEmptyArray(statusIds)) { + filterFns.push(t => statusIds.includes(t.statusId)); + } + // Only with registration + if (this.onlyWithRegistration) { + filterFns.push(t => isNotNil(t.vesselRegistrationPeriod)); + } + // registration location + const registrationLocationId = (_a = this.registrationLocation) === null || _a === void 0 ? void 0 : _a.id; + if (isNotNil(registrationLocationId)) { + filterFns.push(t => { var _a, _b; return (((_b = (_a = t.vesselRegistrationPeriod) === null || _a === void 0 ? void 0 : _a.registrationLocation) === null || _b === void 0 ? void 0 : _b.id) === registrationLocationId); }); + } + // base port location + const basePortLocationId = (_b = this.basePortLocation) === null || _b === void 0 ? void 0 : _b.id; + if (isNotNil(basePortLocationId)) { + filterFns.push(t => { var _a, _b; return (((_b = (_a = t.vesselFeatures) === null || _a === void 0 ? void 0 : _a.basePortLocation) === null || _b === void 0 ? void 0 : _b.id) === basePortLocationId); }); + } + // Vessel type + const vesselTypeId = (_c = this.vesselType) === null || _c === void 0 ? void 0 : _c.id; + if (isNotNil(vesselTypeId)) { + filterFns.push(t => { var _a; return (((_a = t.vesselType) === null || _a === void 0 ? void 0 : _a.id) === vesselTypeId); }); + } + const searchTextFilter = EntityUtils.searchTextFilter(this.searchAttributes || ['vesselFeatures.exteriorMarking', 'vesselRegistrationPeriod.registrationCode', 'vesselFeatures.name'], this.searchText); + if (searchTextFilter) + filterFns.push(searchTextFilter); + return filterFns; + } + isCriteriaNotEmpty(key, value) { + return !VesselFilter_1.EXCLUDE_CRITERIA_COUNT.includes(key) + && super.isCriteriaNotEmpty(key, value); + } +}; +VesselFilter.EXCLUDE_CRITERIA_COUNT = ['statusIds', 'onlyWithRegistration']; +VesselFilter = VesselFilter_1 = __decorate([ + EntityClass({ typename: 'VesselFilterVO' }) +], VesselFilter); +export { VesselFilter }; +let VesselFeaturesFilter = class VesselFeaturesFilter extends EntityFilter { + fromObject(source, opts) { + super.fromObject(source, opts); + this.vesselId = source.vesselId; + } + buildFilter() { + const filterFns = super.buildFilter(); + if (isNotNil(this.vesselId)) { + filterFns.push((e) => e.vesselId === this.vesselId); + } + return filterFns; + } +}; +VesselFeaturesFilter = __decorate([ + EntityClass({ typename: 'VesselFeaturesFilterVO' }) +], VesselFeaturesFilter); +export { VesselFeaturesFilter }; +let VesselRegistrationFilter = class VesselRegistrationFilter extends EntityFilter { + fromObject(source, opts) { + super.fromObject(source, opts); + this.vesselId = source.vesselId; + } + asObject(opts) { + return { + vesselId: this.vesselId + }; + } + buildFilter() { + const filterFns = super.buildFilter(); + if (isNotNil(this.vesselId)) { + const vesselId = this.vesselId; + filterFns.push((e) => e.vesselId === vesselId); + } + return filterFns; + } +}; +VesselRegistrationFilter = __decorate([ + EntityClass({ typename: 'VesselRegistrationFilterVO' }) +], VesselRegistrationFilter); +export { VesselRegistrationFilter }; +//# sourceMappingURL=vessel.filter.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/filter/vessel.filter.js.map b/out-tsc/app/app/vessel/services/filter/vessel.filter.js.map new file mode 100644 index 000000000..3a75f1168 --- /dev/null +++ b/out-tsc/app/app/vessel/services/filter/vessel.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel.filter.js","sourceRoot":"","sources":["../../../../../../src/app/vessel/services/filter/vessel.filter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/model/vessel.model.js b/out-tsc/app/app/vessel/services/model/vessel.model.js new file mode 100644 index 000000000..5d9c8613c --- /dev/null +++ b/out-tsc/app/app/vessel/services/model/vessel.model.js @@ -0,0 +1,172 @@ +var Vessel_1, VesselFeatures_1, VesselRegistrationPeriod_1; +import { __decorate, __metadata } from "tslib"; +import { DateUtils, Department, Entity, EntityClass, fromDateISOString, isNil, isNilOrBlank, isNotNil, Person, ReferentialRef, ReferentialUtils, toDateISOString } from '@sumaris-net/ngx-components'; +import { RootDataEntity } from '@app/data/services/model/root-data-entity.model'; +import { NOT_MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +let Vessel = Vessel_1 = class Vessel extends RootDataEntity { + constructor() { + super(Vessel_1.TYPENAME); + this.vesselType = null; + this.statusId = null; + this.vesselFeatures = null; + this.vesselRegistrationPeriod = null; + } + // TODO : Check if clone is needed + clone() { + const target = new Vessel_1(); + this.copy(target); + target.vesselType = this.vesselType && this.vesselType.clone() || undefined; + target.program = this.program && this.program.clone() || undefined; + target.vesselFeatures = this.vesselFeatures && this.vesselFeatures.clone() || undefined; + target.vesselRegistrationPeriod = this.vesselRegistrationPeriod && this.vesselRegistrationPeriod.clone() || undefined; + target.recorderDepartment = this.recorderDepartment && this.recorderDepartment.clone() || undefined; + target.recorderPerson = this.recorderPerson && this.recorderPerson.clone() || undefined; + return target; + } + copy(target) { + target.fromObject(this); + return target; + } + fromObject(source) { + super.fromObject(source); + this.statusId = source.statusId; + this.vesselType = source.vesselType && ReferentialRef.fromObject(source.vesselType); + this.vesselFeatures = source.vesselFeatures && VesselFeatures.fromObject(source.vesselFeatures); + this.vesselRegistrationPeriod = source.vesselRegistrationPeriod && VesselRegistrationPeriod.fromObject(source.vesselRegistrationPeriod); + this.recorderDepartment = source.recorderDepartment && Department.fromObject(source.recorderDepartment); + } + asObject(options) { + const target = super.asObject(options); + target.vesselType = this.vesselType && this.vesselType.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS)) || undefined; + target.vesselFeatures = this.vesselFeatures && !this.vesselFeatures.empty && this.vesselFeatures.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS)) || undefined; + target.vesselRegistrationPeriod = this.vesselRegistrationPeriod && !this.vesselRegistrationPeriod.empty && this.vesselRegistrationPeriod.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS)) || undefined; + target.recorderDepartment = this.recorderDepartment && this.recorderDepartment.asObject(options) || undefined; + return target; + } + equals(other) { + return (super.equals(other) && isNotNil(this.id)) + && (this.vesselFeatures.id === other.vesselFeatures.id || this.vesselFeatures.startDate.isSame(other.vesselFeatures.startDate)) + && (this.vesselRegistrationPeriod.id === other.vesselRegistrationPeriod.id || this.vesselRegistrationPeriod.startDate.isSame(other.vesselRegistrationPeriod.startDate)); + } +}; +Vessel.ENTITY_NAME = 'Vessel'; +Vessel = Vessel_1 = __decorate([ + EntityClass({ typename: 'VesselVO' }), + __metadata("design:paramtypes", []) +], Vessel); +export { Vessel }; +let VesselFeatures = VesselFeatures_1 = class VesselFeatures extends Entity { + constructor() { + super(VesselFeatures_1.TYPENAME); + this.hullMaterial = null; + this.basePortLocation = null; + this.recorderDepartment = null; + this.recorderPerson = null; + } + get empty() { + return isNil(this.id) && isNilOrBlank(this.exteriorMarking) && isNilOrBlank(this.name) && isNil(this.startDate); + } + // TODO : Check if clone is needed + clone() { + const target = new VesselFeatures_1(); + this.copy(target); + target.hullMaterial = this.hullMaterial && this.hullMaterial.clone() || undefined; + target.basePortLocation = this.basePortLocation && this.basePortLocation.clone() || undefined; + target.vesselId = this.vesselId || undefined; + target.recorderDepartment = this.recorderDepartment && this.recorderDepartment.clone() || undefined; + target.recorderPerson = this.recorderPerson && this.recorderPerson.clone() || undefined; + return target; + } + copy(target) { + target.fromObject(this); + return target; + } + asObject(options) { + const target = super.asObject(options); + target.vesselId = this.vesselId; + target.hullMaterial = this.hullMaterial && this.hullMaterial.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS)) || undefined; + target.basePortLocation = this.basePortLocation && this.basePortLocation.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS)) || undefined; + target.startDate = toDateISOString(DateUtils.markTime(this.startDate)); + target.endDate = toDateISOString(DateUtils.markTime(this.endDate)); + target.creationDate = toDateISOString(this.creationDate); + target.recorderDepartment = this.recorderDepartment && this.recorderDepartment.asObject(options) || undefined; + target.recorderPerson = this.recorderPerson && this.recorderPerson.asObject(options) || undefined; + target.qualityFlagId = isNotNil(this.qualityFlagId) ? this.qualityFlagId : undefined; + return target; + } + fromObject(source) { + super.fromObject(source); + this.vesselId = source.vesselId; + this.exteriorMarking = source.exteriorMarking; + this.name = source.name; + this.comments = source.comments || undefined; + this.startDate = fromDateISOString(source.startDate); + this.endDate = fromDateISOString(source.endDate); + this.administrativePower = source.administrativePower; + this.lengthOverAll = source.lengthOverAll; + this.grossTonnageGt = source.grossTonnageGt; + this.grossTonnageGrt = source.grossTonnageGrt; + this.constructionYear = source.constructionYear; + this.ircs = source.ircs; + this.hullMaterial = source.hullMaterial && ReferentialRef.fromObject(source.hullMaterial); + this.basePortLocation = source.basePortLocation && ReferentialRef.fromObject(source.basePortLocation); + this.recorderDepartment = source.recorderDepartment && Department.fromObject(source.recorderDepartment); + this.recorderPerson = source.recorderPerson && Person.fromObject(source.recorderPerson); + this.creationDate = fromDateISOString(source.creationDate); + this.qualityFlagId = source.qualityFlagId; + } +}; +VesselFeatures = VesselFeatures_1 = __decorate([ + EntityClass({ typename: 'VesselFeaturesVO' }), + __metadata("design:paramtypes", []) +], VesselFeatures); +export { VesselFeatures }; +let VesselRegistrationPeriod = VesselRegistrationPeriod_1 = class VesselRegistrationPeriod extends Entity { + constructor() { + super(VesselRegistrationPeriod_1.TYPENAME); + this.vesselId = null; + this.startDate = null; + this.endDate = null; + this.registrationCode = null; + this.intRegistrationCode = null; + this.registrationLocation = null; + } + get empty() { + return isNil(this.id) && isNilOrBlank(this.registrationCode) && isNilOrBlank(this.intRegistrationCode) + && ReferentialUtils.isEmpty(this.registrationLocation) + && isNil(this.startDate); + } + // TODO : Check if clone is needed + clone() { + const target = new VesselRegistrationPeriod_1(); + this.copy(target); + target.registrationLocation = this.registrationLocation && this.registrationLocation.clone() || undefined; + return target; + } + copy(target) { + target.fromObject(this); + return target; + } + asObject(options) { + const target = super.asObject(options); + target.registrationLocation = this.registrationLocation && this.registrationLocation.asObject(Object.assign(Object.assign({}, options), NOT_MINIFY_OPTIONS)) || undefined; + target.startDate = toDateISOString(DateUtils.markTime(this.startDate)); + target.endDate = toDateISOString(DateUtils.markTime(this.endDate)); + return target; + } + fromObject(source) { + super.fromObject(source); + this.registrationCode = source.registrationCode; + this.intRegistrationCode = source.intRegistrationCode; + this.vesselId = source.vesselId; + this.startDate = fromDateISOString(source.startDate); + this.endDate = fromDateISOString(source.endDate); + this.registrationLocation = source.registrationLocation && ReferentialRef.fromObject(source.registrationLocation) || undefined; + } +}; +VesselRegistrationPeriod = VesselRegistrationPeriod_1 = __decorate([ + EntityClass({ typename: 'VesselRegistrationPeriodVO' }), + __metadata("design:paramtypes", []) +], VesselRegistrationPeriod); +export { VesselRegistrationPeriod }; +//# sourceMappingURL=vessel.model.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/model/vessel.model.js.map b/out-tsc/app/app/vessel/services/model/vessel.model.js.map new file mode 100644 index 000000000..5402c6597 --- /dev/null +++ b/out-tsc/app/app/vessel/services/model/vessel.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel.model.js","sourceRoot":"","sources":["../../../../../../src/app/vessel/services/model/vessel.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/validator/vessel-features.validator.js b/out-tsc/app/app/vessel/services/validator/vessel-features.validator.js new file mode 100644 index 000000000..8fa460eb9 --- /dev/null +++ b/out-tsc/app/app/vessel/services/validator/vessel-features.validator.js @@ -0,0 +1,77 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { QualityFlagIds } from '@app/referential/services/model/model.enum'; +import { VesselFeatures } from '../model/vessel.model'; +import { fromDateISOString, SharedValidators, toBoolean, toNumber } from '@sumaris-net/ngx-components'; +import { DateAdapter } from '@angular/material/core'; +import { TranslateService } from '@ngx-translate/core'; +let VesselFeaturesValidatorService = class VesselFeaturesValidatorService { + constructor(formBuilder, dateAdapter, translate) { + this.formBuilder = formBuilder; + this.dateAdapter = dateAdapter; + this.translate = translate; + } + getRowValidator() { + return this.getFormGroup(); + } + getFormGroup(data, opts) { + opts = this.fillDefaultOptions(opts); + return this.formBuilder.group({ + __typename: [VesselFeatures.TYPENAME], + id: [toNumber(data === null || data === void 0 ? void 0 : data.id, null)], + updateDate: [(data === null || data === void 0 ? void 0 : data.updateDate) || null], + creationDate: [(data === null || data === void 0 ? void 0 : data.creationDate) || null], + startDate: [(data === null || data === void 0 ? void 0 : data.startDate) || null, Validators.required], + endDate: [(data === null || data === void 0 ? void 0 : data.endDate) || null], + name: [(data === null || data === void 0 ? void 0 : data.name) || null, opts.withNameRequired ? Validators.compose([Validators.required, Validators.maxLength(100)]) : Validators.maxLength(100)], + exteriorMarking: [(data === null || data === void 0 ? void 0 : data.exteriorMarking) || null, Validators.compose([Validators.required, Validators.maxLength(100)])], + administrativePower: [toNumber(data === null || data === void 0 ? void 0 : data.administrativePower, null), Validators.compose([Validators.min(0), SharedValidators.integer])], + lengthOverAll: [toNumber(data === null || data === void 0 ? void 0 : data.lengthOverAll, null), Validators.compose([Validators.min(0), SharedValidators.decimal({ maxDecimals: 2 })])], + grossTonnageGrt: [toNumber(data === null || data === void 0 ? void 0 : data.grossTonnageGrt, null), Validators.compose([Validators.min(0), SharedValidators.decimal({ maxDecimals: 2 })])], + grossTonnageGt: [toNumber(data === null || data === void 0 ? void 0 : data.grossTonnageGt, null), Validators.compose([Validators.min(0), SharedValidators.decimal({ maxDecimals: 2 })])], + constructionYear: [toNumber(data === null || data === void 0 ? void 0 : data.constructionYear, null), Validators.compose([Validators.min(1900), SharedValidators.integer])], + ircs: [(data === null || data === void 0 ? void 0 : data.ircs) || null], + hullMaterial: [(data === null || data === void 0 ? void 0 : data.hullMaterial) || null, SharedValidators.entity], + basePortLocation: [(data === null || data === void 0 ? void 0 : data.basePortLocation) || null, Validators.compose([Validators.required, SharedValidators.entity])], + comments: [(data === null || data === void 0 ? void 0 : data.comments) || null, Validators.maxLength(2000)], + qualityFlagId: [data && data.qualityFlagId || QualityFlagIds.NOT_QUALIFIED] + }); + } + updateFormGroup(form, opts) { + opts = this.fillDefaultOptions(opts); + const nameControl = form.get('name'); + const startDateControl = form.get('startDate'); + if (opts.withNameRequired) { + nameControl.setValidators(Validators.required); + } + else { + nameControl.clearValidators(); + } + nameControl.updateValueAndValidity({ emitEvent: false }); + if (opts.maxDate) { + const maxDate = fromDateISOString(opts.maxDate); + const maxDateStr = this.dateAdapter.format(maxDate, this.translate.instant('COMMON.DATE_TIME_PATTERN')); + startDateControl.setValidators(Validators.compose([ + SharedValidators.dateIsBefore(opts.maxDate, maxDateStr, 'day'), + Validators.required + ])); + } + else { + startDateControl.setValidators(Validators.required); + } + } + fillDefaultOptions(opts) { + opts = opts || {}; + opts.withNameRequired = toBoolean(opts.withNameRequired, true); + return opts; + } +}; +VesselFeaturesValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + DateAdapter, + TranslateService]) +], VesselFeaturesValidatorService); +export { VesselFeaturesValidatorService }; +//# sourceMappingURL=vessel-features.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/validator/vessel-features.validator.js.map b/out-tsc/app/app/vessel/services/validator/vessel-features.validator.js.map new file mode 100644 index 000000000..21300fd86 --- /dev/null +++ b/out-tsc/app/app/vessel/services/validator/vessel-features.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel-features.validator.js","sourceRoot":"","sources":["../../../../../../src/app/vessel/services/validator/vessel-features.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/validator/vessel-registration.validator.js b/out-tsc/app/app/vessel/services/validator/vessel-registration.validator.js new file mode 100644 index 000000000..8051f4ac2 --- /dev/null +++ b/out-tsc/app/app/vessel/services/validator/vessel-registration.validator.js @@ -0,0 +1,55 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { VesselRegistrationPeriod } from '../model/vessel.model'; +import { fromDateISOString, SharedValidators, toNumber } from '@sumaris-net/ngx-components'; +import { DateAdapter } from '@angular/material/core'; +import { TranslateService } from '@ngx-translate/core'; +let VesselRegistrationValidatorService = class VesselRegistrationValidatorService { + constructor(formBuilder, dateAdapter, translate) { + this.formBuilder = formBuilder; + this.dateAdapter = dateAdapter; + this.translate = translate; + } + getRowValidator() { + return this.getFormGroup(); + } + getFormGroup(data, opts) { + return this.formBuilder.group({ + __typename: [VesselRegistrationPeriod.TYPENAME], + id: [toNumber(data && data.id, null)], + startDate: [(data === null || data === void 0 ? void 0 : data.startDate) || null, opts && opts.required ? Validators.required : null], + endDate: [(data === null || data === void 0 ? void 0 : data.endDate) || null], + registrationCode: [(data === null || data === void 0 ? void 0 : data.registrationCode) || null, opts && opts.required ? Validators.required : null], + intRegistrationCode: [(data === null || data === void 0 ? void 0 : data.intRegistrationCode) || null], + registrationLocation: [(data === null || data === void 0 ? void 0 : data.registrationLocation) || null, opts && opts.required ? Validators.compose([Validators.required, SharedValidators.entity]) : SharedValidators.entity] + }); + } + updateFormGroup(form, opts) { + const startDateControl = form.get('startDate'); + if (opts && opts.maxDate) { + const maxDate = fromDateISOString(opts.maxDate); + const maxDateStr = this.dateAdapter.format(maxDate, this.translate.instant('COMMON.DATE_TIME_PATTERN')); + startDateControl.setValidators(opts.required + ? Validators.compose([ + SharedValidators.dateIsBefore(opts.maxDate, maxDateStr, 'day'), + Validators.required + ]) + : SharedValidators.dateIsBefore(opts.maxDate, maxDateStr, 'day')); + } + else if (opts && opts.required) { + startDateControl.setValidators(Validators.required); + } + else { + startDateControl.clearValidators(); + } + } +}; +VesselRegistrationValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + DateAdapter, + TranslateService]) +], VesselRegistrationValidatorService); +export { VesselRegistrationValidatorService }; +//# sourceMappingURL=vessel-registration.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/validator/vessel-registration.validator.js.map b/out-tsc/app/app/vessel/services/validator/vessel-registration.validator.js.map new file mode 100644 index 000000000..c5464eab7 --- /dev/null +++ b/out-tsc/app/app/vessel/services/validator/vessel-registration.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel-registration.validator.js","sourceRoot":"","sources":["../../../../../../src/app/vessel/services/validator/vessel-registration.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/validator/vessel.validator.js b/out-tsc/app/app/vessel/services/validator/vessel.validator.js new file mode 100644 index 000000000..aff15d149 --- /dev/null +++ b/out-tsc/app/app/vessel/services/validator/vessel.validator.js @@ -0,0 +1,54 @@ +import { __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; +import { Vessel } from '../model/vessel.model'; +import { SharedValidators, toBoolean, toNumber } from '@sumaris-net/ngx-components'; +import { VesselFeaturesValidatorService } from './vessel-features.validator'; +import { VesselRegistrationValidatorService } from './vessel-registration.validator'; +let VesselValidatorService = class VesselValidatorService { + constructor(formBuilder, vesselFeaturesValidator, vesselRegistrationPeriodValidator) { + this.formBuilder = formBuilder; + this.vesselFeaturesValidator = vesselFeaturesValidator; + this.vesselRegistrationPeriodValidator = vesselRegistrationPeriodValidator; + } + getRowValidator() { + return this.getFormGroup(); + } + getFormGroup(data, opts) { + return this.formBuilder.group({ + __typename: [Vessel.TYPENAME], + id: [toNumber(data === null || data === void 0 ? void 0 : data.id, null)], + updateDate: [(data === null || data === void 0 ? void 0 : data.updateDate) || null], + creationDate: [(data === null || data === void 0 ? void 0 : data.creationDate) || null], + vesselFeatures: this.vesselFeaturesValidator.getFormGroup(data === null || data === void 0 ? void 0 : data.vesselFeatures, opts), + vesselRegistrationPeriod: this.vesselRegistrationPeriodValidator.getFormGroup(data === null || data === void 0 ? void 0 : data.vesselRegistrationPeriod, { required: true }), + statusId: [toNumber(data === null || data === void 0 ? void 0 : data.statusId, null), Validators.required], + vesselType: [(data === null || data === void 0 ? void 0 : data.vesselType) || null, Validators.compose([Validators.required, SharedValidators.entity])], + }); + } + /** + * Update form group, with new options + * + * @param form + * @param opts + */ + updateFormGroup(form, opts) { + console.debug('[vessel-validator] Update form group with options', opts); + opts = this.fillDefaultOptions(opts); + this.vesselFeaturesValidator.updateFormGroup(form.get('vesselFeatures'), opts); + this.vesselRegistrationPeriodValidator.updateFormGroup(form.get('vesselRegistrationPeriod'), Object.assign({ required: true }, opts)); + } + fillDefaultOptions(opts) { + opts = opts || {}; + opts.withNameRequired = toBoolean(opts.withNameRequired, true); + return opts; + } +}; +VesselValidatorService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [UntypedFormBuilder, + VesselFeaturesValidatorService, + VesselRegistrationValidatorService]) +], VesselValidatorService); +export { VesselValidatorService }; +//# sourceMappingURL=vessel.validator.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/validator/vessel.validator.js.map b/out-tsc/app/app/vessel/services/validator/vessel.validator.js.map new file mode 100644 index 000000000..0b42c0a81 --- /dev/null +++ b/out-tsc/app/app/vessel/services/validator/vessel.validator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel.validator.js","sourceRoot":"","sources":["../../../../../../src/app/vessel/services/validator/vessel.validator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/vessel-features.service.js b/out-tsc/app/app/vessel/services/vessel-features.service.js new file mode 100644 index 000000000..597ac333a --- /dev/null +++ b/out-tsc/app/app/vessel/services/vessel-features.service.js @@ -0,0 +1,72 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { VesselFeatures } from './model/vessel.model'; +import { BaseEntityService, GraphqlService } from '@sumaris-net/ngx-components'; +import { ReferentialFragments } from '@app/referential/services/referential.fragments'; +import { VesselFeaturesFilter } from './filter/vessel.filter'; +import { PlatformService } from '@sumaris-net/ngx-components'; +import { isNotNil } from '@sumaris-net/ngx-components'; +export const VesselFeaturesFragments = { + vesselFeatures: gql `fragment VesselFeaturesFragment on VesselFeaturesVO { + id + startDate + endDate + name + exteriorMarking + administrativePower + lengthOverAll + grossTonnageGt + grossTonnageGrt + constructionYear + ircs + hullMaterial { + ...LightReferentialFragment + } + creationDate + updateDate + comments + basePortLocation { + ...LocationFragment + } + recorderDepartment { + ...LightDepartmentFragment + } + recorderPerson { + ...LightPersonFragment + } + }`, +}; +export const VesselFeatureQueries = { + loadAll: gql `query VesselFeaturesHistory($filter: VesselFeaturesFilterVOInput!, $offset: Int, $size: Int, $sortBy: String, $sortDirection: String){ + data: vesselFeaturesHistory(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + ...VesselFeaturesFragment + } + } + ${VesselFeaturesFragments.vesselFeatures} + ${ReferentialFragments.location} + ${ReferentialFragments.lightDepartment} + ${ReferentialFragments.lightPerson} + ${ReferentialFragments.lightReferential}` +}; +let VesselFeaturesService = class VesselFeaturesService extends BaseEntityService { + constructor(graphql, platform) { + super(graphql, platform, VesselFeatures, VesselFeaturesFilter, { + queries: VesselFeatureQueries, + defaultSortBy: 'startDate' + }); + } + count(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + const { data, total } = yield this.loadAll(0, 100, null, null, filter, opts); + return isNotNil(total) ? total : (data || []).length; + }); + } +}; +VesselFeaturesService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [GraphqlService, + PlatformService]) +], VesselFeaturesService); +export { VesselFeaturesService }; +//# sourceMappingURL=vessel-features.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/vessel-features.service.js.map b/out-tsc/app/app/vessel/services/vessel-features.service.js.map new file mode 100644 index 000000000..db0e839a8 --- /dev/null +++ b/out-tsc/app/app/vessel/services/vessel-features.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel-features.service.js","sourceRoot":"","sources":["../../../../../src/app/vessel/services/vessel-features.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAc,GAAG,EAAC,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAC,iBAAiB,EAAE,cAAc,EAAC,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAC,oBAAoB,EAAC,MAAM,iDAAiD,CAAC;AAErF,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAC,eAAe,EAAC,MAAO,6BAA6B,CAAC;AAC7D,OAAO,EAAC,QAAQ,EAAC,MAAM,6BAA6B,CAAC;AAErD,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACnC,cAAc,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;MA2BjB;CACL,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,OAAO,EAAE,GAAG,CAAA;;;;;IAKV,uBAAuB,CAAC,cAAc;IACtC,oBAAoB,CAAC,QAAQ;IAC7B,oBAAoB,CAAC,eAAe;IACpC,oBAAoB,CAAC,WAAW;IAChC,oBAAoB,CAAC,gBAAgB,EAAE;CAC1C,CAAC;AAGK,IAAM,qBAAqB,GAA3B,MAAM,qBACX,SAAQ,iBAAuD;IAG/D,YACE,OAAuB,EACvB,QAAyB;QAEzB,KAAK,CAAC,OAAO,EAAE,QAAQ,EACrB,cAAc,EAAE,oBAAoB,EAAE;YACpC,OAAO,EAAE,oBAAoB;YAC7B,aAAa,EAAE,WAAW;SAC3B,CAAC,CAAC;IACP,CAAC;IAEK,KAAK,CAAC,MAA0D,EAAE,IAEvE;;YACC,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC3E,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACvD,CAAC;KAAA;CAIF,CAAA;AAxBY,qBAAqB;IADjC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAMpB,cAAc;QACb,eAAe;GANhB,qBAAqB,CAwBjC;SAxBY,qBAAqB"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/vessel-registration.service.js b/out-tsc/app/app/vessel/services/vessel-registration.service.js new file mode 100644 index 000000000..cb44bcc7f --- /dev/null +++ b/out-tsc/app/app/vessel/services/vessel-registration.service.js @@ -0,0 +1,51 @@ +import { __awaiter, __decorate, __metadata } from "tslib"; +import { Injectable } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { VesselRegistrationPeriod } from './model/vessel.model'; +import { BaseEntityService, GraphqlService } from '@sumaris-net/ngx-components'; +import { ReferentialFragments } from '@app/referential/services/referential.fragments'; +import { PlatformService } from '@sumaris-net/ngx-components'; +import { VesselRegistrationFilter } from './filter/vessel.filter'; +import { isNotNil } from '@sumaris-net/ngx-components'; +export const VesselRegistrationFragments = { + registration: gql `fragment VesselRegistrationPeriodFragment on VesselRegistrationPeriodVO { + id + startDate + endDate + registrationCode + intRegistrationCode + registrationLocation { + ...LocationFragment + } + }` +}; +export const VesselRegistrationsQueries = { + loadAll: gql `query VesselRegistrationHistory($filter: VesselRegistrationFilterVOInput!, , $offset: Int, $size: Int, $sortBy: String, $sortDirection: String){ + data: vesselRegistrationHistory(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){ + ...VesselRegistrationPeriodFragment + } + } + ${VesselRegistrationFragments.registration} + ${ReferentialFragments.location}` +}; +let VesselRegistrationService = class VesselRegistrationService extends BaseEntityService { + constructor(graphql, platform) { + super(graphql, platform, VesselRegistrationPeriod, VesselRegistrationFilter, { + queries: VesselRegistrationsQueries, + defaultSortBy: 'startDate' + }); + } + count(filter, opts) { + return __awaiter(this, void 0, void 0, function* () { + const { data, total } = yield this.loadAll(0, 100, null, null, filter, opts); + return isNotNil(total) ? total : (data || []).length; + }); + } +}; +VesselRegistrationService = __decorate([ + Injectable({ providedIn: 'root' }), + __metadata("design:paramtypes", [GraphqlService, + PlatformService]) +], VesselRegistrationService); +export { VesselRegistrationService }; +//# sourceMappingURL=vessel-registration.service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/vessel-registration.service.js.map b/out-tsc/app/app/vessel/services/vessel-registration.service.js.map new file mode 100644 index 000000000..fb85f8775 --- /dev/null +++ b/out-tsc/app/app/vessel/services/vessel-registration.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel-registration.service.js","sourceRoot":"","sources":["../../../../../src/app/vessel/services/vessel-registration.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAc,GAAG,EAAC,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAC,wBAAwB,EAAC,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAC,iBAAiB,EAAE,cAAc,EAAC,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAC,oBAAoB,EAAC,MAAM,iDAAiD,CAAC;AACrF,OAAO,EAAC,eAAe,EAAC,MAAO,6BAA6B,CAAC;AAC7D,OAAO,EAAC,wBAAwB,EAAC,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAC,QAAQ,EAAC,MAAM,6BAA6B,CAAC;AAErD,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,YAAY,EAAE,GAAG,CAAA;;;;;;;;;IASf;CACH,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,OAAO,EAAE,GAAG,CAAA;;;;;IAKV,2BAA2B,CAAC,YAAY;IACxC,oBAAoB,CAAC,QAAQ,EAAE;CAClC,CAAC;AAGK,IAAM,yBAAyB,GAA/B,MAAM,yBACX,SAAQ,iBAAqE;IAE7E,YACE,OAAuB,EACvB,QAAyB;QAEzB,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,wBAAwB,EAAE,wBAAwB,EAAE;YAC3E,OAAO,EAAE,0BAA0B;YACnC,aAAa,EAAE,WAAW;SAC3B,CAAC,CAAC;IACL,CAAC;IAEK,KAAK,CAAC,MAA8D,EAAE,IAE3E;;YACC,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC3E,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACvD,CAAC;KAAA;CAIF,CAAA;AAtBY,yBAAyB;IADrC,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;qCAKpB,cAAc;QACb,eAAe;GALhB,yBAAyB,CAsBrC;SAtBY,yBAAyB"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/vessel-service.js b/out-tsc/app/app/vessel/services/vessel-service.js new file mode 100644 index 000000000..dd033c120 --- /dev/null +++ b/out-tsc/app/app/vessel/services/vessel-service.js @@ -0,0 +1,625 @@ +import { __awaiter, __decorate, __metadata, __param } from "tslib"; +import { Inject, Injectable, Injector, Optional } from '@angular/core'; +import { gql } from '@apollo/client/core'; +import { combineLatest, firstValueFrom } from 'rxjs'; +import { QualityFlagIds } from '@app/referential/services/model/model.enum'; +import { APP_JOB_PROGRESSION_SERVICE, Entity, EntityUtils, isEmptyArray, isNil, isNotEmptyArray, isNotNil, JobProgression, mergeLoadResult, MINIFY_ENTITY_FOR_LOCAL_STORAGE, Person, StatusIds, } from '@sumaris-net/ngx-components'; +import { map } from 'rxjs/operators'; +import { ReferentialFragments } from '@app/referential/services/referential.fragments'; +import { VesselFeatureQueries, VesselFeaturesFragments, VesselFeaturesService } from './vessel-features.service'; +import { VesselRegistrationFragments, VesselRegistrationService, VesselRegistrationsQueries } from './vessel-registration.service'; +import { Vessel } from './model/vessel.model'; +import { VesselSnapshot } from '@app/referential/services/model/vessel-snapshot.model'; +import { RootDataEntityUtils } from '@app/data/services/model/root-data-entity.model'; +import { RootDataSynchroService } from '@app/data/services/root-data-synchro-service.class'; +import { VESSEL_FEATURE_NAME } from './config/vessel.config'; +import { VesselFilter } from './filter/vessel.filter'; +import { environment } from '@environments/environment'; +import { VesselSnapshotFilter } from '@app/referential/services/filter/vessel.filter'; +import { DataErrorCodes } from '@app/data/services/errors'; +import { MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE } from '@app/data/services/model/data-entity.model'; +import { LandingService } from '@app/trip/landing/landing.service'; +import { TripService } from '@app/trip/trip/trip.service'; +import { OperationService } from '@app/trip/operation/operation.service'; +import { MINIFY_OPTIONS } from '@app/core/services/model/referential.utils'; +import { VesselErrorCodes } from '@app/vessel/services/errors'; +import { JobFragments } from '@app/social/job/job.service'; +import { Job } from '@app/social/job/job.model'; +import { TranslateService } from '@ngx-translate/core'; +export const VesselFragments = { + lightVessel: gql ` + fragment VesselFragment on VesselVO { + id + comments + statusId + creationDate + controlDate + validationDate + qualificationDate + qualificationComments + updateDate + comments + program { + id + label + } + vesselType { + ...LightReferentialFragment + } + vesselFeatures { + ...VesselFeaturesFragment + } + vesselRegistrationPeriod { + ...VesselRegistrationPeriodFragment + } + recorderDepartment { + ...LightDepartmentFragment + } + recorderPerson { + ...LightPersonFragment + } + } + `, + vessel: gql ` + fragment VesselFragment on VesselVO { + id + comments + statusId + creationDate + controlDate + validationDate + qualificationDate + qualificationComments + updateDate + comments + program { + id + label + } + vesselType { + ...LightReferentialFragment + } + vesselFeatures { + ...VesselFeaturesFragment + } + vesselRegistrationPeriod { + ...VesselRegistrationPeriodFragment + } + recorderDepartment { + ...LightDepartmentFragment + } + recorderPerson { + ...LightPersonFragment + } + } + `, +}; +const VesselQueries = { + load: gql `query Vessel($id: Int!) { + data: vessel(id: $id) { + ...VesselFragment + } + } + ${VesselFragments.vessel} + ${VesselFeaturesFragments.vesselFeatures} + ${VesselRegistrationFragments.registration} + ${ReferentialFragments.location} + ${ReferentialFragments.lightDepartment} + ${ReferentialFragments.lightPerson} + ${ReferentialFragments.lightReferential}`, + loadAllWithTotal: gql `query Vessels($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: VesselFilterVOInput){ + data: vessels(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...VesselFragment + } + total: vesselsCount(filter: $filter) + } + ${VesselFragments.vessel} + ${VesselFeaturesFragments.vesselFeatures} + ${VesselRegistrationFragments.registration} + ${ReferentialFragments.location} + ${ReferentialFragments.lightDepartment} + ${ReferentialFragments.lightPerson} + ${ReferentialFragments.lightReferential}`, + loadAll: gql `query Vessels($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: VesselFilterVOInput){ + data: vessels(offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection, filter: $filter){ + ...VesselFragment + } + } + ${VesselFragments.vessel} + ${VesselFeaturesFragments.vesselFeatures} + ${VesselRegistrationFragments.registration} + ${ReferentialFragments.location} + ${ReferentialFragments.lightDepartment} + ${ReferentialFragments.lightPerson} + ${ReferentialFragments.lightReferential}`, + importSiopFile: gql `query ImportVesselSiopFile($fileName: String) { + data: importSiopVessels(fileName: $fileName) { + ...LightJobFragment + } + } + ${JobFragments.light}` +}; +const VesselMutations = { + saveAll: gql `mutation SaveVessels($data:[VesselVOInput]!){ + data: saveVessels(vessels: $data){ + ...VesselFragment + } + } + ${VesselFragments.vessel} + ${VesselFeaturesFragments.vesselFeatures} + ${VesselRegistrationFragments.registration} + ${ReferentialFragments.location} + ${ReferentialFragments.lightDepartment} + ${ReferentialFragments.lightPerson} + ${ReferentialFragments.lightReferential}`, + deleteAll: gql `mutation DeleteVessels($ids:[Int]!){ + deleteVessels(ids: $ids) + }`, + replaceAll: gql `mutation ReplaceVessels($temporaryVesselIds: [Int]!, $validVesselId: Int!) { + replaceVessels(temporaryVesselIds: $temporaryVesselIds, validVesselId: $validVesselId) + }` +}; +let VesselService = class VesselService extends RootDataSynchroService { + constructor(injector, vesselFeatureService, vesselRegistrationService, landingService, tripService, operationService, translate, jobProgressionService) { + super(injector, Vessel, VesselFilter, { + queries: VesselQueries, + mutations: VesselMutations, + equalsFn: (e1, e2) => this.vesselEquals(e1, e2) + }); + this.vesselFeatureService = vesselFeatureService; + this.vesselRegistrationService = vesselRegistrationService; + this.landingService = landingService; + this.tripService = tripService; + this.operationService = operationService; + this.translate = translate; + this.jobProgressionService = jobProgressionService; + this._featureName = VESSEL_FEATURE_NAME; + this._debug = !environment.production; + this._logPrefix = '[vessel-service]'; + } + vesselEquals(e1, e2) { + var _a, _b, _c, _d; + return e1 && e2 && ( + // check id equals + e1.id === e2.id || + // or exteriorMarking and registrationCode equals + (((_a = e1.vesselFeatures) === null || _a === void 0 ? void 0 : _a.exteriorMarking) === ((_b = e2.vesselFeatures) === null || _b === void 0 ? void 0 : _b.exteriorMarking) && + ((_c = e1.vesselRegistrationPeriod) === null || _c === void 0 ? void 0 : _c.registrationCode) === ((_d = e2.vesselRegistrationPeriod) === null || _d === void 0 ? void 0 : _d.registrationCode))); + } + load(id, opts) { + const _super = Object.create(null, { + load: { get: () => super.load } + }); + return __awaiter(this, void 0, void 0, function* () { + // Load using vessel snapshot, if offline and has offline feature + if (this.network.offline && EntityUtils.isRemoteId(id) && (yield this.hasOfflineData())) { + const data = yield this.entities.load(id, VesselSnapshot.TYPENAME); + if (!data) + throw { code: DataErrorCodes.LOAD_ENTITY_ERROR, message: 'ERROR.LOAD_ENTITY_ERROR' }; + return VesselSnapshot.toVessel(data); + } + return _super.load.call(this, id, opts); + }); + } + loadAll(offset, size, sortBy, sortDirection, filter, opts) { + return firstValueFrom(this.watchAll(offset, size, sortBy, sortDirection, filter, opts)); + } + /** + * Load many vessels + * + * @param offset + * @param size + * @param sortBy + * @param sortDirection + * @param filter + * @param opts + */ + watchAll(offset, size, sortBy, sortDirection, filter, opts) { + const forceOffline = this.network.offline || (isNotNil(filter.vesselId) && filter.vesselId < 0); + const offline = forceOffline || (filter.synchronizationStatus && filter.synchronizationStatus !== 'SYNC'); + const online = !forceOffline && (!filter.synchronizationStatus || filter.synchronizationStatus === 'SYNC'); + const offline$ = offline && this.watchAllLocally(offset, size, sortBy, sortDirection, filter, opts); + const online$ = online && this.watchAllRemotely(offset, size, sortBy, sortDirection, filter, opts); + // Merge local and remote + return (offline$ && online$) + ? combineLatest([offline$, online$]) + .pipe(map(([res1, res2]) => mergeLoadResult(res1, res2))) + : (offline$ || online$); + } + watchAllRemotely(offset, size, sortBy, sortDirection, filter, opts) { + sortBy = sortBy || 'vesselFeatures.exteriorMarking'; + return super.watchAll(offset, size, sortBy, sortDirection, filter, opts); + } + watchAllLocally(offset, size, sortBy, sortDirection, filter, opts) { + // Adapt filter + const vesselSnapshotFilter = VesselSnapshotFilter.fromVesselFilter(filter); + sortBy = (sortBy === null || sortBy === void 0 ? void 0 : sortBy.includes('.')) && sortBy.substring(sortBy.lastIndexOf('.') + 1) || sortBy; + return this.vesselSnapshotService.watchAllLocally(offset, size, sortBy, sortDirection, vesselSnapshotFilter) + .pipe(map(({ data, total }) => { + const entities = (data || []).map(VesselSnapshot.toVessel); + return { data: entities, total }; + })); + } + /** + * Save many vessels + * + * @param entities + * @param opts + */ + saveAll(entities, opts) { + const _super = Object.create(null, { + saveAll: { get: () => super.saveAll } + }); + return __awaiter(this, void 0, void 0, function* () { + return _super.saveAll.call(this, entities, Object.assign(Object.assign({}, opts), { update: (proxy, { data }) => { + if (isEmptyArray(data && data.data)) + return; // Skip if empty + // update features history FIXME: marche pas + if (opts && opts.isNewFeatures) { + const lastFeatures = entities[entities.length - 1].vesselFeatures; + this.vesselFeatureService.insertIntoMutableCachedQueries(proxy, { + query: VesselFeatureQueries.loadAll, + data: lastFeatures + }); + } + // update registration history FIXME: marche pas + if (opts && opts.isNewRegistration) { + const lastRegistration = entities[entities.length - 1].vesselRegistrationPeriod; + this.vesselRegistrationService.insertIntoMutableCachedQueries(proxy, { + query: VesselRegistrationsQueries.loadAll, + data: lastRegistration + }); + } + } })); + }); + } + /** + * Save a vessel + * + * @param entity + * @param opts + */ + save(entity, opts) { + const _super = Object.create(null, { + save: { get: () => super.save } + }); + return __awaiter(this, void 0, void 0, function* () { + // prepare previous vessel to save if present + if (opts && isNotNil(opts.previousVessel)) { + // update previous features + if (opts.isNewFeatures) { + // set end date = new start date - 1 + const newStartDate = entity.vesselFeatures.startDate.clone(); + newStartDate.subtract(1, 'seconds'); + opts.previousVessel.vesselFeatures.endDate = newStartDate; + } + // prepare previous registration period + else if (opts.isNewRegistration) { + // set registration end date = new registration start date - 1 + const newRegistrationStartDate = entity.vesselRegistrationPeriod.startDate.clone(); + newRegistrationStartDate.subtract(1, 'seconds'); + opts.previousVessel.vesselRegistrationPeriod.endDate = newRegistrationStartDate; + } + // save both by calling saveAll + const savedVessels = yield this.saveAll([opts.previousVessel, entity], opts); + // then return last + return Promise.resolve(savedVessels.pop()); + } + // Prepare to save + this.fillDefaultProperties(entity); + // Save locally, when offline + const offline = this.network.offline || EntityUtils.isLocal(entity) || (entity.synchronizationStatus && entity.synchronizationStatus !== 'SYNC'); + if (offline) { + console.debug(`${this._logPrefix} Saving a vessel locally...`); + // Make sure to fill id, with local ids + yield this.fillOfflineDefaultProperties(entity); + const json = this.asObject(entity, MINIFY_ENTITY_FOR_LOCAL_STORAGE); + if (this._debug) + console.debug(`${this._logPrefix} [offline] Saving vessel locally...`, json); + // Save vessel locally + yield this.entities.save(json); + // Transform to vesselSnapshot, and add to offline storage + const vesselSnapshot = VesselSnapshot.fromVessel(entity).asObject(MINIFY_ENTITY_FOR_LOCAL_STORAGE); + yield this.entities.save(vesselSnapshot); + return entity; + } + // Save remotely + return _super.save.call(this, entity, opts); + }); + } + /** + * Save a vessel + * + * @param entity + * @param opts + */ + saveLocally(entity, opts) { + const _super = Object.create(null, { + save: { get: () => super.save } + }); + return __awaiter(this, void 0, void 0, function* () { + // prepare previous vessel to save if present + if (opts && isNotNil(opts.previousVessel)) { + // update previous features + if (opts.isNewFeatures) { + // set end date = new start date - 1 + const newStartDate = entity.vesselFeatures.startDate.clone(); + newStartDate.subtract(1, 'seconds'); + opts.previousVessel.vesselFeatures.endDate = newStartDate; + } + // prepare previous registration period + else if (opts.isNewRegistration) { + // set registration end date = new registration start date - 1 + const newRegistrationStartDate = entity.vesselRegistrationPeriod.startDate.clone(); + newRegistrationStartDate.subtract(1, 'seconds'); + opts.previousVessel.vesselRegistrationPeriod.endDate = newRegistrationStartDate; + } + // save both by calling saveAll + const savedVessels = yield this.saveAll([opts.previousVessel, entity], opts); + // then return last + return Promise.resolve(savedVessels.pop()); + } + // Prepare to save + this.fillDefaultProperties(entity); + // Save locally, when offline + const offline = this.network.offline || EntityUtils.isLocal(entity); + if (offline) { + console.debug(`${this._logPrefix} Saving a vessel locally...`); + // Make sure to fill id, with local ids + yield this.fillOfflineDefaultProperties(entity); + const json = this.asObject(entity, MINIFY_ENTITY_FOR_LOCAL_STORAGE); + if (this._debug) + console.debug(`${this._logPrefix} [offline] Saving vessel locally...`, json); + // Save vessel locally + yield this.entities.save(json); + // Transform to vesselSnapshot, and add to offline storage + const vesselSnapshot = VesselSnapshot.fromVessel(entity).asObject(MINIFY_ENTITY_FOR_LOCAL_STORAGE); + yield this.entities.save(vesselSnapshot); + return entity; + } + // Save remotely + return _super.save.call(this, entity, opts); + }); + } + replaceTemporaryVessel(temporaryVesselIds, validVesselId, opts) { + return __awaiter(this, void 0, void 0, function* () { + if (this.network.offline) { + console.warn(`${this._logPrefix} Vessel replacement cannot be done offline`); + return; + } + if (temporaryVesselIds.some(EntityUtils.isLocalId)) { + console.error(`${this._logPrefix} Cannot replace a local temporary vessel`); + return; + } + if (EntityUtils.isLocalId(validVesselId)) { + console.error(`${this._logPrefix} Cannot replace with local vessel`); + return; + } + const now = new Date(); + yield this.graphql.mutate({ + mutation: VesselMutations.replaceAll, + refetchQueries: this.getRefetchQueriesForMutation(opts), + awaitRefetchQueries: opts && opts.awaitRefetchQueries, + variables: { + temporaryVesselIds, + validVesselId + }, + error: { code: VesselErrorCodes.REPLACE_VESSEL_ERROR, message: 'VESSEL.ERROR.REPLACE_ERROR' }, + update: (proxy, res) => { + // Remove from cache + if (this.watchQueriesUpdatePolicy === 'update-cache') { + this.removeFromMutableCachedQueriesByIds(proxy, { + queries: this.getLoadQueries(), + ids: temporaryVesselIds + }); + } + if (opts && opts.update) { + opts.update(proxy, res); + } + if (this._debug) + console.debug(this._logPrefix + `Vessel replaced in ${new Date().getTime() - now.getTime()}ms`); + } + }); + }); + } + importFile(fileName, format = 'siop') { + return __awaiter(this, void 0, void 0, function* () { + if (this._debug) + console.debug(this._logPrefix + `Importing vessels from SIOP file '${fileName}' ...`); + let query; + let variables; + switch (format) { + case 'siop': + query = VesselQueries.importSiopFile; + variables = { fileName }; + break; + default: + throw new Error('Unknown vessel file format: ' + format); + } + const { data } = yield this.graphql.query({ + query, + variables, + error: { code: VesselErrorCodes.SIOP_IMPORT_ERROR, message: 'VESSEL.ERROR.SIOP_IMPORT_ERROR' } + }); + const job = Job.fromObject(data); + const message = this.translate.instant('SOCIAL.JOB.STATUS_ENUM.' + (job.status || 'PENDING')); + const progression = JobProgression.fromObject(Object.assign(Object.assign({}, job), { message })); + // Start to listen job + this.jobProgressionService.addJob(job.id, progression); + return job; + }); + } + deleteAllLocally(entities, opts) { + const _super = Object.create(null, { + deleteAllLocally: { get: () => super.deleteAllLocally } + }); + return __awaiter(this, void 0, void 0, function* () { + // Delete the vessel + yield _super.deleteAllLocally.call(this, entities, opts); + // Delete the associated vessel snapshot + const snapshots = entities.filter(RootDataEntityUtils.isLocal).map(e => e.id); + if (isEmptyArray(snapshots)) + return; // Skip + yield this.entities.deleteMany(snapshots, { entityName: VesselSnapshot.TYPENAME }); + }); + } + synchronize(entity, opts) { + return __awaiter(this, void 0, void 0, function* () { + console.info(`${this._logPrefix} Synchronizing vessel {${entity.id}}...`); + opts = Object.assign({ isNewFeatures: true, isNewRegistration: true }, opts); + const localId = entity === null || entity === void 0 ? void 0 : entity.id; + if (isNil(localId) || localId >= 0) + throw new Error('Entity must be a local entity'); + if (this.network.offline) + throw new Error('Could not synchronize if network if offline'); + // Clone (to keep original entity unchanged) + entity = entity instanceof Entity ? entity.clone() : entity; + entity.synchronizationStatus = 'SYNC'; + entity.id = undefined; + entity.vesselFeatures.vesselId = undefined; + entity.vesselRegistrationPeriod.vesselId = undefined; + try { + entity = yield this.save(entity, opts); + // Check return entity has a valid id + if (isNil(entity.id) || entity.id < 0) { + throw { code: DataErrorCodes.SYNCHRONIZE_ENTITY_ERROR }; + } + } + catch (err) { + throw Object.assign(Object.assign({}, err), { code: DataErrorCodes.SYNCHRONIZE_ENTITY_ERROR, message: 'ERROR.SYNCHRONIZE_ENTITY_ERROR', context: entity.asObject(MINIFY_DATA_ENTITY_FOR_LOCAL_STORAGE) }); + } + if (this._debug) + console.debug(`${this._logPrefix} Adding new VesselSnapshot {${entity.id}} into the local storage`); + const vesselSnapshot = VesselSnapshot.fromVessel(entity); + yield this.vesselSnapshotService.saveLocally(vesselSnapshot); + // Replace local vessel, in data + yield this.replaceLocalVessel(localId, vesselSnapshot); + // Delete local vessel (wan failed) + try { + if (this._debug) + console.debug(`${this._logPrefix} Deleting vessel snapshot {${localId}} from local storage`); + yield this.vesselSnapshotService.deleteLocally({ vesselId: localId }); + if (this._debug) + console.debug(`${this._logPrefix} Deleting vessel {${localId}} from local storage`); + yield this.entities.deleteById(localId, { entityName: Vessel.TYPENAME }); + } + catch (err) { + console.error(`${this._logPrefix} Failed to locally delete vessel {${entity.id}}`, err); + // Continue + } + return entity; + }); + } + control(entity, opts) { + return undefined; // Not implemented + } + terminate(entity) { + return __awaiter(this, void 0, void 0, function* () { + return entity; // Not implemented + }); + } + /* -- protected methods -- */ + asObject(vessel, opts) { + return vessel.asObject(Object.assign(Object.assign({}, MINIFY_OPTIONS), opts)); + } + fillDefaultProperties(entity) { + const person = this.accountService.account; + // Recorder department + if (person && person.department && (!entity.recorderDepartment || entity.recorderDepartment.id !== person.department.id)) { + if (!entity.recorderDepartment) { + entity.recorderDepartment = person.department; + } + else { + // Update the recorder department + entity.recorderDepartment.id = person.department.id; + } + if (entity.vesselFeatures) { + if (!entity.vesselFeatures.recorderDepartment) { + entity.vesselFeatures.recorderDepartment = person.department; + } + else { + // Update the VF recorder department + entity.vesselFeatures.recorderDepartment.id = person.department.id; + } + } + } + // Recorder person + if (person && (!entity.recorderPerson || entity.recorderPerson.id !== person.id)) { + if (!entity.recorderPerson) { + entity.recorderPerson = new Person(); + } + entity.recorderPerson.id = person.id; + if (entity.vesselFeatures) { + if (!entity.vesselFeatures.recorderPerson) { + entity.vesselFeatures.recorderPerson = new Person(); + } + entity.vesselFeatures.recorderPerson.id = person.id; + } + } + // Quality flag (set default) + if (entity.vesselFeatures && isNil(entity.vesselFeatures.qualityFlagId)) { + entity.vesselFeatures.qualityFlagId = QualityFlagIds.NOT_QUALIFIED; + } + } + fillOfflineDefaultProperties(entity) { + return __awaiter(this, void 0, void 0, function* () { + const isNew = isNil(entity.id); + // If new, generate a local id + if (isNew) { + entity.id = yield this.entities.nextValue(entity); + } + // Force status as temporary + entity.statusId = StatusIds.TEMPORARY; + }); + } + copyIdAndUpdateDate(source, target) { + EntityUtils.copyIdAndUpdateDate(source, target); + if (source) { + EntityUtils.copyIdAndUpdateDate(source.vesselFeatures, target.vesselFeatures); + EntityUtils.copyIdAndUpdateDate(source.vesselRegistrationPeriod, target.vesselRegistrationPeriod); + } + } + replaceLocalVessel(localVesselId, remoteVesselSnapshot) { + var _a, _b, _c; + return __awaiter(this, void 0, void 0, function* () { + // Replace in landings + if (this._debug) + console.debug(`${this._logPrefix} Update local landings: replace vessel #${localVesselId} by #${remoteVesselSnapshot.id}`); + const landings = (_a = (yield this.landingService.loadAllLocally(0, 999, null, null, { vesselId: localVesselId }, { withTotal: false, fullLoad: true }))) === null || _a === void 0 ? void 0 : _a.data; + if (isNotEmptyArray(landings)) { + landings.forEach(l => l.vesselSnapshot = remoteVesselSnapshot); + yield this.landingService.saveAllLocally(landings); + } + // Replace in trips + if (this._debug) + console.debug(`${this._logPrefix} Update local trips: replace vessel #${localVesselId} by #${remoteVesselSnapshot.id}`); + const trips = (_b = (yield this.tripService.loadAllLocally(0, 999, null, null, { vesselId: localVesselId }, { withTotal: false, fullLoad: true }))) === null || _b === void 0 ? void 0 : _b.data; + if (isNotEmptyArray(trips)) { + trips.forEach(l => l.vesselSnapshot = remoteVesselSnapshot); + yield this.tripService.saveAllLocally(trips); + } + // Replace in operations + if (this._debug) + console.debug(`${this._logPrefix} Update local operations: replace vessel #${localVesselId} by #${remoteVesselSnapshot.id}`); + const operations = (_c = (yield this.operationService.loadAllLocally(0, 999, null, null, { vesselId: localVesselId }, { withTotal: false, fullLoad: true }))) === null || _c === void 0 ? void 0 : _c.data; + if (isNotEmptyArray(operations)) { + operations.forEach(l => l.vesselId = remoteVesselSnapshot.id); + yield this.operationService.saveAllLocally(operations); + } + }); + } +}; +VesselService = __decorate([ + Injectable({ providedIn: 'root' }), + __param(7, Optional()), + __param(7, Inject(APP_JOB_PROGRESSION_SERVICE)), + __metadata("design:paramtypes", [Injector, + VesselFeaturesService, + VesselRegistrationService, + LandingService, + TripService, + OperationService, + TranslateService, Object]) +], VesselService); +export { VesselService }; +//# sourceMappingURL=vessel-service.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/services/vessel-service.js.map b/out-tsc/app/app/vessel/services/vessel-service.js.map new file mode 100644 index 000000000..b7a2888df --- /dev/null +++ b/out-tsc/app/app/vessel/services/vessel-service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel-service.js","sourceRoot":"","sources":["../../../../../src/app/vessel/services/vessel-service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/status/vessel-status-to-color.pipe.js b/out-tsc/app/app/vessel/status/vessel-status-to-color.pipe.js new file mode 100644 index 000000000..92ce229fd --- /dev/null +++ b/out-tsc/app/app/vessel/status/vessel-status-to-color.pipe.js @@ -0,0 +1,15 @@ +import { __decorate } from "tslib"; +import { Pipe } from '@angular/core'; +import { statusToColor } from '@app/data/services/model/model.utils'; +let VesselStatusToColorPipe = class VesselStatusToColorPipe { + transform(statusId) { + return statusToColor(statusId); + } +}; +VesselStatusToColorPipe = __decorate([ + Pipe({ + name: 'vesselStatusToColorPipe' + }) +], VesselStatusToColorPipe); +export { VesselStatusToColorPipe }; +//# sourceMappingURL=vessel-status-to-color.pipe.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/status/vessel-status-to-color.pipe.js.map b/out-tsc/app/app/vessel/status/vessel-status-to-color.pipe.js.map new file mode 100644 index 000000000..3502f76cc --- /dev/null +++ b/out-tsc/app/app/vessel/status/vessel-status-to-color.pipe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel-status-to-color.pipe.js","sourceRoot":"","sources":["../../../../../src/app/vessel/status/vessel-status-to-color.pipe.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAiB,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAK9D,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAElC,SAAS,CAAC,QAAgB;QACxB,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;CACF,CAAA;AALY,uBAAuB;IAHnC,IAAI,CAAC;QACJ,IAAI,EAAE,yBAAyB;KAChC,CAAC;GACW,uBAAuB,CAKnC;SALY,uBAAuB"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/vessel-routing.module.js b/out-tsc/app/app/vessel/vessel-routing.module.js new file mode 100644 index 000000000..397b38c5a --- /dev/null +++ b/out-tsc/app/app/vessel/vessel-routing.module.js @@ -0,0 +1,38 @@ +import { __decorate } from "tslib"; +import { RouterModule } from '@angular/router'; +import { NgModule } from '@angular/core'; +import { VesselsPage } from './list/vessels.page'; +import { VesselPage } from './page/vessel.page'; +import { VesselModule } from './vessel.module'; +const routes = [ + { + path: '', + pathMatch: 'full', + component: VesselsPage, + runGuardsAndResolvers: 'pathParamsChange', + data: { + profile: 'USER' + } + }, + { + path: ':id', + component: VesselPage, + runGuardsAndResolvers: 'pathParamsChange', + data: { + profile: 'USER' + } + } +]; +let VesselRoutingModule = class VesselRoutingModule { +}; +VesselRoutingModule = __decorate([ + NgModule({ + imports: [ + VesselModule, + RouterModule.forChild(routes) + ], + exports: [RouterModule] + }) +], VesselRoutingModule); +export { VesselRoutingModule }; +//# sourceMappingURL=vessel-routing.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/vessel-routing.module.js.map b/out-tsc/app/app/vessel/vessel-routing.module.js.map new file mode 100644 index 000000000..0452c866b --- /dev/null +++ b/out-tsc/app/app/vessel/vessel-routing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel-routing.module.js","sourceRoot":"","sources":["../../../../src/app/vessel/vessel-routing.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,YAAY,EAAS,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AACvC,OAAO,EAAC,WAAW,EAAC,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAC,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAE7C,MAAM,MAAM,GAAW;IACrB;QACE,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,WAAW;QACtB,qBAAqB,EAAE,kBAAkB;QACzC,IAAI,EAAE;YACJ,OAAO,EAAE,MAAM;SAChB;KACF;IACD;QACE,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,UAAU;QACrB,qBAAqB,EAAE,kBAAkB;QACzC,IAAI,EAAE;YACJ,OAAO,EAAE,MAAM;SAChB;KACF;CACF,CAAC;AASK,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;CAAI,CAAA;AAAvB,mBAAmB;IAP/B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC9B;QACD,OAAO,EAAE,CAAC,YAAY,CAAC;KACxB,CAAC;GACW,mBAAmB,CAAI;SAAvB,mBAAmB"} \ No newline at end of file diff --git a/out-tsc/app/app/vessel/vessel.module.js b/out-tsc/app/app/vessel/vessel.module.js new file mode 100644 index 000000000..b4999f800 --- /dev/null +++ b/out-tsc/app/app/vessel/vessel.module.js @@ -0,0 +1,64 @@ +import { __decorate } from "tslib"; +import { NgModule } from '@angular/core'; +import { ToRegistrationCodeDirective, VesselForm } from './form/form-vessel'; +import { VesselPage } from './page/vessel.page'; +import { VesselsTable } from './list/vessels.table'; +import { VesselModal } from './modal/vessel-modal'; +import { VesselsPage } from './list/vessels.page'; +import { TranslateModule } from '@ngx-translate/core'; +import { TextMaskModule } from 'angular2-text-mask'; +import { CommonModule } from '@angular/common'; +import { AppDataModule } from '../data/data.module'; +import { VesselFeaturesHistoryComponent } from './page/vessel-features-history.component'; +import { VesselRegistrationHistoryComponent } from './page/vessel-registration-history.component'; +import { AppReferentialModule } from '../referential/referential.module'; +import { AppCoreModule } from '@app/core/core.module'; +import { SelectVesselsModal } from '@app/vessel/modal/select-vessel.modal'; +import { SharedModule } from '@sumaris-net/ngx-components'; +import { IonicModule } from '@ionic/angular'; +import { VesselStatusToColorPipe } from '@app/vessel/status/vessel-status-to-color.pipe'; +let VesselModule = class VesselModule { +}; +VesselModule = __decorate([ + NgModule({ + imports: [ + SharedModule, + CommonModule, + IonicModule, + TextMaskModule, + TranslateModule.forChild(), + // App modules + AppCoreModule, + AppReferentialModule, + AppDataModule + ], + declarations: [ + // Pipes + VesselStatusToColorPipe, + // Components + VesselsTable, + VesselPage, + VesselsPage, + VesselForm, + VesselModal, + VesselFeaturesHistoryComponent, + VesselRegistrationHistoryComponent, + SelectVesselsModal, + ToRegistrationCodeDirective + ], + exports: [ + SharedModule, + TranslateModule, + // Pipes + VesselStatusToColorPipe, + // Components + VesselsTable, + VesselPage, + VesselsPage, + VesselForm, + VesselsPage + ] + }) +], VesselModule); +export { VesselModule }; +//# sourceMappingURL=vessel.module.js.map \ No newline at end of file diff --git a/out-tsc/app/app/vessel/vessel.module.js.map b/out-tsc/app/app/vessel/vessel.module.js.map new file mode 100644 index 000000000..186d12dec --- /dev/null +++ b/out-tsc/app/app/vessel/vessel.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vessel.module.js","sourceRoot":"","sources":["../../../../src/app/vessel/vessel.module.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,2BAA2B,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,kCAAkC,EAAE,MAAM,8CAA8C,CAAC;AAClG,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AA6ClF,IAAM,YAAY,GAAlB,MAAM,YAAY;CACxB,CAAA;AADY,YAAY;IA3CxB,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,YAAY;YACZ,YAAY;YACZ,WAAW;YACX,cAAc;YACd,eAAe,CAAC,QAAQ,EAAE;YAE1B,cAAc;YACd,aAAa;YACb,oBAAoB;YACpB,aAAa;SACd;QACD,YAAY,EAAE;YACZ,QAAQ;YACR,uBAAuB;YAEvB,aAAa;YACb,YAAY;YACZ,UAAU;YACV,WAAW;YACX,UAAU;YACV,WAAW;YACX,8BAA8B;YAC9B,kCAAkC;YAClC,kBAAkB;YAClB,2BAA2B;SAC5B;QACD,OAAO,EAAE;YACP,YAAY;YACZ,eAAe;YAEf,QAAQ;YACR,uBAAuB;YAEvB,aAAa;YACb,YAAY;YACZ,UAAU;YACV,WAAW;YACX,UAAU;YACV,WAAW;SACZ;KACF,CAAC;GACW,YAAY,CACxB;SADY,YAAY"} \ No newline at end of file diff --git a/out-tsc/app/environments/environment.class.js b/out-tsc/app/environments/environment.class.js new file mode 100644 index 000000000..6a191f875 --- /dev/null +++ b/out-tsc/app/environments/environment.class.js @@ -0,0 +1,7 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build ---prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. +import { Environment } from '@sumaris-net/ngx-components'; +export class AppEnvironment extends Environment { +} +//# sourceMappingURL=environment.class.js.map \ No newline at end of file diff --git a/out-tsc/app/environments/environment.class.js.map b/out-tsc/app/environments/environment.class.js.map new file mode 100644 index 000000000..a84a73528 --- /dev/null +++ b/out-tsc/app/environments/environment.class.js.map @@ -0,0 +1 @@ +{"version":3,"file":"environment.class.js","sourceRoot":"","sources":["../../../src/environments/environment.class.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,2EAA2E;AAC3E,gEAAgE;AAEhE,OAAO,EAAE,WAAW,EAAe,MAAM,6BAA6B,CAAC;AAEvE,MAAM,OAAO,cAAe,SAAQ,WAAW;CAO9C"} \ No newline at end of file diff --git a/out-tsc/app/environments/environment.js b/out-tsc/app/environments/environment.js new file mode 100644 index 000000000..cf1eef536 --- /dev/null +++ b/out-tsc/app/environments/environment.js @@ -0,0 +1,130 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build ---prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. +import { StorageDrivers } from '@sumaris-net/ngx-components'; +/* + * In development mode, to ignore zone related error stack frames such as + * `zone.run`, `zoneDelegate.invokeTask` for easier debugging, you can + * import the following file, but please comment it out in production mode + * because it will have performance impact when throw error + */ +import 'zone.js/plugins/zone-error'; +const pkg = require('../../package.json'); +export const environment = Object.freeze({ + name: pkg.name, + version: pkg.version, + production: false, + baseUrl: '/', + defaultLocale: 'fr', + defaultLatLongFormat: 'DDMM', + apolloFetchPolicy: 'cache-first', + // FIXME: enable cache + persistCache: false, + // TODO: make this works + //offline: true, + peerMinVersion: '2.4.3', + // Not need during DEV + //checkAppVersionIntervalInSeconds: 0, + defaultPeer: { + host: 'test.sumaris.net', + port: 443 + }, + defaultPeers: [ + { + host: 'localhost', + port: 8080 + }, + { + host: 'localhost', + port: 8081 + }, + { + host: '192.168.8.146', + port: 8080 + }, + { + host: '192.168.0.45', + port: 8080 + }, + { + host: '192.168.0.24', + port: 8080 + }, + { + host: '192.168.0.107', + port: 8080 + }, + { + host: 'server.e-is.pro', + port: 443 + }, + { + host: 'adap.pecheursdebretagne.eu', + port: 443 + }, + { + host: 'adap-test.pecheursdebretagne.eu', + port: 443 + }, + { + host: 'sih.sfa.sc', + port: 443 + }, + { + host: 'www.sumaris.net', + port: 443 + }, + { + host: 'test.sumaris.net', + port: 443 + }, + { + host: 'open.sumaris.net', + port: 443 + }, + { + host: 'visi-common-docker1.ifremer.fr', + port: 8181 + }, + { + host: 'imagine-pod.isival.ifremer.fr', + port: 443 + } + ], + defaultAppName: 'SUMARiS', + defaultAndroidInstallUrl: 'https://play.google.com/store/apps/details?id=net.sumaris.app', + // About modal + sourceUrl: 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-app', + reportIssueUrl: 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-app/-/issues/new?issue', + // Storage + storage: { + driverOrder: [StorageDrivers.SQLLite, StorageDrivers.IndexedDB, StorageDrivers.WebSQL, StorageDrivers.LocalStorage] + }, + // Default login user + defaultAuthValues: { + // Basic auth (using Person.username) + // username: 'admq2', password: 'q22006' + // Token auth (using Person.pubkey) + username: 'admin@sumaris.net', password: 'admin' + //username: 'admsih@sfa.sc', password: 'admsih321' + //username: 'lpecquot', token: 'GEj5KLU3NoHPEW7hEmrbTc3srqnGgtr7KehAt8YVbsbP:9C4B3A4560F52BDB1E3DACDEC973C077AE7A8FE8E005F3683BE52ADC718BC818|Jktzj/MYewXGWSIbw+MXq0QgzzduSat0ODsgHpDLRonxfipReplp2Y9xPUfsCD6Y1cEvW4JxNtHIsi7c7GOWAA==' + }, + account: { + enableListenChanges: true, + listenIntervalInSeconds: 0 + }, + entityEditor: { + enableListenChanges: true, + listenIntervalInSecond: 0 + }, + program: { + enableListenChanges: true, + listenIntervalInSeconds: 0 + }, + menu: { + subMenu: { + enable: true + } + } +}); +//# sourceMappingURL=environment.js.map \ No newline at end of file diff --git a/out-tsc/app/environments/environment.js.map b/out-tsc/app/environments/environment.js.map new file mode 100644 index 000000000..1c742f82b --- /dev/null +++ b/out-tsc/app/environments/environment.js.map @@ -0,0 +1 @@ +{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/environments/environment.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out-tsc/app/main.js b/out-tsc/app/main.js new file mode 100644 index 000000000..8b2aacd51 --- /dev/null +++ b/out-tsc/app/main.js @@ -0,0 +1,11 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; +if (environment.production) { + enableProdMode(); +} +platformBrowserDynamic() + .bootstrapModule(AppModule) + .catch(err => console.log(err)); +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/out-tsc/app/main.js.map b/out-tsc/app/main.js.map new file mode 100644 index 000000000..97f08c183 --- /dev/null +++ b/out-tsc/app/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,IAAI,WAAW,CAAC,UAAU,EAAE;IAC1B,cAAc,EAAE,CAAC;CAClB;AAED,sBAAsB,EAAE;KACrB,eAAe,CAAC,SAAS,CAAC;KAC1B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/polyfills.js b/out-tsc/app/polyfills.js new file mode 100644 index 000000000..169836166 --- /dev/null +++ b/out-tsc/app/polyfills.js @@ -0,0 +1,64 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ +/*************************************************************************************************** + * BROWSER POLYFILLS + */ +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags.ts'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ +import './zone-flags'; +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js/dist/zone'; // Included with Angular CLI. +// Workaround - patch Zone to mute startup error message, when Promise unpatched +// Disable check on Promise +if (window.__Zone_disable_ZoneAwarePromise === true) { + window['Zone'].assertZonePatched = () => { }; +} +/*************************************************************************************************** + * APPLICATION IMPORTS + */ +// Import Hammer JS (need to manage 'tap' events) +import 'hammerjs'; +// Import moment-timezone - should be loaded here, otherwise moment().tz() will failed +import 'moment'; +import 'moment-timezone'; +// Import swiper +// Register Swiper lib - see +import { register } from 'swiper/element/bundle'; +register(); +//# sourceMappingURL=polyfills.js.map \ No newline at end of file diff --git a/out-tsc/app/polyfills.js.map b/out-tsc/app/polyfills.js.map new file mode 100644 index 000000000..e2c78aaf6 --- /dev/null +++ b/out-tsc/app/polyfills.js.map @@ -0,0 +1 @@ +{"version":3,"file":"polyfills.js","sourceRoot":"","sources":["../../src/polyfills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;GAEG;AAEH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,cAAc,CAAC;AAEtB;;GAEG;AACH,OAAO,mBAAmB,CAAC,CAAC,6BAA6B;AAEzD,gFAAgF;AAChF,2BAA2B;AAC3B,IAAK,MAAc,CAAC,+BAA+B,KAAK,IAAI,EAAE;IAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,iBAAiB,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;CAC7C;AAED;;GAEG;AAEH,iDAAiD;AACjD,OAAO,UAAU,CAAC;AAElB,sFAAsF;AACtF,OAAO,QAAQ,CAAC;AAChB,OAAO,iBAAiB,CAAC;AAEzB,gBAAgB;AAChB,4BAA4B;AAC5B,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAC;AAC/C,QAAQ,EAAE,CAAC"} \ No newline at end of file diff --git a/out-tsc/app/tsconfig.app.tsbuildinfo b/out-tsc/app/tsconfig.app.tsbuildinfo new file mode 100644 index 000000000..5a2e93c24 --- /dev/null +++ b/out-tsc/app/tsconfig.app.tsbuildinfo @@ -0,0 +1 @@ +{"version":"4.8.4"} \ No newline at end of file diff --git a/out-tsc/app/zone-flags.js b/out-tsc/app/zone-flags.js new file mode 100644 index 000000000..5f1b57750 --- /dev/null +++ b/out-tsc/app/zone-flags.js @@ -0,0 +1,21 @@ +/** + * Prevents Angular change detection from + * running with certain Web Component callbacks + */ +import { zoneConfig } from '@rx-angular/cdk/zone-configurations'; +zoneConfig.global.disable.customElements(); +zoneConfig.global.disable.requestAnimationFrame(); +zoneConfig.global.disable.geolocation(); +zoneConfig.global.disable.canvas(); +zoneConfig.global.disable.XHR(); +zoneConfig.events.disable.UNPATCHED_EVENTS([ + 'mousemove', 'mouseover', + // TODO: check if can disabled this events: + //'scroll' +]); +// FIXME disable zone in .then() functions +//zoneConfig.global.disable.ZoneAwarePromise(); +// FIXME: need to patch progression toolbar, to call markForCheck() +// Otherwise, the trip editor still show the loading bar +//zoneConfig.global.disable.timers(); +//# sourceMappingURL=zone-flags.js.map \ No newline at end of file diff --git a/out-tsc/app/zone-flags.js.map b/out-tsc/app/zone-flags.js.map new file mode 100644 index 000000000..f367e46e3 --- /dev/null +++ b/out-tsc/app/zone-flags.js.map @@ -0,0 +1 @@ +{"version":3,"file":"zone-flags.js","sourceRoot":"","sources":["../../src/zone-flags.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAEjE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;AAC3C,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;AAClD,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AACxC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AACnC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAEhC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACzC,WAAW,EAAE,WAAW;IACxB,2CAA2C;IAC3C,UAAU;CACX,CAAC,CAAC;AAEH,0CAA0C;AAC1C,+CAA+C;AAE/C,mEAAmE;AACnE,wDAAwD;AACxD,qCAAqC"} \ No newline at end of file diff --git a/package.json b/package.json index 89f128b31..f9848329e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "sumaris-app", "description": "SUMARiS app", - "version": "2.8.12", + "version": "2.9.0-alpha1", "author": "contact@e-is.pro", "license": "AGPL-3.0", "readmeFilename": "README.md", diff --git a/scripts/release.sh b/scripts/release.sh index 939216414..51656eee1 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -174,15 +174,17 @@ cd ${PROJECT_DIR}/scripts || exit 1 ./release-android.sh [[ $? -ne 0 ]] && exit 1 + echo "**********************************" echo " /!\ You should now :" echo " - Open Android Studio and Build the release APK..." echo " - Then run: " echo "" echo "cd $PROJECT_DIR/scripts" - if [[ "$branch" =~ ^features?/.* ]]; then +if [[ "$branch" =~ ^features?/.* ]]; then echo "./release-android-sign.sh && ./release-finish.sh $version $branch && ./release-to-github.sh $task $branch" else - echo "./release-android-sign.sh && ./release-finish.sh && ./release-to-github.sh $task + echo "./release-android-sign.sh && ./release-finish.sh && ./release-to-github.sh $task" fi + exit 1 diff --git a/src/assets/img/logo/logo-obsmer-square.png b/src/assets/img/logo/logo-obsmer-square.png new file mode 100644 index 0000000000000000000000000000000000000000..a4fbe0e9ece9fe331c3ce5514b0c0c1a30a0b301 GIT binary patch literal 116987 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

&a2~l(Y~<7YNAh03H=*%(UnT>& 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 -^y@95a?kYIbeeP@Bn?OVFaC#0t;sg`*b@%c7w@ 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 literal 0 HcmV?d00001 diff --git a/src/assets/manifest.json b/src/assets/manifest.json index db4737d7d..fec27b4e9 100644 --- a/src/assets/manifest.json +++ b/src/assets/manifest.json @@ -2,7 +2,7 @@ "name": "SUMARiS", "short_name": "SUMARiS", "manifest_version": 1, - "version": "2.8.12", + "version": "2.9.0-alpha1", "default_locale": "fr", "description": "Data collection tool for fisheries monitoring", "icons": [{