@odigos/ui-kit 0.0.24 → 0.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/README.md +3 -2
- package/lib/components/auto-complete-input/auto-complete-input.stories.d.ts +9 -0
- package/lib/components/auto-complete-input/index.d.ts +2 -0
- package/lib/components/badge/badge.stories.d.ts +13 -0
- package/lib/components/button/button.stories.d.ts +9 -0
- package/lib/components/cancel-warning/cancel-warning.stories.d.ts +9 -0
- package/lib/components/checkbox/checkbox.stories.d.ts +9 -0
- package/lib/components/code/code.stories.d.ts +9 -0
- package/lib/components/condition-details/condition-details.stories.d.ts +14 -0
- package/lib/components/data-card/data-card-fields/index.d.ts +8 -7
- package/lib/components/data-card/data-card.stories.d.ts +11 -0
- package/lib/components/data-card/index.d.ts +3 -3
- package/lib/components/data-tab/data-tab.stories.d.ts +15 -0
- package/lib/components/delete-warning/delete-warning.stories.d.ts +9 -0
- package/lib/components/describe-row/describe-row.stories.d.ts +9 -0
- package/lib/components/divider/divider.stories.d.ts +9 -0
- package/lib/components/docs-button/docs-button.stories.d.ts +9 -0
- package/lib/components/drawer/drawer.stories.d.ts +10 -0
- package/lib/components/dropdown/dropdown.stories.d.ts +10 -0
- package/lib/components/error-boundary/error-boundary.stories.d.ts +9 -0
- package/lib/components/extend-arrow/extend-arrow.stories.d.ts +9 -0
- package/lib/components/fade-loader/fade-loader.stories.d.ts +9 -0
- package/lib/components/field-error/field-error.stories.d.ts +9 -0
- package/lib/components/field-label/field-label.stories.d.ts +9 -0
- package/lib/components/header/header.stories.d.ts +9 -0
- package/lib/components/icon-button/icon-button.stories.d.ts +9 -0
- package/lib/components/icon-group/icon-group.stories.d.ts +16 -0
- package/lib/components/icon-title-badge/icon-title-badge.stories.d.ts +9 -0
- package/lib/components/icon-wrapped/icon-wrapped.stories.d.ts +10 -0
- package/lib/components/icons-nav/icons-nav.stories.d.ts +9 -0
- package/lib/components/image-controlled/image-controlled.stories.d.ts +9 -0
- package/lib/components/index.d.ts +1 -0
- package/lib/components/input/input.stories.d.ts +9 -0
- package/lib/components/input-list/input-list.stories.d.ts +9 -0
- package/lib/components/input-table/input-table.stories.d.ts +9 -0
- package/lib/components/interactive-table/interactive-table.stories.d.ts +12 -0
- package/lib/components/key-value-input-list/key-value-input-list.stories.d.ts +9 -0
- package/lib/components/modal/modal.stories.d.ts +9 -0
- package/lib/components/monitors-checkboxes/monitors-checkboxes.stories.d.ts +9 -0
- package/lib/components/monitors-icons/monitors-icons.stories.d.ts +9 -0
- package/lib/components/navigation-buttons/navigation-buttons.stories.d.ts +9 -0
- package/lib/components/no-data-found/no-data-found.stories.d.ts +9 -0
- package/lib/components/notification-note/index.d.ts +2 -1
- package/lib/components/notification-note/notification-note.stories.d.ts +10 -0
- package/lib/components/scroll-x/scroll-x.stories.d.ts +10 -0
- package/lib/components/section-title/section-title.stories.d.ts +9 -0
- package/lib/components/segment/segment.stories.d.ts +9 -0
- package/lib/{containers/data-flow-actions-menu → components}/selection-button/index.d.ts +3 -3
- package/lib/components/selection-button/selection-button.stories.d.ts +9 -0
- package/lib/components/skeleton-loader/skeleton-loader.stories.d.ts +9 -0
- package/lib/components/status/status.stories.d.ts +9 -0
- package/lib/components/stepper/stepper.stories.d.ts +9 -0
- package/lib/components/styled.d.ts +2 -0
- package/lib/components/text/text.stories.d.ts +9 -0
- package/lib/components/textarea/textarea.stories.d.ts +9 -0
- package/lib/components/toggle/toggle.stories.d.ts +9 -0
- package/lib/components/tooltip/tooltip.stories.d.ts +11 -0
- package/lib/components/trace-loader/trace-loader.stories.d.ts +9 -0
- package/lib/components/warning-modal/warning-modal.stories.d.ts +9 -0
- package/lib/components.js +11 -10
- package/lib/constants/destinations/index.d.ts +18 -0
- package/lib/constants/index.d.ts +1 -0
- package/lib/constants/strings/index.d.ts +60 -10
- package/lib/constants.js +4 -4
- package/lib/containers/action-drawer/action-drawer.stories.d.ts +9 -0
- package/lib/containers/action-drawer/build-card.d.ts +1 -7
- package/lib/containers/action-form/action-form.stories.d.ts +9 -0
- package/lib/containers/action-modal/action-modal.stories.d.ts +9 -0
- package/lib/containers/action-table/action-table.stories.d.ts +9 -0
- package/lib/containers/await-pipeline/await-pipeline.stories.d.ts +9 -0
- package/lib/containers/compute-platform-select/compute-platform-select.stories.d.ts +9 -0
- package/lib/containers/compute-platforms/compute-platforms.stories.d.ts +9 -0
- package/lib/containers/compute-platforms-actions-menu/compute-platforms-actions-menu.stories.d.ts +9 -0
- package/lib/containers/data-flow/data-flow.stories.d.ts +9 -0
- package/lib/containers/data-flow-actions-menu/data-flow-actions-menu.stories.d.ts +11 -0
- package/lib/containers/data-flow-actions-menu/data-stream-select/index.d.ts +6 -0
- package/lib/containers/data-flow-actions-menu/index.d.ts +2 -1
- package/lib/containers/data-stream-selection-form/data-stream-selection-form.stories.d.ts +9 -0
- package/lib/containers/data-stream-selection-form/index.d.ts +12 -0
- package/lib/containers/destination-drawer/build-card.d.ts +1 -7
- package/lib/containers/destination-drawer/destination-drawer.stories.d.ts +9 -0
- package/lib/containers/destination-drawer/index.d.ts +2 -5
- package/lib/containers/destination-form/destination-form.stories.d.ts +9 -0
- package/lib/containers/destination-form/index.d.ts +2 -5
- package/lib/containers/destination-form/test-connection/index.d.ts +4 -8
- package/lib/containers/destination-modal/choose-destination/destinations-list/index.d.ts +2 -1
- package/lib/containers/destination-modal/choose-destination/index.d.ts +3 -3
- package/lib/containers/destination-modal/destination-modal.stories.d.ts +9 -0
- package/lib/containers/destination-modal/index.d.ts +2 -5
- package/lib/containers/destination-selection-form/destination-list/index.d.ts +6 -0
- package/lib/containers/destination-selection-form/destination-selection-form.stories.d.ts +9 -0
- package/lib/containers/destination-selection-form/index.d.ts +5 -9
- package/lib/containers/destination-table/destination-table.stories.d.ts +9 -0
- package/lib/containers/dropdowns/connection-status-dropdown/connection-status-dropdown.stories.d.ts +9 -0
- package/lib/containers/dropdowns/connection-type-dropdown/connection-type-dropdown.stories.d.ts +9 -0
- package/lib/containers/dropdowns/error-dropdown/error-dropdown.stories.d.ts +9 -0
- package/lib/containers/dropdowns/error-dropdown/index.d.ts +2 -0
- package/lib/containers/dropdowns/kind-dropdown/error-dropdown.stories.d.ts +9 -0
- package/lib/containers/dropdowns/kind-dropdown/index.d.ts +2 -0
- package/lib/containers/dropdowns/language-dropdown/index.d.ts +2 -0
- package/lib/containers/dropdowns/language-dropdown/language-dropdown.stories.d.ts +9 -0
- package/lib/containers/dropdowns/monitor-dropdown/monitor-dropdown.stories.d.ts +9 -0
- package/lib/containers/dropdowns/namespace-dropdown/index.d.ts +2 -0
- package/lib/containers/dropdowns/namespace-dropdown/namespace-dropdown.stories.d.ts +9 -0
- package/lib/containers/index.d.ts +3 -0
- package/lib/containers/instrumentation-rule-drawer/build-card.d.ts +1 -7
- package/lib/containers/instrumentation-rule-drawer/instrumentation-rule-drawer.stories.d.ts +9 -0
- package/lib/containers/instrumentation-rule-form/instrumentation-rule-form.stories.d.ts +9 -0
- package/lib/containers/instrumentation-rule-modal/instrumentation-rule-modal.stories.d.ts +9 -0
- package/lib/containers/instrumentation-rule-table/instrumentation-rule-table.stories.d.ts +9 -0
- package/lib/containers/multi-source-control/multi-source-control.stories.d.ts +9 -0
- package/lib/containers/notification-manager/notification-manager.stories.d.ts +9 -0
- package/lib/containers/overview-drawer/overview-drawer.stories.d.ts +9 -0
- package/lib/containers/setup-summary/index.d.ts +8 -0
- package/lib/containers/setup-summary/setup-summary.stories.d.ts +9 -0
- package/lib/containers/side-nav/side-nav.stories.d.ts +9 -0
- package/lib/containers/slack-invite/slack-invite.stories.d.ts +9 -0
- package/lib/containers/source-drawer/build-card.d.ts +1 -6
- package/lib/containers/source-drawer/source-drawer.stories.d.ts +9 -0
- package/lib/containers/source-form/source-form.stories.d.ts +9 -0
- package/lib/containers/source-modal/index.d.ts +3 -5
- package/lib/containers/source-modal/source-modal.stories.d.ts +9 -0
- package/lib/containers/source-selection-form/index.d.ts +4 -5
- package/lib/containers/source-selection-form/source-list/index.d.ts +8 -0
- package/lib/containers/source-selection-form/source-selection-form.stories.d.ts +9 -0
- package/lib/containers/source-table/source-table.stories.d.ts +9 -0
- package/lib/containers/system-overview/system-overview.stories.d.ts +9 -0
- package/lib/containers/table-cell-conditions/table-cell-conditions.stories.d.ts +9 -0
- package/lib/containers/toast-list/toast-list.stories.d.ts +9 -0
- package/lib/containers/toggle-dark-mode/toggle-dark-mode.stories.d.ts +9 -0
- package/lib/containers.js +674 -521
- package/lib/functions/filter-destinations-by-stream/index.d.ts +2 -0
- package/lib/functions/filter-sources-by-stream/index.d.ts +2 -0
- package/lib/functions/index.d.ts +3 -0
- package/lib/functions/map-exported-signals/index.d.ts +2 -0
- package/lib/functions.js +5 -9
- package/lib/hooks/useSourceFormData.d.ts +1 -1
- package/lib/hooks/useSourceSelectionFormData.d.ts +9 -17
- package/lib/hooks.js +5 -6
- package/lib/icons/actions/add-cluster-info-icon/add-cluster-info-icon.stories.d.ts +8 -0
- package/lib/icons/actions/delete-attribute-icon/delete-attribute-icon.stories.d.ts +8 -0
- package/lib/icons/actions/pii-masking-icon/pii-masking-icon.stories.d.ts +8 -0
- package/lib/icons/actions/rename-attribute-icon/rename-attribute-icon.stories.d.ts +8 -0
- package/lib/icons/actions/sampler-icon/sampler-icon.stories.d.ts +8 -0
- package/lib/icons/brand/odigos-logo/odigos-logo.stories.d.ts +8 -0
- package/lib/icons/brand/odigos-logo-text/odigos-logo-text.stories.d.ts +8 -0
- package/lib/icons/common/arrow-icon/arrow-icon.stories.d.ts +8 -0
- package/lib/icons/common/code-brackets-icon/code-brackets-icon.stories.d.ts +8 -0
- package/lib/icons/common/code-icon/code-icon.stories.d.ts +8 -0
- package/lib/icons/common/command-icon/command-icon.stories.d.ts +8 -0
- package/lib/icons/common/copy-icon/copy-icon.stories.d.ts +8 -0
- package/lib/icons/common/edit-icon/edit-icon.stories.d.ts +8 -0
- package/lib/icons/common/extend-arrow-icon/extend-arrow-icon.stories.d.ts +8 -0
- package/lib/icons/common/filter-icon/filter-icon.stories.d.ts +8 -0
- package/lib/icons/common/folder-icon/folder-icon.stories.d.ts +8 -0
- package/lib/icons/common/image-error-icon/image-error-icon.stories.d.ts +8 -0
- package/lib/icons/common/key-icon/key-icon.stories.d.ts +8 -0
- package/lib/icons/common/list-icon/list-icon.stories.d.ts +8 -0
- package/lib/icons/common/no-data-icon/no-data-icon.stories.d.ts +8 -0
- package/lib/icons/common/notebook-icon/notebook-icon.stories.d.ts +8 -0
- package/lib/icons/common/notification-icon/notification-icon.stories.d.ts +8 -0
- package/lib/icons/common/search-icon/search-icon.stories.d.ts +8 -0
- package/lib/icons/common/sort-arrows-icon/sort-arrows-icon.stories.d.ts +8 -0
- package/lib/icons/common/terminal-icon/terminal-icon.stories.d.ts +8 -0
- package/lib/icons/common/trash-icon/trash-icon.stories.d.ts +8 -0
- package/lib/icons/common/x-icon/x-icon.stories.d.ts +8 -0
- package/lib/icons/compute-platform/k8s-logo/k8s-logo.stories.d.ts +8 -0
- package/lib/icons/compute-platform/vm-logo/vm-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/alauda-logo/alauda-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/alibaba-cloud-logo/alibaba-cloud-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/app-dynamics-logo/app-dynamics-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/aws-cloudwatch-logo/aws-cloudwatch-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/aws-s3-logo/aws-s3-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/aws-xray-logo/aws-xray-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/axiom-logo/axiom-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/better-stack-logo/better-stack-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/blob-storage-logo/blob-storage-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/bonree-logo/bonree-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/causely-logo/causely-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/checkly-logo/checkly-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/chronosphere-logo/chronosphere-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/clickhouse-logo/clickhouse-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/coralogix-logo/coralogix-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/dash0-logo/dash0-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/datadog-logo/datadog-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/dynatrace-logo/dynatrace-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/elastic-apm-logo/elastic-apm-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/elastic-search-logo/elastic-search-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/gigapipe-logo/gigapipe-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/google-cloud-platform-logo/google-cloud-platform-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/google-cloud-storage-logo/google-cloud-storage-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/grafana-logo/grafana-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/greptime-logo/greptime-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/groundcover-logo/groundcover-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/honeycomb-logo/honeycomb-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/hyperdx-logo/hyperdx-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/instana-logo/instana-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/jaeger-logo/jaeger-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/kafka-logo/kafka-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/kloudmate-logo/kloudmate-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/last9-logo/last9-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/lightstep-logo/lightstep-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/logzio-logo/logzio-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/loki-logo/loki-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/lumigo-logo/lumigo-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/middleware-logo/middleware-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/new-relic-logo/new-relic-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/observe-logo/observe-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/one-uptime-logo/one-uptime-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/open-observe-logo/open-observe-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/open-telemetry-logo/open-telemetry-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/ops-verse-logo/ops-verse-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/oracle-logo/oracle-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/prometheus-logo/prometheus-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/qryn-logo/qryn-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/quickwit-logo/quickwit-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/sentry-logo/sentry-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/seq-logo/seq-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/signoz-logo/signoz-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/splunk-logo/splunk-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/sumo-logic-logo/sumo-logic-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/telemetry-hub-logo/telemetry-hub-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/tempo-logo/tempo-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/tingyun-logo/tingyun-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/traceloop-logo/traceloop-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/uptrace-logo/uptrace-logo.stories.d.ts +8 -0
- package/lib/icons/destinations/victoria-metrics-logo/victoria-metrics-logo.stories.d.ts +8 -0
- package/lib/icons/instrumentation-rules/code-attributes-icon/code-attributes-icon.stories.d.ts +8 -0
- package/lib/icons/instrumentation-rules/payload-collection-icon/payload-collection-icon.stories.d.ts +8 -0
- package/lib/icons/math/minus-icon/minus-icon.stories.d.ts +8 -0
- package/lib/icons/math/plus-icon/plus-icon.stories.d.ts +8 -0
- package/lib/icons/monitors/logs-icon/logs-icon.stories.d.ts +8 -0
- package/lib/icons/monitors/metrics-icon/metrics-icon.stories.d.ts +8 -0
- package/lib/icons/monitors/traces-icon/traces-icon.stories.d.ts +8 -0
- package/lib/icons/on-off/eye-closed-icon/eye-closed-icon.stories.d.ts +8 -0
- package/lib/icons/on-off/eye-open-icon/eye-open-icon.stories.d.ts +8 -0
- package/lib/icons/on-off/light-off-icon/light-off-icon.stories.d.ts +8 -0
- package/lib/icons/on-off/light-on-icon/light-on-icon.stories.d.ts +8 -0
- package/lib/icons/on-off/moon-icon/moon-icon.stories.d.ts +8 -0
- package/lib/icons/on-off/sun-icon/sun-icon.stories.d.ts +8 -0
- package/lib/icons/overview/actions-icon/actions-icon.stories.d.ts +8 -0
- package/lib/icons/overview/connections-icon/connections-icon.stories.d.ts +8 -0
- package/lib/icons/overview/data-streams-icon/data-streams-icon.stories.d.ts +8 -0
- package/lib/icons/overview/data-streams-icon/index.d.ts +2 -0
- package/lib/icons/overview/destinations-icon/destinations-icon.stories.d.ts +8 -0
- package/lib/icons/overview/index.d.ts +1 -0
- package/lib/icons/overview/namespaces-icon/namespaces-icon.stories.d.ts +8 -0
- package/lib/icons/overview/overview-icon/overview-icon.stories.d.ts +8 -0
- package/lib/icons/overview/rules-icon/rules-icon.stories.d.ts +8 -0
- package/lib/icons/overview/service-map-icon/service-map-icon.stories.d.ts +8 -0
- package/lib/icons/overview/sources-icon/sources-icon.stories.d.ts +8 -0
- package/lib/icons/overview/trace-view-icon/trace-view-icon.stories.d.ts +8 -0
- package/lib/icons/programming-languages/c-plus-plus-logo/c-plus-plus-logo.stories.d.ts +8 -0
- package/lib/icons/programming-languages/c-sharp-logo/c-sharp-logo.stories.d.ts +8 -0
- package/lib/icons/programming-languages/dotnet-logo/dotnet-logo.stories.d.ts +8 -0
- package/lib/icons/programming-languages/elixir-logo/elixir-logo.stories.d.ts +8 -0
- package/lib/icons/programming-languages/go-logo/go-logo.stories.d.ts +8 -0
- package/lib/icons/programming-languages/java-logo/java-logo.stories.d.ts +8 -0
- package/lib/icons/programming-languages/mysql-logo/mysql-logo.stories.d.ts +8 -0
- package/lib/icons/programming-languages/nginx-logo/nginx-logo.stories.d.ts +8 -0
- package/lib/icons/programming-languages/nodejs-logo/nodejs-logo.stories.d.ts +8 -0
- package/lib/icons/programming-languages/php-logo/php-logo.stories.d.ts +8 -0
- package/lib/icons/programming-languages/postgres-logo/postgres-logo.stories.d.ts +8 -0
- package/lib/icons/programming-languages/python-logo/python-logo.stories.d.ts +8 -0
- package/lib/icons/programming-languages/redis-logo/redis-logo.stories.d.ts +8 -0
- package/lib/icons/programming-languages/ruby-logo/ruby-logo.stories.d.ts +8 -0
- package/lib/icons/programming-languages/rust-logo/rust-logo.stories.d.ts +8 -0
- package/lib/icons/programming-languages/swift-logo/swift-logo.stories.d.ts +8 -0
- package/lib/icons/social/slack-logo/slack-logo.stories.d.ts +8 -0
- package/lib/icons/status/check-circled-icon/check-circled-icon.stories.d.ts +8 -0
- package/lib/icons/status/check-icon/check-icon.stories.d.ts +8 -0
- package/lib/icons/status/cross-circled-icon/cross-circled-icon.stories.d.ts +8 -0
- package/lib/icons/status/cross-icon/cross-icon.stories.d.ts +8 -0
- package/lib/icons/status/error-round-icon/error-round-icon.stories.d.ts +8 -0
- package/lib/icons/status/error-triangle-icon/error-triangle-icon.stories.d.ts +8 -0
- package/lib/icons/status/info-icon/info-icon.stories.d.ts +8 -0
- package/lib/icons/status/warning-triangle-icon/warning-triangle-icon.stories.d.ts +8 -0
- package/lib/icons.js +3 -2
- package/lib/{index-D3sp5Hx7.js → index-B6FywnIf.js} +97 -3
- package/lib/{index-DwBxpY4g.js → index-BfatCMWq.js} +28 -3
- package/lib/index-ByO2rgKy.js +36 -0
- package/lib/{index-C7Y1tYdc.js → index-CFnxjzaW.js} +1 -1
- package/lib/{index-B-iLphLA.js → index-CJs4RDHU.js} +1 -1
- package/lib/index-CWbxXTof.js +11 -0
- package/lib/index-CWufhl9G.js +25 -0
- package/lib/{index-Dylg236O.js → index-C_LWKMnO.js} +124 -163
- package/lib/{index-KOMAv-TS.js → index-CamnKrev.js} +8 -8
- package/lib/{index-DiTtXTRm.js → index-DMXaEyAB.js} +48 -11
- package/lib/index-Dqief9td.js +20 -0
- package/lib/{data → mock-data}/sources/index.d.ts +1 -0
- package/lib/snippets/add-button/index.d.ts +7 -0
- package/lib/snippets/edit-button/index.d.ts +7 -0
- package/lib/snippets/index.d.ts +3 -0
- package/lib/snippets/note-back-to-summary/index.d.ts +6 -0
- package/lib/snippets/note-back-to-summary/note-back-to-summary.stories.d.ts +9 -0
- package/lib/snippets.js +17 -0
- package/lib/store/index.d.ts +1 -0
- package/lib/store/useDataStreamStore.d.ts +16 -0
- package/lib/store/useSetupStore.d.ts +14 -24
- package/lib/store.js +1 -1
- package/lib/theme.js +1 -1
- package/lib/types/data-streams/index.d.ts +3 -0
- package/lib/types/destinations/index.d.ts +14 -2
- package/lib/types/index.d.ts +1 -0
- package/lib/types/namespaces/index.d.ts +13 -0
- package/lib/types/sources/index.d.ts +4 -1
- package/lib/{useSourceSelectionFormData-Bec4Ubm7.js → useSourceSelectionFormData-plxXIM0Q.js} +60 -102
- package/lib/{useTransition-D0ykOLrk.js → useTransition-BPxqZqXu.js} +2 -2
- package/package.json +21 -15
- package/lib/containers/destination-modal/choose-destination/potential-destinations-list/index.d.ts +0 -8
- package/lib/containers/destination-selection-form/configured-list/index.d.ts +0 -5
- package/lib/containers/source-selection-form/controls/index.d.ts +0 -7
- package/lib/containers/source-selection-form/list/index.d.ts +0 -9
- package/lib/index-C_0J5P9M.js +0 -45
- /package/lib/{data → mock-data}/actions/index.d.ts +0 -0
- /package/lib/{data → mock-data}/describe/index.d.ts +0 -0
- /package/lib/{data → mock-data}/destinations/index.d.ts +0 -0
- /package/lib/{data → mock-data}/index.d.ts +0 -0
- /package/lib/{data → mock-data}/instrumentation-rules/index.d.ts +0 -0
- /package/lib/{data → mock-data}/namespaces/index.d.ts +0 -0
- /package/lib/{data → mock-data}/tokens/index.d.ts +0 -0
package/lib/containers.js
CHANGED
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
import React, { useState, useEffect, forwardRef, useRef, useImperativeHandle, useMemo, memo, useContext, createContext, useCallback, useLayoutEffect, Fragment } from 'react';
|
|
2
2
|
import styled, { css } from 'styled-components';
|
|
3
|
-
import { A as ACTION_OPTIONS, M as MONITORS_OPTIONS, I as INSTRUMENTATION_RULE_OPTIONS } from './index-
|
|
4
|
-
import { D as DISPLAY_TITLES, F as FORM_ALERTS } from './index-C_0J5P9M.js';
|
|
3
|
+
import { D as DISPLAY_TITLES, A as ACTION_OPTIONS, M as MONITORS_OPTIONS, B as BUTTON_TEXTS, I as INSTRUMENTATION_RULE_OPTIONS, F as FORM_ALERTS } from './index-B6FywnIf.js';
|
|
5
4
|
import { ActionType, EntityTypes, StatusType, Crud, OtherStatus, NodeTypes, AddNodeTypes, EdgeTypes, FieldTypes, SignalType, CodeAttributesKeyTypes, PayloadCollectionKeyTypes, InstrumentationRuleType } from './types.js';
|
|
6
|
-
import { f as DataCardFieldTypes,
|
|
7
|
-
import {
|
|
5
|
+
import { f as DataCardFieldTypes, o as FieldLabel, C as Checkbox, n as FieldError, u as Input, w as InputTable, K as KeyValueInputsList, v as InputList, V as Text, O as Segment, L as SectionTitle, i as DocsButton, y as MonitorsCheckboxes, W as TextArea, j as Drawer, d as ConditionDetails, D as DataCard, M as Modal, N as NavigationButtons, a4 as ModalBody, a as AutocompleteInput, h as Divider, R as Status, $ as FlexRow, Y as Tooltip, r as IconWrapped, z as MonitorsIcons, a5 as TableContainer, a6 as TableTitleWrap, q as IconTitleBadge, a7 as TableWrap, x as InteractiveTable, a1 as CenterThis, G as NoDataFound, a0 as FlexColumn, Z as TraceLoader, b as Badge, E as ExtendArrow, a2 as VerticalScroll, P as SelectionButton, B as Button, m as Dropdown, a8 as getDefaultExportFromCjs, F as FadeLoader, g as DataTab, Q as SkeletonLoader, X as Toggle, A as AddButton$1, J as NotificationNote, U as Stepper, I as IconButton, e as DataCardFields, s as IconsNav, p as IconGroup } from './index-C_LWKMnO.js';
|
|
6
|
+
import { h as usePendingStore, g as useNotificationStore, b as useDrawerStore, c as useEntityStore, f as useModalStore, d as useFilterStore, s as styleInject, i as useSelectedStore, e as useInstrumentStore, a as useDataStreamStore, k as getEntityId, j as useSetupStore, u as useDarkMode } from './index-DMXaEyAB.js';
|
|
8
7
|
import Theme from './theme.js';
|
|
9
8
|
import { i as isEmpty, s as safeJsonParse } from './index-BZS1ijMm.js';
|
|
10
9
|
import { i as CheckCircledIcon, O as OdigosLogo } from './index-IKusBlIE.js';
|
|
11
|
-
import { C as CrossCircledIcon,
|
|
12
|
-
import { g as getActionIcon, a as getInstrumentationRuleIcon } from './index-
|
|
13
|
-
import { u as useActionFormData, a as useClickNode, c as useDestinationFormData, b as useClickNotification, d as useSourceFormData, e as useSourceSelectionFormData } from './useSourceSelectionFormData-
|
|
14
|
-
import { d as useKeyDown, e as useOnClickOutside, u as useContainerSize, c as useInstrumentationRuleFormData, g as useTransition, f as useTimeAgo, a as useCopy } from './useTransition-
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
10
|
+
import { C as CrossCircledIcon, O as OdigosLogoText, a as OverviewIcon, F as FilterIcon, D as DataStreamsIcon, N as NotificationIcon, S as SlackLogo, K as KeyIcon, T as TerminalIcon } from './index-CamnKrev.js';
|
|
11
|
+
import { g as getActionIcon, a as getInstrumentationRuleIcon } from './index-CFnxjzaW.js';
|
|
12
|
+
import { u as useActionFormData, a as useClickNode, c as useDestinationFormData, b as useClickNotification, d as useSourceFormData, e as useSourceSelectionFormData } from './useSourceSelectionFormData-plxXIM0Q.js';
|
|
13
|
+
import { d as useKeyDown, e as useOnClickOutside, u as useContainerSize, c as useInstrumentationRuleFormData, g as useTransition, f as useTimeAgo, a as useCopy } from './useTransition-BPxqZqXu.js';
|
|
14
|
+
import { E as EditIcon } from './index-CWbxXTof.js';
|
|
15
|
+
import { T as TrashIcon, S as SearchIcon, P as PlusIcon$1, f as CheckIcon, A as ArrowIcon, a as CopyIcon, g as CrossIcon } from './index-BJxaoI0G.js';
|
|
16
|
+
import { D as DeleteWarning, C as CancelWarning } from './index-ByO2rgKy.js';
|
|
17
|
+
import { m as mapConditions, b as getStatusIcon, c as capitalizeFirstLetter } from './index-CJs4RDHU.js';
|
|
18
|
+
import { f as filterActions, i as getConditionsBooleans, n as getEntityLabel, m as getEntityIcon, v as sleep$1, p as getPlatformIcon, q as getPlatformLabel, h as formatBytes, k as getContainersIcons, r as getValueForRange, l as getDestinationIcon, u as mapExportedSignals, g as filterSourcesByStream, e as filterSources, b as filterDestinationsByStream, a as filterDestinations, c as compareCondition, d as deepClone, o as getMetricForEntity, s as getWorkloadId, j as getContainersInstrumentedCount, t as isOverTime } from './index-BfatCMWq.js';
|
|
18
19
|
import { createPortal } from 'react-dom';
|
|
20
|
+
import { N as NoteBackToSummary, E as EditButton } from './index-CWufhl9G.js';
|
|
21
|
+
import { D as DESTINATION_CATEGORIES } from './index-Dqief9td.js';
|
|
19
22
|
import { a6 as RulesIcon, a7 as SourcesIcon, a3 as ActionsIcon, a4 as DestinationsIcon } from './index-BRW_Nl-n.js';
|
|
20
23
|
import './index-DGel4E-Z.js';
|
|
21
24
|
import './index-7-KCQK-x.js';
|
|
@@ -302,7 +305,7 @@ const CustomFields$1 = ({ actionType, value, setValue, formErrors }) => {
|
|
|
302
305
|
return Component ? React.createElement(Component, { value: value, setValue: setValue, formErrors: formErrors }) : null;
|
|
303
306
|
};
|
|
304
307
|
|
|
305
|
-
const Container$
|
|
308
|
+
const Container$n = styled.div `
|
|
306
309
|
display: flex;
|
|
307
310
|
flex-direction: column;
|
|
308
311
|
gap: 24px;
|
|
@@ -313,7 +316,7 @@ const FieldTitle$1 = styled(Text) `
|
|
|
313
316
|
`;
|
|
314
317
|
const ActionForm = ({ isUpdate, action, formData, formErrors, handleFormChange }) => {
|
|
315
318
|
const theme = Theme.useTheme();
|
|
316
|
-
return (React.createElement(Container$
|
|
319
|
+
return (React.createElement(Container$n, null,
|
|
317
320
|
isUpdate && (React.createElement("div", null,
|
|
318
321
|
React.createElement(FieldTitle$1, null, "Status"),
|
|
319
322
|
React.createElement(Segment, { options: [
|
|
@@ -668,7 +671,7 @@ const ConditionsStatuses = ({ conditions, id }) => {
|
|
|
668
671
|
const columns$3 = [
|
|
669
672
|
{ key: 'icon', title: '' },
|
|
670
673
|
{ key: 'name', title: DISPLAY_TITLES.NAME, sortable: true },
|
|
671
|
-
{ key: 'signals', title: DISPLAY_TITLES.
|
|
674
|
+
{ key: 'signals', title: DISPLAY_TITLES.MONITORS },
|
|
672
675
|
{ key: 'active-status', title: DISPLAY_TITLES.STATUS },
|
|
673
676
|
{ key: 'conditions', title: 'Conditions' },
|
|
674
677
|
{ key: 'type', title: DISPLAY_TITLES.TYPE, sortable: true },
|
|
@@ -736,14 +739,14 @@ const ActionTable = ({ maxHeight, maxWidth }) => {
|
|
|
736
739
|
const badgeTooltip = useMemo(() => (filtered.length !== actions.length ? DISPLAY_TITLES.FILTERED_COUNT_TOOLTIP : undefined), [filtered, actions]);
|
|
737
740
|
return (React.createElement(TableContainer, { "$maxWidth": maxWidth },
|
|
738
741
|
React.createElement(TableTitleWrap, null,
|
|
739
|
-
React.createElement(IconTitleBadge, { icon: getEntityIcon(EntityTypes.Action), title: DISPLAY_TITLES.
|
|
742
|
+
React.createElement(IconTitleBadge, { icon: getEntityIcon(EntityTypes.Action), title: DISPLAY_TITLES.ACTIONS, badge: badge, badgeTooltip: badgeTooltip, loading: actionsLoading })),
|
|
740
743
|
React.createElement(TableWrap, { "$maxHeight": maxHeight },
|
|
741
744
|
React.createElement(InteractiveTable, { columns: columns$3, rows: rows })),
|
|
742
745
|
!filtered.length && (React.createElement(CenterThis, { style: { marginTop: '2rem' } },
|
|
743
746
|
React.createElement(NoDataFound, null)))));
|
|
744
747
|
};
|
|
745
748
|
|
|
746
|
-
const Container$
|
|
749
|
+
const Container$m = styled(FlexColumn) `
|
|
747
750
|
// width: 100vw;
|
|
748
751
|
// height: 100vh;
|
|
749
752
|
gap: 64px;
|
|
@@ -777,7 +780,7 @@ const AwaitPipeline = () => {
|
|
|
777
780
|
useEffect(() => {
|
|
778
781
|
awaitPipeline();
|
|
779
782
|
}, []);
|
|
780
|
-
return (React.createElement(Container$
|
|
783
|
+
return (React.createElement(Container$m, null,
|
|
781
784
|
React.createElement(OdigosLogoText, { size: 100 }),
|
|
782
785
|
React.createElement(TraceLoader, { width: 400 }),
|
|
783
786
|
React.createElement(TextWrap, null,
|
|
@@ -787,37 +790,6 @@ const AwaitPipeline = () => {
|
|
|
787
790
|
React.createElement(Description, null, "It can take up to a few minutes. Grab a cup of coffee, look out a window, and enjoy your free moment!"))));
|
|
788
791
|
};
|
|
789
792
|
|
|
790
|
-
const StyledButton = styled(Button) `
|
|
791
|
-
gap: 8px;
|
|
792
|
-
text-transform: none;
|
|
793
|
-
text-decoration: none;
|
|
794
|
-
border: ${({ theme, $withBorder }) => `1px solid ${$withBorder ? theme.colors.border : 'transparent'}`};
|
|
795
|
-
&.not-selected {
|
|
796
|
-
background-color: ${({ theme, $color }) => $color || theme.colors.dropdown_bg_2 + Theme.opacity.hex['060']};
|
|
797
|
-
&:hover {
|
|
798
|
-
background-color: ${({ theme, $hoverColor }) => $hoverColor || theme.colors.dropdown_bg_2};
|
|
799
|
-
}
|
|
800
|
-
}
|
|
801
|
-
&.selected {
|
|
802
|
-
background-color: ${({ theme }) => theme.colors.majestic_blue + Theme.opacity.hex['048']};
|
|
803
|
-
}
|
|
804
|
-
`;
|
|
805
|
-
const TextLimited = styled(Text) `
|
|
806
|
-
white-space: nowrap;
|
|
807
|
-
overflow: hidden;
|
|
808
|
-
text-overflow: ellipsis;
|
|
809
|
-
font-size: 14px;
|
|
810
|
-
`;
|
|
811
|
-
const SelectionButton = ({ label, onClick, icon: Icon, iconSrc, badgeLabel, badgeFilled, isSelected, withBorder, color, hoverColor, style }) => {
|
|
812
|
-
return (React.createElement(StyledButton, { onClick: onClick, className: isSelected ? 'selected' : 'not-selected', "$withBorder": withBorder, "$color": color, "$hoverColor": hoverColor, style: style },
|
|
813
|
-
Icon && (React.createElement("div", null,
|
|
814
|
-
React.createElement(Icon, null))),
|
|
815
|
-
iconSrc && (React.createElement("div", null,
|
|
816
|
-
React.createElement("img", { src: iconSrc, alt: '', width: 16, height: 16 }))),
|
|
817
|
-
React.createElement(TextLimited, null, label),
|
|
818
|
-
badgeLabel !== undefined && React.createElement(Badge, { label: badgeLabel, filled: badgeFilled || isSelected })));
|
|
819
|
-
};
|
|
820
|
-
|
|
821
793
|
const Tab = styled(FlexRow) `
|
|
822
794
|
width: 260px;
|
|
823
795
|
padding: 4px;
|
|
@@ -850,10 +822,10 @@ const PushToEnd$1 = styled.div `
|
|
|
850
822
|
margin-left: auto;
|
|
851
823
|
margin-right: 6px;
|
|
852
824
|
`;
|
|
853
|
-
const RelativeContainer$
|
|
825
|
+
const RelativeContainer$3 = styled.div `
|
|
854
826
|
position: relative;
|
|
855
827
|
`;
|
|
856
|
-
const AbsoluteContainer$
|
|
828
|
+
const AbsoluteContainer$3 = styled.div `
|
|
857
829
|
position: absolute;
|
|
858
830
|
top: calc(100% + 8px);
|
|
859
831
|
left: 0;
|
|
@@ -863,12 +835,6 @@ const AbsoluteContainer$2 = styled.div `
|
|
|
863
835
|
border-radius: 24px;
|
|
864
836
|
width: 420px;
|
|
865
837
|
`;
|
|
866
|
-
const VerticalScroll$1 = styled.div `
|
|
867
|
-
display: flex;
|
|
868
|
-
flex-direction: column;
|
|
869
|
-
padding: 12px;
|
|
870
|
-
overflow-y: scroll;
|
|
871
|
-
`;
|
|
872
838
|
const HeadWrap = styled.div `
|
|
873
839
|
border-bottom: ${({ theme }) => `1px solid ${theme.colors.border}`};
|
|
874
840
|
padding: 12px;
|
|
@@ -891,16 +857,16 @@ const ComputePlatformSelect = ({ connections, selected, onSelect, onViewAll }) =
|
|
|
891
857
|
const withSelect = !!connections.length;
|
|
892
858
|
const filtered = connections.filter(({ id }) => id.toLowerCase().includes(searchText));
|
|
893
859
|
const Icon = !!selected?.type ? getPlatformIcon(selected.type) : null;
|
|
894
|
-
return (React.createElement(RelativeContainer$
|
|
860
|
+
return (React.createElement(RelativeContainer$3, { ref: containerRef },
|
|
895
861
|
React.createElement(Tab, { "$withSelect": withSelect, onClick: () => setIsOpen((prev) => !prev) },
|
|
896
862
|
React.createElement(LogoWrap, null, !!Icon ? React.createElement(Icon, { size: 20, fill: theme.text.info }) : React.createElement(OverviewIcon, { fill: theme.text.info })),
|
|
897
863
|
React.createElement(Title$2, null, selected?.name || selected?.id || 'no platform'),
|
|
898
864
|
withSelect && (React.createElement(PushToEnd$1, null,
|
|
899
865
|
React.createElement(ExtendArrow, { extend: isOpen, align: 'right' })))),
|
|
900
|
-
isOpen && withSelect && (React.createElement(AbsoluteContainer$
|
|
866
|
+
isOpen && withSelect && (React.createElement(AbsoluteContainer$3, null,
|
|
901
867
|
React.createElement(HeadWrap, null,
|
|
902
868
|
React.createElement(Input, { placeholder: 'Search...', icon: SearchIcon, value: searchText, onChange: (e) => setSearchText(e.target.value.toLowerCase()) })),
|
|
903
|
-
React.createElement(VerticalScroll
|
|
869
|
+
React.createElement(VerticalScroll, { style: { maxHeight: '240px' } }, filtered.map(({ id, type, name, status }, idx) => (React.createElement(SelectionButton, { key: `platform-${id}`, icon: () => getPlatformIcon(type)({ fill: status === StatusType.Success ? theme.text.success : theme.text.error }), label: `${!!name ? name : getPlatformLabel(type)} (${id})`, isSelected: selected?.id === id, onClick: () => {
|
|
904
870
|
if (status === StatusType.Success) {
|
|
905
871
|
onSelect(filtered[idx]);
|
|
906
872
|
}
|
|
@@ -975,8 +941,7 @@ const ConnectionTypeDropdown = ({ connections, title = '', value, onSelect, onDe
|
|
|
975
941
|
return React.createElement(Dropdown, { disabled: !options?.length, title: title, placeholder: 'All Types', options: options, value: value, onSelect: onSelect, onDeselect: onDeselect, ...props });
|
|
976
942
|
};
|
|
977
943
|
|
|
978
|
-
const ErrorDropdown = ({ title = 'Error Message', value, onSelect, onDeselect, disabled, ...props }) => {
|
|
979
|
-
const { sources } = useEntityStore();
|
|
944
|
+
const ErrorDropdown = ({ sources, title = 'Error Message', value, onSelect, onDeselect, disabled, ...props }) => {
|
|
980
945
|
const options = useMemo(() => {
|
|
981
946
|
const payload = [];
|
|
982
947
|
// !! note:
|
|
@@ -1001,8 +966,7 @@ const ErrorDropdown = ({ title = 'Error Message', value, onSelect, onDeselect, d
|
|
|
1001
966
|
return React.createElement(Dropdown, { disabled: disabled || !options?.length, title: title, placeholder: 'All', options: options, value: value, onSelect: onSelect, onDeselect: onDeselect, ...props });
|
|
1002
967
|
};
|
|
1003
968
|
|
|
1004
|
-
const LanguageDropdown = ({ title = 'Programming Language', value, onSelect, onDeselect, ...props }) => {
|
|
1005
|
-
const { sources } = useEntityStore();
|
|
969
|
+
const LanguageDropdown = ({ sources, title = 'Programming Language', value, onSelect, onDeselect, ...props }) => {
|
|
1006
970
|
const options = useMemo(() => {
|
|
1007
971
|
const payload = [];
|
|
1008
972
|
sources.forEach(({ containers }) => {
|
|
@@ -1029,8 +993,7 @@ const MonitorDropdown = ({ title = 'Monitors', value, onSelect, onDeselect, ...p
|
|
|
1029
993
|
return React.createElement(Dropdown, { disabled: !options?.length, title: title, placeholder: 'All', options: options, value: value, onSelect: onSelect, onDeselect: onDeselect, ...props });
|
|
1030
994
|
};
|
|
1031
995
|
|
|
1032
|
-
const NamespaceDropdown = ({ title = 'Namespace', value, onSelect, onDeselect, ...props }) => {
|
|
1033
|
-
const { namespaces } = useEntityStore();
|
|
996
|
+
const NamespaceDropdown = ({ namespaces, title = 'Namespace', value, onSelect, onDeselect, ...props }) => {
|
|
1034
997
|
const options = useMemo(() => {
|
|
1035
998
|
const payload = [];
|
|
1036
999
|
namespaces?.forEach(({ name }) => {
|
|
@@ -1043,8 +1006,7 @@ const NamespaceDropdown = ({ title = 'Namespace', value, onSelect, onDeselect, .
|
|
|
1043
1006
|
return React.createElement(Dropdown, { disabled: !options?.length, title: title, placeholder: 'Select namespace', options: options, value: value, onSelect: onSelect, onDeselect: onDeselect, ...props });
|
|
1044
1007
|
};
|
|
1045
1008
|
|
|
1046
|
-
const KindDropdown = ({ title = 'Kind', value, onSelect, onDeselect, ...props }) => {
|
|
1047
|
-
const { sources } = useEntityStore();
|
|
1009
|
+
const KindDropdown = ({ sources, title = 'Kind', value, onSelect, onDeselect, ...props }) => {
|
|
1048
1010
|
const options = useMemo(() => {
|
|
1049
1011
|
const payload = [];
|
|
1050
1012
|
sources.forEach(({ kind: id }) => {
|
|
@@ -1057,7 +1019,7 @@ const KindDropdown = ({ title = 'Kind', value, onSelect, onDeselect, ...props })
|
|
|
1057
1019
|
return React.createElement(Dropdown, { disabled: !options?.length, title: title, placeholder: 'All', options: options, value: value, onSelect: onSelect, onDeselect: onDeselect, ...props });
|
|
1058
1020
|
};
|
|
1059
1021
|
|
|
1060
|
-
const Container$
|
|
1022
|
+
const Container$l = styled.div `
|
|
1061
1023
|
display: flex;
|
|
1062
1024
|
align-items: center;
|
|
1063
1025
|
margin: 20px 0;
|
|
@@ -1077,7 +1039,7 @@ const ComputePlatformsActionsMenu = ({ connections }) => {
|
|
|
1077
1039
|
useEffect(() => {
|
|
1078
1040
|
return () => clearAll();
|
|
1079
1041
|
}, [clearAll]);
|
|
1080
|
-
return (React.createElement(Container$
|
|
1042
|
+
return (React.createElement(Container$l, null,
|
|
1081
1043
|
React.createElement(FlexRow, { "$gap": 16 },
|
|
1082
1044
|
React.createElement(FlexRow, { "$gap": 12 },
|
|
1083
1045
|
React.createElement(Title$1, null, "Compute platforms"),
|
|
@@ -1089,7 +1051,7 @@ const ComputePlatformsActionsMenu = ({ connections }) => {
|
|
|
1089
1051
|
React.createElement(ConnectionStatusDropdown, { connections: connections, value: statuses, onSelect: (val) => setStatuses([...(statuses || []), val]), onDeselect: (val) => setStatuses((statuses || []).filter((opt) => opt.id !== val.id)), showSearch: true, required: true, isMulti: true })))));
|
|
1090
1052
|
};
|
|
1091
1053
|
|
|
1092
|
-
var css_248z = "/* this gets exported as style.css and can be used for the default theming */\n/* these are the necessary styles for React/Svelte Flow, they get used by base.css and style.css */\n.react-flow {\n direction: ltr;\n\n --xy-edge-stroke-default: #b1b1b7;\n --xy-edge-stroke-width-default: 1;\n --xy-edge-stroke-selected-default: #555;\n\n --xy-connectionline-stroke-default: #b1b1b7;\n --xy-connectionline-stroke-width-default: 1;\n\n --xy-attribution-background-color-default: rgba(255, 255, 255, 0.5);\n\n --xy-minimap-background-color-default: #fff;\n --xy-minimap-mask-background-color-default: rgba(240, 240, 240, 0.6);\n --xy-minimap-mask-stroke-color-default: transparent;\n --xy-minimap-mask-stroke-width-default: 1;\n --xy-minimap-node-background-color-default: #e2e2e2;\n --xy-minimap-node-stroke-color-default: transparent;\n --xy-minimap-node-stroke-width-default: 2;\n\n --xy-background-color-default: transparent;\n --xy-background-pattern-dots-color-default: #91919a;\n --xy-background-pattern-lines-color-default: #eee;\n --xy-background-pattern-cross-color-default: #e2e2e2;\n background-color: var(--xy-background-color, var(--xy-background-color-default));\n --xy-node-color-default: inherit;\n --xy-node-border-default: 1px solid #1a192b;\n --xy-node-background-color-default: #fff;\n --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);\n --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, 0.08);\n --xy-node-boxshadow-selected-default: 0 0 0 0.5px #1a192b;\n --xy-node-border-radius-default: 3px;\n\n --xy-handle-background-color-default: #1a192b;\n --xy-handle-border-color-default: #fff;\n\n --xy-selection-background-color-default: rgba(0, 89, 220, 0.08);\n --xy-selection-border-default: 1px dotted rgba(0, 89, 220, 0.8);\n\n --xy-controls-button-background-color-default: #fefefe;\n --xy-controls-button-background-color-hover-default: #f4f4f4;\n --xy-controls-button-color-default: inherit;\n --xy-controls-button-color-hover-default: inherit;\n --xy-controls-button-border-color-default: #eee;\n --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);\n\n --xy-edge-label-background-color-default: #ffffff;\n --xy-edge-label-color-default: inherit;\n --xy-resize-background-color-default: #3367d9;\n}\n.react-flow.dark {\n --xy-edge-stroke-default: #3e3e3e;\n --xy-edge-stroke-width-default: 1;\n --xy-edge-stroke-selected-default: #727272;\n\n --xy-connectionline-stroke-default: #b1b1b7;\n --xy-connectionline-stroke-width-default: 1;\n\n --xy-attribution-background-color-default: rgba(150, 150, 150, 0.25);\n\n --xy-minimap-background-color-default: #141414;\n --xy-minimap-mask-background-color-default: rgba(60, 60, 60, 0.6);\n --xy-minimap-mask-stroke-color-default: transparent;\n --xy-minimap-mask-stroke-width-default: 1;\n --xy-minimap-node-background-color-default: #2b2b2b;\n --xy-minimap-node-stroke-color-default: transparent;\n --xy-minimap-node-stroke-width-default: 2;\n\n --xy-background-color-default: #141414;\n --xy-background-pattern-dots-color-default: #777;\n --xy-background-pattern-lines-color-default: #777;\n --xy-background-pattern-cross-color-default: #777;\n --xy-node-color-default: #f8f8f8;\n --xy-node-border-default: 1px solid #3c3c3c;\n --xy-node-background-color-default: #1e1e1e;\n --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);\n --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, 0.08);\n --xy-node-boxshadow-selected-default: 0 0 0 0.5px #999;\n\n --xy-handle-background-color-default: #bebebe;\n --xy-handle-border-color-default: #1e1e1e;\n\n --xy-selection-background-color-default: rgba(200, 200, 220, 0.08);\n --xy-selection-border-default: 1px dotted rgba(200, 200, 220, 0.8);\n\n --xy-controls-button-background-color-default: #2b2b2b;\n --xy-controls-button-background-color-hover-default: #3e3e3e;\n --xy-controls-button-color-default: #f8f8f8;\n --xy-controls-button-color-hover-default: #fff;\n --xy-controls-button-border-color-default: #5b5b5b;\n --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);\n\n --xy-edge-label-background-color-default: #141414;\n --xy-edge-label-color-default: #f8f8f8;\n}\n.react-flow__background {\n background-color: var(--xy-background-color, var(--xy-background-color-props, var(--xy-background-color-default)));\n pointer-events: none;\n z-index: -1;\n}\n.react-flow__container {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n}\n.react-flow__pane {\n z-index: 1;\n}\n.react-flow__pane.draggable {\n cursor: grab;\n }\n.react-flow__pane.dragging {\n cursor: grabbing;\n }\n.react-flow__pane.selection {\n cursor: pointer;\n }\n.react-flow__viewport {\n transform-origin: 0 0;\n z-index: 2;\n pointer-events: none;\n}\n.react-flow__renderer {\n z-index: 4;\n}\n.react-flow__selection {\n z-index: 6;\n}\n.react-flow__nodesselection-rect:focus,\n.react-flow__nodesselection-rect:focus-visible {\n outline: none;\n}\n.react-flow__edge-path {\n stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));\n stroke-width: var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));\n fill: none;\n}\n.react-flow__connection-path {\n stroke: var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));\n stroke-width: var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));\n fill: none;\n}\n.react-flow .react-flow__edges {\n position: absolute;\n}\n.react-flow .react-flow__edges svg {\n overflow: visible;\n position: absolute;\n pointer-events: none;\n }\n.react-flow__edge {\n pointer-events: visibleStroke;\n}\n.react-flow__edge.selectable {\n cursor: pointer;\n }\n.react-flow__edge.animated path {\n stroke-dasharray: 5;\n animation: dashdraw 0.5s linear infinite;\n }\n.react-flow__edge.animated path.react-flow__edge-interaction {\n stroke-dasharray: none;\n animation: none;\n }\n.react-flow__edge.inactive {\n pointer-events: none;\n }\n.react-flow__edge.selected,\n .react-flow__edge:focus,\n .react-flow__edge:focus-visible {\n outline: none;\n }\n.react-flow__edge.selected .react-flow__edge-path,\n .react-flow__edge.selectable:focus .react-flow__edge-path,\n .react-flow__edge.selectable:focus-visible .react-flow__edge-path {\n stroke: var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default));\n }\n.react-flow__edge-textwrapper {\n pointer-events: all;\n }\n.react-flow__edge .react-flow__edge-text {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n.react-flow__connection {\n pointer-events: none;\n}\n.react-flow__connection .animated {\n stroke-dasharray: 5;\n animation: dashdraw 0.5s linear infinite;\n }\nsvg.react-flow__connectionline {\n z-index: 1001;\n overflow: visible;\n position: absolute;\n}\n.react-flow__nodes {\n pointer-events: none;\n transform-origin: 0 0;\n}\n.react-flow__node {\n position: absolute;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n pointer-events: all;\n transform-origin: 0 0;\n box-sizing: border-box;\n cursor: default;\n}\n.react-flow__node.selectable {\n cursor: pointer;\n }\n.react-flow__node.draggable {\n cursor: grab;\n pointer-events: all;\n }\n.react-flow__node.draggable.dragging {\n cursor: grabbing;\n }\n.react-flow__nodesselection {\n z-index: 3;\n transform-origin: left top;\n pointer-events: none;\n}\n.react-flow__nodesselection-rect {\n position: absolute;\n pointer-events: all;\n cursor: grab;\n }\n.react-flow__handle {\n position: absolute;\n pointer-events: none;\n min-width: 5px;\n min-height: 5px;\n width: 6px;\n height: 6px;\n background-color: var(--xy-handle-background-color, var(--xy-handle-background-color-default));\n border: 1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));\n border-radius: 100%;\n}\n.react-flow__handle.connectingfrom {\n pointer-events: all;\n }\n.react-flow__handle.connectionindicator {\n pointer-events: all;\n cursor: crosshair;\n }\n.react-flow__handle-bottom {\n top: auto;\n left: 50%;\n bottom: 0;\n transform: translate(-50%, 50%);\n }\n.react-flow__handle-top {\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n.react-flow__handle-left {\n top: 50%;\n left: 0;\n transform: translate(-50%, -50%);\n }\n.react-flow__handle-right {\n top: 50%;\n right: 0;\n transform: translate(50%, -50%);\n }\n.react-flow__edgeupdater {\n cursor: move;\n pointer-events: all;\n}\n.react-flow__panel {\n position: absolute;\n z-index: 5;\n margin: 15px;\n}\n.react-flow__panel.top {\n top: 0;\n }\n.react-flow__panel.bottom {\n bottom: 0;\n }\n.react-flow__panel.top.center, .react-flow__panel.bottom.center {\n left: 50%;\n transform: translateX(-50%);\n }\n.react-flow__panel.left {\n left: 0;\n }\n.react-flow__panel.right {\n right: 0;\n }\n.react-flow__panel.left.center, .react-flow__panel.right.center {\n top: 50%;\n transform: translateY(-50%);\n }\n.react-flow__attribution {\n font-size: 10px;\n background: var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));\n padding: 2px 3px;\n margin: 0;\n}\n.react-flow__attribution a {\n text-decoration: none;\n color: #999;\n }\n@keyframes dashdraw {\n from {\n stroke-dashoffset: 10;\n }\n}\n.react-flow__edgelabel-renderer {\n position: absolute;\n width: 100%;\n height: 100%;\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n left: 0;\n top: 0;\n}\n.react-flow__viewport-portal {\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.react-flow__minimap {\n background: var(\n --xy-minimap-background-color-props,\n var(--xy-minimap-background-color, var(--xy-minimap-background-color-default))\n );\n}\n.react-flow__minimap-svg {\n display: block;\n }\n.react-flow__minimap-mask {\n fill: var(\n --xy-minimap-mask-background-color-props,\n var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default))\n );\n stroke: var(\n --xy-minimap-mask-stroke-color-props,\n var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default))\n );\n stroke-width: var(\n --xy-minimap-mask-stroke-width-props,\n var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default))\n );\n }\n.react-flow__minimap-node {\n fill: var(\n --xy-minimap-node-background-color-props,\n var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default))\n );\n stroke: var(\n --xy-minimap-node-stroke-color-props,\n var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default))\n );\n stroke-width: var(\n --xy-minimap-node-stroke-width-props,\n var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default))\n );\n }\n.react-flow__background-pattern.dots {\n fill: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default))\n );\n }\n.react-flow__background-pattern.lines {\n stroke: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default))\n );\n }\n.react-flow__background-pattern.cross {\n stroke: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default))\n );\n }\n.react-flow__controls {\n display: flex;\n flex-direction: column;\n box-shadow: var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default));\n}\n.react-flow__controls.horizontal {\n flex-direction: row;\n }\n.react-flow__controls-button {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 26px;\n width: 26px;\n padding: 4px;\n border: none;\n background: var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));\n border-bottom: 1px solid\n var(\n --xy-controls-button-border-color-props,\n var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))\n );\n color: var(\n --xy-controls-button-color-props,\n var(--xy-controls-button-color, var(--xy-controls-button-color-default))\n );\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n.react-flow__controls-button svg {\n width: 100%;\n max-width: 12px;\n max-height: 12px;\n fill: currentColor;\n }\n.react-flow__edge.updating .react-flow__edge-path {\n stroke: #777;\n }\n.react-flow__edge-text {\n font-size: 10px;\n }\n.react-flow__node.selectable:focus,\n .react-flow__node.selectable:focus-visible {\n outline: none;\n }\n.react-flow__node-input,\n.react-flow__node-default,\n.react-flow__node-output,\n.react-flow__node-group {\n padding: 10px;\n border-radius: var(--xy-node-border-radius, var(--xy-node-border-radius-default));\n width: 150px;\n font-size: 12px;\n color: var(--xy-node-color, var(--xy-node-color-default));\n text-align: center;\n border: var(--xy-node-border, var(--xy-node-border-default));\n background-color: var(--xy-node-background-color, var(--xy-node-background-color-default));\n}\n.react-flow__node-input.selectable:hover, .react-flow__node-default.selectable:hover, .react-flow__node-output.selectable:hover, .react-flow__node-group.selectable:hover {\n box-shadow: var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default));\n }\n.react-flow__node-input.selectable.selected,\n .react-flow__node-input.selectable:focus,\n .react-flow__node-input.selectable:focus-visible,\n .react-flow__node-default.selectable.selected,\n .react-flow__node-default.selectable:focus,\n .react-flow__node-default.selectable:focus-visible,\n .react-flow__node-output.selectable.selected,\n .react-flow__node-output.selectable:focus,\n .react-flow__node-output.selectable:focus-visible,\n .react-flow__node-group.selectable.selected,\n .react-flow__node-group.selectable:focus,\n .react-flow__node-group.selectable:focus-visible {\n box-shadow: var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default));\n }\n.react-flow__node-group {\n background-color: var(--xy-node-group-background-color, var(--xy-node-group-background-color-default));\n}\n.react-flow__nodesselection-rect,\n.react-flow__selection {\n background: var(--xy-selection-background-color, var(--xy-selection-background-color-default));\n border: var(--xy-selection-border, var(--xy-selection-border-default));\n}\n.react-flow__nodesselection-rect:focus,\n .react-flow__nodesselection-rect:focus-visible,\n .react-flow__selection:focus,\n .react-flow__selection:focus-visible {\n outline: none;\n }\n.react-flow__controls-button:hover {\n background: var(\n --xy-controls-button-background-color-hover-props,\n var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default))\n );\n color: var(\n --xy-controls-button-color-hover-props,\n var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default))\n );\n }\n.react-flow__controls-button:disabled {\n pointer-events: none;\n }\n.react-flow__controls-button:disabled svg {\n fill-opacity: 0.4;\n }\n.react-flow__controls-button:last-child {\n border-bottom: none;\n }\n.react-flow__resize-control {\n position: absolute;\n}\n.react-flow__resize-control.left,\n.react-flow__resize-control.right {\n cursor: ew-resize;\n}\n.react-flow__resize-control.top,\n.react-flow__resize-control.bottom {\n cursor: ns-resize;\n}\n.react-flow__resize-control.top.left,\n.react-flow__resize-control.bottom.right {\n cursor: nwse-resize;\n}\n.react-flow__resize-control.bottom.left,\n.react-flow__resize-control.top.right {\n cursor: nesw-resize;\n}\n/* handle styles */\n.react-flow__resize-control.handle {\n width: 4px;\n height: 4px;\n border: 1px solid #fff;\n border-radius: 1px;\n background-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));\n transform: translate(-50%, -50%);\n}\n.react-flow__resize-control.handle.left {\n left: 0;\n top: 50%;\n}\n.react-flow__resize-control.handle.right {\n left: 100%;\n top: 50%;\n}\n.react-flow__resize-control.handle.top {\n left: 50%;\n top: 0;\n}\n.react-flow__resize-control.handle.bottom {\n left: 50%;\n top: 100%;\n}\n.react-flow__resize-control.handle.top.left {\n left: 0;\n}\n.react-flow__resize-control.handle.bottom.left {\n left: 0;\n}\n.react-flow__resize-control.handle.top.right {\n left: 100%;\n}\n.react-flow__resize-control.handle.bottom.right {\n left: 100%;\n}\n/* line styles */\n.react-flow__resize-control.line {\n border-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));\n border-width: 0;\n border-style: solid;\n}\n.react-flow__resize-control.line.left,\n.react-flow__resize-control.line.right {\n width: 1px;\n transform: translate(-50%, 0);\n top: 0;\n height: 100%;\n}\n.react-flow__resize-control.line.left {\n left: 0;\n border-left-width: 1px;\n}\n.react-flow__resize-control.line.right {\n left: 100%;\n border-right-width: 1px;\n}\n.react-flow__resize-control.line.top,\n.react-flow__resize-control.line.bottom {\n height: 1px;\n transform: translate(0, -50%);\n left: 0;\n width: 100%;\n}\n.react-flow__resize-control.line.top {\n top: 0;\n border-top-width: 1px;\n}\n.react-flow__resize-control.line.bottom {\n border-bottom-width: 1px;\n top: 100%;\n}\n.react-flow__edge-textbg {\n fill: var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default));\n}\n.react-flow__edge-text {\n fill: var(--xy-edge-label-color, var(--xy-edge-label-color-default));\n}\n";
|
|
1054
|
+
var css_248z = "/* this gets exported as style.css and can be used for the default theming */\n/* these are the necessary styles for React/Svelte Flow, they get used by base.css and style.css */\n.react-flow {\n direction: ltr;\n\n --xy-edge-stroke-default: #b1b1b7;\n --xy-edge-stroke-width-default: 1;\n --xy-edge-stroke-selected-default: #555;\n\n --xy-connectionline-stroke-default: #b1b1b7;\n --xy-connectionline-stroke-width-default: 1;\n\n --xy-attribution-background-color-default: rgba(255, 255, 255, 0.5);\n\n --xy-minimap-background-color-default: #fff;\n --xy-minimap-mask-background-color-default: rgba(240, 240, 240, 0.6);\n --xy-minimap-mask-stroke-color-default: transparent;\n --xy-minimap-mask-stroke-width-default: 1;\n --xy-minimap-node-background-color-default: #e2e2e2;\n --xy-minimap-node-stroke-color-default: transparent;\n --xy-minimap-node-stroke-width-default: 2;\n\n --xy-background-color-default: transparent;\n --xy-background-pattern-dots-color-default: #91919a;\n --xy-background-pattern-lines-color-default: #eee;\n --xy-background-pattern-cross-color-default: #e2e2e2;\n background-color: var(--xy-background-color, var(--xy-background-color-default));\n --xy-node-color-default: inherit;\n --xy-node-border-default: 1px solid #1a192b;\n --xy-node-background-color-default: #fff;\n --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);\n --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, 0.08);\n --xy-node-boxshadow-selected-default: 0 0 0 0.5px #1a192b;\n --xy-node-border-radius-default: 3px;\n\n --xy-handle-background-color-default: #1a192b;\n --xy-handle-border-color-default: #fff;\n\n --xy-selection-background-color-default: rgba(0, 89, 220, 0.08);\n --xy-selection-border-default: 1px dotted rgba(0, 89, 220, 0.8);\n\n --xy-controls-button-background-color-default: #fefefe;\n --xy-controls-button-background-color-hover-default: #f4f4f4;\n --xy-controls-button-color-default: inherit;\n --xy-controls-button-color-hover-default: inherit;\n --xy-controls-button-border-color-default: #eee;\n --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);\n\n --xy-edge-label-background-color-default: #ffffff;\n --xy-edge-label-color-default: inherit;\n --xy-resize-background-color-default: #3367d9;\n}\n.react-flow.dark {\n --xy-edge-stroke-default: #3e3e3e;\n --xy-edge-stroke-width-default: 1;\n --xy-edge-stroke-selected-default: #727272;\n\n --xy-connectionline-stroke-default: #b1b1b7;\n --xy-connectionline-stroke-width-default: 1;\n\n --xy-attribution-background-color-default: rgba(150, 150, 150, 0.25);\n\n --xy-minimap-background-color-default: #141414;\n --xy-minimap-mask-background-color-default: rgba(60, 60, 60, 0.6);\n --xy-minimap-mask-stroke-color-default: transparent;\n --xy-minimap-mask-stroke-width-default: 1;\n --xy-minimap-node-background-color-default: #2b2b2b;\n --xy-minimap-node-stroke-color-default: transparent;\n --xy-minimap-node-stroke-width-default: 2;\n\n --xy-background-color-default: #141414;\n --xy-background-pattern-dots-color-default: #777;\n --xy-background-pattern-lines-color-default: #777;\n --xy-background-pattern-cross-color-default: #777;\n --xy-node-color-default: #f8f8f8;\n --xy-node-border-default: 1px solid #3c3c3c;\n --xy-node-background-color-default: #1e1e1e;\n --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);\n --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, 0.08);\n --xy-node-boxshadow-selected-default: 0 0 0 0.5px #999;\n\n --xy-handle-background-color-default: #bebebe;\n --xy-handle-border-color-default: #1e1e1e;\n\n --xy-selection-background-color-default: rgba(200, 200, 220, 0.08);\n --xy-selection-border-default: 1px dotted rgba(200, 200, 220, 0.8);\n\n --xy-controls-button-background-color-default: #2b2b2b;\n --xy-controls-button-background-color-hover-default: #3e3e3e;\n --xy-controls-button-color-default: #f8f8f8;\n --xy-controls-button-color-hover-default: #fff;\n --xy-controls-button-border-color-default: #5b5b5b;\n --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);\n\n --xy-edge-label-background-color-default: #141414;\n --xy-edge-label-color-default: #f8f8f8;\n}\n.react-flow__background {\n background-color: var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));\n pointer-events: none;\n z-index: -1;\n}\n.react-flow__container {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n}\n.react-flow__pane {\n z-index: 1;\n}\n.react-flow__pane.draggable {\n cursor: grab;\n }\n.react-flow__pane.dragging {\n cursor: grabbing;\n }\n.react-flow__pane.selection {\n cursor: pointer;\n }\n.react-flow__viewport {\n transform-origin: 0 0;\n z-index: 2;\n pointer-events: none;\n}\n.react-flow__renderer {\n z-index: 4;\n}\n.react-flow__selection {\n z-index: 6;\n}\n.react-flow__nodesselection-rect:focus,\n.react-flow__nodesselection-rect:focus-visible {\n outline: none;\n}\n.react-flow__edge-path {\n stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));\n stroke-width: var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));\n fill: none;\n}\n.react-flow__connection-path {\n stroke: var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));\n stroke-width: var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));\n fill: none;\n}\n.react-flow .react-flow__edges {\n position: absolute;\n}\n.react-flow .react-flow__edges svg {\n overflow: visible;\n position: absolute;\n pointer-events: none;\n }\n.react-flow__edge {\n pointer-events: visibleStroke;\n}\n.react-flow__edge.selectable {\n cursor: pointer;\n }\n.react-flow__edge.animated path {\n stroke-dasharray: 5;\n animation: dashdraw 0.5s linear infinite;\n }\n.react-flow__edge.animated path.react-flow__edge-interaction {\n stroke-dasharray: none;\n animation: none;\n }\n.react-flow__edge.inactive {\n pointer-events: none;\n }\n.react-flow__edge.selected,\n .react-flow__edge:focus,\n .react-flow__edge:focus-visible {\n outline: none;\n }\n.react-flow__edge.selected .react-flow__edge-path,\n .react-flow__edge.selectable:focus .react-flow__edge-path,\n .react-flow__edge.selectable:focus-visible .react-flow__edge-path {\n stroke: var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default));\n }\n.react-flow__edge-textwrapper {\n pointer-events: all;\n }\n.react-flow__edge .react-flow__edge-text {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n.react-flow__connection {\n pointer-events: none;\n}\n.react-flow__connection .animated {\n stroke-dasharray: 5;\n animation: dashdraw 0.5s linear infinite;\n }\nsvg.react-flow__connectionline {\n z-index: 1001;\n overflow: visible;\n position: absolute;\n}\n.react-flow__nodes {\n pointer-events: none;\n transform-origin: 0 0;\n}\n.react-flow__node {\n position: absolute;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n pointer-events: all;\n transform-origin: 0 0;\n box-sizing: border-box;\n cursor: default;\n}\n.react-flow__node.selectable {\n cursor: pointer;\n }\n.react-flow__node.draggable {\n cursor: grab;\n pointer-events: all;\n }\n.react-flow__node.draggable.dragging {\n cursor: grabbing;\n }\n.react-flow__nodesselection {\n z-index: 3;\n transform-origin: left top;\n pointer-events: none;\n}\n.react-flow__nodesselection-rect {\n position: absolute;\n pointer-events: all;\n cursor: grab;\n }\n.react-flow__handle {\n position: absolute;\n pointer-events: none;\n min-width: 5px;\n min-height: 5px;\n width: 6px;\n height: 6px;\n background-color: var(--xy-handle-background-color, var(--xy-handle-background-color-default));\n border: 1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));\n border-radius: 100%;\n}\n.react-flow__handle.connectingfrom {\n pointer-events: all;\n }\n.react-flow__handle.connectionindicator {\n pointer-events: all;\n cursor: crosshair;\n }\n.react-flow__handle-bottom {\n top: auto;\n left: 50%;\n bottom: 0;\n transform: translate(-50%, 50%);\n }\n.react-flow__handle-top {\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n.react-flow__handle-left {\n top: 50%;\n left: 0;\n transform: translate(-50%, -50%);\n }\n.react-flow__handle-right {\n top: 50%;\n right: 0;\n transform: translate(50%, -50%);\n }\n.react-flow__edgeupdater {\n cursor: move;\n pointer-events: all;\n}\n.react-flow__panel {\n position: absolute;\n z-index: 5;\n margin: 15px;\n}\n.react-flow__panel.top {\n top: 0;\n }\n.react-flow__panel.bottom {\n bottom: 0;\n }\n.react-flow__panel.top.center, .react-flow__panel.bottom.center {\n left: 50%;\n transform: translateX(-15px) translateX(-50%);\n }\n.react-flow__panel.left {\n left: 0;\n }\n.react-flow__panel.right {\n right: 0;\n }\n.react-flow__panel.left.center, .react-flow__panel.right.center {\n top: 50%;\n transform: translateY(-15px) translateY(-50%);\n }\n.react-flow__attribution {\n font-size: 10px;\n background: var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));\n padding: 2px 3px;\n margin: 0;\n}\n.react-flow__attribution a {\n text-decoration: none;\n color: #999;\n }\n@keyframes dashdraw {\n from {\n stroke-dashoffset: 10;\n }\n}\n.react-flow__edgelabel-renderer {\n position: absolute;\n width: 100%;\n height: 100%;\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n left: 0;\n top: 0;\n}\n.react-flow__viewport-portal {\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.react-flow__minimap {\n background: var(\n --xy-minimap-background-color-props,\n var(--xy-minimap-background-color, var(--xy-minimap-background-color-default))\n );\n}\n.react-flow__minimap-svg {\n display: block;\n }\n.react-flow__minimap-mask {\n fill: var(\n --xy-minimap-mask-background-color-props,\n var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default))\n );\n stroke: var(\n --xy-minimap-mask-stroke-color-props,\n var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default))\n );\n stroke-width: var(\n --xy-minimap-mask-stroke-width-props,\n var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default))\n );\n }\n.react-flow__minimap-node {\n fill: var(\n --xy-minimap-node-background-color-props,\n var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default))\n );\n stroke: var(\n --xy-minimap-node-stroke-color-props,\n var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default))\n );\n stroke-width: var(\n --xy-minimap-node-stroke-width-props,\n var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default))\n );\n }\n.react-flow__background-pattern.dots {\n fill: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default))\n );\n }\n.react-flow__background-pattern.lines {\n stroke: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default))\n );\n }\n.react-flow__background-pattern.cross {\n stroke: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default))\n );\n }\n.react-flow__controls {\n display: flex;\n flex-direction: column;\n box-shadow: var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default));\n}\n.react-flow__controls.horizontal {\n flex-direction: row;\n }\n.react-flow__controls-button {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 26px;\n width: 26px;\n padding: 4px;\n border: none;\n background: var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));\n border-bottom: 1px solid\n var(\n --xy-controls-button-border-color-props,\n var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))\n );\n color: var(\n --xy-controls-button-color-props,\n var(--xy-controls-button-color, var(--xy-controls-button-color-default))\n );\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n.react-flow__controls-button svg {\n width: 100%;\n max-width: 12px;\n max-height: 12px;\n fill: currentColor;\n }\n.react-flow__edge.updating .react-flow__edge-path {\n stroke: #777;\n }\n.react-flow__edge-text {\n font-size: 10px;\n }\n.react-flow__node.selectable:focus,\n .react-flow__node.selectable:focus-visible {\n outline: none;\n }\n.react-flow__node-input,\n.react-flow__node-default,\n.react-flow__node-output,\n.react-flow__node-group {\n padding: 10px;\n border-radius: var(--xy-node-border-radius, var(--xy-node-border-radius-default));\n width: 150px;\n font-size: 12px;\n color: var(--xy-node-color, var(--xy-node-color-default));\n text-align: center;\n border: var(--xy-node-border, var(--xy-node-border-default));\n background-color: var(--xy-node-background-color, var(--xy-node-background-color-default));\n}\n.react-flow__node-input.selectable:hover, .react-flow__node-default.selectable:hover, .react-flow__node-output.selectable:hover, .react-flow__node-group.selectable:hover {\n box-shadow: var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default));\n }\n.react-flow__node-input.selectable.selected,\n .react-flow__node-input.selectable:focus,\n .react-flow__node-input.selectable:focus-visible,\n .react-flow__node-default.selectable.selected,\n .react-flow__node-default.selectable:focus,\n .react-flow__node-default.selectable:focus-visible,\n .react-flow__node-output.selectable.selected,\n .react-flow__node-output.selectable:focus,\n .react-flow__node-output.selectable:focus-visible,\n .react-flow__node-group.selectable.selected,\n .react-flow__node-group.selectable:focus,\n .react-flow__node-group.selectable:focus-visible {\n box-shadow: var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default));\n }\n.react-flow__node-group {\n background-color: var(--xy-node-group-background-color, var(--xy-node-group-background-color-default));\n}\n.react-flow__nodesselection-rect,\n.react-flow__selection {\n background: var(--xy-selection-background-color, var(--xy-selection-background-color-default));\n border: var(--xy-selection-border, var(--xy-selection-border-default));\n}\n.react-flow__nodesselection-rect:focus,\n .react-flow__nodesselection-rect:focus-visible,\n .react-flow__selection:focus,\n .react-flow__selection:focus-visible {\n outline: none;\n }\n.react-flow__controls-button:hover {\n background: var(\n --xy-controls-button-background-color-hover-props,\n var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default))\n );\n color: var(\n --xy-controls-button-color-hover-props,\n var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default))\n );\n }\n.react-flow__controls-button:disabled {\n pointer-events: none;\n }\n.react-flow__controls-button:disabled svg {\n fill-opacity: 0.4;\n }\n.react-flow__controls-button:last-child {\n border-bottom: none;\n }\n.react-flow__controls.horizontal .react-flow__controls-button {\n border-bottom: none;\n border-right: 1px solid\n var(\n --xy-controls-button-border-color-props,\n var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))\n );\n }\n.react-flow__controls.horizontal .react-flow__controls-button:last-child {\n border-right: none;\n }\n.react-flow__resize-control {\n position: absolute;\n}\n.react-flow__resize-control.left,\n.react-flow__resize-control.right {\n cursor: ew-resize;\n}\n.react-flow__resize-control.top,\n.react-flow__resize-control.bottom {\n cursor: ns-resize;\n}\n.react-flow__resize-control.top.left,\n.react-flow__resize-control.bottom.right {\n cursor: nwse-resize;\n}\n.react-flow__resize-control.bottom.left,\n.react-flow__resize-control.top.right {\n cursor: nesw-resize;\n}\n/* handle styles */\n.react-flow__resize-control.handle {\n width: 4px;\n height: 4px;\n border: 1px solid #fff;\n border-radius: 1px;\n background-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));\n transform: translate(-50%, -50%);\n}\n.react-flow__resize-control.handle.left {\n left: 0;\n top: 50%;\n}\n.react-flow__resize-control.handle.right {\n left: 100%;\n top: 50%;\n}\n.react-flow__resize-control.handle.top {\n left: 50%;\n top: 0;\n}\n.react-flow__resize-control.handle.bottom {\n left: 50%;\n top: 100%;\n}\n.react-flow__resize-control.handle.top.left {\n left: 0;\n}\n.react-flow__resize-control.handle.bottom.left {\n left: 0;\n}\n.react-flow__resize-control.handle.top.right {\n left: 100%;\n}\n.react-flow__resize-control.handle.bottom.right {\n left: 100%;\n}\n/* line styles */\n.react-flow__resize-control.line {\n border-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));\n border-width: 0;\n border-style: solid;\n}\n.react-flow__resize-control.line.left,\n.react-flow__resize-control.line.right {\n width: 1px;\n transform: translate(-50%, 0);\n top: 0;\n height: 100%;\n}\n.react-flow__resize-control.line.left {\n left: 0;\n border-left-width: 1px;\n}\n.react-flow__resize-control.line.right {\n left: 100%;\n border-right-width: 1px;\n}\n.react-flow__resize-control.line.top,\n.react-flow__resize-control.line.bottom {\n height: 1px;\n transform: translate(0, -50%);\n left: 0;\n width: 100%;\n}\n.react-flow__resize-control.line.top {\n top: 0;\n border-top-width: 1px;\n}\n.react-flow__resize-control.line.bottom {\n border-bottom-width: 1px;\n top: 100%;\n}\n.react-flow__edge-textbg {\n fill: var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default));\n}\n.react-flow__edge-text {\n fill: var(--xy-edge-label-color, var(--xy-edge-label-color-default));\n}\n";
|
|
1093
1055
|
styleInject(css_248z);
|
|
1094
1056
|
|
|
1095
1057
|
var jsxRuntime = {exports: {}};
|
|
@@ -5551,7 +5513,7 @@ const rendererPointToPoint = ({ x, y }, [tx, ty, tScale]) => {
|
|
|
5551
5513
|
*/
|
|
5552
5514
|
function parsePadding(padding, viewport) {
|
|
5553
5515
|
if (typeof padding === 'number') {
|
|
5554
|
-
return Math.floor(viewport - viewport / (1 + padding));
|
|
5516
|
+
return Math.floor((viewport - viewport / (1 + padding)) * 0.5);
|
|
5555
5517
|
}
|
|
5556
5518
|
if (typeof padding === 'string' && padding.endsWith('px')) {
|
|
5557
5519
|
const paddingValue = parseFloat(padding);
|
|
@@ -5709,6 +5671,19 @@ function areSetsEqual(a, b) {
|
|
|
5709
5671
|
}
|
|
5710
5672
|
return true;
|
|
5711
5673
|
}
|
|
5674
|
+
/**
|
|
5675
|
+
* Polyfill for Promise.withResolvers until we can use it in all browsers
|
|
5676
|
+
* @internal
|
|
5677
|
+
*/
|
|
5678
|
+
function withResolvers() {
|
|
5679
|
+
let resolve;
|
|
5680
|
+
let reject;
|
|
5681
|
+
const promise = new Promise((res, rej) => {
|
|
5682
|
+
resolve = res;
|
|
5683
|
+
reject = rej;
|
|
5684
|
+
});
|
|
5685
|
+
return { promise, resolve, reject };
|
|
5686
|
+
}
|
|
5712
5687
|
|
|
5713
5688
|
function getPointerPosition(event, { snapGrid = [0, 0], snapToGrid = false, transform, containerBounds }) {
|
|
5714
5689
|
const { x, y } = getEventPosition(event);
|
|
@@ -6335,7 +6310,7 @@ function updateAbsolutePositions(nodeLookup, parentLookup, options) {
|
|
|
6335
6310
|
}
|
|
6336
6311
|
function adoptUserNodes(nodes, nodeLookup, parentLookup, options) {
|
|
6337
6312
|
const _options = mergeObjects(adoptUserNodesDefaultOptions, options);
|
|
6338
|
-
let nodesInitialized =
|
|
6313
|
+
let nodesInitialized = nodes.length > 0;
|
|
6339
6314
|
const tmpLookup = new Map(nodeLookup);
|
|
6340
6315
|
const selectedNodeZ = _options?.elevateNodesOnSelect ? 1000 : 0;
|
|
6341
6316
|
nodeLookup.clear();
|
|
@@ -6366,7 +6341,9 @@ function adoptUserNodes(nodes, nodeLookup, parentLookup, options) {
|
|
|
6366
6341
|
};
|
|
6367
6342
|
nodeLookup.set(userNode.id, internalNode);
|
|
6368
6343
|
}
|
|
6369
|
-
if ((
|
|
6344
|
+
if ((internalNode.measured === undefined ||
|
|
6345
|
+
internalNode.measured.width === undefined ||
|
|
6346
|
+
internalNode.measured.height === undefined) &&
|
|
6370
6347
|
!internalNode.hidden) {
|
|
6371
6348
|
nodesInitialized = false;
|
|
6372
6349
|
}
|
|
@@ -7959,7 +7936,7 @@ function nodeToChildExtent(child, parent, nodeOrigin) {
|
|
|
7959
7936
|
}
|
|
7960
7937
|
function XYResizer({ domNode, nodeId, getStoreItems, onChange, onEnd }) {
|
|
7961
7938
|
const selection = select(domNode);
|
|
7962
|
-
function update({ controlPosition, boundaries, keepAspectRatio, onResizeStart, onResize, onResizeEnd, shouldResize, }) {
|
|
7939
|
+
function update({ controlPosition, boundaries, keepAspectRatio, resizeDirection, onResizeStart, onResize, onResizeEnd, shouldResize, }) {
|
|
7963
7940
|
let prevValues = { ...initPrevValues$1 };
|
|
7964
7941
|
let startValues = { ...initStartValues };
|
|
7965
7942
|
const controlDirection = getControlDirection(controlPosition);
|
|
@@ -8074,8 +8051,10 @@ function XYResizer({ domNode, nodeId, getStoreItems, onChange, onEnd }) {
|
|
|
8074
8051
|
}
|
|
8075
8052
|
}
|
|
8076
8053
|
if (isWidthChange || isHeightChange) {
|
|
8077
|
-
change.width =
|
|
8078
|
-
|
|
8054
|
+
change.width =
|
|
8055
|
+
isWidthChange && (!resizeDirection || resizeDirection === 'horizontal') ? width : prevValues.width;
|
|
8056
|
+
change.height =
|
|
8057
|
+
isHeightChange && (!resizeDirection || resizeDirection === 'vertical') ? height : prevValues.height;
|
|
8079
8058
|
prevValues.width = change.width;
|
|
8080
8059
|
prevValues.height = change.height;
|
|
8081
8060
|
}
|
|
@@ -9304,8 +9283,12 @@ function applyChange(change, element) {
|
|
|
9304
9283
|
element.measured.width = change.dimensions.width;
|
|
9305
9284
|
element.measured.height = change.dimensions.height;
|
|
9306
9285
|
if (change.setAttributes) {
|
|
9307
|
-
|
|
9308
|
-
|
|
9286
|
+
if (change.setAttributes === true || change.setAttributes === 'width') {
|
|
9287
|
+
element.width = change.dimensions.width;
|
|
9288
|
+
}
|
|
9289
|
+
if (change.setAttributes === true || change.setAttributes === 'height') {
|
|
9290
|
+
element.height = change.dimensions.height;
|
|
9291
|
+
}
|
|
9309
9292
|
}
|
|
9310
9293
|
}
|
|
9311
9294
|
if (typeof change.resizing === 'boolean') {
|
|
@@ -9561,29 +9544,26 @@ function BatchProvider({ children, }) {
|
|
|
9561
9544
|
for (const payload of queueItems) {
|
|
9562
9545
|
next = typeof payload === 'function' ? payload(next) : payload;
|
|
9563
9546
|
}
|
|
9547
|
+
const changes = getElementsDiffChanges({
|
|
9548
|
+
items: next,
|
|
9549
|
+
lookup: nodeLookup,
|
|
9550
|
+
});
|
|
9564
9551
|
if (hasDefaultNodes) {
|
|
9565
9552
|
setNodes(next);
|
|
9566
9553
|
}
|
|
9567
|
-
|
|
9568
|
-
|
|
9569
|
-
|
|
9570
|
-
|
|
9571
|
-
|
|
9554
|
+
// We only want to fire onNodesChange if there are changes to the nodes
|
|
9555
|
+
if (changes.length > 0) {
|
|
9556
|
+
onNodesChange?.(changes);
|
|
9557
|
+
}
|
|
9558
|
+
else if (fitViewQueued) {
|
|
9559
|
+
// If there are no changes to the nodes, we still need to call setNodes
|
|
9560
|
+
// to trigger a re-render and fitView.
|
|
9561
|
+
window.requestAnimationFrame(() => {
|
|
9562
|
+
const { fitViewQueued, nodes, setNodes } = store.getState();
|
|
9563
|
+
if (fitViewQueued) {
|
|
9564
|
+
setNodes(nodes);
|
|
9565
|
+
}
|
|
9572
9566
|
});
|
|
9573
|
-
// We only want to fire onNodesChange if there are changes to the nodes
|
|
9574
|
-
if (changes.length > 0) {
|
|
9575
|
-
onNodesChange?.(changes);
|
|
9576
|
-
}
|
|
9577
|
-
else if (fitViewQueued) {
|
|
9578
|
-
// If there are no changes to the nodes, we still need to call setNodes
|
|
9579
|
-
// to trigger a re-render and fitView.
|
|
9580
|
-
window.requestAnimationFrame(() => {
|
|
9581
|
-
const { fitViewQueued, nodes, setNodes } = store.getState();
|
|
9582
|
-
if (fitViewQueued) {
|
|
9583
|
-
setNodes(nodes);
|
|
9584
|
-
}
|
|
9585
|
-
});
|
|
9586
|
-
}
|
|
9587
9567
|
}
|
|
9588
9568
|
}, []);
|
|
9589
9569
|
const nodeQueue = useQueue(nodeQueueHandler);
|
|
@@ -9803,7 +9783,7 @@ function useReactFlow() {
|
|
|
9803
9783
|
fitView: async (options) => {
|
|
9804
9784
|
// We either create a new Promise or reuse the existing one
|
|
9805
9785
|
// Even if fitView is called multiple times in a row, we only end up with a single Promise
|
|
9806
|
-
const fitViewResolver = store.getState().fitViewResolver ??
|
|
9786
|
+
const fitViewResolver = store.getState().fitViewResolver ?? withResolvers();
|
|
9807
9787
|
// We schedule a fitView by setting fitViewQueued and triggering a setNodes
|
|
9808
9788
|
store.setState({ fitViewQueued: true, fitViewOptions: options, fitViewResolver });
|
|
9809
9789
|
batchContext.nodeQueue.push((nodes) => [...nodes]);
|
|
@@ -10942,7 +10922,7 @@ const MarkerDefinitions = ({ defaultColor, rfId }) => {
|
|
|
10942
10922
|
if (!markers.length) {
|
|
10943
10923
|
return null;
|
|
10944
10924
|
}
|
|
10945
|
-
return (jsxRuntimeExports.jsx("svg", { className: "react-flow__marker", children: jsxRuntimeExports.jsx("defs", { children: markers.map((marker) => (jsxRuntimeExports.jsx(Marker, { id: marker.id, type: marker.type, color: marker.color, width: marker.width, height: marker.height, markerUnits: marker.markerUnits, strokeWidth: marker.strokeWidth, orient: marker.orient }, marker.id))) }) }));
|
|
10925
|
+
return (jsxRuntimeExports.jsx("svg", { className: "react-flow__marker", "aria-hidden": "true", children: jsxRuntimeExports.jsx("defs", { children: markers.map((marker) => (jsxRuntimeExports.jsx(Marker, { id: marker.id, type: marker.type, color: marker.color, width: marker.width, height: marker.height, markerUnits: marker.markerUnits, strokeWidth: marker.strokeWidth, orient: marker.orient }, marker.id))) }) }));
|
|
10946
10926
|
};
|
|
10947
10927
|
MarkerDefinitions.displayName = 'MarkerDefinitions';
|
|
10948
10928
|
var MarkerDefinitions$1 = memo(MarkerDefinitions);
|
|
@@ -11678,7 +11658,7 @@ function GraphViewComponent({ nodeTypes, edgeTypes, onInit, onNodeClick, onEdgeC
|
|
|
11678
11658
|
GraphViewComponent.displayName = 'GraphView';
|
|
11679
11659
|
const GraphView = memo(GraphViewComponent);
|
|
11680
11660
|
|
|
11681
|
-
const getInitialState = ({ nodes, edges, defaultNodes, defaultEdges, width, height, fitView, nodeOrigin, nodeExtent, } = {}) => {
|
|
11661
|
+
const getInitialState = ({ nodes, edges, defaultNodes, defaultEdges, width, height, fitView, fitViewOptions, minZoom = 0.5, maxZoom = 2, nodeOrigin, nodeExtent, } = {}) => {
|
|
11682
11662
|
const nodeLookup = new Map();
|
|
11683
11663
|
const parentLookup = new Map();
|
|
11684
11664
|
const connectionLookup = new Map();
|
|
@@ -11688,7 +11668,7 @@ const getInitialState = ({ nodes, edges, defaultNodes, defaultEdges, width, heig
|
|
|
11688
11668
|
const storeNodeOrigin = nodeOrigin ?? [0, 0];
|
|
11689
11669
|
const storeNodeExtent = nodeExtent ?? infiniteExtent;
|
|
11690
11670
|
updateConnectionLookup(connectionLookup, edgeLookup, storeEdges);
|
|
11691
|
-
adoptUserNodes(storeNodes, nodeLookup, parentLookup, {
|
|
11671
|
+
const nodesInitialized = adoptUserNodes(storeNodes, nodeLookup, parentLookup, {
|
|
11692
11672
|
nodeOrigin: storeNodeOrigin,
|
|
11693
11673
|
nodeExtent: storeNodeExtent,
|
|
11694
11674
|
elevateNodesOnSelect: false,
|
|
@@ -11698,7 +11678,7 @@ const getInitialState = ({ nodes, edges, defaultNodes, defaultEdges, width, heig
|
|
|
11698
11678
|
const bounds = getInternalNodesBounds(nodeLookup, {
|
|
11699
11679
|
filter: (node) => !!((node.width || node.initialWidth) && (node.height || node.initialHeight)),
|
|
11700
11680
|
});
|
|
11701
|
-
const { x, y, zoom } = getViewportForBounds(bounds, width, height,
|
|
11681
|
+
const { x, y, zoom } = getViewportForBounds(bounds, width, height, minZoom, maxZoom, fitViewOptions?.padding ?? 0.1);
|
|
11702
11682
|
transform = [x, y, zoom];
|
|
11703
11683
|
}
|
|
11704
11684
|
return {
|
|
@@ -11707,6 +11687,7 @@ const getInitialState = ({ nodes, edges, defaultNodes, defaultEdges, width, heig
|
|
|
11707
11687
|
height: 0,
|
|
11708
11688
|
transform,
|
|
11709
11689
|
nodes: storeNodes,
|
|
11690
|
+
nodesInitialized,
|
|
11710
11691
|
nodeLookup,
|
|
11711
11692
|
parentLookup,
|
|
11712
11693
|
edges: storeEdges,
|
|
@@ -11717,8 +11698,8 @@ const getInitialState = ({ nodes, edges, defaultNodes, defaultEdges, width, heig
|
|
|
11717
11698
|
hasDefaultNodes: defaultNodes !== undefined,
|
|
11718
11699
|
hasDefaultEdges: defaultEdges !== undefined,
|
|
11719
11700
|
panZoom: null,
|
|
11720
|
-
minZoom
|
|
11721
|
-
maxZoom
|
|
11701
|
+
minZoom,
|
|
11702
|
+
maxZoom,
|
|
11722
11703
|
translateExtent: infiniteExtent,
|
|
11723
11704
|
nodeExtent: storeNodeExtent,
|
|
11724
11705
|
nodesSelectionActive: false,
|
|
@@ -11743,7 +11724,7 @@ const getInitialState = ({ nodes, edges, defaultNodes, defaultEdges, width, heig
|
|
|
11743
11724
|
selectNodesOnDrag: true,
|
|
11744
11725
|
multiSelectionActive: false,
|
|
11745
11726
|
fitViewQueued: fitView ?? false,
|
|
11746
|
-
fitViewOptions
|
|
11727
|
+
fitViewOptions,
|
|
11747
11728
|
fitViewResolver: null,
|
|
11748
11729
|
connection: { ...initialConnection },
|
|
11749
11730
|
connectionClickStartHandle: null,
|
|
@@ -11761,7 +11742,7 @@ const getInitialState = ({ nodes, edges, defaultNodes, defaultEdges, width, heig
|
|
|
11761
11742
|
};
|
|
11762
11743
|
};
|
|
11763
11744
|
|
|
11764
|
-
const createStore = ({ nodes, edges, defaultNodes, defaultEdges, width, height, fitView, nodeOrigin, nodeExtent, }) => createWithEqualityFn((set, get) => {
|
|
11745
|
+
const createStore = ({ nodes, edges, defaultNodes, defaultEdges, width, height, fitView, fitViewOptions, minZoom, maxZoom, nodeOrigin, nodeExtent, }) => createWithEqualityFn((set, get) => {
|
|
11765
11746
|
async function resolveFitView() {
|
|
11766
11747
|
const { nodeLookup, panZoom, fitViewOptions, fitViewResolver, width, height, minZoom, maxZoom } = get();
|
|
11767
11748
|
if (!panZoom) {
|
|
@@ -11783,7 +11764,20 @@ const createStore = ({ nodes, edges, defaultNodes, defaultEdges, width, height,
|
|
|
11783
11764
|
set({ fitViewResolver: null });
|
|
11784
11765
|
}
|
|
11785
11766
|
return {
|
|
11786
|
-
...getInitialState({
|
|
11767
|
+
...getInitialState({
|
|
11768
|
+
nodes,
|
|
11769
|
+
edges,
|
|
11770
|
+
width,
|
|
11771
|
+
height,
|
|
11772
|
+
fitView,
|
|
11773
|
+
fitViewOptions,
|
|
11774
|
+
minZoom,
|
|
11775
|
+
maxZoom,
|
|
11776
|
+
nodeOrigin,
|
|
11777
|
+
nodeExtent,
|
|
11778
|
+
defaultNodes,
|
|
11779
|
+
defaultEdges,
|
|
11780
|
+
}),
|
|
11787
11781
|
setNodes: (nodes) => {
|
|
11788
11782
|
const { nodeLookup, parentLookup, nodeOrigin, elevateNodesOnSelect, fitViewQueued } = get();
|
|
11789
11783
|
/*
|
|
@@ -11802,10 +11796,10 @@ const createStore = ({ nodes, edges, defaultNodes, defaultEdges, width, height,
|
|
|
11802
11796
|
});
|
|
11803
11797
|
if (fitViewQueued && nodesInitialized) {
|
|
11804
11798
|
resolveFitView();
|
|
11805
|
-
set({ nodes, fitViewQueued: false, fitViewOptions: undefined });
|
|
11799
|
+
set({ nodes, nodesInitialized, fitViewQueued: false, fitViewOptions: undefined });
|
|
11806
11800
|
}
|
|
11807
11801
|
else {
|
|
11808
|
-
set({ nodes });
|
|
11802
|
+
set({ nodes, nodesInitialized });
|
|
11809
11803
|
}
|
|
11810
11804
|
},
|
|
11811
11805
|
setEdges: (edges) => {
|
|
@@ -11974,7 +11968,10 @@ const createStore = ({ nodes, edges, defaultNodes, defaultEdges, width, height,
|
|
|
11974
11968
|
get().panZoom?.setClickDistance(clickDistance);
|
|
11975
11969
|
},
|
|
11976
11970
|
resetSelectedElements: () => {
|
|
11977
|
-
const { edges, nodes, triggerNodeChanges, triggerEdgeChanges } = get();
|
|
11971
|
+
const { edges, nodes, triggerNodeChanges, triggerEdgeChanges, elementsSelectable } = get();
|
|
11972
|
+
if (!elementsSelectable) {
|
|
11973
|
+
return;
|
|
11974
|
+
}
|
|
11978
11975
|
const nodeChanges = nodes.reduce((res, node) => (node.selected ? [...res, createSelectionChange(node.id, false)] : res), []);
|
|
11979
11976
|
const edgeChanges = edges.reduce((res, edge) => (edge.selected ? [...res, createSelectionChange(edge.id, false)] : res), []);
|
|
11980
11977
|
triggerNodeChanges(nodeChanges);
|
|
@@ -12046,7 +12043,7 @@ const createStore = ({ nodes, edges, defaultNodes, defaultEdges, width, height,
|
|
|
12046
12043
|
* your router. If you have multiple flows on the same page you will need to use a separate
|
|
12047
12044
|
* `<ReactFlowProvider />` for each flow.
|
|
12048
12045
|
*/
|
|
12049
|
-
function ReactFlowProvider({ initialNodes: nodes, initialEdges: edges, defaultNodes, defaultEdges, initialWidth: width, initialHeight: height, fitView, nodeOrigin, nodeExtent, children, }) {
|
|
12046
|
+
function ReactFlowProvider({ initialNodes: nodes, initialEdges: edges, defaultNodes, defaultEdges, initialWidth: width, initialHeight: height, initialMinZoom: minZoom, initialMaxZoom: maxZoom, initialFitViewOptions: fitViewOptions, fitView, nodeOrigin, nodeExtent, children, }) {
|
|
12050
12047
|
const [store] = useState(() => createStore({
|
|
12051
12048
|
nodes,
|
|
12052
12049
|
edges,
|
|
@@ -12055,13 +12052,16 @@ function ReactFlowProvider({ initialNodes: nodes, initialEdges: edges, defaultNo
|
|
|
12055
12052
|
width,
|
|
12056
12053
|
height,
|
|
12057
12054
|
fitView,
|
|
12055
|
+
minZoom,
|
|
12056
|
+
maxZoom,
|
|
12057
|
+
fitViewOptions,
|
|
12058
12058
|
nodeOrigin,
|
|
12059
12059
|
nodeExtent,
|
|
12060
12060
|
}));
|
|
12061
12061
|
return (jsxRuntimeExports.jsx(Provider$1, { value: store, children: jsxRuntimeExports.jsx(BatchProvider, { children: children }) }));
|
|
12062
12062
|
}
|
|
12063
12063
|
|
|
12064
|
-
function Wrapper({ children, nodes, edges, defaultNodes, defaultEdges, width, height, fitView, nodeOrigin, nodeExtent, }) {
|
|
12064
|
+
function Wrapper({ children, nodes, edges, defaultNodes, defaultEdges, width, height, fitView, fitViewOptions, minZoom, maxZoom, nodeOrigin, nodeExtent, }) {
|
|
12065
12065
|
const isWrapped = useContext(StoreContext);
|
|
12066
12066
|
if (isWrapped) {
|
|
12067
12067
|
/*
|
|
@@ -12070,7 +12070,7 @@ function Wrapper({ children, nodes, edges, defaultNodes, defaultEdges, width, he
|
|
|
12070
12070
|
*/
|
|
12071
12071
|
return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: children });
|
|
12072
12072
|
}
|
|
12073
|
-
return (jsxRuntimeExports.jsx(ReactFlowProvider, { initialNodes: nodes, initialEdges: edges, defaultNodes: defaultNodes, defaultEdges: defaultEdges, initialWidth: width, initialHeight: height, fitView: fitView, nodeOrigin: nodeOrigin, nodeExtent: nodeExtent, children: children }));
|
|
12073
|
+
return (jsxRuntimeExports.jsx(ReactFlowProvider, { initialNodes: nodes, initialEdges: edges, defaultNodes: defaultNodes, defaultEdges: defaultEdges, initialWidth: width, initialHeight: height, fitView: fitView, initialFitViewOptions: fitViewOptions, initialMinZoom: minZoom, initialMaxZoom: maxZoom, nodeOrigin: nodeOrigin, nodeExtent: nodeExtent, children: children }));
|
|
12074
12074
|
}
|
|
12075
12075
|
|
|
12076
12076
|
const wrapperStyle = {
|
|
@@ -12088,7 +12088,7 @@ function ReactFlow({ nodes, edges, defaultNodes, defaultEdges, className, nodeTy
|
|
|
12088
12088
|
e.currentTarget.scrollTo({ top: 0, left: 0, behavior: 'instant' });
|
|
12089
12089
|
onScroll?.(e);
|
|
12090
12090
|
}, [onScroll]);
|
|
12091
|
-
return (jsxRuntimeExports.jsx("div", { "data-testid": "rf__wrapper", ...rest, onScroll: wrapperOnScroll, style: { ...style, ...wrapperStyle }, ref: ref, className: cc(['react-flow', className, colorModeClassName]), id: id, children: jsxRuntimeExports.jsxs(Wrapper, { nodes: nodes, edges: edges, width: width, height: height, fitView: fitView, nodeOrigin: nodeOrigin, nodeExtent: nodeExtent, children: [jsxRuntimeExports.jsx(GraphView, { onInit: onInit, onNodeClick: onNodeClick, onEdgeClick: onEdgeClick, onNodeMouseEnter: onNodeMouseEnter, onNodeMouseMove: onNodeMouseMove, onNodeMouseLeave: onNodeMouseLeave, onNodeContextMenu: onNodeContextMenu, onNodeDoubleClick: onNodeDoubleClick, nodeTypes: nodeTypes, edgeTypes: edgeTypes, connectionLineType: connectionLineType, connectionLineStyle: connectionLineStyle, connectionLineComponent: connectionLineComponent, connectionLineContainerStyle: connectionLineContainerStyle, selectionKeyCode: selectionKeyCode, selectionOnDrag: selectionOnDrag, selectionMode: selectionMode, deleteKeyCode: deleteKeyCode, multiSelectionKeyCode: multiSelectionKeyCode, panActivationKeyCode: panActivationKeyCode, zoomActivationKeyCode: zoomActivationKeyCode, onlyRenderVisibleElements: onlyRenderVisibleElements, defaultViewport: defaultViewport$1, translateExtent: translateExtent, minZoom: minZoom, maxZoom: maxZoom, preventScrolling: preventScrolling, zoomOnScroll: zoomOnScroll, zoomOnPinch: zoomOnPinch, zoomOnDoubleClick: zoomOnDoubleClick, panOnScroll: panOnScroll, panOnScrollSpeed: panOnScrollSpeed, panOnScrollMode: panOnScrollMode, panOnDrag: panOnDrag, onPaneClick: onPaneClick, onPaneMouseEnter: onPaneMouseEnter, onPaneMouseMove: onPaneMouseMove, onPaneMouseLeave: onPaneMouseLeave, onPaneScroll: onPaneScroll, onPaneContextMenu: onPaneContextMenu, paneClickDistance: paneClickDistance, nodeClickDistance: nodeClickDistance, onSelectionContextMenu: onSelectionContextMenu, onSelectionStart: onSelectionStart, onSelectionEnd: onSelectionEnd, onReconnect: onReconnect, onReconnectStart: onReconnectStart, onReconnectEnd: onReconnectEnd, onEdgeContextMenu: onEdgeContextMenu, onEdgeDoubleClick: onEdgeDoubleClick, onEdgeMouseEnter: onEdgeMouseEnter, onEdgeMouseMove: onEdgeMouseMove, onEdgeMouseLeave: onEdgeMouseLeave, reconnectRadius: reconnectRadius, defaultMarkerColor: defaultMarkerColor, noDragClassName: noDragClassName, noWheelClassName: noWheelClassName, noPanClassName: noPanClassName, rfId: rfId, disableKeyboardA11y: disableKeyboardA11y, nodeExtent: nodeExtent, viewport: viewport, onViewportChange: onViewportChange }), jsxRuntimeExports.jsx(StoreUpdater, { nodes: nodes, edges: edges, defaultNodes: defaultNodes, defaultEdges: defaultEdges, onConnect: onConnect, onConnectStart: onConnectStart, onConnectEnd: onConnectEnd, onClickConnectStart: onClickConnectStart, onClickConnectEnd: onClickConnectEnd, nodesDraggable: nodesDraggable, nodesConnectable: nodesConnectable, nodesFocusable: nodesFocusable, edgesFocusable: edgesFocusable, edgesReconnectable: edgesReconnectable, elementsSelectable: elementsSelectable, elevateNodesOnSelect: elevateNodesOnSelect, elevateEdgesOnSelect: elevateEdgesOnSelect, minZoom: minZoom, maxZoom: maxZoom, nodeExtent: nodeExtent, onNodesChange: onNodesChange, onEdgesChange: onEdgesChange, snapToGrid: snapToGrid, snapGrid: snapGrid, connectionMode: connectionMode, translateExtent: translateExtent, connectOnClick: connectOnClick, defaultEdgeOptions: defaultEdgeOptions, fitView: fitView, fitViewOptions: fitViewOptions, onNodesDelete: onNodesDelete, onEdgesDelete: onEdgesDelete, onDelete: onDelete, onNodeDragStart: onNodeDragStart, onNodeDrag: onNodeDrag, onNodeDragStop: onNodeDragStop, onSelectionDrag: onSelectionDrag, onSelectionDragStart: onSelectionDragStart, onSelectionDragStop: onSelectionDragStop, onMove: onMove, onMoveStart: onMoveStart, onMoveEnd: onMoveEnd, noPanClassName: noPanClassName, nodeOrigin: nodeOrigin, rfId: rfId, autoPanOnConnect: autoPanOnConnect, autoPanOnNodeDrag: autoPanOnNodeDrag, autoPanSpeed: autoPanSpeed, onError: onError, connectionRadius: connectionRadius, isValidConnection: isValidConnection, selectNodesOnDrag: selectNodesOnDrag, nodeDragThreshold: nodeDragThreshold, onBeforeDelete: onBeforeDelete, paneClickDistance: paneClickDistance, debug: debug }), jsxRuntimeExports.jsx(SelectionListener, { onSelectionChange: onSelectionChange }), children, jsxRuntimeExports.jsx(Attribution, { proOptions: proOptions, position: attributionPosition }), jsxRuntimeExports.jsx(A11yDescriptions, { rfId: rfId, disableKeyboardA11y: disableKeyboardA11y })] }) }));
|
|
12091
|
+
return (jsxRuntimeExports.jsx("div", { "data-testid": "rf__wrapper", ...rest, onScroll: wrapperOnScroll, style: { ...style, ...wrapperStyle }, ref: ref, className: cc(['react-flow', className, colorModeClassName]), id: id, children: jsxRuntimeExports.jsxs(Wrapper, { nodes: nodes, edges: edges, width: width, height: height, fitView: fitView, fitViewOptions: fitViewOptions, minZoom: minZoom, maxZoom: maxZoom, nodeOrigin: nodeOrigin, nodeExtent: nodeExtent, children: [jsxRuntimeExports.jsx(GraphView, { onInit: onInit, onNodeClick: onNodeClick, onEdgeClick: onEdgeClick, onNodeMouseEnter: onNodeMouseEnter, onNodeMouseMove: onNodeMouseMove, onNodeMouseLeave: onNodeMouseLeave, onNodeContextMenu: onNodeContextMenu, onNodeDoubleClick: onNodeDoubleClick, nodeTypes: nodeTypes, edgeTypes: edgeTypes, connectionLineType: connectionLineType, connectionLineStyle: connectionLineStyle, connectionLineComponent: connectionLineComponent, connectionLineContainerStyle: connectionLineContainerStyle, selectionKeyCode: selectionKeyCode, selectionOnDrag: selectionOnDrag, selectionMode: selectionMode, deleteKeyCode: deleteKeyCode, multiSelectionKeyCode: multiSelectionKeyCode, panActivationKeyCode: panActivationKeyCode, zoomActivationKeyCode: zoomActivationKeyCode, onlyRenderVisibleElements: onlyRenderVisibleElements, defaultViewport: defaultViewport$1, translateExtent: translateExtent, minZoom: minZoom, maxZoom: maxZoom, preventScrolling: preventScrolling, zoomOnScroll: zoomOnScroll, zoomOnPinch: zoomOnPinch, zoomOnDoubleClick: zoomOnDoubleClick, panOnScroll: panOnScroll, panOnScrollSpeed: panOnScrollSpeed, panOnScrollMode: panOnScrollMode, panOnDrag: panOnDrag, onPaneClick: onPaneClick, onPaneMouseEnter: onPaneMouseEnter, onPaneMouseMove: onPaneMouseMove, onPaneMouseLeave: onPaneMouseLeave, onPaneScroll: onPaneScroll, onPaneContextMenu: onPaneContextMenu, paneClickDistance: paneClickDistance, nodeClickDistance: nodeClickDistance, onSelectionContextMenu: onSelectionContextMenu, onSelectionStart: onSelectionStart, onSelectionEnd: onSelectionEnd, onReconnect: onReconnect, onReconnectStart: onReconnectStart, onReconnectEnd: onReconnectEnd, onEdgeContextMenu: onEdgeContextMenu, onEdgeDoubleClick: onEdgeDoubleClick, onEdgeMouseEnter: onEdgeMouseEnter, onEdgeMouseMove: onEdgeMouseMove, onEdgeMouseLeave: onEdgeMouseLeave, reconnectRadius: reconnectRadius, defaultMarkerColor: defaultMarkerColor, noDragClassName: noDragClassName, noWheelClassName: noWheelClassName, noPanClassName: noPanClassName, rfId: rfId, disableKeyboardA11y: disableKeyboardA11y, nodeExtent: nodeExtent, viewport: viewport, onViewportChange: onViewportChange }), jsxRuntimeExports.jsx(StoreUpdater, { nodes: nodes, edges: edges, defaultNodes: defaultNodes, defaultEdges: defaultEdges, onConnect: onConnect, onConnectStart: onConnectStart, onConnectEnd: onConnectEnd, onClickConnectStart: onClickConnectStart, onClickConnectEnd: onClickConnectEnd, nodesDraggable: nodesDraggable, nodesConnectable: nodesConnectable, nodesFocusable: nodesFocusable, edgesFocusable: edgesFocusable, edgesReconnectable: edgesReconnectable, elementsSelectable: elementsSelectable, elevateNodesOnSelect: elevateNodesOnSelect, elevateEdgesOnSelect: elevateEdgesOnSelect, minZoom: minZoom, maxZoom: maxZoom, nodeExtent: nodeExtent, onNodesChange: onNodesChange, onEdgesChange: onEdgesChange, snapToGrid: snapToGrid, snapGrid: snapGrid, connectionMode: connectionMode, translateExtent: translateExtent, connectOnClick: connectOnClick, defaultEdgeOptions: defaultEdgeOptions, fitView: fitView, fitViewOptions: fitViewOptions, onNodesDelete: onNodesDelete, onEdgesDelete: onEdgesDelete, onDelete: onDelete, onNodeDragStart: onNodeDragStart, onNodeDrag: onNodeDrag, onNodeDragStop: onNodeDragStop, onSelectionDrag: onSelectionDrag, onSelectionDragStart: onSelectionDragStart, onSelectionDragStop: onSelectionDragStop, onMove: onMove, onMoveStart: onMoveStart, onMoveEnd: onMoveEnd, noPanClassName: noPanClassName, nodeOrigin: nodeOrigin, rfId: rfId, autoPanOnConnect: autoPanOnConnect, autoPanOnNodeDrag: autoPanOnNodeDrag, autoPanSpeed: autoPanSpeed, onError: onError, connectionRadius: connectionRadius, isValidConnection: isValidConnection, selectNodesOnDrag: selectNodesOnDrag, nodeDragThreshold: nodeDragThreshold, onBeforeDelete: onBeforeDelete, paneClickDistance: paneClickDistance, debug: debug }), jsxRuntimeExports.jsx(SelectionListener, { onSelectionChange: onSelectionChange }), children, jsxRuntimeExports.jsx(Attribution, { proOptions: proOptions, position: attributionPosition }), jsxRuntimeExports.jsx(A11yDescriptions, { rfId: rfId, disableKeyboardA11y: disableKeyboardA11y })] }) }));
|
|
12092
12092
|
}
|
|
12093
12093
|
/**
|
|
12094
12094
|
* The `<ReactFlow />` component is the heart of your React Flow application.
|
|
@@ -12475,7 +12475,7 @@ ControlsComponent.displayName = 'Controls';
|
|
|
12475
12475
|
* @remarks To extend or customise the controls, you can use the [`<ControlButton />`](/api-reference/components/control-button) component
|
|
12476
12476
|
*
|
|
12477
12477
|
*/
|
|
12478
|
-
const Controls
|
|
12478
|
+
const Controls = memo(ControlsComponent);
|
|
12479
12479
|
|
|
12480
12480
|
function MiniMapNodeComponent({ id, x, y, width, height, style, color, strokeColor, strokeWidth, className, borderRadius, shapeRendering, selected, onClick, }) {
|
|
12481
12481
|
const { background, backgroundColor } = style || {};
|
|
@@ -12652,7 +12652,7 @@ MiniMapComponent.displayName = 'MiniMap';
|
|
|
12652
12652
|
*/
|
|
12653
12653
|
memo(MiniMapComponent);
|
|
12654
12654
|
|
|
12655
|
-
function ResizeControl({ nodeId, position, variant = ResizeControlVariant.Handle, className, style = {}, children, color, minWidth = 10, minHeight = 10, maxWidth = Number.MAX_VALUE, maxHeight = Number.MAX_VALUE, keepAspectRatio = false, shouldResize, onResizeStart, onResize, onResizeEnd, }) {
|
|
12655
|
+
function ResizeControl({ nodeId, position, variant = ResizeControlVariant.Handle, className, style = {}, children, color, minWidth = 10, minHeight = 10, maxWidth = Number.MAX_VALUE, maxHeight = Number.MAX_VALUE, keepAspectRatio = false, resizeDirection, shouldResize, onResizeStart, onResize, onResizeEnd, }) {
|
|
12656
12656
|
const contextNodeId = useNodeId();
|
|
12657
12657
|
const id = typeof nodeId === 'string' ? nodeId : contextNodeId;
|
|
12658
12658
|
const store = useStoreApi();
|
|
@@ -12718,11 +12718,12 @@ function ResizeControl({ nodeId, position, variant = ResizeControlVariant.Handle
|
|
|
12718
12718
|
changes.push(positionChange);
|
|
12719
12719
|
}
|
|
12720
12720
|
if (change.width !== undefined && change.height !== undefined) {
|
|
12721
|
+
const setAttributes = !resizeDirection ? true : resizeDirection === 'horizontal' ? 'width' : 'height';
|
|
12721
12722
|
const dimensionChange = {
|
|
12722
12723
|
id,
|
|
12723
12724
|
type: 'dimensions',
|
|
12724
12725
|
resizing: true,
|
|
12725
|
-
setAttributes
|
|
12726
|
+
setAttributes,
|
|
12726
12727
|
dimensions: {
|
|
12727
12728
|
width: change.width,
|
|
12728
12729
|
height: change.height,
|
|
@@ -12762,6 +12763,7 @@ function ResizeControl({ nodeId, position, variant = ResizeControlVariant.Handle
|
|
|
12762
12763
|
maxHeight,
|
|
12763
12764
|
},
|
|
12764
12765
|
keepAspectRatio,
|
|
12766
|
+
resizeDirection,
|
|
12765
12767
|
onResizeStart,
|
|
12766
12768
|
onResize,
|
|
12767
12769
|
onResizeEnd,
|
|
@@ -12794,7 +12796,7 @@ function ResizeControl({ nodeId, position, variant = ResizeControlVariant.Handle
|
|
|
12794
12796
|
*/
|
|
12795
12797
|
memo(ResizeControl);
|
|
12796
12798
|
|
|
12797
|
-
const Container$
|
|
12799
|
+
const Container$k = styled(FlexColumn) `
|
|
12798
12800
|
align-items: center !important;
|
|
12799
12801
|
justify-content: center;
|
|
12800
12802
|
align-self: stretch;
|
|
@@ -12831,7 +12833,7 @@ const AddNode = memo(({ id: nodeId, data }) => {
|
|
|
12831
12833
|
const { isThisPending } = usePendingStore();
|
|
12832
12834
|
const entity = nodeId.split('-')[0];
|
|
12833
12835
|
const isPending = isThisPending({ entityType: entity });
|
|
12834
|
-
return (React.createElement(Container$
|
|
12836
|
+
return (React.createElement(Container$k, { "$nodeWidth": nodeWidth, className: 'nowheel nodrag' },
|
|
12835
12837
|
isPending ? (React.createElement(Fragment, null,
|
|
12836
12838
|
React.createElement(TitleWrapper, null,
|
|
12837
12839
|
React.createElement(FadeLoader, null),
|
|
@@ -12848,7 +12850,7 @@ const AddNode = memo(({ id: nodeId, data }) => {
|
|
|
12848
12850
|
React.createElement(Handle, { type: 'source', position: Position.Right, style: { visibility: 'hidden' } })));
|
|
12849
12851
|
});
|
|
12850
12852
|
|
|
12851
|
-
const Container$
|
|
12853
|
+
const Container$j = styled.div `
|
|
12852
12854
|
width: ${({ $nodeWidth }) => `${$nodeWidth}px`};
|
|
12853
12855
|
`;
|
|
12854
12856
|
const BaseNode = memo(({ id: nodeId, data }) => {
|
|
@@ -12881,7 +12883,7 @@ const BaseNode = memo(({ id: nodeId, data }) => {
|
|
|
12881
12883
|
}
|
|
12882
12884
|
setSelectedSources(namespaces);
|
|
12883
12885
|
};
|
|
12884
|
-
return (React.createElement(Container$
|
|
12886
|
+
return (React.createElement(Container$j, { "data-id": nodeId, "$nodeWidth": nodeWidth, className: 'nowheel nodrag' },
|
|
12885
12887
|
React.createElement(DataTab, { title: title, subTitle: subTitle, onClick: () => { }, renderActions: renderActions, iconProps: {
|
|
12886
12888
|
icon: icon,
|
|
12887
12889
|
icons: icons,
|
|
@@ -12901,19 +12903,19 @@ const BaseNode = memo(({ id: nodeId, data }) => {
|
|
|
12901
12903
|
React.createElement(Handle, { type: 'source', position: Position.Right, style: { visibility: 'hidden' } })));
|
|
12902
12904
|
});
|
|
12903
12905
|
|
|
12904
|
-
const Container$
|
|
12906
|
+
const Container$i = styled.div `
|
|
12905
12907
|
width: ${({ $nodeWidth }) => `${$nodeWidth}px`};
|
|
12906
12908
|
height: ${({ $nodeHeight }) => `${$nodeHeight}px`};
|
|
12907
12909
|
opacity: 0;
|
|
12908
12910
|
`;
|
|
12909
12911
|
const EdgedNode = memo(({ data }) => {
|
|
12910
12912
|
const { nodeWidth, nodeHeight } = data;
|
|
12911
|
-
return (React.createElement(Container$
|
|
12913
|
+
return (React.createElement(Container$i, { "$nodeWidth": nodeWidth, "$nodeHeight": nodeHeight, className: 'nowheel nodrag' },
|
|
12912
12914
|
React.createElement(Handle, { type: 'source', position: Position.Right, style: { visibility: 'hidden' } }),
|
|
12913
12915
|
React.createElement(Handle, { type: 'target', position: Position.Left, style: { visibility: 'hidden' } })));
|
|
12914
12916
|
});
|
|
12915
12917
|
|
|
12916
|
-
const Container$
|
|
12918
|
+
const Container$h = styled.div `
|
|
12917
12919
|
width: ${({ $nodeWidth }) => $nodeWidth}px;
|
|
12918
12920
|
height: ${({ $nodeHeight }) => $nodeHeight}px;
|
|
12919
12921
|
background: transparent;
|
|
@@ -12922,7 +12924,7 @@ const Container$f = styled.div `
|
|
|
12922
12924
|
`;
|
|
12923
12925
|
const FrameNode = memo(({ data }) => {
|
|
12924
12926
|
const { nodeWidth, nodeHeight } = data;
|
|
12925
|
-
return (React.createElement(Container$
|
|
12927
|
+
return (React.createElement(Container$h, { "$nodeWidth": nodeWidth, "$nodeHeight": nodeHeight, className: 'nowheel nodrag' },
|
|
12926
12928
|
React.createElement(Handle, { type: 'source', position: Position.Right, style: { visibility: 'hidden' } }),
|
|
12927
12929
|
React.createElement(Handle, { type: 'target', position: Position.Left, style: { visibility: 'hidden' } })));
|
|
12928
12930
|
});
|
|
@@ -12937,7 +12939,7 @@ const nodeConfig = {
|
|
|
12937
12939
|
};
|
|
12938
12940
|
|
|
12939
12941
|
const { framePadding: framePadding$3 } = nodeConfig;
|
|
12940
|
-
const Container$
|
|
12942
|
+
const Container$g = styled.div `
|
|
12941
12943
|
position: relative;
|
|
12942
12944
|
z-index: 1;
|
|
12943
12945
|
width: fit-content;
|
|
@@ -12985,7 +12987,7 @@ const ScrollNode = memo(({ data, ...rest }) => {
|
|
|
12985
12987
|
current?.addEventListener('scroll', handleScroll);
|
|
12986
12988
|
return () => current?.removeEventListener('scroll', handleScroll);
|
|
12987
12989
|
}, [onScroll]);
|
|
12988
|
-
return (React.createElement(Container$
|
|
12990
|
+
return (React.createElement(Container$g, { ref: containerRef, "$nodeHeight": nodeHeight, className: 'nowheel nodrag' },
|
|
12989
12991
|
items.map((item) => (React.createElement(BaseNodeWrapper, { key: item.id, onClick: (e) => {
|
|
12990
12992
|
e.stopPropagation();
|
|
12991
12993
|
// @ts-ignore
|
|
@@ -12995,7 +12997,7 @@ const ScrollNode = memo(({ data, ...rest }) => {
|
|
|
12995
12997
|
React.createElement(BottomOverlay, { "$hide": isBottomOfList })));
|
|
12996
12998
|
});
|
|
12997
12999
|
|
|
12998
|
-
const Container$
|
|
13000
|
+
const Container$f = styled.div `
|
|
12999
13001
|
position: relative;
|
|
13000
13002
|
width: ${({ $nodeWidth }) => `${$nodeWidth}px`};
|
|
13001
13003
|
padding: 12px 0px 16px 0px;
|
|
@@ -13013,7 +13015,7 @@ const SelectorWrapper = styled(FlexRow) `
|
|
|
13013
13015
|
const ActionsWrapper = styled(FlexRow) `
|
|
13014
13016
|
margin-left: auto;
|
|
13015
13017
|
`;
|
|
13016
|
-
const AddButton
|
|
13018
|
+
const AddButton = styled(Button) `
|
|
13017
13019
|
width: 24px;
|
|
13018
13020
|
height: 24px;
|
|
13019
13021
|
padding: 0;
|
|
@@ -13064,7 +13066,7 @@ const HeaderNode = memo(({ id: nodeId, data }) => {
|
|
|
13064
13066
|
setSelectedSources({});
|
|
13065
13067
|
}
|
|
13066
13068
|
};
|
|
13067
|
-
return (React.createElement(Container$
|
|
13069
|
+
return (React.createElement(Container$f, { "$nodeWidth": nodeWidth, className: 'nowheel nodrag' },
|
|
13068
13070
|
entityType === EntityTypes.Source && (React.createElement(SelectorWrapper, null,
|
|
13069
13071
|
React.createElement(Checkbox, { partiallyChecked: hasSelected && sources?.length !== totalSelectedSources, value: hasSelected && sources?.length === totalSelectedSources, onChange: onSelect, disabled: !sources?.length }))),
|
|
13070
13072
|
React.createElement(IconTitleBadge, { icon: Icon, title: title, badge: isSourceAwaitingInstrumentation ? `${instrumentingPercent}%` : badge, badgeTooltip: badgeTooltip, loading: isFetching && !isSourceAwaitingInstrumentation }),
|
|
@@ -13075,7 +13077,7 @@ const Actions$1 = memo(({ entityType }) => {
|
|
|
13075
13077
|
const theme = Theme.useTheme();
|
|
13076
13078
|
const { onClickNode } = useClickNode();
|
|
13077
13079
|
return (React.createElement(ActionsWrapper, null,
|
|
13078
|
-
React.createElement(AddButton
|
|
13080
|
+
React.createElement(AddButton, { "data-id": `add-${entityType}`, variant: 'primary', onClick: (e) => {
|
|
13079
13081
|
e.stopPropagation();
|
|
13080
13082
|
// @ts-ignore
|
|
13081
13083
|
onClickNode(undefined, {
|
|
@@ -13126,12 +13128,12 @@ const LabeledEdge = memo(({ id, sourceX, sourceY, targetX, targetY, sourcePositi
|
|
|
13126
13128
|
React.createElement(Tooltip, { text: 'Heads up! The data-flow metrics you see are calculated over 10-second intervals.' }, data?.label)))));
|
|
13127
13129
|
});
|
|
13128
13130
|
|
|
13129
|
-
const Container$
|
|
13131
|
+
const Container$e = styled.div `
|
|
13130
13132
|
width: ${({ $nodeWidth }) => `${$nodeWidth}px`};
|
|
13131
13133
|
`;
|
|
13132
13134
|
const SkeletonNode = memo(({ id: nodeId, data }) => {
|
|
13133
13135
|
const { nodeWidth } = data;
|
|
13134
|
-
return (React.createElement(Container$
|
|
13136
|
+
return (React.createElement(Container$e, { "data-id": nodeId, "$nodeWidth": nodeWidth, className: 'nowheel nodrag' },
|
|
13135
13137
|
React.createElement(SkeletonLoader, { size: 3 })));
|
|
13136
13138
|
});
|
|
13137
13139
|
|
|
@@ -13173,7 +13175,7 @@ const Flow = ({ nodes, edges, onNodesChange, onEdgesChange }) => {
|
|
|
13173
13175
|
return (React.createElement(FlowWrapper, null,
|
|
13174
13176
|
React.createElement(index, { fitView: false, zoomOnScroll: false, nodes: nodes, nodeTypes: nodeTypes, edges: edges, edgeTypes: edgeTypes, onNodeClick: onClickNode, onNodesChange: (changes) => setTimeout(() => onNodesChange(changes), 0), onEdgesChange: (changes) => setTimeout(() => onEdgesChange(changes), 0) },
|
|
13175
13177
|
React.createElement(ControllerWrapper, null,
|
|
13176
|
-
React.createElement(Controls
|
|
13178
|
+
React.createElement(Controls, { position: 'bottom-right', orientation: 'horizontal', showInteractive: false, showZoom: true, showFitView: true, fitViewOptions: {
|
|
13177
13179
|
duration: 300,
|
|
13178
13180
|
padding: 0.02,
|
|
13179
13181
|
includeHiddenNodes: true,
|
|
@@ -13253,7 +13255,7 @@ const buildRuleNodes = ({ loading, entities, positions, unfilteredCount }) => {
|
|
|
13253
13255
|
},
|
|
13254
13256
|
data: {
|
|
13255
13257
|
nodeWidth: nodeWidth$4,
|
|
13256
|
-
title: DISPLAY_TITLES.
|
|
13258
|
+
title: DISPLAY_TITLES.INSTRUMENTATION_RULES,
|
|
13257
13259
|
icon: getEntityIcon(EntityTypes.InstrumentationRule),
|
|
13258
13260
|
badge: unfilteredCount,
|
|
13259
13261
|
isFetching: loading,
|
|
@@ -13296,8 +13298,8 @@ const buildRuleNodes = ({ loading, entities, positions, unfilteredCount }) => {
|
|
|
13296
13298
|
data: {
|
|
13297
13299
|
nodeWidth: nodeWidth$4,
|
|
13298
13300
|
type: AddNodeTypes.AddRule,
|
|
13299
|
-
title:
|
|
13300
|
-
subTitle:
|
|
13301
|
+
title: DISPLAY_TITLES.ADD_INSTRUMENTATION_RULE,
|
|
13302
|
+
subTitle: DISPLAY_TITLES.TO_MODIFY_OTEL_DATA,
|
|
13301
13303
|
},
|
|
13302
13304
|
});
|
|
13303
13305
|
}
|
|
@@ -13333,7 +13335,7 @@ const buildActionNodes = ({ loading, entities, positions, unfilteredCount }) =>
|
|
|
13333
13335
|
},
|
|
13334
13336
|
data: {
|
|
13335
13337
|
nodeWidth: nodeWidth$3,
|
|
13336
|
-
title: DISPLAY_TITLES.
|
|
13338
|
+
title: DISPLAY_TITLES.ACTIONS,
|
|
13337
13339
|
icon: getEntityIcon(EntityTypes.Action),
|
|
13338
13340
|
badge: unfilteredCount,
|
|
13339
13341
|
isFetching: loading,
|
|
@@ -13390,8 +13392,8 @@ const buildActionNodes = ({ loading, entities, positions, unfilteredCount }) =>
|
|
|
13390
13392
|
data: {
|
|
13391
13393
|
nodeWidth: nodeWidth$3,
|
|
13392
13394
|
type: AddNodeTypes.AddAction,
|
|
13393
|
-
title:
|
|
13394
|
-
subTitle:
|
|
13395
|
+
title: DISPLAY_TITLES.ADD_ACTION,
|
|
13396
|
+
subTitle: DISPLAY_TITLES.TO_MODIFY_OTEL_DATA,
|
|
13395
13397
|
},
|
|
13396
13398
|
});
|
|
13397
13399
|
}
|
|
@@ -13431,7 +13433,7 @@ const buildSourceNodes = ({ loading, entities, positions, unfilteredCount, conta
|
|
|
13431
13433
|
},
|
|
13432
13434
|
data: {
|
|
13433
13435
|
nodeWidth: nodeWidth$2,
|
|
13434
|
-
title: DISPLAY_TITLES.
|
|
13436
|
+
title: DISPLAY_TITLES.SOURCES,
|
|
13435
13437
|
icon: getEntityIcon(EntityTypes.Source),
|
|
13436
13438
|
badge: hasFiltersApplied ? `${entities.length}/${unfilteredCount}` : unfilteredCount,
|
|
13437
13439
|
badgeTooltip: hasFiltersApplied ? DISPLAY_TITLES.FILTERED_COUNT_TOOLTIP : undefined,
|
|
@@ -13501,8 +13503,8 @@ const buildSourceNodes = ({ loading, entities, positions, unfilteredCount, conta
|
|
|
13501
13503
|
data: {
|
|
13502
13504
|
nodeWidth: nodeWidth$2,
|
|
13503
13505
|
type: AddNodeTypes.AddSource,
|
|
13504
|
-
title:
|
|
13505
|
-
subTitle:
|
|
13506
|
+
title: DISPLAY_TITLES.ADD_SOURCE,
|
|
13507
|
+
subTitle: DISPLAY_TITLES.TO_COLLECT_OTEL_DATA,
|
|
13506
13508
|
},
|
|
13507
13509
|
});
|
|
13508
13510
|
}
|
|
@@ -13559,7 +13561,7 @@ const mapToNodeData = (entity) => {
|
|
|
13559
13561
|
subTitle: entity.destinationType.displayName,
|
|
13560
13562
|
icon,
|
|
13561
13563
|
iconSrc,
|
|
13562
|
-
monitors:
|
|
13564
|
+
monitors: mapExportedSignals(entity.exportedSignals),
|
|
13563
13565
|
raw: entity,
|
|
13564
13566
|
};
|
|
13565
13567
|
};
|
|
@@ -13575,7 +13577,7 @@ const buildDestinationNodes = ({ loading, entities, positions, unfilteredCount }
|
|
|
13575
13577
|
},
|
|
13576
13578
|
data: {
|
|
13577
13579
|
nodeWidth,
|
|
13578
|
-
title: DISPLAY_TITLES.
|
|
13580
|
+
title: DISPLAY_TITLES.DESTINATIONS,
|
|
13579
13581
|
icon: getEntityIcon(EntityTypes.Destination),
|
|
13580
13582
|
badge: unfilteredCount,
|
|
13581
13583
|
isFetching: loading,
|
|
@@ -13618,15 +13620,15 @@ const buildDestinationNodes = ({ loading, entities, positions, unfilteredCount }
|
|
|
13618
13620
|
data: {
|
|
13619
13621
|
nodeWidth,
|
|
13620
13622
|
type: AddNodeTypes.AddDestination,
|
|
13621
|
-
title:
|
|
13622
|
-
subTitle:
|
|
13623
|
+
title: DISPLAY_TITLES.ADD_DESTINATION,
|
|
13624
|
+
subTitle: DISPLAY_TITLES.TO_MONITOR_OTEL_DATA,
|
|
13623
13625
|
},
|
|
13624
13626
|
});
|
|
13625
13627
|
}
|
|
13626
13628
|
return nodes;
|
|
13627
13629
|
};
|
|
13628
13630
|
|
|
13629
|
-
const Container$
|
|
13631
|
+
const Container$d = styled.div `
|
|
13630
13632
|
width: 100%;
|
|
13631
13633
|
height: ${({ $heightToRemove }) => `calc(100vh - ${$heightToRemove})`};
|
|
13632
13634
|
position: relative;
|
|
@@ -13634,6 +13636,7 @@ const Container$b = styled.div `
|
|
|
13634
13636
|
const DataFlow = ({ heightToRemove, metrics }) => {
|
|
13635
13637
|
const theme = Theme.useTheme();
|
|
13636
13638
|
const filters = useFilterStore();
|
|
13639
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
13637
13640
|
const { isAwaitingInstrumentation } = useInstrumentStore();
|
|
13638
13641
|
const { containerRef, containerWidth, containerHeight } = useContainerSize();
|
|
13639
13642
|
const { sources, sourcesLoading, destinations, destinationsLoading, actions, actionsLoading, instrumentationRules, instrumentationRulesLoading } = useEntityStore();
|
|
@@ -13661,25 +13664,27 @@ const DataFlow = ({ heightToRemove, metrics }) => {
|
|
|
13661
13664
|
})), prevNodes));
|
|
13662
13665
|
};
|
|
13663
13666
|
useEffect(() => {
|
|
13667
|
+
const sourcesByStream = filterSourcesByStream(sources, selectedStreamName);
|
|
13664
13668
|
const sourceNodes = buildSourceNodes({
|
|
13665
|
-
entities: filterSources(
|
|
13669
|
+
entities: filterSources(sourcesByStream, filters),
|
|
13666
13670
|
loading: sourcesLoading || isAwaitingInstrumentation,
|
|
13667
|
-
unfilteredCount:
|
|
13671
|
+
unfilteredCount: sourcesByStream.length,
|
|
13668
13672
|
positions,
|
|
13669
13673
|
containerHeight,
|
|
13670
13674
|
onScroll: ({ scrollTop }) => handleNodesScrolled(sourceNodes, EntityTypes.Source, scrollTop),
|
|
13671
13675
|
});
|
|
13672
13676
|
handleNodesChanged(sourceNodes, EntityTypes.Source);
|
|
13673
|
-
}, [sources, sourcesLoading, isAwaitingInstrumentation, positions[EntityTypes.Source], filters, containerHeight]);
|
|
13677
|
+
}, [selectedStreamName, sources, sourcesLoading, isAwaitingInstrumentation, positions[EntityTypes.Source], filters, containerHeight]);
|
|
13674
13678
|
useEffect(() => {
|
|
13679
|
+
const destinationsByStream = filterDestinationsByStream(destinations, selectedStreamName);
|
|
13675
13680
|
const destinationNodes = buildDestinationNodes({
|
|
13676
|
-
entities: filterDestinations(
|
|
13681
|
+
entities: filterDestinations(destinationsByStream, filters),
|
|
13677
13682
|
loading: destinationsLoading,
|
|
13678
|
-
unfilteredCount:
|
|
13683
|
+
unfilteredCount: destinationsByStream.length,
|
|
13679
13684
|
positions,
|
|
13680
13685
|
});
|
|
13681
13686
|
handleNodesChanged(destinationNodes, EntityTypes.Destination);
|
|
13682
|
-
}, [destinations, destinationsLoading, positions[EntityTypes.Destination], filters]);
|
|
13687
|
+
}, [selectedStreamName, destinations, destinationsLoading, positions[EntityTypes.Destination], filters]);
|
|
13683
13688
|
useEffect(() => {
|
|
13684
13689
|
const actionNodes = buildActionNodes({
|
|
13685
13690
|
entities: filterActions(actions, filters),
|
|
@@ -13699,15 +13704,15 @@ const DataFlow = ({ heightToRemove, metrics }) => {
|
|
|
13699
13704
|
});
|
|
13700
13705
|
handleNodesChanged(ruleNodes, EntityTypes.InstrumentationRule);
|
|
13701
13706
|
}, [instrumentationRules, instrumentationRulesLoading, positions[EntityTypes.InstrumentationRule]]);
|
|
13702
|
-
return (React.createElement(Container$
|
|
13707
|
+
return (React.createElement(Container$d, { ref: containerRef, "$heightToRemove": heightToRemove },
|
|
13703
13708
|
React.createElement(Flow, { nodes: nodes, edges: edges, onNodesChange: onNodesChange, onEdgesChange: onEdgesChange })));
|
|
13704
13709
|
};
|
|
13705
13710
|
|
|
13706
|
-
const RelativeContainer$
|
|
13711
|
+
const RelativeContainer$2 = styled.div `
|
|
13707
13712
|
position: relative;
|
|
13708
13713
|
max-width: 200px;
|
|
13709
13714
|
`;
|
|
13710
|
-
const AbsoluteContainer$
|
|
13715
|
+
const AbsoluteContainer$2 = styled.div `
|
|
13711
13716
|
position: absolute;
|
|
13712
13717
|
top: calc(100% + 8px);
|
|
13713
13718
|
left: 0;
|
|
@@ -13784,26 +13789,21 @@ const HorizontalScroll = styled.div `
|
|
|
13784
13789
|
border-bottom: ${({ theme }) => `1px solid ${theme.colors.border}`};
|
|
13785
13790
|
overflow-x: scroll;
|
|
13786
13791
|
`;
|
|
13787
|
-
const VerticalScroll = styled.div `
|
|
13788
|
-
display: flex;
|
|
13789
|
-
flex-direction: column;
|
|
13790
|
-
padding: 12px;
|
|
13791
|
-
overflow-y: scroll;
|
|
13792
|
-
`;
|
|
13793
13792
|
const SearchResults = ({ searchText, onClose }) => {
|
|
13794
13793
|
const theme = Theme.useTheme();
|
|
13795
13794
|
const { onClickNode } = useClickNode();
|
|
13795
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
13796
13796
|
const { sources, destinations, actions, instrumentationRules } = useEntityStore();
|
|
13797
13797
|
const [selectedCategory, setSelectedCategory] = useState('all');
|
|
13798
13798
|
const { categories, searchResults } = useMemo(() => buildSearchResults({
|
|
13799
13799
|
instrumentationRules,
|
|
13800
|
-
sources,
|
|
13800
|
+
sources: filterSourcesByStream(sources, selectedStreamName),
|
|
13801
13801
|
actions,
|
|
13802
|
-
destinations,
|
|
13802
|
+
destinations: filterDestinationsByStream(destinations, selectedStreamName),
|
|
13803
13803
|
searchText,
|
|
13804
13804
|
selectedCategory,
|
|
13805
|
-
}), [instrumentationRules, sources, actions, destinations, searchText, selectedCategory]);
|
|
13806
|
-
return (React.createElement(AbsoluteContainer$
|
|
13805
|
+
}), [instrumentationRules, sources, actions, destinations, selectedStreamName, searchText, selectedCategory]);
|
|
13806
|
+
return (React.createElement(AbsoluteContainer$2, null,
|
|
13807
13807
|
React.createElement(HorizontalScroll, { style: { borderBottom: `1px solid ${!searchResults.length ? 'transparent' : theme.colors.border}` } }, categories.map(({ category, label, count }) => !!count && (React.createElement(SelectionButton, { key: `category-select-${category}`, label: label, badgeLabel: count, isSelected: selectedCategory === category, onClick: () => setSelectedCategory(category) })))),
|
|
13808
13808
|
searchResults.map(({ category, label, entities }, catIdx) => !!entities.length && (React.createElement(Fragment, { key: `category-list-${category}` },
|
|
13809
13809
|
React.createElement(VerticalScroll, { style: { maxHeight: selectedCategory !== 'all' ? '240px' : '140px' } },
|
|
@@ -13827,7 +13827,7 @@ const Search = () => {
|
|
|
13827
13827
|
const containerRef = useRef(null);
|
|
13828
13828
|
useOnClickOutside(containerRef, () => setFocused(false));
|
|
13829
13829
|
useKeyDown({ key: 'Escape', active: !!input || focused }, onClose);
|
|
13830
|
-
return (React.createElement(RelativeContainer$
|
|
13830
|
+
return (React.createElement(RelativeContainer$2, { ref: containerRef },
|
|
13831
13831
|
React.createElement(Input, { placeholder: 'Search', icon: SearchIcon, value: input, onChange: (e) => setInput(e.target.value.toLowerCase()), onFocus: () => setFocused(true) }),
|
|
13832
13832
|
!!input || focused ? React.createElement(SearchResults, { searchText: input, onClose: onClose }) : null));
|
|
13833
13833
|
};
|
|
@@ -13867,19 +13867,22 @@ const getFilterCount = (params) => {
|
|
|
13867
13867
|
};
|
|
13868
13868
|
const Filters$1 = () => {
|
|
13869
13869
|
const theme = Theme.useTheme();
|
|
13870
|
-
const { namespaces,
|
|
13870
|
+
const { namespaces, sources } = useEntityStore();
|
|
13871
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
13872
|
+
const { namespaces: namespaceFilters, kinds, monitors, languages, errors, onlyErrors, setAll, clearAll, getEmptyState } = useFilterStore();
|
|
13873
|
+
const sourcesByStream = useMemo(() => filterSourcesByStream(sources, selectedStreamName), [sources, selectedStreamName]);
|
|
13871
13874
|
// We need local state, because we want to keep the filters in the store only when the user clicks on apply
|
|
13872
|
-
const [filters, setFilters] = useState({ namespaces, kinds, monitors, languages, errors, onlyErrors });
|
|
13875
|
+
const [filters, setFilters] = useState({ namespaces: namespaceFilters, kinds, monitors, languages, errors, onlyErrors });
|
|
13873
13876
|
const [filterCount, setFilterCount] = useState(getFilterCount(filters));
|
|
13874
13877
|
const [focused, setFocused] = useState(false);
|
|
13875
13878
|
const toggleFocused = () => setFocused((prev) => !prev);
|
|
13876
13879
|
useEffect(() => {
|
|
13877
13880
|
if (!focused) {
|
|
13878
|
-
const payload = { namespaces, kinds, monitors, languages, errors, onlyErrors };
|
|
13881
|
+
const payload = { namespaces: namespaceFilters, kinds, monitors, languages, errors, onlyErrors };
|
|
13879
13882
|
setFilters(payload);
|
|
13880
13883
|
setFilterCount(getFilterCount(payload));
|
|
13881
13884
|
}
|
|
13882
|
-
}, [focused,
|
|
13885
|
+
}, [focused, namespaceFilters, kinds, monitors, errors, onlyErrors]);
|
|
13883
13886
|
const onApply = () => {
|
|
13884
13887
|
// TODO: remove trycatch after debugging
|
|
13885
13888
|
try {
|
|
@@ -13903,17 +13906,17 @@ const Filters$1 = () => {
|
|
|
13903
13906
|
const ref = useRef(null);
|
|
13904
13907
|
useOnClickOutside(ref, onCancel);
|
|
13905
13908
|
useKeyDown({ key: 'Escape', active: focused }, onCancel);
|
|
13906
|
-
return (React.createElement(RelativeContainer$
|
|
13909
|
+
return (React.createElement(RelativeContainer$2, { ref: ref },
|
|
13907
13910
|
React.createElement(SelectionButton, { label: 'Filters', icon: FilterIcon, badgeLabel: filterCount, badgeFilled: !!filterCount, withBorder: true, color: 'transparent', onClick: toggleFocused }),
|
|
13908
|
-
React.createElement(AbsoluteContainer$
|
|
13911
|
+
React.createElement(AbsoluteContainer$2, { "$hidden": !focused },
|
|
13909
13912
|
React.createElement(FormWrapper, null,
|
|
13910
|
-
React.createElement(NamespaceDropdown, { value: filters['namespaces'], onSelect: (val) => setFilters((prev) => ({ ...prev, namespaces: [...(prev.namespaces || []), val] })), onDeselect: (val) => setFilters((prev) => ({ ...prev, namespaces: (prev.namespaces || []).filter((opt) => opt.id !== val.id) })), showSearch: true, required: true, isMulti: true }),
|
|
13911
|
-
React.createElement(KindDropdown, { value: filters['kinds'], onSelect: (val) => setFilters((prev) => ({ ...prev, kinds: [...(prev.kinds || []), val] })), onDeselect: (val) => setFilters((prev) => ({ ...prev, kinds: (prev.kinds || []).filter((opt) => opt.id !== val.id) })), showSearch: true, required: true, isMulti: true }),
|
|
13912
|
-
React.createElement(LanguageDropdown, { value: filters['languages'], onSelect: (val) => setFilters((prev) => ({ ...prev, languages: [...(prev.languages || []), val] })), onDeselect: (val) => setFilters((prev) => ({ ...prev, languages: (prev.languages || []).filter((opt) => opt.id !== val.id) })), showSearch: true, required: true, isMulti: true }),
|
|
13913
|
+
React.createElement(NamespaceDropdown, { namespaces: namespaces, value: filters['namespaces'], onSelect: (val) => setFilters((prev) => ({ ...prev, namespaces: [...(prev.namespaces || []), val] })), onDeselect: (val) => setFilters((prev) => ({ ...prev, namespaces: (prev.namespaces || []).filter((opt) => opt.id !== val.id) })), showSearch: true, required: true, isMulti: true }),
|
|
13914
|
+
React.createElement(KindDropdown, { sources: sourcesByStream, value: filters['kinds'], onSelect: (val) => setFilters((prev) => ({ ...prev, kinds: [...(prev.kinds || []), val] })), onDeselect: (val) => setFilters((prev) => ({ ...prev, kinds: (prev.kinds || []).filter((opt) => opt.id !== val.id) })), showSearch: true, required: true, isMulti: true }),
|
|
13915
|
+
React.createElement(LanguageDropdown, { sources: sourcesByStream, value: filters['languages'], onSelect: (val) => setFilters((prev) => ({ ...prev, languages: [...(prev.languages || []), val] })), onDeselect: (val) => setFilters((prev) => ({ ...prev, languages: (prev.languages || []).filter((opt) => opt.id !== val.id) })), showSearch: true, required: true, isMulti: true }),
|
|
13913
13916
|
React.createElement(MonitorDropdown, { value: filters['monitors'], onSelect: (val) => setFilters((prev) => ({ ...prev, monitors: [...(prev.monitors || []), val] })), onDeselect: (val) => setFilters((prev) => ({ ...prev, monitors: (prev.monitors || []).filter((opt) => opt.id !== val.id) })), showSearch: true, required: true, isMulti: true }),
|
|
13914
13917
|
React.createElement(ToggleWrapper, null,
|
|
13915
13918
|
React.createElement(Toggle, { title: 'Show only sources with errors', initialValue: filters['onlyErrors'], onChange: (bool) => setFilters((prev) => ({ ...prev, errors: [], onlyErrors: bool })) })),
|
|
13916
|
-
React.createElement(ErrorDropdown, { value: filters['errors'], onSelect: (val) => setFilters((prev) => ({ ...prev, errors: [...(prev.errors || []), val] })), onDeselect: (val) => setFilters((prev) => ({ ...prev, errors: (prev.errors || []).filter((opt) => opt.id !== val.id) })), disabled: !filters['onlyErrors'], showSearch: true, required: true, isMulti: true })),
|
|
13919
|
+
React.createElement(ErrorDropdown, { sources: sourcesByStream, value: filters['errors'], onSelect: (val) => setFilters((prev) => ({ ...prev, errors: [...(prev.errors || []), val] })), onDeselect: (val) => setFilters((prev) => ({ ...prev, errors: (prev.errors || []).filter((opt) => opt.id !== val.id) })), disabled: !filters['onlyErrors'], showSearch: true, required: true, isMulti: true })),
|
|
13917
13920
|
React.createElement(Actions, null,
|
|
13918
13921
|
React.createElement(ActionButton$1, { variant: 'primary', onClick: onApply }, "Apply"),
|
|
13919
13922
|
React.createElement(ActionButton$1, { variant: 'secondary', onClick: onCancel }, "Cancel"),
|
|
@@ -13921,7 +13924,60 @@ const Filters$1 = () => {
|
|
|
13921
13924
|
React.createElement(ActionButton$1, { variant: 'tertiary', onClick: onReset, "$color": theme.text.error }, "Reset"))))));
|
|
13922
13925
|
};
|
|
13923
13926
|
|
|
13924
|
-
const
|
|
13927
|
+
const RelativeContainer$1 = styled.div `
|
|
13928
|
+
position: relative;
|
|
13929
|
+
`;
|
|
13930
|
+
const Container$c = styled(FlexRow) `
|
|
13931
|
+
border: 1px solid ${({ theme }) => theme.colors.border};
|
|
13932
|
+
border-radius: 32px;
|
|
13933
|
+
|
|
13934
|
+
& button {
|
|
13935
|
+
max-height: 28px;
|
|
13936
|
+
}
|
|
13937
|
+
`;
|
|
13938
|
+
const AbsoluteContainer$1 = styled.div `
|
|
13939
|
+
position: absolute;
|
|
13940
|
+
top: calc(100% + 8px);
|
|
13941
|
+
left: 0;
|
|
13942
|
+
z-index: 1;
|
|
13943
|
+
background-color: ${({ theme }) => theme.colors.dropdown_bg};
|
|
13944
|
+
border: ${({ theme }) => `1px solid ${theme.colors.border}`};
|
|
13945
|
+
border-radius: 24px;
|
|
13946
|
+
width: 420px;
|
|
13947
|
+
`;
|
|
13948
|
+
const SelectionMenuHeadWrap = styled.div `
|
|
13949
|
+
border-bottom: ${({ theme }) => `1px solid ${theme.colors.border}`};
|
|
13950
|
+
padding: 12px;
|
|
13951
|
+
`;
|
|
13952
|
+
const SelectionWrap = styled(VerticalScroll) `
|
|
13953
|
+
max-height: 240px;
|
|
13954
|
+
`;
|
|
13955
|
+
const DataStreamSelect = ({ onClickNewDataStream }) => {
|
|
13956
|
+
const theme = Theme.useTheme();
|
|
13957
|
+
const { dataStreams, selectedStreamName, setSelectedStreamName } = useDataStreamStore();
|
|
13958
|
+
const containerRef = useRef(null);
|
|
13959
|
+
const [popupOpen, setPopupOpen] = useState(false);
|
|
13960
|
+
useOnClickOutside(containerRef, () => setPopupOpen(false));
|
|
13961
|
+
const [searchText, setSearchText] = useState('');
|
|
13962
|
+
const filteredDataStreams = useMemo(() => dataStreams.filter(({ name }) => !searchText || name.toLowerCase().includes(searchText.toLowerCase())), [dataStreams, searchText]);
|
|
13963
|
+
return (React.createElement(RelativeContainer$1, null,
|
|
13964
|
+
React.createElement(Container$c, { "$gap": 0 },
|
|
13965
|
+
React.createElement(Button, { variant: 'tertiary', onClick: () => setPopupOpen((prev) => !prev) },
|
|
13966
|
+
React.createElement(DataStreamsIcon, { fill: theme.text.info }),
|
|
13967
|
+
React.createElement(Text, null, selectedStreamName),
|
|
13968
|
+
React.createElement(ExtendArrow, { extend: popupOpen })),
|
|
13969
|
+
React.createElement(Divider, { orientation: 'vertical', length: '32px', thickness: 2, margin: '0' }),
|
|
13970
|
+
React.createElement(AddButton$1, { onClick: onClickNewDataStream, label: BUTTON_TEXTS.NEW })),
|
|
13971
|
+
popupOpen && (React.createElement(AbsoluteContainer$1, { ref: containerRef },
|
|
13972
|
+
React.createElement(SelectionMenuHeadWrap, null,
|
|
13973
|
+
React.createElement(Input, { placeholder: 'Search...', icon: SearchIcon, value: searchText, onChange: (e) => setSearchText(e.target.value) })),
|
|
13974
|
+
React.createElement(SelectionWrap, null, filteredDataStreams.map(({ name }) => (React.createElement(SelectionButton, { key: `stream-${name}`, label: name, isSelected: selectedStreamName === name, onClick: () => {
|
|
13975
|
+
setSelectedStreamName(name);
|
|
13976
|
+
setPopupOpen(false);
|
|
13977
|
+
}, color: 'transparent', style: { width: '100%', justifyContent: 'flex-start' } }))))))));
|
|
13978
|
+
};
|
|
13979
|
+
|
|
13980
|
+
const Container$b = styled.div `
|
|
13925
13981
|
display: flex;
|
|
13926
13982
|
align-items: center;
|
|
13927
13983
|
margin: 20px 0;
|
|
@@ -13932,28 +13988,32 @@ const Container$a = styled.div `
|
|
|
13932
13988
|
const PushToEnd = styled.div `
|
|
13933
13989
|
margin-left: auto;
|
|
13934
13990
|
`;
|
|
13935
|
-
const
|
|
13936
|
-
display: flex;
|
|
13937
|
-
align-items: center;
|
|
13938
|
-
justify-content: center;
|
|
13939
|
-
gap: 6px;
|
|
13940
|
-
min-width: 160px;
|
|
13941
|
-
padding-right: 24px;
|
|
13942
|
-
`;
|
|
13943
|
-
const DataFlowActionsMenu = ({ addEntity }) => {
|
|
13944
|
-
const theme = Theme.useTheme();
|
|
13991
|
+
const DataFlowActionsMenu = ({ addEntity, onClickNewDataStream }) => {
|
|
13945
13992
|
const { setCurrentModal } = useModalStore();
|
|
13946
|
-
return (React.createElement(Container$
|
|
13993
|
+
return (React.createElement(Container$b, null,
|
|
13994
|
+
onClickNewDataStream && React.createElement(DataStreamSelect, { onClickNewDataStream: onClickNewDataStream }),
|
|
13947
13995
|
React.createElement(Search, null),
|
|
13948
13996
|
React.createElement(Filters$1, null),
|
|
13949
13997
|
addEntity && (React.createElement(PushToEnd, null,
|
|
13950
|
-
React.createElement(AddButton, { "data-id": `add-${addEntity}`, onClick: () => setCurrentModal(addEntity) }
|
|
13951
|
-
React.createElement(PlusIcon$1, { fill: theme.colors.primary }),
|
|
13952
|
-
React.createElement(Text, { size: 14, family: 'secondary', color: theme.text.primary, weight: 600 },
|
|
13953
|
-
"ADD ",
|
|
13954
|
-
addEntity))))));
|
|
13998
|
+
React.createElement(AddButton$1, { "data-id": `add-${addEntity}`, onClick: () => setCurrentModal(addEntity), label: `${BUTTON_TEXTS.ADD} ${addEntity}`, variant: 'primary' })))));
|
|
13955
13999
|
};
|
|
13956
14000
|
|
|
14001
|
+
const DataStreamSelectionForm = forwardRef(({ isModal, onClickSummary }, ref) => {
|
|
14002
|
+
const { dataStreams } = useDataStreamStore();
|
|
14003
|
+
const [nameInput, setNameInput] = useState('');
|
|
14004
|
+
useImperativeHandle(ref, () => ({
|
|
14005
|
+
getFormValues: () => ({
|
|
14006
|
+
name: nameInput,
|
|
14007
|
+
}),
|
|
14008
|
+
}));
|
|
14009
|
+
const dataStreamOptions = useMemo(() => dataStreams.map(({ name }) => ({ label: name })), [dataStreams]);
|
|
14010
|
+
return (React.createElement(ModalBody, { "$isNotModal": !isModal, "$minHeight": '70vh' },
|
|
14011
|
+
React.createElement(FlexColumn, { "$gap": 24 },
|
|
14012
|
+
onClickSummary && React.createElement(NoteBackToSummary, { onClick: onClickSummary }),
|
|
14013
|
+
React.createElement(SectionTitle, { title: DISPLAY_TITLES.NAME_YOUR_STREAM, description: DISPLAY_TITLES.STREAM_DESCRIPTION }),
|
|
14014
|
+
React.createElement(AutocompleteInput, { placeholder: DISPLAY_TITLES.NAME_YOUR_STREAM_PLACEHOLDER, autoFocus: true, options: dataStreamOptions, defaultText: nameInput, onTextChange: setNameInput }))));
|
|
14015
|
+
});
|
|
14016
|
+
|
|
13957
14017
|
const buildMonitorsList = (exportedSignals) => Object.keys(exportedSignals)
|
|
13958
14018
|
.filter((key) => exportedSignals[key])
|
|
13959
14019
|
.join(', ');
|
|
@@ -13962,7 +14022,7 @@ const buildCard$2 = (destination, yamlFields) => {
|
|
|
13962
14022
|
const arr = [
|
|
13963
14023
|
{ title: DISPLAY_TITLES.NAME, value: destinationType.displayName },
|
|
13964
14024
|
{ title: DISPLAY_TITLES.TYPE, value: destinationType.type },
|
|
13965
|
-
{ type: DataCardFieldTypes.Monitors, title: DISPLAY_TITLES.
|
|
14025
|
+
{ type: DataCardFieldTypes.Monitors, title: DISPLAY_TITLES.MONITORS, value: buildMonitorsList(exportedSignals) },
|
|
13966
14026
|
];
|
|
13967
14027
|
const parsedFields = safeJsonParse(fields, {});
|
|
13968
14028
|
const sortedParsedFields = yamlFields.map((field) => ({ key: field.name, value: parsedFields[field.name] ?? null })).filter((item) => item.value !== null) ||
|
|
@@ -14027,7 +14087,7 @@ const ActionButton = styled(Button) `
|
|
|
14027
14087
|
align-items: center;
|
|
14028
14088
|
gap: 8px;
|
|
14029
14089
|
|
|
14030
|
-
${({ $status, theme }) => $status ===
|
|
14090
|
+
${({ $status, theme }) => $status === StatusType.Success
|
|
14031
14091
|
? css `
|
|
14032
14092
|
border-color: transparent;
|
|
14033
14093
|
background-color: ${theme.colors.success};
|
|
@@ -14041,27 +14101,26 @@ const ActionButton = styled(Button) `
|
|
|
14041
14101
|
background-color: transparent;
|
|
14042
14102
|
`}
|
|
14043
14103
|
`;
|
|
14044
|
-
const TestConnection = ({ destination, disabled,
|
|
14104
|
+
const TestConnection = ({ destination, disabled, validateForm, status, testConnection, onSuccess, onError }) => {
|
|
14045
14105
|
const theme = Theme.useTheme();
|
|
14046
|
-
|
|
14047
|
-
if (testResult) {
|
|
14048
|
-
if (testResult.succeeded)
|
|
14049
|
-
onSuccess();
|
|
14050
|
-
else
|
|
14051
|
-
onError();
|
|
14052
|
-
}
|
|
14053
|
-
}, [testResult]);
|
|
14106
|
+
const [loading, setLoading] = useState(false);
|
|
14054
14107
|
const onClick = async () => {
|
|
14055
|
-
if (validateForm())
|
|
14056
|
-
|
|
14108
|
+
if (validateForm()) {
|
|
14109
|
+
setLoading(true);
|
|
14110
|
+
const testResult = await testConnection(destination);
|
|
14111
|
+
if (testResult) {
|
|
14112
|
+
testResult.succeeded ? onSuccess(testResult) : onError(testResult);
|
|
14113
|
+
}
|
|
14114
|
+
setLoading(false);
|
|
14115
|
+
}
|
|
14057
14116
|
};
|
|
14058
14117
|
const Icon = !!status ? getStatusIcon(status, theme) : undefined;
|
|
14059
14118
|
return (React.createElement(ActionButton, { "$status": status, variant: 'secondary', disabled: disabled, onClick: onClick },
|
|
14060
|
-
|
|
14061
|
-
React.createElement(Text, { family: 'secondary', decoration: 'underline', size: 14, color: !!status ? theme.text[status] : undefined },
|
|
14119
|
+
loading ? React.createElement(FadeLoader, null) : Icon ? React.createElement(Icon, null) : null,
|
|
14120
|
+
React.createElement(Text, { family: 'secondary', decoration: 'underline', size: 14, color: !!status ? theme.text[status] : undefined }, loading ? 'Checking' : status === StatusType.Success ? 'Connection OK' : status === 'error' ? 'Connection Failed' : 'Test Connection')));
|
|
14062
14121
|
};
|
|
14063
14122
|
|
|
14064
|
-
const Container$
|
|
14123
|
+
const Container$a = styled(FlexColumn) `
|
|
14065
14124
|
align-items: unset;
|
|
14066
14125
|
padding: 0 4px;
|
|
14067
14126
|
`;
|
|
@@ -14070,11 +14129,11 @@ const NotesWrapper = styled.div `
|
|
|
14070
14129
|
flex-direction: column;
|
|
14071
14130
|
gap: 12px;
|
|
14072
14131
|
`;
|
|
14073
|
-
const DestinationForm = ({ isUpdate, categoryItem, formData, formErrors, validateForm, handleFormChange, dynamicFields, setDynamicFields, testConnection
|
|
14132
|
+
const DestinationForm = ({ isUpdate, categoryItem, formData, formErrors, validateForm, handleFormChange, dynamicFields, setDynamicFields, testConnection }) => {
|
|
14074
14133
|
const { supportedSignals, testConnectionSupported, displayName } = categoryItem || {};
|
|
14075
14134
|
const [autoFilled, setAutoFilled] = useState(false);
|
|
14076
14135
|
const [isFormDirty, setIsFormDirty] = useState(false);
|
|
14077
|
-
const [
|
|
14136
|
+
const [connection, setConnection] = useState(undefined);
|
|
14078
14137
|
const autoFillCheckRef = useRef(false);
|
|
14079
14138
|
useEffect(() => {
|
|
14080
14139
|
if (!!dynamicFields.length && !autoFillCheckRef.current) {
|
|
@@ -14097,7 +14156,7 @@ const DestinationForm = ({ isUpdate, categoryItem, formData, formErrors, validat
|
|
|
14097
14156
|
}, [dynamicFields, isFormDirty]);
|
|
14098
14157
|
const dirtyForm = () => {
|
|
14099
14158
|
setIsFormDirty(true);
|
|
14100
|
-
|
|
14159
|
+
setConnection(undefined);
|
|
14101
14160
|
};
|
|
14102
14161
|
const supportedMonitors = useMemo(() => {
|
|
14103
14162
|
const { logs, metrics, traces } = supportedSignals || {};
|
|
@@ -14129,19 +14188,28 @@ const DestinationForm = ({ isUpdate, categoryItem, formData, formErrors, validat
|
|
|
14129
14188
|
traces: signals.includes(SignalType.Traces),
|
|
14130
14189
|
});
|
|
14131
14190
|
};
|
|
14132
|
-
|
|
14133
|
-
|
|
14134
|
-
|
|
14135
|
-
|
|
14136
|
-
|
|
14137
|
-
|
|
14138
|
-
|
|
14139
|
-
|
|
14140
|
-
|
|
14191
|
+
const onTestConnectionError = (testResult) => {
|
|
14192
|
+
setIsFormDirty(false);
|
|
14193
|
+
setConnection({
|
|
14194
|
+
type: StatusType.Error,
|
|
14195
|
+
title: testResult?.reason || 'Connection failed',
|
|
14196
|
+
message: testResult?.message || 'Please check your input and try again.',
|
|
14197
|
+
});
|
|
14198
|
+
};
|
|
14199
|
+
const onTestConnectionSuccess = (testResult) => {
|
|
14200
|
+
setIsFormDirty(false);
|
|
14201
|
+
setConnection({
|
|
14202
|
+
type: StatusType.Success,
|
|
14203
|
+
title: testResult?.reason || 'Connection succeeded',
|
|
14204
|
+
message: testResult?.message || '',
|
|
14205
|
+
});
|
|
14206
|
+
};
|
|
14207
|
+
return (React.createElement(Container$a, { "$gap": 24 },
|
|
14208
|
+
React.createElement(Container$a, { "$gap": 12 },
|
|
14209
|
+
React.createElement(SectionTitle, { title: isUpdate ? 'Update destination' : 'Create destination', description: `Connect ${displayName} with Odigos.`, actionButton: testConnectionSupported && (React.createElement(TestConnection, { destination: formData, disabled: !isFormDirty, validateForm: validateForm, status: connection?.type, testConnection: testConnection, onError: onTestConnectionError, onSuccess: onTestConnectionSuccess })) }),
|
|
14141
14210
|
React.createElement(NotesWrapper, null,
|
|
14142
|
-
testConnectionSupported &&
|
|
14143
|
-
|
|
14144
|
-
autoFilled && !connectionStatus && !isUpdate && React.createElement(NotificationNote, { type: StatusType.Default, message: `Odigos autocompleted ${displayName} destination details.` })),
|
|
14211
|
+
testConnectionSupported && connection && React.createElement(NotificationNote, { type: connection.type, title: connection.title, message: connection.message }),
|
|
14212
|
+
autoFilled && !connection && !isUpdate && React.createElement(NotificationNote, { type: StatusType.Default, message: `Odigos autocompleted ${displayName} destination details.` })),
|
|
14145
14213
|
React.createElement(Divider, null)),
|
|
14146
14214
|
React.createElement(MonitorsCheckboxes, { title: isUpdate ? '' : 'This connection will monitor:', required: true, allowedSignals: supportedMonitors, selectedSignals: selectedMonitors, setSelectedSignals: handleSelectedSignals, errorMessage: formErrors['exportedSignals'] }),
|
|
14147
14215
|
!isUpdate && (React.createElement(Input, { title: 'Destination name', placeholder: 'Enter destination name', value: formData['name'], onChange: (e) => {
|
|
@@ -14173,9 +14241,11 @@ const DataContainer$2 = styled.div `
|
|
|
14173
14241
|
flex-direction: column;
|
|
14174
14242
|
gap: 12px;
|
|
14175
14243
|
`;
|
|
14176
|
-
const DestinationDrawer = ({ categories, updateDestination, deleteDestination, testConnection
|
|
14244
|
+
const DestinationDrawer = ({ categories, updateDestination, deleteDestination, testConnection }) => {
|
|
14177
14245
|
const { destinations } = useEntityStore();
|
|
14246
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
14178
14247
|
const { drawerType, drawerEntityId } = useDrawerStore();
|
|
14248
|
+
const destinationsByStream = useMemo(() => filterDestinationsByStream(destinations, selectedStreamName), [destinations, selectedStreamName]);
|
|
14179
14249
|
const drawerRef = useRef(null);
|
|
14180
14250
|
const isOpen = drawerType !== EntityTypes.Destination;
|
|
14181
14251
|
const [isEditing, setIsEditing] = useState(false);
|
|
@@ -14189,7 +14259,7 @@ const DestinationDrawer = ({ categories, updateDestination, deleteDestination, t
|
|
|
14189
14259
|
const thisItem = useMemo(() => {
|
|
14190
14260
|
if (isOpen)
|
|
14191
14261
|
return null;
|
|
14192
|
-
const found =
|
|
14262
|
+
const found = destinationsByStream?.find((x) => x.id === drawerEntityId);
|
|
14193
14263
|
if (!!found) {
|
|
14194
14264
|
loadFormWithDrawerItem(found);
|
|
14195
14265
|
const fields = [];
|
|
@@ -14207,7 +14277,7 @@ const DestinationDrawer = ({ categories, updateDestination, deleteDestination, t
|
|
|
14207
14277
|
setYamlFields(fields);
|
|
14208
14278
|
}
|
|
14209
14279
|
return found;
|
|
14210
|
-
}, [isOpen, drawerEntityId,
|
|
14280
|
+
}, [isOpen, drawerEntityId, destinationsByStream]);
|
|
14211
14281
|
if (!thisItem)
|
|
14212
14282
|
return null;
|
|
14213
14283
|
const thisOptionType = categories.flatMap((category) => category.items).find((option) => option.type === thisItem.destinationType.type);
|
|
@@ -14237,32 +14307,34 @@ const DestinationDrawer = ({ categories, updateDestination, deleteDestination, t
|
|
|
14237
14307
|
setIsFormDirty(false);
|
|
14238
14308
|
}
|
|
14239
14309
|
};
|
|
14240
|
-
return (React.createElement(OverviewDrawer, { ref: drawerRef, title: thisItem.name || thisItem.destinationType.displayName, icons: icon ? [icon] : undefined, iconSrcs: iconSrc ? [iconSrc] : undefined, isEdit: isEditing, isFormDirty: isFormDirty, onEdit: handleEdit, onSave: handleSave, onDelete: handleDelete, onCancel: handleCancel, isLastItem:
|
|
14310
|
+
return (React.createElement(OverviewDrawer, { ref: drawerRef, title: thisItem.name || thisItem.destinationType.displayName, icons: icon ? [icon] : undefined, iconSrcs: iconSrc ? [iconSrc] : undefined, isEdit: isEditing, isFormDirty: isFormDirty, onEdit: handleEdit, onSave: handleSave, onDelete: handleDelete, onCancel: handleCancel, isLastItem: destinationsByStream.length === 1 }, isEditing ? (React.createElement(FormContainer$2, null,
|
|
14241
14311
|
React.createElement(DestinationForm, { isUpdate: true, categoryItem: thisOptionType, formData: formData, formErrors: formErrors, handleFormChange: (...params) => {
|
|
14242
14312
|
setIsFormDirty(true);
|
|
14243
14313
|
handleFormChange(...params);
|
|
14244
14314
|
}, dynamicFields: dynamicFields, setDynamicFields: (...params) => {
|
|
14245
14315
|
setIsFormDirty(true);
|
|
14246
14316
|
setDynamicFields(...params);
|
|
14247
|
-
}, validateForm: validateForm, testConnection: testConnection
|
|
14317
|
+
}, validateForm: validateForm, testConnection: testConnection }))) : (React.createElement(DataContainer$2, null,
|
|
14248
14318
|
React.createElement(ConditionDetails, { conditions: thisItem.conditions || [] }),
|
|
14249
14319
|
React.createElement(DataCard, { title: DISPLAY_TITLES.DESTINATION_DETAILS, data: !!thisItem ? buildCard$2(thisItem, yamlFields) : [] })))));
|
|
14250
14320
|
};
|
|
14251
14321
|
|
|
14252
|
-
const ListsWrapper
|
|
14322
|
+
const ListsWrapper = styled.div `
|
|
14253
14323
|
display: flex;
|
|
14254
14324
|
flex-direction: column;
|
|
14255
14325
|
gap: 12px;
|
|
14256
14326
|
`;
|
|
14257
|
-
const DestinationsList = ({ items,
|
|
14327
|
+
const DestinationsList = ({ items, onSelectOption, onSelectConfigured }) => {
|
|
14258
14328
|
return items.map((category) => {
|
|
14259
|
-
|
|
14260
|
-
|
|
14261
|
-
|
|
14329
|
+
const isAlreadyExisting = category.name === DESTINATION_CATEGORIES['EXISTS']['TITLE'];
|
|
14330
|
+
return (React.createElement(ListsWrapper, { key: `category-${category.name}` },
|
|
14331
|
+
React.createElement(SectionTitle, { size: 'small', icon: category.icon, title: capitalizeFirstLetter(category.name), description: category.description }),
|
|
14332
|
+
category.items.map((item) => {
|
|
14262
14333
|
const { icon, iconSrc } = getDestinationIcon(item.type);
|
|
14263
|
-
return (React.createElement(DataTab, { key: `select-destination-${item.type}
|
|
14264
|
-
|
|
14265
|
-
|
|
14334
|
+
return (React.createElement(DataTab, { key: `select-${category.name}-destination-${item.type}`, "data-id": `select-${category.name}-destination-${item.type}`, title: item.displayName, hoverText: 'SELECT', onClick: () => (isAlreadyExisting ? onSelectConfigured(item.id) : onSelectOption(item)), iconProps: { icon, iconSrc }, checkboxProps: {
|
|
14335
|
+
withCheckbox: isAlreadyExisting,
|
|
14336
|
+
isChecked: item.selected,
|
|
14337
|
+
onCheckboxChange: () => onSelectConfigured(item.id),
|
|
14266
14338
|
}, visualProps: {
|
|
14267
14339
|
monitors: Object.keys(item.supportedSignals).filter((signal) => item.supportedSignals[signal].supported),
|
|
14268
14340
|
monitorsWithLabels: true,
|
|
@@ -14271,29 +14343,7 @@ const DestinationsList = ({ items, setSelectedItem }) => {
|
|
|
14271
14343
|
});
|
|
14272
14344
|
};
|
|
14273
14345
|
|
|
14274
|
-
const
|
|
14275
|
-
display: flex;
|
|
14276
|
-
flex-direction: column;
|
|
14277
|
-
gap: 12px;
|
|
14278
|
-
`;
|
|
14279
|
-
const PotentialDestinationsList = ({ items, setSelectedItem }) => {
|
|
14280
|
-
if (!items.length)
|
|
14281
|
-
return null;
|
|
14282
|
-
return (React.createElement(ListsWrapper, null,
|
|
14283
|
-
React.createElement(SectionTitle, { size: 'small', icon: OdigosLogo, title: 'Detected by Odigos', description: 'Odigos detects destinations for which automatic connection is available. All data will be filled out automatically.' }),
|
|
14284
|
-
items.map((item, idx) => {
|
|
14285
|
-
const { icon, iconSrc } = getDestinationIcon(item.type);
|
|
14286
|
-
return (React.createElement(DataTab, { key: `select-potential-destination-${item.type}-${idx}`, "data-id": `select-potential-destination-${item.type}`, title: item.displayName, hoverText: 'Select', onClick: () => setSelectedItem(item), iconProps: {
|
|
14287
|
-
icon,
|
|
14288
|
-
iconSrc,
|
|
14289
|
-
}, visualProps: {
|
|
14290
|
-
monitors: Object.keys(item.supportedSignals).filter((signal) => item.supportedSignals[signal].supported),
|
|
14291
|
-
monitorsWithLabels: true,
|
|
14292
|
-
} }));
|
|
14293
|
-
})));
|
|
14294
|
-
};
|
|
14295
|
-
|
|
14296
|
-
const Container$8 = styled.div `
|
|
14346
|
+
const Container$9 = styled.div `
|
|
14297
14347
|
display: flex;
|
|
14298
14348
|
flex-direction: column;
|
|
14299
14349
|
gap: 24px;
|
|
@@ -14304,7 +14354,7 @@ const Filters = styled.div `
|
|
|
14304
14354
|
gap: 12px;
|
|
14305
14355
|
`;
|
|
14306
14356
|
const WidthConstraint = styled.div `
|
|
14307
|
-
width:
|
|
14357
|
+
width: 170px;
|
|
14308
14358
|
margin-right: 8px;
|
|
14309
14359
|
`;
|
|
14310
14360
|
const ListsContainer = styled.div `
|
|
@@ -14319,22 +14369,60 @@ const ListsContainer = styled.div `
|
|
|
14319
14369
|
max-height: calc(100vh - 400px);
|
|
14320
14370
|
}
|
|
14321
14371
|
`;
|
|
14322
|
-
const NoDataFoundWrapper
|
|
14372
|
+
const NoDataFoundWrapper = styled(Container$9) `
|
|
14323
14373
|
margin-top: 80px;
|
|
14324
14374
|
`;
|
|
14375
|
+
const { MANAGED, SELF_HOSTED, DETECTED, EXISTS } = DESTINATION_CATEGORIES;
|
|
14325
14376
|
const DROPDOWN_OPTIONS = [
|
|
14326
14377
|
{ value: 'All types', id: 'all' },
|
|
14327
|
-
{ value:
|
|
14328
|
-
{ value:
|
|
14378
|
+
{ value: MANAGED.TITLE, id: MANAGED.TITLE },
|
|
14379
|
+
{ value: SELF_HOSTED.TITLE, id: SELF_HOSTED.TITLE },
|
|
14380
|
+
{ value: DETECTED.TITLE, id: DETECTED.TITLE },
|
|
14381
|
+
{ value: EXISTS.TITLE, id: EXISTS.TITLE },
|
|
14329
14382
|
];
|
|
14330
14383
|
const DEFAULT_CATEGORY = DROPDOWN_OPTIONS[0];
|
|
14331
14384
|
const DEFAULT_MONITORS = [SignalType.Logs, SignalType.Metrics, SignalType.Traces];
|
|
14332
|
-
const
|
|
14385
|
+
const createConfiguredItems = (destinations, selectedStreamName, configuredDestinationIds) => destinations.map((dest) => {
|
|
14386
|
+
const { type, displayName } = dest.destinationType;
|
|
14387
|
+
const isInSelectedStream = dest.dataStreamNames?.includes(selectedStreamName);
|
|
14388
|
+
const isConfigured = configuredDestinationIds.has(dest.id);
|
|
14389
|
+
return {
|
|
14390
|
+
id: dest.id,
|
|
14391
|
+
type,
|
|
14392
|
+
displayName,
|
|
14393
|
+
selected: isInSelectedStream || isConfigured,
|
|
14394
|
+
fields: [],
|
|
14395
|
+
testConnectionSupported: false,
|
|
14396
|
+
supportedSignals: {
|
|
14397
|
+
[SignalType.Logs]: { supported: dest.exportedSignals.logs },
|
|
14398
|
+
[SignalType.Metrics]: { supported: dest.exportedSignals.metrics },
|
|
14399
|
+
[SignalType.Traces]: { supported: dest.exportedSignals.traces },
|
|
14400
|
+
},
|
|
14401
|
+
};
|
|
14402
|
+
});
|
|
14403
|
+
const ChooseDestinationBody = ({ hidden, categories, potentialDestinations, onSelectOption, onSelectConfigured }) => {
|
|
14404
|
+
const { destinations } = useEntityStore();
|
|
14405
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
14406
|
+
const { configuredDestinations, configuredDestinationsUpdateOnly } = useSetupStore();
|
|
14333
14407
|
const [search, setSearch] = useState('');
|
|
14334
14408
|
const [selectedCategory, setSelectedCategory] = useState(DEFAULT_CATEGORY);
|
|
14335
14409
|
const [selectedMonitors, setSelectedMonitors] = useState(DEFAULT_MONITORS);
|
|
14336
14410
|
const filteredDestinations = useMemo(() => {
|
|
14337
|
-
|
|
14411
|
+
const clonedDestinationsCategories = deepClone(categories);
|
|
14412
|
+
clonedDestinationsCategories.unshift({
|
|
14413
|
+
name: EXISTS.TITLE,
|
|
14414
|
+
description: EXISTS.DESCRIPTION,
|
|
14415
|
+
icon: CheckIcon,
|
|
14416
|
+
// !! do not "filterDestinationsByStream" here, because we need all destinations to select already configured
|
|
14417
|
+
items: createConfiguredItems(destinations, selectedStreamName, new Set(configuredDestinations.concat(configuredDestinationsUpdateOnly).map((d) => d.id))),
|
|
14418
|
+
});
|
|
14419
|
+
clonedDestinationsCategories.unshift({
|
|
14420
|
+
name: DETECTED.TITLE,
|
|
14421
|
+
description: DETECTED.DESCRIPTION,
|
|
14422
|
+
icon: OdigosLogo,
|
|
14423
|
+
items: potentialDestinations,
|
|
14424
|
+
});
|
|
14425
|
+
return clonedDestinationsCategories
|
|
14338
14426
|
.map((category) => {
|
|
14339
14427
|
const filteredItems = category.items.filter((item) => {
|
|
14340
14428
|
const matchesSearch = !search || item.displayName.toLowerCase().includes(search.toLowerCase());
|
|
@@ -14345,25 +14433,24 @@ const ChooseDestinationBody = ({ hidden, categories, potentialDestinations, onSe
|
|
|
14345
14433
|
return { ...category, items: filteredItems };
|
|
14346
14434
|
})
|
|
14347
14435
|
.filter(({ items }) => !!items.length); // Filter out empty categories
|
|
14348
|
-
}, [categories, search, selectedCategory, selectedMonitors]);
|
|
14436
|
+
}, [categories, potentialDestinations, destinations, search, selectedCategory, selectedMonitors, selectedStreamName, configuredDestinations]);
|
|
14349
14437
|
if (hidden)
|
|
14350
14438
|
return null;
|
|
14351
|
-
return (React.createElement(Container$
|
|
14439
|
+
return (React.createElement(Container$9, null,
|
|
14352
14440
|
React.createElement(SectionTitle, { title: 'Choose destination', description: 'Add backend destination you want to connect with Odigos.' }),
|
|
14353
14441
|
React.createElement(Filters, null,
|
|
14354
14442
|
React.createElement(WidthConstraint, null,
|
|
14355
14443
|
React.createElement(Input, { placeholder: 'Search...', icon: SearchIcon, value: search, onChange: ({ target: { value } }) => setSearch(value) })),
|
|
14356
14444
|
React.createElement(WidthConstraint, null,
|
|
14357
|
-
React.createElement(Dropdown, { options: DROPDOWN_OPTIONS, value: selectedCategory, onSelect:
|
|
14445
|
+
React.createElement(Dropdown, { options: DROPDOWN_OPTIONS, value: selectedCategory, onSelect: setSelectedCategory, onDeselect: () => { } })),
|
|
14358
14446
|
React.createElement(MonitorsCheckboxes, { title: '', selectedSignals: selectedMonitors, setSelectedSignals: setSelectedMonitors })),
|
|
14359
14447
|
React.createElement(Divider, null),
|
|
14360
|
-
!filteredDestinations.length
|
|
14448
|
+
!filteredDestinations.length ? (React.createElement(NoDataFoundWrapper, null,
|
|
14361
14449
|
React.createElement(NoDataFound, { title: 'No destinations found' }))) : (React.createElement(ListsContainer, null,
|
|
14362
|
-
React.createElement(
|
|
14363
|
-
React.createElement(DestinationsList, { items: filteredDestinations, setSelectedItem: onSelect })))));
|
|
14450
|
+
React.createElement(DestinationsList, { items: filteredDestinations, onSelectOption: onSelectOption, onSelectConfigured: onSelectConfigured })))));
|
|
14364
14451
|
};
|
|
14365
14452
|
|
|
14366
|
-
const Container$
|
|
14453
|
+
const Container$8 = styled.div `
|
|
14367
14454
|
display: flex;
|
|
14368
14455
|
`;
|
|
14369
14456
|
const SideMenuWrapper = styled.div `
|
|
@@ -14374,15 +14461,53 @@ const SideMenuWrapper = styled.div `
|
|
|
14374
14461
|
display: none;
|
|
14375
14462
|
}
|
|
14376
14463
|
`;
|
|
14377
|
-
const DestinationModal = ({ isOnboarding, categories, potentialDestinations, createDestination, testConnection
|
|
14378
|
-
const {
|
|
14464
|
+
const DestinationModal = ({ isOnboarding, categories, potentialDestinations, createDestination, testConnection }) => {
|
|
14465
|
+
const { destinations } = useEntityStore();
|
|
14466
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
14379
14467
|
const { currentModal, setCurrentModal } = useModalStore();
|
|
14468
|
+
const { addConfiguredDestination, addConfiguredDestinationUpdateOnly } = useSetupStore();
|
|
14380
14469
|
const isOpen = currentModal === EntityTypes.Destination;
|
|
14381
14470
|
const [selectedItem, setSelectedItem] = useState(undefined);
|
|
14382
14471
|
const { formData, formErrors, handleFormChange, resetFormData, validateForm, setYamlFields, dynamicFields, setDynamicFields } = useDestinationFormData({
|
|
14383
14472
|
supportedSignals: selectedItem?.supportedSignals,
|
|
14384
14473
|
preLoadedFields: selectedItem?.fields,
|
|
14385
14474
|
});
|
|
14475
|
+
const getDestPayload = (alreadyConfigDest) => {
|
|
14476
|
+
const fields = alreadyConfigDest ? safeJsonParse(alreadyConfigDest.fields, {}) : {};
|
|
14477
|
+
if (!alreadyConfigDest) {
|
|
14478
|
+
dynamicFields.forEach((f) => {
|
|
14479
|
+
fields[f.name] = (f.componentType === FieldTypes.Dropdown ? f.value?.value || '' : f.value);
|
|
14480
|
+
});
|
|
14481
|
+
}
|
|
14482
|
+
return {
|
|
14483
|
+
id: alreadyConfigDest?.id || formData.type,
|
|
14484
|
+
name: alreadyConfigDest?.name || formData.name,
|
|
14485
|
+
dataStreamNames: alreadyConfigDest?.dataStreamNames || [],
|
|
14486
|
+
conditions: alreadyConfigDest?.conditions || [],
|
|
14487
|
+
exportedSignals: alreadyConfigDest?.exportedSignals || formData.exportedSignals,
|
|
14488
|
+
fields: JSON.stringify(fields),
|
|
14489
|
+
destinationType: alreadyConfigDest?.destinationType || {
|
|
14490
|
+
type: selectedItem.type,
|
|
14491
|
+
displayName: selectedItem.displayName,
|
|
14492
|
+
supportedSignals: {
|
|
14493
|
+
logs: { supported: false },
|
|
14494
|
+
metrics: { supported: false },
|
|
14495
|
+
traces: { supported: false },
|
|
14496
|
+
},
|
|
14497
|
+
},
|
|
14498
|
+
};
|
|
14499
|
+
};
|
|
14500
|
+
const handleAdd = (alreadyConfigDest) => {
|
|
14501
|
+
// Handle case from already configured
|
|
14502
|
+
if (alreadyConfigDest)
|
|
14503
|
+
return addConfiguredDestinationUpdateOnly(getDestPayload(alreadyConfigDest));
|
|
14504
|
+
// Handle new cases from onboarding
|
|
14505
|
+
if (isOnboarding)
|
|
14506
|
+
return addConfiguredDestination(getDestPayload());
|
|
14507
|
+
// Handle new cases from overview
|
|
14508
|
+
else
|
|
14509
|
+
return createDestination(formData);
|
|
14510
|
+
};
|
|
14386
14511
|
const handleClose = () => {
|
|
14387
14512
|
resetFormData();
|
|
14388
14513
|
setSelectedItem(undefined);
|
|
@@ -14392,36 +14517,25 @@ const DestinationModal = ({ isOnboarding, categories, potentialDestinations, cre
|
|
|
14392
14517
|
resetFormData();
|
|
14393
14518
|
setSelectedItem(undefined);
|
|
14394
14519
|
};
|
|
14395
|
-
const
|
|
14520
|
+
const handleSelectOption = (item) => {
|
|
14396
14521
|
resetFormData();
|
|
14397
14522
|
handleFormChange('type', item?.type || '');
|
|
14523
|
+
handleFormChange('currentStreamName', selectedStreamName);
|
|
14398
14524
|
setYamlFields(item?.fields || []);
|
|
14399
14525
|
setSelectedItem(item);
|
|
14400
14526
|
};
|
|
14527
|
+
const handleSelectConfigured = (id) => {
|
|
14528
|
+
// !! do not "filterDestinationsByStream" here, because we need all destinations to select already configured
|
|
14529
|
+
const foundConfigured = destinations.find((dest) => dest.id === id);
|
|
14530
|
+
if (foundConfigured)
|
|
14531
|
+
handleAdd(foundConfigured);
|
|
14532
|
+
};
|
|
14401
14533
|
const handleSubmit = async () => {
|
|
14402
|
-
|
|
14403
|
-
|
|
14404
|
-
|
|
14405
|
-
|
|
14406
|
-
|
|
14407
|
-
title: field.title || '',
|
|
14408
|
-
value: (field.componentType === FieldTypes.Dropdown ? field.value?.value || '' : field.value),
|
|
14409
|
-
}));
|
|
14410
|
-
destinationTypeDetails.unshift({
|
|
14411
|
-
title: 'Destination name',
|
|
14412
|
-
value: formData.name,
|
|
14413
|
-
});
|
|
14414
|
-
const storedDestination = {
|
|
14415
|
-
type: selectedItem.type,
|
|
14416
|
-
displayName: selectedItem.displayName,
|
|
14417
|
-
exportedSignals: formData.exportedSignals,
|
|
14418
|
-
destinationTypeDetails,
|
|
14419
|
-
category: '', // Could be handled in a more dynamic way if needed
|
|
14420
|
-
};
|
|
14421
|
-
addConfiguredDestination({ stored: storedDestination, form: formData });
|
|
14422
|
-
}
|
|
14423
|
-
else {
|
|
14424
|
-
createDestination(formData);
|
|
14534
|
+
if (selectedItem) {
|
|
14535
|
+
const isFormValid = validateForm({ withAlert: !isOnboarding, alertTitle: Crud.Create });
|
|
14536
|
+
if (!isFormValid)
|
|
14537
|
+
return null;
|
|
14538
|
+
handleAdd();
|
|
14425
14539
|
}
|
|
14426
14540
|
handleClose();
|
|
14427
14541
|
};
|
|
@@ -14431,10 +14545,9 @@ const DestinationModal = ({ isOnboarding, categories, potentialDestinations, cre
|
|
|
14431
14545
|
label: 'DONE',
|
|
14432
14546
|
variant: 'primary',
|
|
14433
14547
|
onClick: handleSubmit,
|
|
14434
|
-
disabled: !selectedItem,
|
|
14435
14548
|
},
|
|
14436
14549
|
];
|
|
14437
|
-
if (
|
|
14550
|
+
if (selectedItem) {
|
|
14438
14551
|
buttons.unshift({
|
|
14439
14552
|
label: 'BACK',
|
|
14440
14553
|
icon: ArrowIcon,
|
|
@@ -14445,105 +14558,104 @@ const DestinationModal = ({ isOnboarding, categories, potentialDestinations, cre
|
|
|
14445
14558
|
return buttons;
|
|
14446
14559
|
};
|
|
14447
14560
|
useKeyDown({ key: 'Enter', active: isOpen }, () => handleSubmit());
|
|
14448
|
-
return (React.createElement(Modal, { isOpen: isOpen, onClose: handleClose, header: { title:
|
|
14449
|
-
React.createElement(Container$
|
|
14561
|
+
return (React.createElement(Modal, { isOpen: isOpen, onClose: handleClose, header: { title: DISPLAY_TITLES.ADD_DESTINATION }, actionComponent: React.createElement(NavigationButtons, { buttons: renderHeaderButtons() }) },
|
|
14562
|
+
React.createElement(Container$8, null,
|
|
14450
14563
|
React.createElement(SideMenuWrapper, null,
|
|
14451
|
-
React.createElement(Stepper, { currentStep:
|
|
14452
|
-
{ stepNumber: 1, title:
|
|
14453
|
-
{ stepNumber: 2, title:
|
|
14564
|
+
React.createElement(Stepper, { currentStep: selectedItem ? 2 : 1, data: [
|
|
14565
|
+
{ stepNumber: 1, title: DISPLAY_TITLES.DESTINATIONS },
|
|
14566
|
+
{ stepNumber: 2, title: DISPLAY_TITLES.CONNECTION },
|
|
14454
14567
|
] })),
|
|
14455
14568
|
React.createElement(ModalBody, { style: { margin: '32px 24px 12px 24px' } },
|
|
14456
|
-
React.createElement(ChooseDestinationBody, { hidden:
|
|
14457
|
-
|
|
14569
|
+
React.createElement(ChooseDestinationBody, { hidden: selectedItem !== undefined, categories: categories, potentialDestinations: potentialDestinations, onSelectOption: handleSelectOption, onSelectConfigured: handleSelectConfigured }),
|
|
14570
|
+
selectedItem && (React.createElement(DestinationForm, { categoryItem: selectedItem, formData: formData, formErrors: formErrors, handleFormChange: handleFormChange, dynamicFields: dynamicFields, setDynamicFields: setDynamicFields, validateForm: validateForm, testConnection: testConnection }))))));
|
|
14458
14571
|
};
|
|
14459
14572
|
|
|
14460
|
-
const Container$
|
|
14573
|
+
const Container$7 = styled.div `
|
|
14461
14574
|
display: flex;
|
|
14462
14575
|
flex-direction: column;
|
|
14463
|
-
align-items:
|
|
14576
|
+
align-items: center;
|
|
14464
14577
|
gap: 12px;
|
|
14465
|
-
|
|
14466
|
-
max-height: calc(100vh -
|
|
14467
|
-
height:
|
|
14468
|
-
overflow-x: hidden;
|
|
14578
|
+
width: 100%;
|
|
14579
|
+
max-height: calc(100vh - 310px);
|
|
14580
|
+
height: fit-content;
|
|
14469
14581
|
overflow-y: scroll;
|
|
14470
14582
|
`;
|
|
14471
|
-
const
|
|
14472
|
-
const { configuredDestinations } = useSetupStore();
|
|
14473
|
-
|
|
14583
|
+
const DestinationList = ({ withDelete }) => {
|
|
14584
|
+
const { configuredDestinations, configuredDestinationsUpdateOnly } = useSetupStore();
|
|
14585
|
+
if (!configuredDestinations.length && !configuredDestinationsUpdateOnly.length) {
|
|
14586
|
+
return (React.createElement(CenterThis, null,
|
|
14587
|
+
React.createElement(NoDataFound, { title: 'No destinations', subTitle: 'Please add a destination' })));
|
|
14588
|
+
}
|
|
14589
|
+
return (React.createElement(Container$7, null, configuredDestinations.concat(configuredDestinationsUpdateOnly).map((dest, idx) => (React.createElement(ListItem, { key: `configured-destination-${dest.destinationType.type}-${idx}`, "data-id": `configured-destination-${dest.destinationType.type}`, item: dest, isLastItem: configuredDestinations.length + configuredDestinationsUpdateOnly.length === 1, withDelete: withDelete })))));
|
|
14474
14590
|
};
|
|
14475
|
-
const ListItem = ({ item, isLastItem }) => {
|
|
14591
|
+
const ListItem = ({ item, isLastItem, withDelete }) => {
|
|
14476
14592
|
const { removeConfiguredDestination } = useSetupStore();
|
|
14477
14593
|
const [deleteWarning, setDeleteWarning] = useState(false);
|
|
14478
|
-
const { icon, iconSrc } = getDestinationIcon(item.type);
|
|
14594
|
+
const { icon, iconSrc } = getDestinationIcon(item.destinationType.type);
|
|
14595
|
+
const mappedFields = useMemo(() => Object.entries(safeJsonParse(item.fields, {})).map(([k, v]) => ({ title: k, value: v })) || [], [item.fields]);
|
|
14479
14596
|
return (React.createElement(React.Fragment, null,
|
|
14480
|
-
React.createElement(DataTab, { title: item.displayName, iconProps: {
|
|
14481
|
-
|
|
14482
|
-
iconSrc,
|
|
14483
|
-
}, visualProps: {
|
|
14484
|
-
monitors: Object.keys(item.exportedSignals).filter((signal) => item.exportedSignals[signal] === true),
|
|
14597
|
+
React.createElement(DataTab, { title: item.destinationType.displayName || item.name, subTitle: item.destinationType.type, iconProps: { icon, iconSrc }, visualProps: {
|
|
14598
|
+
monitors: mapExportedSignals(item.exportedSignals),
|
|
14485
14599
|
monitorsWithLabels: true,
|
|
14486
14600
|
}, extendableProps: {
|
|
14487
14601
|
withExtend: true,
|
|
14488
|
-
renderExtended: () => React.createElement(DataCardFields, { data:
|
|
14489
|
-
}, renderActions:
|
|
14490
|
-
React.createElement(
|
|
14491
|
-
|
|
14602
|
+
renderExtended: () => React.createElement(DataCardFields, { data: mappedFields }),
|
|
14603
|
+
}, renderActions: withDelete
|
|
14604
|
+
? () => (React.createElement(IconButton, { onClick: () => setDeleteWarning(true) },
|
|
14605
|
+
React.createElement(TrashIcon, null)))
|
|
14606
|
+
: undefined }),
|
|
14607
|
+
withDelete && (React.createElement(DeleteWarning, { isOpen: deleteWarning, name: item.destinationType.displayName || item.name, type: EntityTypes.Destination, isLastItem: isLastItem, onApprove: () => removeConfiguredDestination(item), onDeny: () => setDeleteWarning(false) }))));
|
|
14492
14608
|
};
|
|
14493
14609
|
|
|
14494
|
-
const
|
|
14495
|
-
width: 640px;
|
|
14496
|
-
padding-top: 64px;
|
|
14497
|
-
`;
|
|
14498
|
-
const NotificationNoteWrapper = styled.div `
|
|
14499
|
-
margin-top: 24px;
|
|
14500
|
-
`;
|
|
14501
|
-
const AddDestinationButtonWrapper = styled.div `
|
|
14502
|
-
width: 100%;
|
|
14503
|
-
margin-top: 24px;
|
|
14504
|
-
`;
|
|
14505
|
-
const StyledAddDestinationButton = styled(Button) `
|
|
14610
|
+
const LargeAndWideAddButton = styled(Button) `
|
|
14506
14611
|
display: flex;
|
|
14507
14612
|
align-items: center;
|
|
14508
14613
|
justify-content: center;
|
|
14509
14614
|
gap: 8px;
|
|
14510
14615
|
width: 100%;
|
|
14616
|
+
padding: 32px;
|
|
14617
|
+
border-radius: 16px;
|
|
14618
|
+
border-style: dashed !important;
|
|
14511
14619
|
`;
|
|
14512
|
-
const DestinationSelectionForm = ({
|
|
14620
|
+
const DestinationSelectionForm = ({ isSourcesListEmpty, goToSources, categories, potentialDestinations, testConnection, onClickSummary }) => {
|
|
14513
14621
|
const theme = Theme.useTheme();
|
|
14514
14622
|
const { setCurrentModal } = useModalStore();
|
|
14623
|
+
const { configuredDestinations, configuredDestinationsUpdateOnly } = useSetupStore();
|
|
14515
14624
|
const onOpen = () => setCurrentModal(EntityTypes.Destination);
|
|
14516
|
-
return (React.createElement(
|
|
14517
|
-
React.createElement(
|
|
14518
|
-
|
|
14519
|
-
|
|
14520
|
-
|
|
14521
|
-
|
|
14522
|
-
|
|
14523
|
-
|
|
14524
|
-
|
|
14525
|
-
|
|
14526
|
-
|
|
14527
|
-
|
|
14528
|
-
|
|
14529
|
-
|
|
14625
|
+
return (React.createElement(React.Fragment, null,
|
|
14626
|
+
React.createElement(ModalBody, { "$isNotModal": true },
|
|
14627
|
+
React.createElement(FlexColumn, { "$gap": 12 },
|
|
14628
|
+
React.createElement(FlexColumn, { "$gap": 24 },
|
|
14629
|
+
onClickSummary && React.createElement(NoteBackToSummary, { onClick: onClickSummary }),
|
|
14630
|
+
React.createElement(SectionTitle, { title: DISPLAY_TITLES.ADD_DESTINATIONS, badgeLabel: configuredDestinations.length + configuredDestinationsUpdateOnly.length, description: DISPLAY_TITLES.ADD_DESTINATION_DESCRIPTION }),
|
|
14631
|
+
isSourcesListEmpty && (React.createElement(NotificationNote, { type: StatusType.Warning, message: DISPLAY_TITLES.NO_SOURCES_GO_BACK, action: {
|
|
14632
|
+
label: DISPLAY_TITLES.SELECT_SOURCES,
|
|
14633
|
+
onClick: goToSources,
|
|
14634
|
+
} })),
|
|
14635
|
+
React.createElement(LargeAndWideAddButton, { variant: 'secondary', onClick: onOpen },
|
|
14636
|
+
React.createElement(PlusIcon$1, null),
|
|
14637
|
+
React.createElement(Text, { color: theme.colors.secondary, size: 14, decoration: 'underline', family: 'secondary' }, DISPLAY_TITLES.ADD_DESTINATION))),
|
|
14638
|
+
React.createElement(DestinationList, { withDelete: true }))),
|
|
14639
|
+
React.createElement(DestinationModal, { isOnboarding: true, categories: categories, potentialDestinations: potentialDestinations, createDestination: () => { }, testConnection: testConnection })));
|
|
14530
14640
|
};
|
|
14531
14641
|
|
|
14532
14642
|
const columns$2 = [
|
|
14533
14643
|
{ key: 'icon', title: '' },
|
|
14534
14644
|
{ key: 'name', title: DISPLAY_TITLES.NAME, sortable: true },
|
|
14535
14645
|
{ key: 'type', title: DISPLAY_TITLES.TYPE, sortable: true },
|
|
14536
|
-
{ key: 'signals', title: DISPLAY_TITLES.
|
|
14646
|
+
{ key: 'signals', title: DISPLAY_TITLES.MONITORS },
|
|
14537
14647
|
{ key: 'conditions', title: 'Conditions' },
|
|
14538
14648
|
{ key: 'throughput', title: 'Throughput', sortable: true },
|
|
14539
14649
|
];
|
|
14540
14650
|
const DestinationTable = ({ metrics, maxHeight, maxWidth }) => {
|
|
14541
14651
|
const theme = Theme.useTheme();
|
|
14542
14652
|
const filters = useFilterStore();
|
|
14543
|
-
const {
|
|
14653
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
14544
14654
|
const { setDrawerType, setDrawerEntityId } = useDrawerStore();
|
|
14545
|
-
const
|
|
14546
|
-
const
|
|
14655
|
+
const { destinations, destinationsLoading } = useEntityStore();
|
|
14656
|
+
const destinationsByStream = useMemo(() => filterDestinationsByStream(destinations, selectedStreamName), [destinations, selectedStreamName]);
|
|
14657
|
+
const filteredDestinations = useMemo(() => filterDestinations(destinationsByStream, filters), [destinationsByStream, filters]);
|
|
14658
|
+
const rows = useMemo(() => filteredDestinations.map((dest) => {
|
|
14547
14659
|
const { hasErrors, hasWarnings, hasDisableds } = getConditionsBooleans(dest.conditions || []);
|
|
14548
14660
|
const { icon, iconSrc } = getDestinationIcon(dest.destinationType.type);
|
|
14549
14661
|
return {
|
|
@@ -14578,19 +14690,29 @@ const DestinationTable = ({ metrics, maxHeight, maxWidth }) => {
|
|
|
14578
14690
|
},
|
|
14579
14691
|
{
|
|
14580
14692
|
columnKey: 'signals',
|
|
14581
|
-
component: () => React.createElement(MonitorsIcons, { withLabels: true, monitors:
|
|
14693
|
+
component: () => React.createElement(MonitorsIcons, { withLabels: true, monitors: mapExportedSignals(dest.exportedSignals) }),
|
|
14582
14694
|
},
|
|
14583
14695
|
],
|
|
14584
14696
|
};
|
|
14585
|
-
}), [
|
|
14586
|
-
const badge = useMemo(() =>
|
|
14587
|
-
|
|
14697
|
+
}), [filteredDestinations, metrics]);
|
|
14698
|
+
const { badge, badgeTooltip } = useMemo(() => {
|
|
14699
|
+
if (filteredDestinations.length !== destinationsByStream.length) {
|
|
14700
|
+
return {
|
|
14701
|
+
badge: `${filteredDestinations.length}/${destinationsByStream.length}`,
|
|
14702
|
+
badgeTooltip: DISPLAY_TITLES.FILTERED_COUNT_TOOLTIP,
|
|
14703
|
+
};
|
|
14704
|
+
}
|
|
14705
|
+
return {
|
|
14706
|
+
badge: destinationsByStream.length,
|
|
14707
|
+
badgeTooltip: undefined,
|
|
14708
|
+
};
|
|
14709
|
+
}, [filteredDestinations, destinationsByStream]);
|
|
14588
14710
|
return (React.createElement(TableContainer, { "$maxWidth": maxWidth },
|
|
14589
14711
|
React.createElement(TableTitleWrap, null,
|
|
14590
|
-
React.createElement(IconTitleBadge, { icon: getEntityIcon(EntityTypes.Destination), title: DISPLAY_TITLES.
|
|
14712
|
+
React.createElement(IconTitleBadge, { icon: getEntityIcon(EntityTypes.Destination), title: DISPLAY_TITLES.DESTINATIONS, badge: badge, badgeTooltip: badgeTooltip, loading: destinationsLoading })),
|
|
14591
14713
|
React.createElement(TableWrap, { "$maxHeight": maxHeight },
|
|
14592
14714
|
React.createElement(InteractiveTable, { columns: columns$2, rows: rows })),
|
|
14593
|
-
!
|
|
14715
|
+
!filteredDestinations.length && (React.createElement(CenterThis, { style: { marginTop: '2rem' } },
|
|
14594
14716
|
React.createElement(NoDataFound, null)))));
|
|
14595
14717
|
};
|
|
14596
14718
|
|
|
@@ -14791,7 +14913,7 @@ const CustomFields = ({ ruleType, value, setValue, formErrors }) => {
|
|
|
14791
14913
|
return Component ? React.createElement(Component, { value: value, setValue: setValue, formErrors: formErrors }) : null;
|
|
14792
14914
|
};
|
|
14793
14915
|
|
|
14794
|
-
const Container$
|
|
14916
|
+
const Container$6 = styled.div `
|
|
14795
14917
|
display: flex;
|
|
14796
14918
|
flex-direction: column;
|
|
14797
14919
|
gap: 24px;
|
|
@@ -14802,7 +14924,7 @@ const FieldTitle = styled(Text) `
|
|
|
14802
14924
|
`;
|
|
14803
14925
|
const InstrumentationRuleForm = ({ isUpdate, rule, formData, formErrors, handleFormChange }) => {
|
|
14804
14926
|
const theme = Theme.useTheme();
|
|
14805
|
-
return (React.createElement(Container$
|
|
14927
|
+
return (React.createElement(Container$6, null,
|
|
14806
14928
|
isUpdate && (React.createElement("div", null,
|
|
14807
14929
|
React.createElement(FieldTitle, null, "Status"),
|
|
14808
14930
|
React.createElement(Segment, { options: [
|
|
@@ -15024,14 +15146,14 @@ const InstrumentationRuleTable = ({ maxHeight, maxWidth }) => {
|
|
|
15024
15146
|
}), [instrumentationRules]);
|
|
15025
15147
|
return (React.createElement(TableContainer, { "$maxWidth": maxWidth },
|
|
15026
15148
|
React.createElement(TableTitleWrap, null,
|
|
15027
|
-
React.createElement(IconTitleBadge, { icon: getEntityIcon(EntityTypes.Action), title: DISPLAY_TITLES.
|
|
15149
|
+
React.createElement(IconTitleBadge, { icon: getEntityIcon(EntityTypes.Action), title: DISPLAY_TITLES.INSTRUMENTATION_RULES, badge: instrumentationRules.length, loading: instrumentationRulesLoading })),
|
|
15028
15150
|
React.createElement(TableWrap, { "$maxHeight": maxHeight },
|
|
15029
15151
|
React.createElement(InteractiveTable, { columns: columns$1, rows: rows })),
|
|
15030
15152
|
!instrumentationRules.length && (React.createElement(CenterThis, { style: { marginTop: '2rem' } },
|
|
15031
15153
|
React.createElement(NoDataFound, null)))));
|
|
15032
15154
|
};
|
|
15033
15155
|
|
|
15034
|
-
const Container$
|
|
15156
|
+
const Container$5 = styled.div `
|
|
15035
15157
|
position: fixed;
|
|
15036
15158
|
bottom: 0;
|
|
15037
15159
|
left: 50%;
|
|
@@ -15048,7 +15170,7 @@ const Container$4 = styled.div `
|
|
|
15048
15170
|
const MultiSourceControl = ({ totalSourceCount, uninstrumentSources }) => {
|
|
15049
15171
|
const theme = Theme.useTheme();
|
|
15050
15172
|
const Transition = useTransition({
|
|
15051
|
-
container: Container$
|
|
15173
|
+
container: Container$5,
|
|
15052
15174
|
animateIn: Theme.animations.slide.in['center'],
|
|
15053
15175
|
animateOut: Theme.animations.slide.out['center'],
|
|
15054
15176
|
});
|
|
@@ -15065,7 +15187,14 @@ const MultiSourceControl = ({ totalSourceCount, uninstrumentSources }) => {
|
|
|
15065
15187
|
setSelectedSources({});
|
|
15066
15188
|
};
|
|
15067
15189
|
const onDelete = () => {
|
|
15068
|
-
|
|
15190
|
+
const payload = {};
|
|
15191
|
+
Object.entries(selectedSources).forEach(([ns, sources]) => {
|
|
15192
|
+
payload[ns] = sources.map((source) => ({
|
|
15193
|
+
...source,
|
|
15194
|
+
selected: false,
|
|
15195
|
+
}));
|
|
15196
|
+
});
|
|
15197
|
+
uninstrumentSources(payload);
|
|
15069
15198
|
setIsWarnModalOpen(false);
|
|
15070
15199
|
onDeselect();
|
|
15071
15200
|
};
|
|
@@ -15227,6 +15356,126 @@ const NotificationListItem = ({ id, seen, type, title, message, time, crdType, t
|
|
|
15227
15356
|
React.createElement(Text, { size: 10, color: theme.colors.orange_soft }, "new")))))));
|
|
15228
15357
|
};
|
|
15229
15358
|
|
|
15359
|
+
const Container$4 = styled.div `
|
|
15360
|
+
display: flex;
|
|
15361
|
+
flex-direction: column;
|
|
15362
|
+
align-items: center;
|
|
15363
|
+
|
|
15364
|
+
gap: 12px;
|
|
15365
|
+
width: 100%;
|
|
15366
|
+
max-height: ${({ $isModal }) => ($isModal ? 'calc(100vh - 510px)' : 'calc(100vh - 310px)')};
|
|
15367
|
+
height: fit-content;
|
|
15368
|
+
overflow-y: scroll;
|
|
15369
|
+
`;
|
|
15370
|
+
const Group = styled.div `
|
|
15371
|
+
width: 100%;
|
|
15372
|
+
padding-bottom: ${({ $isOpen }) => ($isOpen ? '18px' : '0')};
|
|
15373
|
+
border-radius: 16px;
|
|
15374
|
+
background-color: ${({ $selected, theme }) => ($selected ? theme.colors.majestic_blue + Theme.opacity.hex['024'] : theme.colors.dropdown_bg_2 + Theme.opacity.hex['040'])};
|
|
15375
|
+
`;
|
|
15376
|
+
const NamespaceItem = styled.div `
|
|
15377
|
+
display: flex;
|
|
15378
|
+
justify-content: space-between;
|
|
15379
|
+
gap: 12px;
|
|
15380
|
+
margin: 0;
|
|
15381
|
+
padding: 18px;
|
|
15382
|
+
border-radius: 16px;
|
|
15383
|
+
cursor: ${({ $withClick }) => ($withClick ? 'pointer' : 'unset')};
|
|
15384
|
+
&:hover {
|
|
15385
|
+
background-color: ${({ $withClick, $selected, theme }) => $withClick && ($selected ? theme.colors.majestic_blue + Theme.opacity.hex['040'] : theme.colors.dropdown_bg_2 + Theme.opacity.hex['080'])};
|
|
15386
|
+
transition: background-color 0.3s;
|
|
15387
|
+
}
|
|
15388
|
+
`;
|
|
15389
|
+
const SourceItem = styled(NamespaceItem) `
|
|
15390
|
+
width: calc(100% - 50px);
|
|
15391
|
+
margin-left: auto;
|
|
15392
|
+
padding: 8px;
|
|
15393
|
+
`;
|
|
15394
|
+
const RelativeWrapper = styled.div `
|
|
15395
|
+
position: relative;
|
|
15396
|
+
padding-bottom: ${({ $addPadding }) => ($addPadding ? '16px' : '0')};
|
|
15397
|
+
`;
|
|
15398
|
+
const AbsoluteWrapper = styled.div `
|
|
15399
|
+
position: absolute;
|
|
15400
|
+
top: 6px;
|
|
15401
|
+
left: 18px;
|
|
15402
|
+
`;
|
|
15403
|
+
const NotSourcesWrapper = styled(CenterThis) `
|
|
15404
|
+
padding-bottom: ${({ $addPadding }) => ($addPadding ? '16px' : '0')};
|
|
15405
|
+
`;
|
|
15406
|
+
const SelectionCount = styled(Text) `
|
|
15407
|
+
width: 18px;
|
|
15408
|
+
`;
|
|
15409
|
+
const SourceList = ({ isModal = false, withInstances = true, filteredNamespacesAndSources, selectedNamespace, onSelectNamespace, selectedSources, onSelectSource }) => {
|
|
15410
|
+
const theme = Theme.useTheme();
|
|
15411
|
+
const { namespacesLoading } = useEntityStore();
|
|
15412
|
+
const matrix = Object.entries(filteredNamespacesAndSources || {});
|
|
15413
|
+
if (!matrix?.length) {
|
|
15414
|
+
return (React.createElement(CenterThis, null, namespacesLoading ? (React.createElement(FadeLoader, null)) : (React.createElement(NoDataFound, { title: DISPLAY_TITLES.NO_SOURCES, subTitle: onSelectNamespace ? DISPLAY_TITLES.PLEASE_MAKE_SURE_UNIGNORED_NAMESPACES : DISPLAY_TITLES.PLEASE_ADD_SOURCE }))));
|
|
15415
|
+
}
|
|
15416
|
+
return (React.createElement(Container$4, { "$isModal": isModal }, matrix.map(([namespace, sources]) => {
|
|
15417
|
+
const sourcesForNamespace = selectedSources?.[namespace] || [];
|
|
15418
|
+
const onlySelectedSources = sourcesForNamespace.filter(({ selected }) => selected);
|
|
15419
|
+
const isNamespaceLoaded = sourcesForNamespace.length > 0;
|
|
15420
|
+
const isNamespaceSelected = selectedNamespace === namespace;
|
|
15421
|
+
const isNamespaceAllSourcesSelected = onlySelectedSources.length > 0 && onlySelectedSources.length === sources.length;
|
|
15422
|
+
const isNamespacePartiallySourcesSelected = onlySelectedSources.length > 0 && onlySelectedSources.length !== sources.length;
|
|
15423
|
+
const hasSources = sources.length > 0;
|
|
15424
|
+
if (!onSelectNamespace && !hasSources)
|
|
15425
|
+
return null;
|
|
15426
|
+
return (React.createElement(Group, { key: `namespace-${namespace}`, "data-id": `namespace-${namespace}`, "$selected": isNamespaceAllSourcesSelected, "$isOpen": isNamespaceSelected },
|
|
15427
|
+
React.createElement(NamespaceItem, { "$selected": isNamespaceAllSourcesSelected, "$withClick": !!onSelectNamespace, onClick: () => onSelectNamespace?.(namespace) },
|
|
15428
|
+
React.createElement(FlexRow, { "$gap": 12 },
|
|
15429
|
+
onSelectNamespace && React.createElement(Checkbox, { partiallyChecked: isNamespacePartiallySourcesSelected, value: isNamespaceAllSourcesSelected, onChange: (bool) => onSelectNamespace(namespace, bool) }),
|
|
15430
|
+
React.createElement(Text, null, namespace)),
|
|
15431
|
+
React.createElement(FlexRow, { "$gap": 12 },
|
|
15432
|
+
React.createElement(SelectionCount, { size: 10, color: theme.text.grey }, isNamespaceLoaded ? `${onlySelectedSources.length}/${sources.length}` : null),
|
|
15433
|
+
onSelectNamespace && React.createElement(ExtendArrow, { extend: isNamespaceSelected }))),
|
|
15434
|
+
(isNamespaceSelected || !onSelectNamespace) &&
|
|
15435
|
+
(hasSources ? (React.createElement(RelativeWrapper, { "$addPadding": !onSelectSource },
|
|
15436
|
+
React.createElement(AbsoluteWrapper, null,
|
|
15437
|
+
React.createElement(Divider, { orientation: 'vertical', length: `${(sources.length || 0) * 36}px` })),
|
|
15438
|
+
sources.map((source) => {
|
|
15439
|
+
const isSourceSelected = onlySelectedSources.some(({ name }) => name === source.name);
|
|
15440
|
+
return React.createElement(SourceRow, { key: `source-${source.name}`, withInstances: withInstances, source: source, namespace: namespace, isSelected: isSourceSelected, onSelect: onSelectSource });
|
|
15441
|
+
}))) : (React.createElement(NotSourcesWrapper, { "$addPadding": !onSelectSource }, namespacesLoading ? React.createElement(FadeLoader, null) : React.createElement(NoDataFound, { title: DISPLAY_TITLES.NO_SOURCES_NAMESPACE, subTitle: DISPLAY_TITLES.TRY_SEARCH_OR_OTHER_NAMESPACE }))))));
|
|
15442
|
+
})));
|
|
15443
|
+
};
|
|
15444
|
+
const SourceRow = ({ withInstances, source, namespace, isSelected, onSelect, }) => {
|
|
15445
|
+
return (React.createElement(SourceItem, { "data-id": `source-${source.name}`, "$selected": isSelected, "$withClick": !!onSelect, onClick: () => onSelect?.(source) },
|
|
15446
|
+
React.createElement(FlexRow, { "$gap": 12 },
|
|
15447
|
+
onSelect && React.createElement(Checkbox, { value: isSelected, onChange: () => onSelect(source, namespace) }),
|
|
15448
|
+
React.createElement(Text, null, source.name),
|
|
15449
|
+
React.createElement(Text, { opacity: 0.8, size: 10 },
|
|
15450
|
+
withInstances ? `${source.numberOfInstances || 0} running instance${source.numberOfInstances !== 1 ? 's' : ''} • ` : '',
|
|
15451
|
+
source.kind))));
|
|
15452
|
+
};
|
|
15453
|
+
|
|
15454
|
+
const Container$3 = styled.div `
|
|
15455
|
+
display: flex;
|
|
15456
|
+
flex-direction: column;
|
|
15457
|
+
align-items: center;
|
|
15458
|
+
gap: 12px;
|
|
15459
|
+
width: 100%;
|
|
15460
|
+
max-height: calc(100vh - 200px);
|
|
15461
|
+
height: fit-content;
|
|
15462
|
+
overflow-y: scroll;
|
|
15463
|
+
`;
|
|
15464
|
+
const SetupSummary = ({ onEditStream, onEditSources, onEditDestinations }) => {
|
|
15465
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
15466
|
+
const { configuredSources, configuredDestinations, configuredDestinationsUpdateOnly } = useSetupStore();
|
|
15467
|
+
const sourceCount = useMemo(() => Object.values(configuredSources).reduce((total, sourceList) => total + sourceList.filter((s) => s.selected).length, 0), [configuredSources]);
|
|
15468
|
+
return (React.createElement(ModalBody, { "$isNotModal": true },
|
|
15469
|
+
React.createElement(FlexColumn, { "$gap": 12 },
|
|
15470
|
+
React.createElement(SectionTitle, { title: DISPLAY_TITLES.SUMMARY, description: DISPLAY_TITLES.STREAM_CONFIRM }),
|
|
15471
|
+
React.createElement(Container$3, null,
|
|
15472
|
+
React.createElement(DataCard, { title: DISPLAY_TITLES.STREAM_NAME, action: () => React.createElement(EditButton, { onClick: onEditStream }), data: [{ title: '', value: selectedStreamName }] }),
|
|
15473
|
+
React.createElement(DataCard, { title: DISPLAY_TITLES.SELECTED_SOURCES, titleBadge: sourceCount, action: () => React.createElement(EditButton, { onClick: onEditSources }) },
|
|
15474
|
+
React.createElement(SourceList, { filteredNamespacesAndSources: configuredSources, withInstances: false })),
|
|
15475
|
+
React.createElement(DataCard, { title: DISPLAY_TITLES.SELECTED_DESTINATIONS, titleBadge: configuredDestinations.length + configuredDestinationsUpdateOnly.length, action: () => React.createElement(EditButton, { onClick: onEditDestinations }) },
|
|
15476
|
+
React.createElement(DestinationList, null))))));
|
|
15477
|
+
};
|
|
15478
|
+
|
|
15230
15479
|
var NavIconIds;
|
|
15231
15480
|
(function (NavIconIds) {
|
|
15232
15481
|
NavIconIds["Overview"] = "overview";
|
|
@@ -15390,21 +15639,21 @@ const Describe$1 = ({ source, fetchDescribeSource }) => {
|
|
|
15390
15639
|
const buildCard = (source) => {
|
|
15391
15640
|
const { name, kind, namespace } = source;
|
|
15392
15641
|
const arr = [
|
|
15393
|
-
{ title: DISPLAY_TITLES.
|
|
15642
|
+
{ title: DISPLAY_TITLES.NAMESPACE, value: namespace },
|
|
15394
15643
|
{ title: DISPLAY_TITLES.KIND, value: kind },
|
|
15395
15644
|
{ title: DISPLAY_TITLES.NAME, value: name, tooltip: 'K8s resource name' },
|
|
15396
15645
|
];
|
|
15397
15646
|
return arr;
|
|
15398
15647
|
};
|
|
15399
15648
|
|
|
15400
|
-
const Container$
|
|
15649
|
+
const Container$2 = styled.div `
|
|
15401
15650
|
display: flex;
|
|
15402
15651
|
flex-direction: column;
|
|
15403
15652
|
gap: 24px;
|
|
15404
15653
|
padding: 4px;
|
|
15405
15654
|
`;
|
|
15406
15655
|
const SourceForm = ({ formData, handleFormChange }) => {
|
|
15407
|
-
return (React.createElement(Container$
|
|
15656
|
+
return (React.createElement(Container$2, null,
|
|
15408
15657
|
React.createElement(Input, { name: 'sourceName', title: 'Source name', tooltip: 'This overrides the default service name that runs in your cluster.', placeholder: 'Use a name that overrides the source name', value: formData.otelServiceName, onChange: ({ target: { value } }) => handleFormChange('otelServiceName', value) })));
|
|
15409
15658
|
};
|
|
15410
15659
|
|
|
@@ -15427,7 +15676,9 @@ const DataContainer$1 = styled.div `
|
|
|
15427
15676
|
`;
|
|
15428
15677
|
const SourceDrawer = ({ persistSources, updateSource, fetchDescribeSource }) => {
|
|
15429
15678
|
const { sources } = useEntityStore();
|
|
15679
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
15430
15680
|
const { drawerType, drawerEntityId } = useDrawerStore();
|
|
15681
|
+
const sourcesByStream = useMemo(() => filterSourcesByStream(sources, selectedStreamName), [sources, selectedStreamName]);
|
|
15431
15682
|
const drawerRef = useRef(null);
|
|
15432
15683
|
const isOpen = drawerType !== EntityTypes.Source;
|
|
15433
15684
|
const [isEditing, setIsEditing] = useState(false);
|
|
@@ -15437,11 +15688,11 @@ const SourceDrawer = ({ persistSources, updateSource, fetchDescribeSource }) =>
|
|
|
15437
15688
|
const thisItem = useMemo(() => {
|
|
15438
15689
|
if (isOpen)
|
|
15439
15690
|
return null;
|
|
15440
|
-
const found =
|
|
15691
|
+
const found = sourcesByStream?.find((x) => x.namespace === drawerEntityId.namespace && x.name === drawerEntityId.name && x.kind === drawerEntityId.kind);
|
|
15441
15692
|
if (!!found)
|
|
15442
15693
|
loadFormWithDrawerItem(found);
|
|
15443
15694
|
return found;
|
|
15444
|
-
}, [isOpen, drawerEntityId,
|
|
15695
|
+
}, [isOpen, drawerEntityId, sourcesByStream]);
|
|
15445
15696
|
if (!thisItem)
|
|
15446
15697
|
return null;
|
|
15447
15698
|
const containersData = thisItem.containers?.map((container) => ({
|
|
@@ -15458,7 +15709,7 @@ const SourceDrawer = ({ persistSources, updateSource, fetchDescribeSource }) =>
|
|
|
15458
15709
|
};
|
|
15459
15710
|
const handleDelete = async () => {
|
|
15460
15711
|
const { namespace } = thisItem;
|
|
15461
|
-
persistSources({ [namespace]: [{ ...thisItem, selected: false }] }, {});
|
|
15712
|
+
persistSources({ [namespace]: [{ ...thisItem, selected: false, currentStreamName: selectedStreamName }] }, {});
|
|
15462
15713
|
setIsFormDirty(false);
|
|
15463
15714
|
setIsEditing(false);
|
|
15464
15715
|
resetFormData();
|
|
@@ -15472,7 +15723,7 @@ const SourceDrawer = ({ persistSources, updateSource, fetchDescribeSource }) =>
|
|
|
15472
15723
|
setIsFormDirty(false);
|
|
15473
15724
|
setIsEditing(false);
|
|
15474
15725
|
};
|
|
15475
|
-
return (React.createElement(OverviewDrawer, { ref: drawerRef, title: thisItem.otelServiceName || thisItem.name, titleTooltip: 'This attribute is used to identify the name of the service (service.name) that is generating telemetry data.', icons: getContainersIcons(thisItem.containers), isEdit: isEditing, isFormDirty: isFormDirty, onEdit: selectedTab === Tabs.Overview ? handleEdit : undefined, onSave: handleSave, onDelete: selectedTab === Tabs.Overview ? handleDelete : undefined, onCancel: handleCancel, isLastItem:
|
|
15726
|
+
return (React.createElement(OverviewDrawer, { ref: drawerRef, title: thisItem.otelServiceName || thisItem.name, titleTooltip: 'This attribute is used to identify the name of the service (service.name) that is generating telemetry data.', icons: getContainersIcons(thisItem.containers), isEdit: isEditing, isFormDirty: isFormDirty, onEdit: selectedTab === Tabs.Overview ? handleEdit : undefined, onSave: handleSave, onDelete: selectedTab === Tabs.Overview ? handleDelete : undefined, onCancel: handleCancel, isLastItem: sourcesByStream.length === 1, tabs: [
|
|
15476
15727
|
{
|
|
15477
15728
|
label: Tabs.Overview,
|
|
15478
15729
|
onClick: () => setSelectedTab(Tabs.Overview),
|
|
@@ -15487,137 +15738,22 @@ const SourceDrawer = ({ persistSources, updateSource, fetchDescribeSource }) =>
|
|
|
15487
15738
|
React.createElement(SourceForm, { formData: formData, handleFormChange: (...params) => {
|
|
15488
15739
|
setIsFormDirty(true);
|
|
15489
15740
|
handleFormChange(...params);
|
|
15741
|
+
handleFormChange('currentStreamName', selectedStreamName);
|
|
15490
15742
|
} }))) : (React.createElement(DataContainer$1, null,
|
|
15491
15743
|
React.createElement(ConditionDetails, { conditions: thisItem.conditions || [] }),
|
|
15492
15744
|
React.createElement(DataCard, { title: DISPLAY_TITLES.SOURCE_DETAILS, data: !!thisItem ? buildCard(thisItem) : [] }),
|
|
15493
15745
|
React.createElement(DataCard, { title: DISPLAY_TITLES.DETECTED_CONTAINERS, titleBadge: containersData.length, description: DISPLAY_TITLES.DETECTED_CONTAINERS_DESCRIPTION, data: containersData })))) : (React.createElement(Describe$1, { source: thisItem, fetchDescribeSource: fetchDescribeSource }))));
|
|
15494
15746
|
};
|
|
15495
15747
|
|
|
15496
|
-
const
|
|
15497
|
-
display: flex;
|
|
15498
|
-
flex-direction: column;
|
|
15499
|
-
align-items: center;
|
|
15500
|
-
gap: 12px;
|
|
15501
|
-
max-height: ${({ $isModal }) => ($isModal ? 'calc(100vh - 510px)' : 'calc(100vh - 310px)')};
|
|
15502
|
-
height: fit-content;
|
|
15503
|
-
overflow-y: scroll;
|
|
15504
|
-
`;
|
|
15505
|
-
const Group = styled.div `
|
|
15506
|
-
width: 100%;
|
|
15507
|
-
padding-bottom: ${({ $isOpen }) => ($isOpen ? '18px' : '0')};
|
|
15508
|
-
border-radius: 16px;
|
|
15509
|
-
background-color: ${({ $selected, theme }) => ($selected ? theme.colors.majestic_blue + Theme.opacity.hex['024'] : theme.colors.dropdown_bg_2 + Theme.opacity.hex['040'])};
|
|
15510
|
-
`;
|
|
15511
|
-
const NamespaceItem = styled.div `
|
|
15512
|
-
display: flex;
|
|
15748
|
+
const ActionsRow = styled(FlexRow) `
|
|
15513
15749
|
justify-content: space-between;
|
|
15514
|
-
gap: 12px;
|
|
15515
|
-
margin: 0;
|
|
15516
|
-
padding: 18px;
|
|
15517
|
-
border-radius: 16px;
|
|
15518
|
-
cursor: pointer;
|
|
15519
|
-
&:hover {
|
|
15520
|
-
background-color: ${({ $selected, theme }) => ($selected ? theme.colors.majestic_blue + Theme.opacity.hex['040'] : theme.colors.dropdown_bg_2 + Theme.opacity.hex['080'])};
|
|
15521
|
-
transition: background-color 0.3s;
|
|
15522
|
-
}
|
|
15523
|
-
`;
|
|
15524
|
-
const SourceItem = styled(NamespaceItem) `
|
|
15525
|
-
width: calc(100% - 50px);
|
|
15526
|
-
margin-left: auto;
|
|
15527
|
-
padding: 8px;
|
|
15528
15750
|
`;
|
|
15529
|
-
const RelativeWrapper = styled.div `
|
|
15530
|
-
position: relative;
|
|
15531
|
-
`;
|
|
15532
|
-
const AbsoluteWrapper = styled.div `
|
|
15533
|
-
position: absolute;
|
|
15534
|
-
top: 6px;
|
|
15535
|
-
left: 18px;
|
|
15536
|
-
`;
|
|
15537
|
-
const SelectionCount = styled(Text) `
|
|
15538
|
-
width: 18px;
|
|
15539
|
-
`;
|
|
15540
|
-
const NoDataFoundWrapper = styled.div `
|
|
15541
|
-
padding: 50px 0;
|
|
15542
|
-
display: flex;
|
|
15543
|
-
flex-direction: column;
|
|
15544
|
-
align-items: center;
|
|
15545
|
-
gap: 12px;
|
|
15546
|
-
height: 100%;
|
|
15547
|
-
max-height: calc(100vh - 360px);
|
|
15548
|
-
overflow-y: auto;
|
|
15549
|
-
`;
|
|
15550
|
-
const List = ({ isModal = false, filterNamespaces, filterSources, selectedNamespace, onSelectNamespace, selectedSources, onSelectSource, selectedFutureApps, onSelectFutureApps, onSelectAll, }) => {
|
|
15551
|
-
const theme = Theme.useTheme();
|
|
15552
|
-
const namespaces = filterNamespaces();
|
|
15553
|
-
const { namespacesLoading } = useEntityStore();
|
|
15554
|
-
if (!namespaces.length) {
|
|
15555
|
-
return React.createElement(NoDataFoundWrapper, null, namespacesLoading ? React.createElement(FadeLoader, { scale: 2 }) : React.createElement(NoDataFound, { title: 'No namespaces found' }));
|
|
15556
|
-
}
|
|
15557
|
-
return (React.createElement(Container$2, { "$isModal": isModal }, namespaces.map(([namespace, sources]) => {
|
|
15558
|
-
const sourcesForNamespace = selectedSources[namespace] || [];
|
|
15559
|
-
const futureAppsForNamespace = selectedFutureApps[namespace] || false;
|
|
15560
|
-
const isNamespaceLoaded = !!sourcesForNamespace.length;
|
|
15561
|
-
const isNamespaceSelected = selectedNamespace === namespace;
|
|
15562
|
-
const onlySelectedSources = sourcesForNamespace.filter(({ selected }) => selected);
|
|
15563
|
-
const filteredSources = filterSources(namespace, { cancelSearch: true });
|
|
15564
|
-
const isNamespaceAllSourcesSelected = !!onlySelectedSources.length && onlySelectedSources.length === sources.length;
|
|
15565
|
-
const isNamespacePartiallySourcesSelected = !!onlySelectedSources.length && onlySelectedSources.length !== sources.length;
|
|
15566
|
-
const hasFilteredSources = !!filteredSources.length;
|
|
15567
|
-
return (React.createElement(Group, { key: `namespace-${namespace}`, "data-id": `namespace-${namespace}`, "$selected": isNamespaceAllSourcesSelected, "$isOpen": isNamespaceSelected && hasFilteredSources },
|
|
15568
|
-
React.createElement(NamespaceItem, { "$selected": isNamespaceAllSourcesSelected, onClick: () => onSelectNamespace(namespace) },
|
|
15569
|
-
React.createElement(FlexRow, { "$gap": 12 },
|
|
15570
|
-
React.createElement(Checkbox, { partiallyChecked: isNamespacePartiallySourcesSelected, value: isNamespaceAllSourcesSelected, onChange: (bool) => onSelectAll(bool, namespace) }),
|
|
15571
|
-
React.createElement(Text, null, namespace)),
|
|
15572
|
-
React.createElement(FlexRow, { "$gap": 12 },
|
|
15573
|
-
React.createElement(Toggle, { title: 'Include Future Sources', initialValue: futureAppsForNamespace, onChange: (bool) => onSelectFutureApps(bool, namespace) }),
|
|
15574
|
-
React.createElement(Divider, { orientation: 'vertical', length: '12px', margin: '0' }),
|
|
15575
|
-
React.createElement(SelectionCount, { size: 10, color: theme.text.grey }, isNamespaceLoaded ? `${onlySelectedSources.length}/${sources.length}` : null),
|
|
15576
|
-
React.createElement(ExtendArrow, { extend: isNamespaceSelected }))),
|
|
15577
|
-
isNamespaceSelected &&
|
|
15578
|
-
(hasFilteredSources ? (React.createElement(RelativeWrapper, null,
|
|
15579
|
-
React.createElement(AbsoluteWrapper, null,
|
|
15580
|
-
React.createElement(Divider, { orientation: 'vertical', length: `${filteredSources.length * 36 - 12}px` })),
|
|
15581
|
-
filteredSources.map((source) => {
|
|
15582
|
-
const isSourceSelected = !!onlySelectedSources.find(({ name }) => name === source.name);
|
|
15583
|
-
return (React.createElement(SourceItem, { key: `source-${source.name}`, "data-id": `source-${source.name}`, "$selected": isSourceSelected, onClick: () => onSelectSource(source) },
|
|
15584
|
-
React.createElement(FlexRow, { "$gap": 12 },
|
|
15585
|
-
React.createElement(Checkbox, { value: isSourceSelected, onChange: () => onSelectSource(source, namespace) }),
|
|
15586
|
-
React.createElement(Text, null, source.name),
|
|
15587
|
-
React.createElement(Text, { opacity: 0.8, size: 10 },
|
|
15588
|
-
source.numberOfInstances,
|
|
15589
|
-
" running instance",
|
|
15590
|
-
source.numberOfInstances !== 1 && 's',
|
|
15591
|
-
" \u00B7 ",
|
|
15592
|
-
source.kind))));
|
|
15593
|
-
}))) : (React.createElement(NoDataFoundWrapper, null, namespacesLoading ? React.createElement(FadeLoader, { scale: 1.5 }) : React.createElement(NoDataFound, { title: 'No sources available in this namespace', subTitle: 'Try searching again or select another namespace.' }))))));
|
|
15594
|
-
})));
|
|
15595
|
-
};
|
|
15596
|
-
|
|
15597
|
-
const FlexContainer = styled.div `
|
|
15598
|
-
display: flex;
|
|
15599
|
-
align-items: center;
|
|
15600
|
-
justify-content: space-between;
|
|
15601
|
-
`;
|
|
15602
|
-
// when bringin back the "Select all" checkbox, change the following width to 300px
|
|
15603
15751
|
const SearchWrapper = styled.div `
|
|
15604
|
-
width:
|
|
15752
|
+
width: 420px;
|
|
15605
15753
|
`;
|
|
15606
|
-
const
|
|
15607
|
-
const
|
|
15608
|
-
|
|
15609
|
-
React.createElement(SectionTitle, { title: 'Select Sources for Instrumentation', badgeLabel: selectedAppsCount, description: 'Select apps to monitor in each namespace. Odigos will instrument them and send telemetry data to your destinations.' }),
|
|
15610
|
-
React.createElement(FlexContainer, { style: { marginTop: 24 } },
|
|
15611
|
-
React.createElement(SearchWrapper, null,
|
|
15612
|
-
React.createElement(Input, { placeholder: 'Search Kubernetes Namespaces', icon: SearchIcon, value: searchText, onChange: (e) => setSearchText(e.target.value.toLowerCase()) })),
|
|
15613
|
-
React.createElement(Toggle, { title: 'Show selected only', initialValue: showSelectedOnly, onChange: setShowSelectedOnly })),
|
|
15614
|
-
React.createElement(Divider, { margin: '16px 0' })));
|
|
15615
|
-
};
|
|
15616
|
-
|
|
15617
|
-
const SourceSelectionForm = forwardRef((props, ref) => {
|
|
15618
|
-
const { isModal, selectedNamespace, onSelectNamespace, namespace } = props;
|
|
15619
|
-
const formState = useSourceSelectionFormData({ selectedNamespace, onSelectNamespace, namespace });
|
|
15620
|
-
const { recordedInitialSources, getApiSourcesPayload, getApiFutureAppsPayload } = formState;
|
|
15754
|
+
const SourceSelectionForm = forwardRef(({ isModal, fetchSingleNamespace, onClickSummary }, ref) => {
|
|
15755
|
+
const formState = useSourceSelectionFormData({ fetchSingleNamespace });
|
|
15756
|
+
const { recordedInitialSources, selectedSources, getApiSourcesPayload, getApiFutureAppsPayload, searchText, setSearchText, showSelectedOnly, setShowSelectedOnly } = formState;
|
|
15621
15757
|
useImperativeHandle(ref, () => ({
|
|
15622
15758
|
getFormValues: () => ({
|
|
15623
15759
|
initial: recordedInitialSources,
|
|
@@ -15625,19 +15761,24 @@ const SourceSelectionForm = forwardRef((props, ref) => {
|
|
|
15625
15761
|
futureApps: getApiFutureAppsPayload(),
|
|
15626
15762
|
}),
|
|
15627
15763
|
}));
|
|
15764
|
+
const selectedCount = Object.values(selectedSources).reduce((prev, curr) => prev + curr.filter((s) => s.selected).length, 0);
|
|
15628
15765
|
return (React.createElement(ModalBody, { "$isNotModal": !isModal },
|
|
15629
|
-
React.createElement(
|
|
15630
|
-
|
|
15766
|
+
React.createElement(FlexColumn, { "$gap": 12 },
|
|
15767
|
+
React.createElement(FlexColumn, { "$gap": 24 },
|
|
15768
|
+
onClickSummary && React.createElement(NoteBackToSummary, { onClick: onClickSummary }),
|
|
15769
|
+
React.createElement(SectionTitle, { title: DISPLAY_TITLES.SELECT_SOURCES, badgeLabel: selectedCount, description: DISPLAY_TITLES.SELECT_SOURCES_DESCRIPTION }),
|
|
15770
|
+
React.createElement(ActionsRow, null,
|
|
15771
|
+
React.createElement(SearchWrapper, null,
|
|
15772
|
+
React.createElement(Input, { placeholder: DISPLAY_TITLES.SEARCH_NAMESPACES, icon: SearchIcon, value: searchText, onChange: (e) => setSearchText(e.target.value.toLowerCase()) })),
|
|
15773
|
+
React.createElement(Toggle, { title: DISPLAY_TITLES.SHOW_SELECTED_ONLY, initialValue: showSelectedOnly, onChange: setShowSelectedOnly }))),
|
|
15774
|
+
React.createElement(Divider, null),
|
|
15775
|
+
React.createElement(SourceList, { isModal: isModal, ...formState }))));
|
|
15631
15776
|
});
|
|
15632
15777
|
|
|
15633
|
-
const SourceModal = ({
|
|
15778
|
+
const SourceModal = ({ fetchSingleNamespace, persistSources }) => {
|
|
15634
15779
|
const { currentModal, setCurrentModal } = useModalStore();
|
|
15635
15780
|
const isOpen = currentModal === EntityTypes.Source;
|
|
15636
|
-
const onSelectNamespace = (ns) => {
|
|
15637
|
-
setSelectedNamespace((prev) => (prev === ns ? '' : ns));
|
|
15638
|
-
};
|
|
15639
15781
|
const handleClose = () => {
|
|
15640
|
-
setSelectedNamespace('');
|
|
15641
15782
|
setCurrentModal('');
|
|
15642
15783
|
};
|
|
15643
15784
|
const handleSubmit = async () => {
|
|
@@ -15656,14 +15797,14 @@ const SourceModal = ({ selectedNamespace, setSelectedNamespace, namespace, persi
|
|
|
15656
15797
|
onClick: handleSubmit,
|
|
15657
15798
|
},
|
|
15658
15799
|
] }) },
|
|
15659
|
-
React.createElement(SourceSelectionForm, { ref: formRef, isModal: true,
|
|
15800
|
+
React.createElement(SourceSelectionForm, { ref: formRef, isModal: true, fetchSingleNamespace: fetchSingleNamespace })));
|
|
15660
15801
|
};
|
|
15661
15802
|
|
|
15662
15803
|
const columns = [
|
|
15663
15804
|
{ key: 'checkbox-and-icon', title: '' },
|
|
15664
15805
|
{ key: 'name', title: DISPLAY_TITLES.NAME, sortable: true },
|
|
15665
15806
|
{ key: 'type', title: 'Kubernetes Type', sortable: true },
|
|
15666
|
-
{ key: 'namespace', title: DISPLAY_TITLES.
|
|
15807
|
+
{ key: 'namespace', title: DISPLAY_TITLES.NAMESPACE, sortable: true },
|
|
15667
15808
|
{ key: 'containers', title: DISPLAY_TITLES.DETECTED_CONTAINERS },
|
|
15668
15809
|
{ key: 'conditions', title: 'Conditions' },
|
|
15669
15810
|
{ key: 'throughput', title: 'Throughput', sortable: true },
|
|
@@ -15672,6 +15813,7 @@ const SourceTable = ({ metrics, maxHeight, maxWidth }) => {
|
|
|
15672
15813
|
const theme = Theme.useTheme();
|
|
15673
15814
|
const filters = useFilterStore();
|
|
15674
15815
|
const { isThisPending } = usePendingStore();
|
|
15816
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
15675
15817
|
const { sources, sourcesLoading } = useEntityStore();
|
|
15676
15818
|
const { setDrawerType, setDrawerEntityId } = useDrawerStore();
|
|
15677
15819
|
const { selectedSources, setSelectedSources } = useSelectedStore();
|
|
@@ -15684,7 +15826,8 @@ const SourceTable = ({ metrics, maxHeight, maxWidth }) => {
|
|
|
15684
15826
|
return calculateProgress(sourcesToDelete, sourcesDeleted);
|
|
15685
15827
|
return 1;
|
|
15686
15828
|
}, [sourcesToCreate, sourcesCreated, sourcesToDelete, sourcesDeleted]);
|
|
15687
|
-
const
|
|
15829
|
+
const sourcesByStream = useMemo(() => filterSourcesByStream(sources, selectedStreamName), [sources, selectedStreamName]);
|
|
15830
|
+
const filteredSources = useMemo(() => filterSources(sourcesByStream, filters), [sourcesByStream, filters]);
|
|
15688
15831
|
const [hasSelected, totalSelectedSources] = useMemo(() => {
|
|
15689
15832
|
let num = 0;
|
|
15690
15833
|
Object.values(selectedSources).forEach((selectedSources) => {
|
|
@@ -15695,7 +15838,7 @@ const SourceTable = ({ metrics, maxHeight, maxWidth }) => {
|
|
|
15695
15838
|
const onSelectAll = useCallback((bool) => {
|
|
15696
15839
|
if (bool) {
|
|
15697
15840
|
const payload = {};
|
|
15698
|
-
|
|
15841
|
+
filteredSources.forEach((source) => {
|
|
15699
15842
|
const id = { namespace: source.namespace, name: source.name, kind: source.kind };
|
|
15700
15843
|
const isPending = isThisPending({ entityType: EntityTypes.Source, entityId: id });
|
|
15701
15844
|
if (!isPending) {
|
|
@@ -15712,7 +15855,7 @@ const SourceTable = ({ metrics, maxHeight, maxWidth }) => {
|
|
|
15712
15855
|
else {
|
|
15713
15856
|
setSelectedSources({});
|
|
15714
15857
|
}
|
|
15715
|
-
}, [
|
|
15858
|
+
}, [filteredSources]);
|
|
15716
15859
|
const onSelectOne = useCallback((source) => {
|
|
15717
15860
|
const { namespace, name, kind } = source;
|
|
15718
15861
|
const payload = { ...selectedSources };
|
|
@@ -15727,7 +15870,7 @@ const SourceTable = ({ metrics, maxHeight, maxWidth }) => {
|
|
|
15727
15870
|
}
|
|
15728
15871
|
setSelectedSources(payload);
|
|
15729
15872
|
}, [selectedSources]);
|
|
15730
|
-
const rows = useMemo(() =>
|
|
15873
|
+
const rows = useMemo(() => filteredSources.map((source) => {
|
|
15731
15874
|
const id = getWorkloadId(source);
|
|
15732
15875
|
const idString = JSON.stringify(id);
|
|
15733
15876
|
const { hasErrors, hasWarnings, hasDisableds } = getConditionsBooleans(source.conditions || []);
|
|
@@ -15777,13 +15920,23 @@ const SourceTable = ({ metrics, maxHeight, maxWidth }) => {
|
|
|
15777
15920
|
},
|
|
15778
15921
|
],
|
|
15779
15922
|
};
|
|
15780
|
-
}), [
|
|
15781
|
-
const badge = useMemo(() =>
|
|
15782
|
-
|
|
15923
|
+
}), [filteredSources, selectedSources, metrics, onSelectOne]);
|
|
15924
|
+
const { badge, badgeTooltip } = useMemo(() => {
|
|
15925
|
+
if (filteredSources.length !== sourcesByStream.length) {
|
|
15926
|
+
return {
|
|
15927
|
+
badge: `${filteredSources.length}/${sourcesByStream.length}`,
|
|
15928
|
+
badgeTooltip: DISPLAY_TITLES.FILTERED_COUNT_TOOLTIP,
|
|
15929
|
+
};
|
|
15930
|
+
}
|
|
15931
|
+
return {
|
|
15932
|
+
badge: sourcesByStream.length,
|
|
15933
|
+
badgeTooltip: undefined,
|
|
15934
|
+
};
|
|
15935
|
+
}, [filteredSources, sourcesByStream]);
|
|
15783
15936
|
return (React.createElement(TableContainer, { "$maxWidth": maxWidth },
|
|
15784
15937
|
React.createElement(TableTitleWrap, null,
|
|
15785
|
-
React.createElement(Checkbox, { partiallyChecked: hasSelected &&
|
|
15786
|
-
React.createElement(IconTitleBadge, { icon: getEntityIcon(EntityTypes.Source), title: DISPLAY_TITLES.
|
|
15938
|
+
React.createElement(Checkbox, { partiallyChecked: hasSelected && filteredSources?.length !== totalSelectedSources, value: hasSelected && filteredSources?.length === totalSelectedSources, onChange: onSelectAll, disabled: !filteredSources?.length }),
|
|
15939
|
+
React.createElement(IconTitleBadge, { icon: getEntityIcon(EntityTypes.Source), title: DISPLAY_TITLES.SOURCES, badge: badge, badgeTooltip: badgeTooltip, loading: sourcesLoading && !isAwaitingInstrumentation })),
|
|
15787
15940
|
React.createElement(TableWrap, { "$maxHeight": maxHeight },
|
|
15788
15941
|
React.createElement(InteractiveTable, { columns: columns, rows: isAwaitingInstrumentation ? [] : rows })),
|
|
15789
15942
|
isAwaitingInstrumentation ? (React.createElement(CenterThis, { style: { marginTop: '2rem', gap: '24px' } },
|
|
@@ -15792,7 +15945,7 @@ const SourceTable = ({ metrics, maxHeight, maxWidth }) => {
|
|
|
15792
15945
|
React.createElement(Text, { color: theme.text.info },
|
|
15793
15946
|
!!sourcesToCreate ? 'Instrumenting' : 'Uninstrumenting',
|
|
15794
15947
|
" workloads..."),
|
|
15795
|
-
React.createElement(Badge, { label: `${instrumentingPercent}%` })))) : !
|
|
15948
|
+
React.createElement(Badge, { label: `${instrumentingPercent}%` })))) : !filteredSources.length ? (React.createElement(CenterThis, { style: { marginTop: '2rem' } },
|
|
15796
15949
|
React.createElement(NoDataFound, null))) : null));
|
|
15797
15950
|
};
|
|
15798
15951
|
|
|
@@ -16044,4 +16197,4 @@ const ToggleDarkMode = () => {
|
|
|
16044
16197
|
React.createElement(Background, { "$darkMode": darkMode })));
|
|
16045
16198
|
};
|
|
16046
16199
|
|
|
16047
|
-
export { ActionDrawer, ActionForm, ActionModal, ActionTable, AwaitPipeline, ComputePlatformSelect, ComputePlatforms, ComputePlatformsActionsMenu, ConnectionStatusDropdown, ConnectionTypeDropdown, DataFlow, DataFlowActionsMenu, DestinationDrawer, DestinationForm, DestinationModal, DestinationSelectionForm, DestinationTable, ErrorDropdown, InstrumentationRuleDrawer, InstrumentationRuleForm, InstrumentationRuleModal, InstrumentationRuleTable, KindDropdown, LanguageDropdown, MonitorDropdown, MultiSourceControl, NamespaceDropdown, NavIconIds, NotificationManager, OverviewDrawer, SideNav, SlackInvite, SourceDrawer, SourceForm, SourceModal, SourceSelectionForm, SourceTable, SystemOverview, ToastList, ToggleDarkMode };
|
|
16200
|
+
export { ActionDrawer, ActionForm, ActionModal, ActionTable, AwaitPipeline, ComputePlatformSelect, ComputePlatforms, ComputePlatformsActionsMenu, ConnectionStatusDropdown, ConnectionTypeDropdown, DataFlow, DataFlowActionsMenu, DataStreamSelectionForm, DestinationDrawer, DestinationForm, DestinationModal, DestinationSelectionForm, DestinationTable, ErrorDropdown, InstrumentationRuleDrawer, InstrumentationRuleForm, InstrumentationRuleModal, InstrumentationRuleTable, KindDropdown, LanguageDropdown, MonitorDropdown, MultiSourceControl, NamespaceDropdown, NavIconIds, NotificationManager, OverviewDrawer, SetupSummary, SideNav, SlackInvite, SourceDrawer, SourceForm, SourceModal, SourceSelectionForm, SourceTable, SystemOverview, TableCellConditions, ToastList, ToggleDarkMode };
|