@odigos/ui-kit 0.0.24 → 0.0.25
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 +12 -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 +56 -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 +3 -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 +6 -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 +7 -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 +588 -471
- 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-DwBxpY4g.js → index-BOkleuyi.js} +28 -3
- package/lib/{index-C7Y1tYdc.js → index-C0N2DFBu.js} +1 -1
- package/lib/{index-B-iLphLA.js → index-C2m4uddS.js} +1 -1
- package/lib/{index-DiTtXTRm.js → index-CK8tITRA.js} +25 -2
- package/lib/index-CTdoDQzG.js +36 -0
- package/lib/index-CWbxXTof.js +11 -0
- package/lib/{index-Dylg236O.js → index-CYUrArTm.js} +124 -163
- package/lib/{index-KOMAv-TS.js → index-CamnKrev.js} +8 -8
- package/lib/index-DE7A6Q_i.js +25 -0
- package/lib/index-Dqief9td.js +20 -0
- package/lib/{index-D3sp5Hx7.js → index-HOKGoci6.js} +93 -3
- 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 +10 -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-Bxm0NBIy.js} +60 -102
- package/lib/{useTransition-D0ykOLrk.js → useTransition-DvT5YNul.js} +2 -2
- package/package.json +8 -2
- 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-HOKGoci6.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-CYUrArTm.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-CK8tITRA.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-C0N2DFBu.js';
|
|
12
|
+
import { u as useActionFormData, a as useClickNode, c as useDestinationFormData, b as useClickNotification, d as useSourceFormData, e as useSourceSelectionFormData } from './useSourceSelectionFormData-Bxm0NBIy.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-DvT5YNul.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-CTdoDQzG.js';
|
|
17
|
+
import { m as mapConditions, b as getStatusIcon, c as capitalizeFirstLetter } from './index-C2m4uddS.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-BOkleuyi.js';
|
|
18
19
|
import { createPortal } from 'react-dom';
|
|
20
|
+
import { N as NoteBackToSummary, E as EditButton } from './index-DE7A6Q_i.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"),
|
|
@@ -12475,7 +12437,7 @@ ControlsComponent.displayName = 'Controls';
|
|
|
12475
12437
|
* @remarks To extend or customise the controls, you can use the [`<ControlButton />`](/api-reference/components/control-button) component
|
|
12476
12438
|
*
|
|
12477
12439
|
*/
|
|
12478
|
-
const Controls
|
|
12440
|
+
const Controls = memo(ControlsComponent);
|
|
12479
12441
|
|
|
12480
12442
|
function MiniMapNodeComponent({ id, x, y, width, height, style, color, strokeColor, strokeWidth, className, borderRadius, shapeRendering, selected, onClick, }) {
|
|
12481
12443
|
const { background, backgroundColor } = style || {};
|
|
@@ -12794,7 +12756,7 @@ function ResizeControl({ nodeId, position, variant = ResizeControlVariant.Handle
|
|
|
12794
12756
|
*/
|
|
12795
12757
|
memo(ResizeControl);
|
|
12796
12758
|
|
|
12797
|
-
const Container$
|
|
12759
|
+
const Container$k = styled(FlexColumn) `
|
|
12798
12760
|
align-items: center !important;
|
|
12799
12761
|
justify-content: center;
|
|
12800
12762
|
align-self: stretch;
|
|
@@ -12831,7 +12793,7 @@ const AddNode = memo(({ id: nodeId, data }) => {
|
|
|
12831
12793
|
const { isThisPending } = usePendingStore();
|
|
12832
12794
|
const entity = nodeId.split('-')[0];
|
|
12833
12795
|
const isPending = isThisPending({ entityType: entity });
|
|
12834
|
-
return (React.createElement(Container$
|
|
12796
|
+
return (React.createElement(Container$k, { "$nodeWidth": nodeWidth, className: 'nowheel nodrag' },
|
|
12835
12797
|
isPending ? (React.createElement(Fragment, null,
|
|
12836
12798
|
React.createElement(TitleWrapper, null,
|
|
12837
12799
|
React.createElement(FadeLoader, null),
|
|
@@ -12848,7 +12810,7 @@ const AddNode = memo(({ id: nodeId, data }) => {
|
|
|
12848
12810
|
React.createElement(Handle, { type: 'source', position: Position.Right, style: { visibility: 'hidden' } })));
|
|
12849
12811
|
});
|
|
12850
12812
|
|
|
12851
|
-
const Container$
|
|
12813
|
+
const Container$j = styled.div `
|
|
12852
12814
|
width: ${({ $nodeWidth }) => `${$nodeWidth}px`};
|
|
12853
12815
|
`;
|
|
12854
12816
|
const BaseNode = memo(({ id: nodeId, data }) => {
|
|
@@ -12881,7 +12843,7 @@ const BaseNode = memo(({ id: nodeId, data }) => {
|
|
|
12881
12843
|
}
|
|
12882
12844
|
setSelectedSources(namespaces);
|
|
12883
12845
|
};
|
|
12884
|
-
return (React.createElement(Container$
|
|
12846
|
+
return (React.createElement(Container$j, { "data-id": nodeId, "$nodeWidth": nodeWidth, className: 'nowheel nodrag' },
|
|
12885
12847
|
React.createElement(DataTab, { title: title, subTitle: subTitle, onClick: () => { }, renderActions: renderActions, iconProps: {
|
|
12886
12848
|
icon: icon,
|
|
12887
12849
|
icons: icons,
|
|
@@ -12901,19 +12863,19 @@ const BaseNode = memo(({ id: nodeId, data }) => {
|
|
|
12901
12863
|
React.createElement(Handle, { type: 'source', position: Position.Right, style: { visibility: 'hidden' } })));
|
|
12902
12864
|
});
|
|
12903
12865
|
|
|
12904
|
-
const Container$
|
|
12866
|
+
const Container$i = styled.div `
|
|
12905
12867
|
width: ${({ $nodeWidth }) => `${$nodeWidth}px`};
|
|
12906
12868
|
height: ${({ $nodeHeight }) => `${$nodeHeight}px`};
|
|
12907
12869
|
opacity: 0;
|
|
12908
12870
|
`;
|
|
12909
12871
|
const EdgedNode = memo(({ data }) => {
|
|
12910
12872
|
const { nodeWidth, nodeHeight } = data;
|
|
12911
|
-
return (React.createElement(Container$
|
|
12873
|
+
return (React.createElement(Container$i, { "$nodeWidth": nodeWidth, "$nodeHeight": nodeHeight, className: 'nowheel nodrag' },
|
|
12912
12874
|
React.createElement(Handle, { type: 'source', position: Position.Right, style: { visibility: 'hidden' } }),
|
|
12913
12875
|
React.createElement(Handle, { type: 'target', position: Position.Left, style: { visibility: 'hidden' } })));
|
|
12914
12876
|
});
|
|
12915
12877
|
|
|
12916
|
-
const Container$
|
|
12878
|
+
const Container$h = styled.div `
|
|
12917
12879
|
width: ${({ $nodeWidth }) => $nodeWidth}px;
|
|
12918
12880
|
height: ${({ $nodeHeight }) => $nodeHeight}px;
|
|
12919
12881
|
background: transparent;
|
|
@@ -12922,7 +12884,7 @@ const Container$f = styled.div `
|
|
|
12922
12884
|
`;
|
|
12923
12885
|
const FrameNode = memo(({ data }) => {
|
|
12924
12886
|
const { nodeWidth, nodeHeight } = data;
|
|
12925
|
-
return (React.createElement(Container$
|
|
12887
|
+
return (React.createElement(Container$h, { "$nodeWidth": nodeWidth, "$nodeHeight": nodeHeight, className: 'nowheel nodrag' },
|
|
12926
12888
|
React.createElement(Handle, { type: 'source', position: Position.Right, style: { visibility: 'hidden' } }),
|
|
12927
12889
|
React.createElement(Handle, { type: 'target', position: Position.Left, style: { visibility: 'hidden' } })));
|
|
12928
12890
|
});
|
|
@@ -12937,7 +12899,7 @@ const nodeConfig = {
|
|
|
12937
12899
|
};
|
|
12938
12900
|
|
|
12939
12901
|
const { framePadding: framePadding$3 } = nodeConfig;
|
|
12940
|
-
const Container$
|
|
12902
|
+
const Container$g = styled.div `
|
|
12941
12903
|
position: relative;
|
|
12942
12904
|
z-index: 1;
|
|
12943
12905
|
width: fit-content;
|
|
@@ -12985,7 +12947,7 @@ const ScrollNode = memo(({ data, ...rest }) => {
|
|
|
12985
12947
|
current?.addEventListener('scroll', handleScroll);
|
|
12986
12948
|
return () => current?.removeEventListener('scroll', handleScroll);
|
|
12987
12949
|
}, [onScroll]);
|
|
12988
|
-
return (React.createElement(Container$
|
|
12950
|
+
return (React.createElement(Container$g, { ref: containerRef, "$nodeHeight": nodeHeight, className: 'nowheel nodrag' },
|
|
12989
12951
|
items.map((item) => (React.createElement(BaseNodeWrapper, { key: item.id, onClick: (e) => {
|
|
12990
12952
|
e.stopPropagation();
|
|
12991
12953
|
// @ts-ignore
|
|
@@ -12995,7 +12957,7 @@ const ScrollNode = memo(({ data, ...rest }) => {
|
|
|
12995
12957
|
React.createElement(BottomOverlay, { "$hide": isBottomOfList })));
|
|
12996
12958
|
});
|
|
12997
12959
|
|
|
12998
|
-
const Container$
|
|
12960
|
+
const Container$f = styled.div `
|
|
12999
12961
|
position: relative;
|
|
13000
12962
|
width: ${({ $nodeWidth }) => `${$nodeWidth}px`};
|
|
13001
12963
|
padding: 12px 0px 16px 0px;
|
|
@@ -13013,7 +12975,7 @@ const SelectorWrapper = styled(FlexRow) `
|
|
|
13013
12975
|
const ActionsWrapper = styled(FlexRow) `
|
|
13014
12976
|
margin-left: auto;
|
|
13015
12977
|
`;
|
|
13016
|
-
const AddButton
|
|
12978
|
+
const AddButton = styled(Button) `
|
|
13017
12979
|
width: 24px;
|
|
13018
12980
|
height: 24px;
|
|
13019
12981
|
padding: 0;
|
|
@@ -13064,7 +13026,7 @@ const HeaderNode = memo(({ id: nodeId, data }) => {
|
|
|
13064
13026
|
setSelectedSources({});
|
|
13065
13027
|
}
|
|
13066
13028
|
};
|
|
13067
|
-
return (React.createElement(Container$
|
|
13029
|
+
return (React.createElement(Container$f, { "$nodeWidth": nodeWidth, className: 'nowheel nodrag' },
|
|
13068
13030
|
entityType === EntityTypes.Source && (React.createElement(SelectorWrapper, null,
|
|
13069
13031
|
React.createElement(Checkbox, { partiallyChecked: hasSelected && sources?.length !== totalSelectedSources, value: hasSelected && sources?.length === totalSelectedSources, onChange: onSelect, disabled: !sources?.length }))),
|
|
13070
13032
|
React.createElement(IconTitleBadge, { icon: Icon, title: title, badge: isSourceAwaitingInstrumentation ? `${instrumentingPercent}%` : badge, badgeTooltip: badgeTooltip, loading: isFetching && !isSourceAwaitingInstrumentation }),
|
|
@@ -13075,7 +13037,7 @@ const Actions$1 = memo(({ entityType }) => {
|
|
|
13075
13037
|
const theme = Theme.useTheme();
|
|
13076
13038
|
const { onClickNode } = useClickNode();
|
|
13077
13039
|
return (React.createElement(ActionsWrapper, null,
|
|
13078
|
-
React.createElement(AddButton
|
|
13040
|
+
React.createElement(AddButton, { "data-id": `add-${entityType}`, variant: 'primary', onClick: (e) => {
|
|
13079
13041
|
e.stopPropagation();
|
|
13080
13042
|
// @ts-ignore
|
|
13081
13043
|
onClickNode(undefined, {
|
|
@@ -13126,12 +13088,12 @@ const LabeledEdge = memo(({ id, sourceX, sourceY, targetX, targetY, sourcePositi
|
|
|
13126
13088
|
React.createElement(Tooltip, { text: 'Heads up! The data-flow metrics you see are calculated over 10-second intervals.' }, data?.label)))));
|
|
13127
13089
|
});
|
|
13128
13090
|
|
|
13129
|
-
const Container$
|
|
13091
|
+
const Container$e = styled.div `
|
|
13130
13092
|
width: ${({ $nodeWidth }) => `${$nodeWidth}px`};
|
|
13131
13093
|
`;
|
|
13132
13094
|
const SkeletonNode = memo(({ id: nodeId, data }) => {
|
|
13133
13095
|
const { nodeWidth } = data;
|
|
13134
|
-
return (React.createElement(Container$
|
|
13096
|
+
return (React.createElement(Container$e, { "data-id": nodeId, "$nodeWidth": nodeWidth, className: 'nowheel nodrag' },
|
|
13135
13097
|
React.createElement(SkeletonLoader, { size: 3 })));
|
|
13136
13098
|
});
|
|
13137
13099
|
|
|
@@ -13173,7 +13135,7 @@ const Flow = ({ nodes, edges, onNodesChange, onEdgesChange }) => {
|
|
|
13173
13135
|
return (React.createElement(FlowWrapper, null,
|
|
13174
13136
|
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
13137
|
React.createElement(ControllerWrapper, null,
|
|
13176
|
-
React.createElement(Controls
|
|
13138
|
+
React.createElement(Controls, { position: 'bottom-right', orientation: 'horizontal', showInteractive: false, showZoom: true, showFitView: true, fitViewOptions: {
|
|
13177
13139
|
duration: 300,
|
|
13178
13140
|
padding: 0.02,
|
|
13179
13141
|
includeHiddenNodes: true,
|
|
@@ -13253,7 +13215,7 @@ const buildRuleNodes = ({ loading, entities, positions, unfilteredCount }) => {
|
|
|
13253
13215
|
},
|
|
13254
13216
|
data: {
|
|
13255
13217
|
nodeWidth: nodeWidth$4,
|
|
13256
|
-
title: DISPLAY_TITLES.
|
|
13218
|
+
title: DISPLAY_TITLES.INSTRUMENTATION_RULES,
|
|
13257
13219
|
icon: getEntityIcon(EntityTypes.InstrumentationRule),
|
|
13258
13220
|
badge: unfilteredCount,
|
|
13259
13221
|
isFetching: loading,
|
|
@@ -13296,8 +13258,8 @@ const buildRuleNodes = ({ loading, entities, positions, unfilteredCount }) => {
|
|
|
13296
13258
|
data: {
|
|
13297
13259
|
nodeWidth: nodeWidth$4,
|
|
13298
13260
|
type: AddNodeTypes.AddRule,
|
|
13299
|
-
title:
|
|
13300
|
-
subTitle:
|
|
13261
|
+
title: DISPLAY_TITLES.ADD_INSTRUMENTATION_RULE,
|
|
13262
|
+
subTitle: DISPLAY_TITLES.TO_MODIFY_OTEL_DATA,
|
|
13301
13263
|
},
|
|
13302
13264
|
});
|
|
13303
13265
|
}
|
|
@@ -13333,7 +13295,7 @@ const buildActionNodes = ({ loading, entities, positions, unfilteredCount }) =>
|
|
|
13333
13295
|
},
|
|
13334
13296
|
data: {
|
|
13335
13297
|
nodeWidth: nodeWidth$3,
|
|
13336
|
-
title: DISPLAY_TITLES.
|
|
13298
|
+
title: DISPLAY_TITLES.ACTIONS,
|
|
13337
13299
|
icon: getEntityIcon(EntityTypes.Action),
|
|
13338
13300
|
badge: unfilteredCount,
|
|
13339
13301
|
isFetching: loading,
|
|
@@ -13390,8 +13352,8 @@ const buildActionNodes = ({ loading, entities, positions, unfilteredCount }) =>
|
|
|
13390
13352
|
data: {
|
|
13391
13353
|
nodeWidth: nodeWidth$3,
|
|
13392
13354
|
type: AddNodeTypes.AddAction,
|
|
13393
|
-
title:
|
|
13394
|
-
subTitle:
|
|
13355
|
+
title: DISPLAY_TITLES.ADD_ACTION,
|
|
13356
|
+
subTitle: DISPLAY_TITLES.TO_MODIFY_OTEL_DATA,
|
|
13395
13357
|
},
|
|
13396
13358
|
});
|
|
13397
13359
|
}
|
|
@@ -13431,7 +13393,7 @@ const buildSourceNodes = ({ loading, entities, positions, unfilteredCount, conta
|
|
|
13431
13393
|
},
|
|
13432
13394
|
data: {
|
|
13433
13395
|
nodeWidth: nodeWidth$2,
|
|
13434
|
-
title: DISPLAY_TITLES.
|
|
13396
|
+
title: DISPLAY_TITLES.SOURCES,
|
|
13435
13397
|
icon: getEntityIcon(EntityTypes.Source),
|
|
13436
13398
|
badge: hasFiltersApplied ? `${entities.length}/${unfilteredCount}` : unfilteredCount,
|
|
13437
13399
|
badgeTooltip: hasFiltersApplied ? DISPLAY_TITLES.FILTERED_COUNT_TOOLTIP : undefined,
|
|
@@ -13501,8 +13463,8 @@ const buildSourceNodes = ({ loading, entities, positions, unfilteredCount, conta
|
|
|
13501
13463
|
data: {
|
|
13502
13464
|
nodeWidth: nodeWidth$2,
|
|
13503
13465
|
type: AddNodeTypes.AddSource,
|
|
13504
|
-
title:
|
|
13505
|
-
subTitle:
|
|
13466
|
+
title: DISPLAY_TITLES.ADD_SOURCE,
|
|
13467
|
+
subTitle: DISPLAY_TITLES.TO_COLLECT_OTEL_DATA,
|
|
13506
13468
|
},
|
|
13507
13469
|
});
|
|
13508
13470
|
}
|
|
@@ -13559,7 +13521,7 @@ const mapToNodeData = (entity) => {
|
|
|
13559
13521
|
subTitle: entity.destinationType.displayName,
|
|
13560
13522
|
icon,
|
|
13561
13523
|
iconSrc,
|
|
13562
|
-
monitors:
|
|
13524
|
+
monitors: mapExportedSignals(entity.exportedSignals),
|
|
13563
13525
|
raw: entity,
|
|
13564
13526
|
};
|
|
13565
13527
|
};
|
|
@@ -13575,7 +13537,7 @@ const buildDestinationNodes = ({ loading, entities, positions, unfilteredCount }
|
|
|
13575
13537
|
},
|
|
13576
13538
|
data: {
|
|
13577
13539
|
nodeWidth,
|
|
13578
|
-
title: DISPLAY_TITLES.
|
|
13540
|
+
title: DISPLAY_TITLES.DESTINATIONS,
|
|
13579
13541
|
icon: getEntityIcon(EntityTypes.Destination),
|
|
13580
13542
|
badge: unfilteredCount,
|
|
13581
13543
|
isFetching: loading,
|
|
@@ -13618,15 +13580,15 @@ const buildDestinationNodes = ({ loading, entities, positions, unfilteredCount }
|
|
|
13618
13580
|
data: {
|
|
13619
13581
|
nodeWidth,
|
|
13620
13582
|
type: AddNodeTypes.AddDestination,
|
|
13621
|
-
title:
|
|
13622
|
-
subTitle:
|
|
13583
|
+
title: DISPLAY_TITLES.ADD_DESTINATION,
|
|
13584
|
+
subTitle: DISPLAY_TITLES.TO_MONITOR_OTEL_DATA,
|
|
13623
13585
|
},
|
|
13624
13586
|
});
|
|
13625
13587
|
}
|
|
13626
13588
|
return nodes;
|
|
13627
13589
|
};
|
|
13628
13590
|
|
|
13629
|
-
const Container$
|
|
13591
|
+
const Container$d = styled.div `
|
|
13630
13592
|
width: 100%;
|
|
13631
13593
|
height: ${({ $heightToRemove }) => `calc(100vh - ${$heightToRemove})`};
|
|
13632
13594
|
position: relative;
|
|
@@ -13634,6 +13596,7 @@ const Container$b = styled.div `
|
|
|
13634
13596
|
const DataFlow = ({ heightToRemove, metrics }) => {
|
|
13635
13597
|
const theme = Theme.useTheme();
|
|
13636
13598
|
const filters = useFilterStore();
|
|
13599
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
13637
13600
|
const { isAwaitingInstrumentation } = useInstrumentStore();
|
|
13638
13601
|
const { containerRef, containerWidth, containerHeight } = useContainerSize();
|
|
13639
13602
|
const { sources, sourcesLoading, destinations, destinationsLoading, actions, actionsLoading, instrumentationRules, instrumentationRulesLoading } = useEntityStore();
|
|
@@ -13661,25 +13624,27 @@ const DataFlow = ({ heightToRemove, metrics }) => {
|
|
|
13661
13624
|
})), prevNodes));
|
|
13662
13625
|
};
|
|
13663
13626
|
useEffect(() => {
|
|
13627
|
+
const sourcesByStream = filterSourcesByStream(sources, selectedStreamName);
|
|
13664
13628
|
const sourceNodes = buildSourceNodes({
|
|
13665
|
-
entities: filterSources(
|
|
13629
|
+
entities: filterSources(sourcesByStream, filters),
|
|
13666
13630
|
loading: sourcesLoading || isAwaitingInstrumentation,
|
|
13667
|
-
unfilteredCount:
|
|
13631
|
+
unfilteredCount: sourcesByStream.length,
|
|
13668
13632
|
positions,
|
|
13669
13633
|
containerHeight,
|
|
13670
13634
|
onScroll: ({ scrollTop }) => handleNodesScrolled(sourceNodes, EntityTypes.Source, scrollTop),
|
|
13671
13635
|
});
|
|
13672
13636
|
handleNodesChanged(sourceNodes, EntityTypes.Source);
|
|
13673
|
-
}, [sources, sourcesLoading, isAwaitingInstrumentation, positions[EntityTypes.Source], filters, containerHeight]);
|
|
13637
|
+
}, [selectedStreamName, sources, sourcesLoading, isAwaitingInstrumentation, positions[EntityTypes.Source], filters, containerHeight]);
|
|
13674
13638
|
useEffect(() => {
|
|
13639
|
+
const destinationsByStream = filterDestinationsByStream(destinations, selectedStreamName);
|
|
13675
13640
|
const destinationNodes = buildDestinationNodes({
|
|
13676
|
-
entities: filterDestinations(
|
|
13641
|
+
entities: filterDestinations(destinationsByStream, filters),
|
|
13677
13642
|
loading: destinationsLoading,
|
|
13678
|
-
unfilteredCount:
|
|
13643
|
+
unfilteredCount: destinationsByStream.length,
|
|
13679
13644
|
positions,
|
|
13680
13645
|
});
|
|
13681
13646
|
handleNodesChanged(destinationNodes, EntityTypes.Destination);
|
|
13682
|
-
}, [destinations, destinationsLoading, positions[EntityTypes.Destination], filters]);
|
|
13647
|
+
}, [selectedStreamName, destinations, destinationsLoading, positions[EntityTypes.Destination], filters]);
|
|
13683
13648
|
useEffect(() => {
|
|
13684
13649
|
const actionNodes = buildActionNodes({
|
|
13685
13650
|
entities: filterActions(actions, filters),
|
|
@@ -13699,15 +13664,15 @@ const DataFlow = ({ heightToRemove, metrics }) => {
|
|
|
13699
13664
|
});
|
|
13700
13665
|
handleNodesChanged(ruleNodes, EntityTypes.InstrumentationRule);
|
|
13701
13666
|
}, [instrumentationRules, instrumentationRulesLoading, positions[EntityTypes.InstrumentationRule]]);
|
|
13702
|
-
return (React.createElement(Container$
|
|
13667
|
+
return (React.createElement(Container$d, { ref: containerRef, "$heightToRemove": heightToRemove },
|
|
13703
13668
|
React.createElement(Flow, { nodes: nodes, edges: edges, onNodesChange: onNodesChange, onEdgesChange: onEdgesChange })));
|
|
13704
13669
|
};
|
|
13705
13670
|
|
|
13706
|
-
const RelativeContainer$
|
|
13671
|
+
const RelativeContainer$2 = styled.div `
|
|
13707
13672
|
position: relative;
|
|
13708
13673
|
max-width: 200px;
|
|
13709
13674
|
`;
|
|
13710
|
-
const AbsoluteContainer$
|
|
13675
|
+
const AbsoluteContainer$2 = styled.div `
|
|
13711
13676
|
position: absolute;
|
|
13712
13677
|
top: calc(100% + 8px);
|
|
13713
13678
|
left: 0;
|
|
@@ -13784,26 +13749,21 @@ const HorizontalScroll = styled.div `
|
|
|
13784
13749
|
border-bottom: ${({ theme }) => `1px solid ${theme.colors.border}`};
|
|
13785
13750
|
overflow-x: scroll;
|
|
13786
13751
|
`;
|
|
13787
|
-
const VerticalScroll = styled.div `
|
|
13788
|
-
display: flex;
|
|
13789
|
-
flex-direction: column;
|
|
13790
|
-
padding: 12px;
|
|
13791
|
-
overflow-y: scroll;
|
|
13792
|
-
`;
|
|
13793
13752
|
const SearchResults = ({ searchText, onClose }) => {
|
|
13794
13753
|
const theme = Theme.useTheme();
|
|
13795
13754
|
const { onClickNode } = useClickNode();
|
|
13755
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
13796
13756
|
const { sources, destinations, actions, instrumentationRules } = useEntityStore();
|
|
13797
13757
|
const [selectedCategory, setSelectedCategory] = useState('all');
|
|
13798
13758
|
const { categories, searchResults } = useMemo(() => buildSearchResults({
|
|
13799
13759
|
instrumentationRules,
|
|
13800
|
-
sources,
|
|
13760
|
+
sources: filterSourcesByStream(sources, selectedStreamName),
|
|
13801
13761
|
actions,
|
|
13802
|
-
destinations,
|
|
13762
|
+
destinations: filterDestinationsByStream(destinations, selectedStreamName),
|
|
13803
13763
|
searchText,
|
|
13804
13764
|
selectedCategory,
|
|
13805
|
-
}), [instrumentationRules, sources, actions, destinations, searchText, selectedCategory]);
|
|
13806
|
-
return (React.createElement(AbsoluteContainer$
|
|
13765
|
+
}), [instrumentationRules, sources, actions, destinations, selectedStreamName, searchText, selectedCategory]);
|
|
13766
|
+
return (React.createElement(AbsoluteContainer$2, null,
|
|
13807
13767
|
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
13768
|
searchResults.map(({ category, label, entities }, catIdx) => !!entities.length && (React.createElement(Fragment, { key: `category-list-${category}` },
|
|
13809
13769
|
React.createElement(VerticalScroll, { style: { maxHeight: selectedCategory !== 'all' ? '240px' : '140px' } },
|
|
@@ -13827,7 +13787,7 @@ const Search = () => {
|
|
|
13827
13787
|
const containerRef = useRef(null);
|
|
13828
13788
|
useOnClickOutside(containerRef, () => setFocused(false));
|
|
13829
13789
|
useKeyDown({ key: 'Escape', active: !!input || focused }, onClose);
|
|
13830
|
-
return (React.createElement(RelativeContainer$
|
|
13790
|
+
return (React.createElement(RelativeContainer$2, { ref: containerRef },
|
|
13831
13791
|
React.createElement(Input, { placeholder: 'Search', icon: SearchIcon, value: input, onChange: (e) => setInput(e.target.value.toLowerCase()), onFocus: () => setFocused(true) }),
|
|
13832
13792
|
!!input || focused ? React.createElement(SearchResults, { searchText: input, onClose: onClose }) : null));
|
|
13833
13793
|
};
|
|
@@ -13867,19 +13827,22 @@ const getFilterCount = (params) => {
|
|
|
13867
13827
|
};
|
|
13868
13828
|
const Filters$1 = () => {
|
|
13869
13829
|
const theme = Theme.useTheme();
|
|
13870
|
-
const { namespaces,
|
|
13830
|
+
const { namespaces, sources } = useEntityStore();
|
|
13831
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
13832
|
+
const { namespaces: namespaceFilters, kinds, monitors, languages, errors, onlyErrors, setAll, clearAll, getEmptyState } = useFilterStore();
|
|
13833
|
+
const sourcesByStream = useMemo(() => filterSourcesByStream(sources, selectedStreamName), [sources, selectedStreamName]);
|
|
13871
13834
|
// 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 });
|
|
13835
|
+
const [filters, setFilters] = useState({ namespaces: namespaceFilters, kinds, monitors, languages, errors, onlyErrors });
|
|
13873
13836
|
const [filterCount, setFilterCount] = useState(getFilterCount(filters));
|
|
13874
13837
|
const [focused, setFocused] = useState(false);
|
|
13875
13838
|
const toggleFocused = () => setFocused((prev) => !prev);
|
|
13876
13839
|
useEffect(() => {
|
|
13877
13840
|
if (!focused) {
|
|
13878
|
-
const payload = { namespaces, kinds, monitors, languages, errors, onlyErrors };
|
|
13841
|
+
const payload = { namespaces: namespaceFilters, kinds, monitors, languages, errors, onlyErrors };
|
|
13879
13842
|
setFilters(payload);
|
|
13880
13843
|
setFilterCount(getFilterCount(payload));
|
|
13881
13844
|
}
|
|
13882
|
-
}, [focused,
|
|
13845
|
+
}, [focused, namespaceFilters, kinds, monitors, errors, onlyErrors]);
|
|
13883
13846
|
const onApply = () => {
|
|
13884
13847
|
// TODO: remove trycatch after debugging
|
|
13885
13848
|
try {
|
|
@@ -13903,17 +13866,17 @@ const Filters$1 = () => {
|
|
|
13903
13866
|
const ref = useRef(null);
|
|
13904
13867
|
useOnClickOutside(ref, onCancel);
|
|
13905
13868
|
useKeyDown({ key: 'Escape', active: focused }, onCancel);
|
|
13906
|
-
return (React.createElement(RelativeContainer$
|
|
13869
|
+
return (React.createElement(RelativeContainer$2, { ref: ref },
|
|
13907
13870
|
React.createElement(SelectionButton, { label: 'Filters', icon: FilterIcon, badgeLabel: filterCount, badgeFilled: !!filterCount, withBorder: true, color: 'transparent', onClick: toggleFocused }),
|
|
13908
|
-
React.createElement(AbsoluteContainer$
|
|
13871
|
+
React.createElement(AbsoluteContainer$2, { "$hidden": !focused },
|
|
13909
13872
|
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 }),
|
|
13873
|
+
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 }),
|
|
13874
|
+
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 }),
|
|
13875
|
+
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
13876
|
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
13877
|
React.createElement(ToggleWrapper, null,
|
|
13915
13878
|
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 })),
|
|
13879
|
+
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
13880
|
React.createElement(Actions, null,
|
|
13918
13881
|
React.createElement(ActionButton$1, { variant: 'primary', onClick: onApply }, "Apply"),
|
|
13919
13882
|
React.createElement(ActionButton$1, { variant: 'secondary', onClick: onCancel }, "Cancel"),
|
|
@@ -13921,7 +13884,60 @@ const Filters$1 = () => {
|
|
|
13921
13884
|
React.createElement(ActionButton$1, { variant: 'tertiary', onClick: onReset, "$color": theme.text.error }, "Reset"))))));
|
|
13922
13885
|
};
|
|
13923
13886
|
|
|
13924
|
-
const
|
|
13887
|
+
const RelativeContainer$1 = styled.div `
|
|
13888
|
+
position: relative;
|
|
13889
|
+
`;
|
|
13890
|
+
const Container$c = styled(FlexRow) `
|
|
13891
|
+
border: 1px solid ${({ theme }) => theme.colors.border};
|
|
13892
|
+
border-radius: 32px;
|
|
13893
|
+
|
|
13894
|
+
& button {
|
|
13895
|
+
max-height: 28px;
|
|
13896
|
+
}
|
|
13897
|
+
`;
|
|
13898
|
+
const AbsoluteContainer$1 = styled.div `
|
|
13899
|
+
position: absolute;
|
|
13900
|
+
top: calc(100% + 8px);
|
|
13901
|
+
left: 0;
|
|
13902
|
+
z-index: 1;
|
|
13903
|
+
background-color: ${({ theme }) => theme.colors.dropdown_bg};
|
|
13904
|
+
border: ${({ theme }) => `1px solid ${theme.colors.border}`};
|
|
13905
|
+
border-radius: 24px;
|
|
13906
|
+
width: 420px;
|
|
13907
|
+
`;
|
|
13908
|
+
const SelectionMenuHeadWrap = styled.div `
|
|
13909
|
+
border-bottom: ${({ theme }) => `1px solid ${theme.colors.border}`};
|
|
13910
|
+
padding: 12px;
|
|
13911
|
+
`;
|
|
13912
|
+
const SelectionWrap = styled(VerticalScroll) `
|
|
13913
|
+
max-height: 240px;
|
|
13914
|
+
`;
|
|
13915
|
+
const DataStreamSelect = ({ onClickNewStream }) => {
|
|
13916
|
+
const theme = Theme.useTheme();
|
|
13917
|
+
const { dataStreams, selectedStreamName, setSelectedStreamName } = useDataStreamStore();
|
|
13918
|
+
const containerRef = useRef(null);
|
|
13919
|
+
const [popupOpen, setPopupOpen] = useState(false);
|
|
13920
|
+
useOnClickOutside(containerRef, () => setPopupOpen(false));
|
|
13921
|
+
const [searchText, setSearchText] = useState('');
|
|
13922
|
+
const filteredDataStreams = useMemo(() => dataStreams.filter(({ name }) => !searchText || name.toLowerCase().includes(searchText.toLowerCase())), [dataStreams, searchText]);
|
|
13923
|
+
return (React.createElement(RelativeContainer$1, null,
|
|
13924
|
+
React.createElement(Container$c, { "$gap": 0 },
|
|
13925
|
+
React.createElement(Button, { variant: 'tertiary', onClick: () => setPopupOpen((prev) => !prev) },
|
|
13926
|
+
React.createElement(DataStreamsIcon, { fill: theme.text.info }),
|
|
13927
|
+
React.createElement(Text, null, selectedStreamName),
|
|
13928
|
+
React.createElement(ExtendArrow, { extend: popupOpen })),
|
|
13929
|
+
React.createElement(Divider, { orientation: 'vertical', length: '32px', thickness: 2, margin: '0' }),
|
|
13930
|
+
React.createElement(AddButton$1, { onClick: onClickNewStream, label: BUTTON_TEXTS.NEW })),
|
|
13931
|
+
popupOpen && (React.createElement(AbsoluteContainer$1, { ref: containerRef },
|
|
13932
|
+
React.createElement(SelectionMenuHeadWrap, null,
|
|
13933
|
+
React.createElement(Input, { placeholder: 'Search...', icon: SearchIcon, value: searchText, onChange: (e) => setSearchText(e.target.value) })),
|
|
13934
|
+
React.createElement(SelectionWrap, null, filteredDataStreams.map(({ name }) => (React.createElement(SelectionButton, { key: `stream-${name}`, label: name, isSelected: selectedStreamName === name, onClick: () => {
|
|
13935
|
+
setSelectedStreamName(name);
|
|
13936
|
+
setPopupOpen(false);
|
|
13937
|
+
}, color: 'transparent', style: { width: '100%', justifyContent: 'flex-start' } }))))))));
|
|
13938
|
+
};
|
|
13939
|
+
|
|
13940
|
+
const Container$b = styled.div `
|
|
13925
13941
|
display: flex;
|
|
13926
13942
|
align-items: center;
|
|
13927
13943
|
margin: 20px 0;
|
|
@@ -13932,28 +13948,32 @@ const Container$a = styled.div `
|
|
|
13932
13948
|
const PushToEnd = styled.div `
|
|
13933
13949
|
margin-left: auto;
|
|
13934
13950
|
`;
|
|
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();
|
|
13951
|
+
const DataFlowActionsMenu = ({ addEntity, onClickNewStream }) => {
|
|
13945
13952
|
const { setCurrentModal } = useModalStore();
|
|
13946
|
-
return (React.createElement(Container$
|
|
13953
|
+
return (React.createElement(Container$b, null,
|
|
13954
|
+
onClickNewStream && React.createElement(DataStreamSelect, { onClickNewStream: onClickNewStream }),
|
|
13947
13955
|
React.createElement(Search, null),
|
|
13948
13956
|
React.createElement(Filters$1, null),
|
|
13949
13957
|
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))))));
|
|
13958
|
+
React.createElement(AddButton$1, { "data-id": `add-${addEntity}`, onClick: () => setCurrentModal(addEntity), label: `${BUTTON_TEXTS.ADD} ${addEntity}`, variant: 'primary' })))));
|
|
13955
13959
|
};
|
|
13956
13960
|
|
|
13961
|
+
const DataStreamSelectionForm = forwardRef(({ isModal, onClickSummary }, ref) => {
|
|
13962
|
+
const { dataStreams } = useDataStreamStore();
|
|
13963
|
+
const [nameInput, setNameInput] = useState('');
|
|
13964
|
+
useImperativeHandle(ref, () => ({
|
|
13965
|
+
getFormValues: () => ({
|
|
13966
|
+
name: nameInput,
|
|
13967
|
+
}),
|
|
13968
|
+
}));
|
|
13969
|
+
const dataStreamOptions = useMemo(() => dataStreams.map(({ name }) => ({ label: name })), [dataStreams]);
|
|
13970
|
+
return (React.createElement(ModalBody, { "$isNotModal": !isModal, "$minHeight": '70vh' },
|
|
13971
|
+
React.createElement(FlexColumn, { "$gap": 24 },
|
|
13972
|
+
onClickSummary && React.createElement(NoteBackToSummary, { onClick: onClickSummary }),
|
|
13973
|
+
React.createElement(SectionTitle, { title: DISPLAY_TITLES.STREAM_NAME, description: DISPLAY_TITLES.STREAM_DESCRIPTION }),
|
|
13974
|
+
React.createElement(AutocompleteInput, { placeholder: DISPLAY_TITLES.STREAM_NAME_PLACEHOLDER, autoFocus: true, options: dataStreamOptions, defaultText: nameInput, onTextChange: setNameInput }))));
|
|
13975
|
+
});
|
|
13976
|
+
|
|
13957
13977
|
const buildMonitorsList = (exportedSignals) => Object.keys(exportedSignals)
|
|
13958
13978
|
.filter((key) => exportedSignals[key])
|
|
13959
13979
|
.join(', ');
|
|
@@ -13962,7 +13982,7 @@ const buildCard$2 = (destination, yamlFields) => {
|
|
|
13962
13982
|
const arr = [
|
|
13963
13983
|
{ title: DISPLAY_TITLES.NAME, value: destinationType.displayName },
|
|
13964
13984
|
{ title: DISPLAY_TITLES.TYPE, value: destinationType.type },
|
|
13965
|
-
{ type: DataCardFieldTypes.Monitors, title: DISPLAY_TITLES.
|
|
13985
|
+
{ type: DataCardFieldTypes.Monitors, title: DISPLAY_TITLES.MONITORS, value: buildMonitorsList(exportedSignals) },
|
|
13966
13986
|
];
|
|
13967
13987
|
const parsedFields = safeJsonParse(fields, {});
|
|
13968
13988
|
const sortedParsedFields = yamlFields.map((field) => ({ key: field.name, value: parsedFields[field.name] ?? null })).filter((item) => item.value !== null) ||
|
|
@@ -14027,7 +14047,7 @@ const ActionButton = styled(Button) `
|
|
|
14027
14047
|
align-items: center;
|
|
14028
14048
|
gap: 8px;
|
|
14029
14049
|
|
|
14030
|
-
${({ $status, theme }) => $status ===
|
|
14050
|
+
${({ $status, theme }) => $status === StatusType.Success
|
|
14031
14051
|
? css `
|
|
14032
14052
|
border-color: transparent;
|
|
14033
14053
|
background-color: ${theme.colors.success};
|
|
@@ -14041,27 +14061,26 @@ const ActionButton = styled(Button) `
|
|
|
14041
14061
|
background-color: transparent;
|
|
14042
14062
|
`}
|
|
14043
14063
|
`;
|
|
14044
|
-
const TestConnection = ({ destination, disabled,
|
|
14064
|
+
const TestConnection = ({ destination, disabled, validateForm, status, testConnection, onSuccess, onError }) => {
|
|
14045
14065
|
const theme = Theme.useTheme();
|
|
14046
|
-
|
|
14047
|
-
if (testResult) {
|
|
14048
|
-
if (testResult.succeeded)
|
|
14049
|
-
onSuccess();
|
|
14050
|
-
else
|
|
14051
|
-
onError();
|
|
14052
|
-
}
|
|
14053
|
-
}, [testResult]);
|
|
14066
|
+
const [loading, setLoading] = useState(false);
|
|
14054
14067
|
const onClick = async () => {
|
|
14055
|
-
if (validateForm())
|
|
14056
|
-
|
|
14068
|
+
if (validateForm()) {
|
|
14069
|
+
setLoading(true);
|
|
14070
|
+
const testResult = await testConnection(destination);
|
|
14071
|
+
if (testResult) {
|
|
14072
|
+
testResult.succeeded ? onSuccess(testResult) : onError(testResult);
|
|
14073
|
+
}
|
|
14074
|
+
setLoading(false);
|
|
14075
|
+
}
|
|
14057
14076
|
};
|
|
14058
14077
|
const Icon = !!status ? getStatusIcon(status, theme) : undefined;
|
|
14059
14078
|
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 },
|
|
14079
|
+
loading ? React.createElement(FadeLoader, null) : Icon ? React.createElement(Icon, null) : null,
|
|
14080
|
+
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
14081
|
};
|
|
14063
14082
|
|
|
14064
|
-
const Container$
|
|
14083
|
+
const Container$a = styled(FlexColumn) `
|
|
14065
14084
|
align-items: unset;
|
|
14066
14085
|
padding: 0 4px;
|
|
14067
14086
|
`;
|
|
@@ -14070,11 +14089,11 @@ const NotesWrapper = styled.div `
|
|
|
14070
14089
|
flex-direction: column;
|
|
14071
14090
|
gap: 12px;
|
|
14072
14091
|
`;
|
|
14073
|
-
const DestinationForm = ({ isUpdate, categoryItem, formData, formErrors, validateForm, handleFormChange, dynamicFields, setDynamicFields, testConnection
|
|
14092
|
+
const DestinationForm = ({ isUpdate, categoryItem, formData, formErrors, validateForm, handleFormChange, dynamicFields, setDynamicFields, testConnection }) => {
|
|
14074
14093
|
const { supportedSignals, testConnectionSupported, displayName } = categoryItem || {};
|
|
14075
14094
|
const [autoFilled, setAutoFilled] = useState(false);
|
|
14076
14095
|
const [isFormDirty, setIsFormDirty] = useState(false);
|
|
14077
|
-
const [
|
|
14096
|
+
const [connection, setConnection] = useState(undefined);
|
|
14078
14097
|
const autoFillCheckRef = useRef(false);
|
|
14079
14098
|
useEffect(() => {
|
|
14080
14099
|
if (!!dynamicFields.length && !autoFillCheckRef.current) {
|
|
@@ -14097,7 +14116,7 @@ const DestinationForm = ({ isUpdate, categoryItem, formData, formErrors, validat
|
|
|
14097
14116
|
}, [dynamicFields, isFormDirty]);
|
|
14098
14117
|
const dirtyForm = () => {
|
|
14099
14118
|
setIsFormDirty(true);
|
|
14100
|
-
|
|
14119
|
+
setConnection(undefined);
|
|
14101
14120
|
};
|
|
14102
14121
|
const supportedMonitors = useMemo(() => {
|
|
14103
14122
|
const { logs, metrics, traces } = supportedSignals || {};
|
|
@@ -14129,19 +14148,28 @@ const DestinationForm = ({ isUpdate, categoryItem, formData, formErrors, validat
|
|
|
14129
14148
|
traces: signals.includes(SignalType.Traces),
|
|
14130
14149
|
});
|
|
14131
14150
|
};
|
|
14132
|
-
|
|
14133
|
-
|
|
14134
|
-
|
|
14135
|
-
|
|
14136
|
-
|
|
14137
|
-
|
|
14138
|
-
|
|
14139
|
-
|
|
14140
|
-
|
|
14151
|
+
const onTestConnectionError = (testResult) => {
|
|
14152
|
+
setIsFormDirty(false);
|
|
14153
|
+
setConnection({
|
|
14154
|
+
type: StatusType.Error,
|
|
14155
|
+
title: testResult?.reason || 'Connection failed',
|
|
14156
|
+
message: testResult?.message || 'Please check your input and try again.',
|
|
14157
|
+
});
|
|
14158
|
+
};
|
|
14159
|
+
const onTestConnectionSuccess = (testResult) => {
|
|
14160
|
+
setIsFormDirty(false);
|
|
14161
|
+
setConnection({
|
|
14162
|
+
type: StatusType.Success,
|
|
14163
|
+
title: testResult?.reason || 'Connection succeeded',
|
|
14164
|
+
message: testResult?.message || '',
|
|
14165
|
+
});
|
|
14166
|
+
};
|
|
14167
|
+
return (React.createElement(Container$a, { "$gap": 24 },
|
|
14168
|
+
React.createElement(Container$a, { "$gap": 12 },
|
|
14169
|
+
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
14170
|
React.createElement(NotesWrapper, null,
|
|
14142
|
-
testConnectionSupported &&
|
|
14143
|
-
|
|
14144
|
-
autoFilled && !connectionStatus && !isUpdate && React.createElement(NotificationNote, { type: StatusType.Default, message: `Odigos autocompleted ${displayName} destination details.` })),
|
|
14171
|
+
testConnectionSupported && connection && React.createElement(NotificationNote, { type: connection.type, title: connection.title, message: connection.message }),
|
|
14172
|
+
autoFilled && !connection && !isUpdate && React.createElement(NotificationNote, { type: StatusType.Default, message: `Odigos autocompleted ${displayName} destination details.` })),
|
|
14145
14173
|
React.createElement(Divider, null)),
|
|
14146
14174
|
React.createElement(MonitorsCheckboxes, { title: isUpdate ? '' : 'This connection will monitor:', required: true, allowedSignals: supportedMonitors, selectedSignals: selectedMonitors, setSelectedSignals: handleSelectedSignals, errorMessage: formErrors['exportedSignals'] }),
|
|
14147
14175
|
!isUpdate && (React.createElement(Input, { title: 'Destination name', placeholder: 'Enter destination name', value: formData['name'], onChange: (e) => {
|
|
@@ -14173,9 +14201,11 @@ const DataContainer$2 = styled.div `
|
|
|
14173
14201
|
flex-direction: column;
|
|
14174
14202
|
gap: 12px;
|
|
14175
14203
|
`;
|
|
14176
|
-
const DestinationDrawer = ({ categories, updateDestination, deleteDestination, testConnection
|
|
14204
|
+
const DestinationDrawer = ({ categories, updateDestination, deleteDestination, testConnection }) => {
|
|
14177
14205
|
const { destinations } = useEntityStore();
|
|
14206
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
14178
14207
|
const { drawerType, drawerEntityId } = useDrawerStore();
|
|
14208
|
+
const destinationsByStream = useMemo(() => filterDestinationsByStream(destinations, selectedStreamName), [destinations, selectedStreamName]);
|
|
14179
14209
|
const drawerRef = useRef(null);
|
|
14180
14210
|
const isOpen = drawerType !== EntityTypes.Destination;
|
|
14181
14211
|
const [isEditing, setIsEditing] = useState(false);
|
|
@@ -14189,7 +14219,7 @@ const DestinationDrawer = ({ categories, updateDestination, deleteDestination, t
|
|
|
14189
14219
|
const thisItem = useMemo(() => {
|
|
14190
14220
|
if (isOpen)
|
|
14191
14221
|
return null;
|
|
14192
|
-
const found =
|
|
14222
|
+
const found = destinationsByStream?.find((x) => x.id === drawerEntityId);
|
|
14193
14223
|
if (!!found) {
|
|
14194
14224
|
loadFormWithDrawerItem(found);
|
|
14195
14225
|
const fields = [];
|
|
@@ -14207,7 +14237,7 @@ const DestinationDrawer = ({ categories, updateDestination, deleteDestination, t
|
|
|
14207
14237
|
setYamlFields(fields);
|
|
14208
14238
|
}
|
|
14209
14239
|
return found;
|
|
14210
|
-
}, [isOpen, drawerEntityId,
|
|
14240
|
+
}, [isOpen, drawerEntityId, destinationsByStream]);
|
|
14211
14241
|
if (!thisItem)
|
|
14212
14242
|
return null;
|
|
14213
14243
|
const thisOptionType = categories.flatMap((category) => category.items).find((option) => option.type === thisItem.destinationType.type);
|
|
@@ -14237,32 +14267,34 @@ const DestinationDrawer = ({ categories, updateDestination, deleteDestination, t
|
|
|
14237
14267
|
setIsFormDirty(false);
|
|
14238
14268
|
}
|
|
14239
14269
|
};
|
|
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:
|
|
14270
|
+
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
14271
|
React.createElement(DestinationForm, { isUpdate: true, categoryItem: thisOptionType, formData: formData, formErrors: formErrors, handleFormChange: (...params) => {
|
|
14242
14272
|
setIsFormDirty(true);
|
|
14243
14273
|
handleFormChange(...params);
|
|
14244
14274
|
}, dynamicFields: dynamicFields, setDynamicFields: (...params) => {
|
|
14245
14275
|
setIsFormDirty(true);
|
|
14246
14276
|
setDynamicFields(...params);
|
|
14247
|
-
}, validateForm: validateForm, testConnection: testConnection
|
|
14277
|
+
}, validateForm: validateForm, testConnection: testConnection }))) : (React.createElement(DataContainer$2, null,
|
|
14248
14278
|
React.createElement(ConditionDetails, { conditions: thisItem.conditions || [] }),
|
|
14249
14279
|
React.createElement(DataCard, { title: DISPLAY_TITLES.DESTINATION_DETAILS, data: !!thisItem ? buildCard$2(thisItem, yamlFields) : [] })))));
|
|
14250
14280
|
};
|
|
14251
14281
|
|
|
14252
|
-
const ListsWrapper
|
|
14282
|
+
const ListsWrapper = styled.div `
|
|
14253
14283
|
display: flex;
|
|
14254
14284
|
flex-direction: column;
|
|
14255
14285
|
gap: 12px;
|
|
14256
14286
|
`;
|
|
14257
|
-
const DestinationsList = ({ items,
|
|
14287
|
+
const DestinationsList = ({ items, onSelectOption, onSelectConfigured }) => {
|
|
14258
14288
|
return items.map((category) => {
|
|
14259
|
-
|
|
14260
|
-
|
|
14261
|
-
|
|
14289
|
+
const isAlreadyExisting = category.name === DESTINATION_CATEGORIES['EXISTS']['TITLE'];
|
|
14290
|
+
return (React.createElement(ListsWrapper, { key: `category-${category.name}` },
|
|
14291
|
+
React.createElement(SectionTitle, { size: 'small', icon: category.icon, title: capitalizeFirstLetter(category.name), description: category.description }),
|
|
14292
|
+
category.items.map((item) => {
|
|
14262
14293
|
const { icon, iconSrc } = getDestinationIcon(item.type);
|
|
14263
|
-
return (React.createElement(DataTab, { key: `select-destination-${item.type}
|
|
14264
|
-
|
|
14265
|
-
|
|
14294
|
+
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: {
|
|
14295
|
+
withCheckbox: isAlreadyExisting,
|
|
14296
|
+
isChecked: item.selected,
|
|
14297
|
+
onCheckboxChange: () => onSelectConfigured(item.id),
|
|
14266
14298
|
}, visualProps: {
|
|
14267
14299
|
monitors: Object.keys(item.supportedSignals).filter((signal) => item.supportedSignals[signal].supported),
|
|
14268
14300
|
monitorsWithLabels: true,
|
|
@@ -14271,29 +14303,7 @@ const DestinationsList = ({ items, setSelectedItem }) => {
|
|
|
14271
14303
|
});
|
|
14272
14304
|
};
|
|
14273
14305
|
|
|
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 `
|
|
14306
|
+
const Container$9 = styled.div `
|
|
14297
14307
|
display: flex;
|
|
14298
14308
|
flex-direction: column;
|
|
14299
14309
|
gap: 24px;
|
|
@@ -14304,7 +14314,7 @@ const Filters = styled.div `
|
|
|
14304
14314
|
gap: 12px;
|
|
14305
14315
|
`;
|
|
14306
14316
|
const WidthConstraint = styled.div `
|
|
14307
|
-
width:
|
|
14317
|
+
width: 170px;
|
|
14308
14318
|
margin-right: 8px;
|
|
14309
14319
|
`;
|
|
14310
14320
|
const ListsContainer = styled.div `
|
|
@@ -14319,22 +14329,60 @@ const ListsContainer = styled.div `
|
|
|
14319
14329
|
max-height: calc(100vh - 400px);
|
|
14320
14330
|
}
|
|
14321
14331
|
`;
|
|
14322
|
-
const NoDataFoundWrapper
|
|
14332
|
+
const NoDataFoundWrapper = styled(Container$9) `
|
|
14323
14333
|
margin-top: 80px;
|
|
14324
14334
|
`;
|
|
14335
|
+
const { MANAGED, SELF_HOSTED, DETECTED, EXISTS } = DESTINATION_CATEGORIES;
|
|
14325
14336
|
const DROPDOWN_OPTIONS = [
|
|
14326
14337
|
{ value: 'All types', id: 'all' },
|
|
14327
|
-
{ value:
|
|
14328
|
-
{ value:
|
|
14338
|
+
{ value: MANAGED.TITLE, id: MANAGED.TITLE },
|
|
14339
|
+
{ value: SELF_HOSTED.TITLE, id: SELF_HOSTED.TITLE },
|
|
14340
|
+
{ value: DETECTED.TITLE, id: DETECTED.TITLE },
|
|
14341
|
+
{ value: EXISTS.TITLE, id: EXISTS.TITLE },
|
|
14329
14342
|
];
|
|
14330
14343
|
const DEFAULT_CATEGORY = DROPDOWN_OPTIONS[0];
|
|
14331
14344
|
const DEFAULT_MONITORS = [SignalType.Logs, SignalType.Metrics, SignalType.Traces];
|
|
14332
|
-
const
|
|
14345
|
+
const createConfiguredItems = (destinations, selectedStreamName, configuredDestinationIds) => destinations.map((dest) => {
|
|
14346
|
+
const { type, displayName } = dest.destinationType;
|
|
14347
|
+
const isInSelectedStream = dest.streamNames?.includes(selectedStreamName);
|
|
14348
|
+
const isConfigured = configuredDestinationIds.has(dest.id);
|
|
14349
|
+
return {
|
|
14350
|
+
id: dest.id,
|
|
14351
|
+
type,
|
|
14352
|
+
displayName,
|
|
14353
|
+
selected: isInSelectedStream || isConfigured,
|
|
14354
|
+
fields: [],
|
|
14355
|
+
testConnectionSupported: false,
|
|
14356
|
+
supportedSignals: {
|
|
14357
|
+
[SignalType.Logs]: { supported: dest.exportedSignals.logs },
|
|
14358
|
+
[SignalType.Metrics]: { supported: dest.exportedSignals.metrics },
|
|
14359
|
+
[SignalType.Traces]: { supported: dest.exportedSignals.traces },
|
|
14360
|
+
},
|
|
14361
|
+
};
|
|
14362
|
+
});
|
|
14363
|
+
const ChooseDestinationBody = ({ hidden, categories, potentialDestinations, onSelectOption, onSelectConfigured }) => {
|
|
14364
|
+
const { destinations } = useEntityStore();
|
|
14365
|
+
const { configuredDestinations } = useSetupStore();
|
|
14366
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
14333
14367
|
const [search, setSearch] = useState('');
|
|
14334
14368
|
const [selectedCategory, setSelectedCategory] = useState(DEFAULT_CATEGORY);
|
|
14335
14369
|
const [selectedMonitors, setSelectedMonitors] = useState(DEFAULT_MONITORS);
|
|
14336
14370
|
const filteredDestinations = useMemo(() => {
|
|
14337
|
-
|
|
14371
|
+
const clonedDestinationsCategories = deepClone(categories);
|
|
14372
|
+
clonedDestinationsCategories.unshift({
|
|
14373
|
+
name: EXISTS.TITLE,
|
|
14374
|
+
description: EXISTS.DESCRIPTION,
|
|
14375
|
+
icon: CheckIcon,
|
|
14376
|
+
// !! do not "filterDestinationsByStream" here, because we need all destinations to select already configured
|
|
14377
|
+
items: createConfiguredItems(destinations, selectedStreamName, new Set(configuredDestinations.map((d) => d.id))),
|
|
14378
|
+
});
|
|
14379
|
+
clonedDestinationsCategories.unshift({
|
|
14380
|
+
name: DETECTED.TITLE,
|
|
14381
|
+
description: DETECTED.DESCRIPTION,
|
|
14382
|
+
icon: OdigosLogo,
|
|
14383
|
+
items: potentialDestinations,
|
|
14384
|
+
});
|
|
14385
|
+
return clonedDestinationsCategories
|
|
14338
14386
|
.map((category) => {
|
|
14339
14387
|
const filteredItems = category.items.filter((item) => {
|
|
14340
14388
|
const matchesSearch = !search || item.displayName.toLowerCase().includes(search.toLowerCase());
|
|
@@ -14345,25 +14393,24 @@ const ChooseDestinationBody = ({ hidden, categories, potentialDestinations, onSe
|
|
|
14345
14393
|
return { ...category, items: filteredItems };
|
|
14346
14394
|
})
|
|
14347
14395
|
.filter(({ items }) => !!items.length); // Filter out empty categories
|
|
14348
|
-
}, [categories, search, selectedCategory, selectedMonitors]);
|
|
14396
|
+
}, [categories, potentialDestinations, destinations, search, selectedCategory, selectedMonitors, selectedStreamName, configuredDestinations]);
|
|
14349
14397
|
if (hidden)
|
|
14350
14398
|
return null;
|
|
14351
|
-
return (React.createElement(Container$
|
|
14399
|
+
return (React.createElement(Container$9, null,
|
|
14352
14400
|
React.createElement(SectionTitle, { title: 'Choose destination', description: 'Add backend destination you want to connect with Odigos.' }),
|
|
14353
14401
|
React.createElement(Filters, null,
|
|
14354
14402
|
React.createElement(WidthConstraint, null,
|
|
14355
14403
|
React.createElement(Input, { placeholder: 'Search...', icon: SearchIcon, value: search, onChange: ({ target: { value } }) => setSearch(value) })),
|
|
14356
14404
|
React.createElement(WidthConstraint, null,
|
|
14357
|
-
React.createElement(Dropdown, { options: DROPDOWN_OPTIONS, value: selectedCategory, onSelect:
|
|
14405
|
+
React.createElement(Dropdown, { options: DROPDOWN_OPTIONS, value: selectedCategory, onSelect: setSelectedCategory, onDeselect: () => { } })),
|
|
14358
14406
|
React.createElement(MonitorsCheckboxes, { title: '', selectedSignals: selectedMonitors, setSelectedSignals: setSelectedMonitors })),
|
|
14359
14407
|
React.createElement(Divider, null),
|
|
14360
|
-
!filteredDestinations.length
|
|
14408
|
+
!filteredDestinations.length ? (React.createElement(NoDataFoundWrapper, null,
|
|
14361
14409
|
React.createElement(NoDataFound, { title: 'No destinations found' }))) : (React.createElement(ListsContainer, null,
|
|
14362
|
-
React.createElement(
|
|
14363
|
-
React.createElement(DestinationsList, { items: filteredDestinations, setSelectedItem: onSelect })))));
|
|
14410
|
+
React.createElement(DestinationsList, { items: filteredDestinations, onSelectOption: onSelectOption, onSelectConfigured: onSelectConfigured })))));
|
|
14364
14411
|
};
|
|
14365
14412
|
|
|
14366
|
-
const Container$
|
|
14413
|
+
const Container$8 = styled.div `
|
|
14367
14414
|
display: flex;
|
|
14368
14415
|
`;
|
|
14369
14416
|
const SideMenuWrapper = styled.div `
|
|
@@ -14374,7 +14421,9 @@ const SideMenuWrapper = styled.div `
|
|
|
14374
14421
|
display: none;
|
|
14375
14422
|
}
|
|
14376
14423
|
`;
|
|
14377
|
-
const DestinationModal = ({ isOnboarding, categories, potentialDestinations, createDestination,
|
|
14424
|
+
const DestinationModal = ({ isOnboarding, categories, potentialDestinations, createDestination, updateDestination, testConnection }) => {
|
|
14425
|
+
const { destinations } = useEntityStore();
|
|
14426
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
14378
14427
|
const { addConfiguredDestination } = useSetupStore();
|
|
14379
14428
|
const { currentModal, setCurrentModal } = useModalStore();
|
|
14380
14429
|
const isOpen = currentModal === EntityTypes.Destination;
|
|
@@ -14383,6 +14432,55 @@ const DestinationModal = ({ isOnboarding, categories, potentialDestinations, cre
|
|
|
14383
14432
|
supportedSignals: selectedItem?.supportedSignals,
|
|
14384
14433
|
preLoadedFields: selectedItem?.fields,
|
|
14385
14434
|
});
|
|
14435
|
+
const handleAddExisting = (alreadyConfigDest) => {
|
|
14436
|
+
const parsedFields = safeJsonParse(alreadyConfigDest.fields, {});
|
|
14437
|
+
const fieldsArray = Object.entries(parsedFields).map(([key, value]) => ({
|
|
14438
|
+
key,
|
|
14439
|
+
value: String(value),
|
|
14440
|
+
}));
|
|
14441
|
+
const payload = {
|
|
14442
|
+
type: alreadyConfigDest.destinationType.type,
|
|
14443
|
+
name: alreadyConfigDest.destinationType.displayName,
|
|
14444
|
+
currentStreamName: selectedStreamName,
|
|
14445
|
+
exportedSignals: alreadyConfigDest.exportedSignals,
|
|
14446
|
+
fields: fieldsArray,
|
|
14447
|
+
};
|
|
14448
|
+
updateDestination(alreadyConfigDest.id, payload);
|
|
14449
|
+
};
|
|
14450
|
+
const handleAddOnboarding = () => {
|
|
14451
|
+
const fields = {};
|
|
14452
|
+
dynamicFields.forEach((f) => {
|
|
14453
|
+
fields[f.name] = (f.componentType === FieldTypes.Dropdown ? f.value?.value || '' : f.value);
|
|
14454
|
+
});
|
|
14455
|
+
addConfiguredDestination({
|
|
14456
|
+
id: formData.type,
|
|
14457
|
+
name: formData.name,
|
|
14458
|
+
streamNames: [],
|
|
14459
|
+
conditions: [],
|
|
14460
|
+
exportedSignals: formData.exportedSignals,
|
|
14461
|
+
fields: JSON.stringify(fields),
|
|
14462
|
+
destinationType: {
|
|
14463
|
+
type: selectedItem.type,
|
|
14464
|
+
displayName: selectedItem.displayName,
|
|
14465
|
+
supportedSignals: {
|
|
14466
|
+
logs: { supported: false },
|
|
14467
|
+
metrics: { supported: false },
|
|
14468
|
+
traces: { supported: false },
|
|
14469
|
+
},
|
|
14470
|
+
},
|
|
14471
|
+
});
|
|
14472
|
+
};
|
|
14473
|
+
const handleAdd = (alreadyConfigDest) => {
|
|
14474
|
+
// Handle case from already configured
|
|
14475
|
+
if (alreadyConfigDest)
|
|
14476
|
+
return handleAddExisting(alreadyConfigDest);
|
|
14477
|
+
// Handle new cases from onboarding
|
|
14478
|
+
if (isOnboarding)
|
|
14479
|
+
return handleAddOnboarding();
|
|
14480
|
+
// Handle new cases from overview
|
|
14481
|
+
else
|
|
14482
|
+
return createDestination(formData);
|
|
14483
|
+
};
|
|
14386
14484
|
const handleClose = () => {
|
|
14387
14485
|
resetFormData();
|
|
14388
14486
|
setSelectedItem(undefined);
|
|
@@ -14392,36 +14490,25 @@ const DestinationModal = ({ isOnboarding, categories, potentialDestinations, cre
|
|
|
14392
14490
|
resetFormData();
|
|
14393
14491
|
setSelectedItem(undefined);
|
|
14394
14492
|
};
|
|
14395
|
-
const
|
|
14493
|
+
const handleSelectOption = (item) => {
|
|
14396
14494
|
resetFormData();
|
|
14397
14495
|
handleFormChange('type', item?.type || '');
|
|
14496
|
+
handleFormChange('currentStreamName', selectedStreamName);
|
|
14398
14497
|
setYamlFields(item?.fields || []);
|
|
14399
14498
|
setSelectedItem(item);
|
|
14400
14499
|
};
|
|
14500
|
+
const handleSelectConfigured = (id) => {
|
|
14501
|
+
// !! do not "filterDestinationsByStream" here, because we need all destinations to select already configured
|
|
14502
|
+
const foundConfigured = destinations.find((dest) => dest.id === id);
|
|
14503
|
+
if (foundConfigured)
|
|
14504
|
+
handleAdd(foundConfigured);
|
|
14505
|
+
};
|
|
14401
14506
|
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);
|
|
14507
|
+
if (selectedItem) {
|
|
14508
|
+
const isFormValid = validateForm({ withAlert: !isOnboarding, alertTitle: Crud.Create });
|
|
14509
|
+
if (!isFormValid)
|
|
14510
|
+
return null;
|
|
14511
|
+
handleAdd();
|
|
14425
14512
|
}
|
|
14426
14513
|
handleClose();
|
|
14427
14514
|
};
|
|
@@ -14431,10 +14518,9 @@ const DestinationModal = ({ isOnboarding, categories, potentialDestinations, cre
|
|
|
14431
14518
|
label: 'DONE',
|
|
14432
14519
|
variant: 'primary',
|
|
14433
14520
|
onClick: handleSubmit,
|
|
14434
|
-
disabled: !selectedItem,
|
|
14435
14521
|
},
|
|
14436
14522
|
];
|
|
14437
|
-
if (
|
|
14523
|
+
if (selectedItem) {
|
|
14438
14524
|
buttons.unshift({
|
|
14439
14525
|
label: 'BACK',
|
|
14440
14526
|
icon: ArrowIcon,
|
|
@@ -14445,105 +14531,104 @@ const DestinationModal = ({ isOnboarding, categories, potentialDestinations, cre
|
|
|
14445
14531
|
return buttons;
|
|
14446
14532
|
};
|
|
14447
14533
|
useKeyDown({ key: 'Enter', active: isOpen }, () => handleSubmit());
|
|
14448
|
-
return (React.createElement(Modal, { isOpen: isOpen, onClose: handleClose, header: { title:
|
|
14449
|
-
React.createElement(Container$
|
|
14534
|
+
return (React.createElement(Modal, { isOpen: isOpen, onClose: handleClose, header: { title: DISPLAY_TITLES.ADD_DESTINATION }, actionComponent: React.createElement(NavigationButtons, { buttons: renderHeaderButtons() }) },
|
|
14535
|
+
React.createElement(Container$8, null,
|
|
14450
14536
|
React.createElement(SideMenuWrapper, null,
|
|
14451
|
-
React.createElement(Stepper, { currentStep:
|
|
14452
|
-
{ stepNumber: 1, title:
|
|
14453
|
-
{ stepNumber: 2, title:
|
|
14537
|
+
React.createElement(Stepper, { currentStep: selectedItem ? 2 : 1, data: [
|
|
14538
|
+
{ stepNumber: 1, title: DISPLAY_TITLES.DESTINATIONS },
|
|
14539
|
+
{ stepNumber: 2, title: DISPLAY_TITLES.CONNECTION },
|
|
14454
14540
|
] })),
|
|
14455
14541
|
React.createElement(ModalBody, { style: { margin: '32px 24px 12px 24px' } },
|
|
14456
|
-
React.createElement(ChooseDestinationBody, { hidden:
|
|
14457
|
-
|
|
14542
|
+
React.createElement(ChooseDestinationBody, { hidden: selectedItem !== undefined, categories: categories, potentialDestinations: potentialDestinations, onSelectOption: handleSelectOption, onSelectConfigured: handleSelectConfigured }),
|
|
14543
|
+
selectedItem && (React.createElement(DestinationForm, { categoryItem: selectedItem, formData: formData, formErrors: formErrors, handleFormChange: handleFormChange, dynamicFields: dynamicFields, setDynamicFields: setDynamicFields, validateForm: validateForm, testConnection: testConnection }))))));
|
|
14458
14544
|
};
|
|
14459
14545
|
|
|
14460
|
-
const Container$
|
|
14546
|
+
const Container$7 = styled.div `
|
|
14461
14547
|
display: flex;
|
|
14462
14548
|
flex-direction: column;
|
|
14463
|
-
align-items:
|
|
14549
|
+
align-items: center;
|
|
14464
14550
|
gap: 12px;
|
|
14465
|
-
|
|
14466
|
-
max-height: calc(100vh -
|
|
14467
|
-
height:
|
|
14468
|
-
overflow-x: hidden;
|
|
14551
|
+
width: 100%;
|
|
14552
|
+
max-height: calc(100vh - 310px);
|
|
14553
|
+
height: fit-content;
|
|
14469
14554
|
overflow-y: scroll;
|
|
14470
14555
|
`;
|
|
14471
|
-
const
|
|
14556
|
+
const DestinationList = ({ withDelete }) => {
|
|
14472
14557
|
const { configuredDestinations } = useSetupStore();
|
|
14473
|
-
|
|
14558
|
+
if (!configuredDestinations.length) {
|
|
14559
|
+
return (React.createElement(CenterThis, null,
|
|
14560
|
+
React.createElement(NoDataFound, { title: 'No destinations', subTitle: 'Please add a destination' })));
|
|
14561
|
+
}
|
|
14562
|
+
return (React.createElement(Container$7, null, configuredDestinations.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 === 1, withDelete: withDelete })))));
|
|
14474
14563
|
};
|
|
14475
|
-
const ListItem = ({ item, isLastItem }) => {
|
|
14564
|
+
const ListItem = ({ item, isLastItem, withDelete }) => {
|
|
14476
14565
|
const { removeConfiguredDestination } = useSetupStore();
|
|
14477
14566
|
const [deleteWarning, setDeleteWarning] = useState(false);
|
|
14478
|
-
const { icon, iconSrc } = getDestinationIcon(item.type);
|
|
14567
|
+
const { icon, iconSrc } = getDestinationIcon(item.destinationType.type);
|
|
14568
|
+
const mappedFields = useMemo(() => Object.entries(safeJsonParse(item.fields, {})).map(([k, v]) => ({ title: k, value: v })) || [], [item.fields]);
|
|
14479
14569
|
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),
|
|
14570
|
+
React.createElement(DataTab, { title: item.destinationType.displayName || item.name, subTitle: item.destinationType.type, iconProps: { icon, iconSrc }, visualProps: {
|
|
14571
|
+
monitors: mapExportedSignals(item.exportedSignals),
|
|
14485
14572
|
monitorsWithLabels: true,
|
|
14486
14573
|
}, extendableProps: {
|
|
14487
14574
|
withExtend: true,
|
|
14488
|
-
renderExtended: () => React.createElement(DataCardFields, { data:
|
|
14489
|
-
}, renderActions:
|
|
14490
|
-
React.createElement(
|
|
14491
|
-
|
|
14575
|
+
renderExtended: () => React.createElement(DataCardFields, { data: mappedFields }),
|
|
14576
|
+
}, renderActions: withDelete
|
|
14577
|
+
? () => (React.createElement(IconButton, { onClick: () => setDeleteWarning(true) },
|
|
14578
|
+
React.createElement(TrashIcon, null)))
|
|
14579
|
+
: undefined }),
|
|
14580
|
+
withDelete && (React.createElement(DeleteWarning, { isOpen: deleteWarning, name: item.destinationType.displayName || item.name, type: EntityTypes.Destination, isLastItem: isLastItem, onApprove: () => removeConfiguredDestination(item), onDeny: () => setDeleteWarning(false) }))));
|
|
14492
14581
|
};
|
|
14493
14582
|
|
|
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) `
|
|
14583
|
+
const LargeAndWideAddButton = styled(Button) `
|
|
14506
14584
|
display: flex;
|
|
14507
14585
|
align-items: center;
|
|
14508
14586
|
justify-content: center;
|
|
14509
14587
|
gap: 8px;
|
|
14510
14588
|
width: 100%;
|
|
14589
|
+
padding: 32px;
|
|
14590
|
+
border-radius: 16px;
|
|
14591
|
+
border-style: dashed !important;
|
|
14511
14592
|
`;
|
|
14512
|
-
const DestinationSelectionForm = ({
|
|
14593
|
+
const DestinationSelectionForm = ({ isSourcesListEmpty, goToSources, categories, potentialDestinations, updateDestination, testConnection, onClickSummary }) => {
|
|
14513
14594
|
const theme = Theme.useTheme();
|
|
14514
14595
|
const { setCurrentModal } = useModalStore();
|
|
14596
|
+
const { configuredDestinations } = useSetupStore();
|
|
14515
14597
|
const onOpen = () => setCurrentModal(EntityTypes.Destination);
|
|
14516
|
-
return (React.createElement(
|
|
14517
|
-
React.createElement(
|
|
14518
|
-
|
|
14519
|
-
|
|
14520
|
-
|
|
14521
|
-
|
|
14522
|
-
|
|
14523
|
-
|
|
14524
|
-
|
|
14525
|
-
|
|
14526
|
-
|
|
14527
|
-
|
|
14528
|
-
|
|
14529
|
-
|
|
14598
|
+
return (React.createElement(React.Fragment, null,
|
|
14599
|
+
React.createElement(ModalBody, { "$isNotModal": true },
|
|
14600
|
+
React.createElement(FlexColumn, { "$gap": 12 },
|
|
14601
|
+
React.createElement(FlexColumn, { "$gap": 24 },
|
|
14602
|
+
onClickSummary && React.createElement(NoteBackToSummary, { onClick: onClickSummary }),
|
|
14603
|
+
React.createElement(SectionTitle, { title: DISPLAY_TITLES.ADD_DESTINATIONS, badgeLabel: configuredDestinations.length, description: DISPLAY_TITLES.ADD_DESTINATION_DESCRIPTION }),
|
|
14604
|
+
isSourcesListEmpty && (React.createElement(NotificationNote, { type: StatusType.Warning, message: DISPLAY_TITLES.NO_SOURCES_GO_BACK, action: {
|
|
14605
|
+
label: DISPLAY_TITLES.SELECT_SOURCES,
|
|
14606
|
+
onClick: goToSources,
|
|
14607
|
+
} })),
|
|
14608
|
+
React.createElement(LargeAndWideAddButton, { variant: 'secondary', onClick: onOpen },
|
|
14609
|
+
React.createElement(PlusIcon$1, null),
|
|
14610
|
+
React.createElement(Text, { color: theme.colors.secondary, size: 14, decoration: 'underline', family: 'secondary' }, DISPLAY_TITLES.ADD_DESTINATION))),
|
|
14611
|
+
React.createElement(DestinationList, { withDelete: true }))),
|
|
14612
|
+
React.createElement(DestinationModal, { isOnboarding: true, categories: categories, potentialDestinations: potentialDestinations, createDestination: () => { }, updateDestination: updateDestination, testConnection: testConnection })));
|
|
14530
14613
|
};
|
|
14531
14614
|
|
|
14532
14615
|
const columns$2 = [
|
|
14533
14616
|
{ key: 'icon', title: '' },
|
|
14534
14617
|
{ key: 'name', title: DISPLAY_TITLES.NAME, sortable: true },
|
|
14535
14618
|
{ key: 'type', title: DISPLAY_TITLES.TYPE, sortable: true },
|
|
14536
|
-
{ key: 'signals', title: DISPLAY_TITLES.
|
|
14619
|
+
{ key: 'signals', title: DISPLAY_TITLES.MONITORS },
|
|
14537
14620
|
{ key: 'conditions', title: 'Conditions' },
|
|
14538
14621
|
{ key: 'throughput', title: 'Throughput', sortable: true },
|
|
14539
14622
|
];
|
|
14540
14623
|
const DestinationTable = ({ metrics, maxHeight, maxWidth }) => {
|
|
14541
14624
|
const theme = Theme.useTheme();
|
|
14542
14625
|
const filters = useFilterStore();
|
|
14543
|
-
const {
|
|
14626
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
14544
14627
|
const { setDrawerType, setDrawerEntityId } = useDrawerStore();
|
|
14545
|
-
const
|
|
14546
|
-
const
|
|
14628
|
+
const { destinations, destinationsLoading } = useEntityStore();
|
|
14629
|
+
const destinationsByStream = useMemo(() => filterDestinationsByStream(destinations, selectedStreamName), [destinations, selectedStreamName]);
|
|
14630
|
+
const filteredDestinations = useMemo(() => filterDestinations(destinationsByStream, filters), [destinationsByStream, filters]);
|
|
14631
|
+
const rows = useMemo(() => filteredDestinations.map((dest) => {
|
|
14547
14632
|
const { hasErrors, hasWarnings, hasDisableds } = getConditionsBooleans(dest.conditions || []);
|
|
14548
14633
|
const { icon, iconSrc } = getDestinationIcon(dest.destinationType.type);
|
|
14549
14634
|
return {
|
|
@@ -14578,19 +14663,29 @@ const DestinationTable = ({ metrics, maxHeight, maxWidth }) => {
|
|
|
14578
14663
|
},
|
|
14579
14664
|
{
|
|
14580
14665
|
columnKey: 'signals',
|
|
14581
|
-
component: () => React.createElement(MonitorsIcons, { withLabels: true, monitors:
|
|
14666
|
+
component: () => React.createElement(MonitorsIcons, { withLabels: true, monitors: mapExportedSignals(dest.exportedSignals) }),
|
|
14582
14667
|
},
|
|
14583
14668
|
],
|
|
14584
14669
|
};
|
|
14585
|
-
}), [
|
|
14586
|
-
const badge = useMemo(() =>
|
|
14587
|
-
|
|
14670
|
+
}), [filteredDestinations, metrics]);
|
|
14671
|
+
const { badge, badgeTooltip } = useMemo(() => {
|
|
14672
|
+
if (filteredDestinations.length !== destinationsByStream.length) {
|
|
14673
|
+
return {
|
|
14674
|
+
badge: `${filteredDestinations.length}/${destinationsByStream.length}`,
|
|
14675
|
+
badgeTooltip: DISPLAY_TITLES.FILTERED_COUNT_TOOLTIP,
|
|
14676
|
+
};
|
|
14677
|
+
}
|
|
14678
|
+
return {
|
|
14679
|
+
badge: destinationsByStream.length,
|
|
14680
|
+
badgeTooltip: undefined,
|
|
14681
|
+
};
|
|
14682
|
+
}, [filteredDestinations, destinationsByStream]);
|
|
14588
14683
|
return (React.createElement(TableContainer, { "$maxWidth": maxWidth },
|
|
14589
14684
|
React.createElement(TableTitleWrap, null,
|
|
14590
|
-
React.createElement(IconTitleBadge, { icon: getEntityIcon(EntityTypes.Destination), title: DISPLAY_TITLES.
|
|
14685
|
+
React.createElement(IconTitleBadge, { icon: getEntityIcon(EntityTypes.Destination), title: DISPLAY_TITLES.DESTINATIONS, badge: badge, badgeTooltip: badgeTooltip, loading: destinationsLoading })),
|
|
14591
14686
|
React.createElement(TableWrap, { "$maxHeight": maxHeight },
|
|
14592
14687
|
React.createElement(InteractiveTable, { columns: columns$2, rows: rows })),
|
|
14593
|
-
!
|
|
14688
|
+
!filteredDestinations.length && (React.createElement(CenterThis, { style: { marginTop: '2rem' } },
|
|
14594
14689
|
React.createElement(NoDataFound, null)))));
|
|
14595
14690
|
};
|
|
14596
14691
|
|
|
@@ -14791,7 +14886,7 @@ const CustomFields = ({ ruleType, value, setValue, formErrors }) => {
|
|
|
14791
14886
|
return Component ? React.createElement(Component, { value: value, setValue: setValue, formErrors: formErrors }) : null;
|
|
14792
14887
|
};
|
|
14793
14888
|
|
|
14794
|
-
const Container$
|
|
14889
|
+
const Container$6 = styled.div `
|
|
14795
14890
|
display: flex;
|
|
14796
14891
|
flex-direction: column;
|
|
14797
14892
|
gap: 24px;
|
|
@@ -14802,7 +14897,7 @@ const FieldTitle = styled(Text) `
|
|
|
14802
14897
|
`;
|
|
14803
14898
|
const InstrumentationRuleForm = ({ isUpdate, rule, formData, formErrors, handleFormChange }) => {
|
|
14804
14899
|
const theme = Theme.useTheme();
|
|
14805
|
-
return (React.createElement(Container$
|
|
14900
|
+
return (React.createElement(Container$6, null,
|
|
14806
14901
|
isUpdate && (React.createElement("div", null,
|
|
14807
14902
|
React.createElement(FieldTitle, null, "Status"),
|
|
14808
14903
|
React.createElement(Segment, { options: [
|
|
@@ -15024,14 +15119,14 @@ const InstrumentationRuleTable = ({ maxHeight, maxWidth }) => {
|
|
|
15024
15119
|
}), [instrumentationRules]);
|
|
15025
15120
|
return (React.createElement(TableContainer, { "$maxWidth": maxWidth },
|
|
15026
15121
|
React.createElement(TableTitleWrap, null,
|
|
15027
|
-
React.createElement(IconTitleBadge, { icon: getEntityIcon(EntityTypes.Action), title: DISPLAY_TITLES.
|
|
15122
|
+
React.createElement(IconTitleBadge, { icon: getEntityIcon(EntityTypes.Action), title: DISPLAY_TITLES.INSTRUMENTATION_RULES, badge: instrumentationRules.length, loading: instrumentationRulesLoading })),
|
|
15028
15123
|
React.createElement(TableWrap, { "$maxHeight": maxHeight },
|
|
15029
15124
|
React.createElement(InteractiveTable, { columns: columns$1, rows: rows })),
|
|
15030
15125
|
!instrumentationRules.length && (React.createElement(CenterThis, { style: { marginTop: '2rem' } },
|
|
15031
15126
|
React.createElement(NoDataFound, null)))));
|
|
15032
15127
|
};
|
|
15033
15128
|
|
|
15034
|
-
const Container$
|
|
15129
|
+
const Container$5 = styled.div `
|
|
15035
15130
|
position: fixed;
|
|
15036
15131
|
bottom: 0;
|
|
15037
15132
|
left: 50%;
|
|
@@ -15048,7 +15143,7 @@ const Container$4 = styled.div `
|
|
|
15048
15143
|
const MultiSourceControl = ({ totalSourceCount, uninstrumentSources }) => {
|
|
15049
15144
|
const theme = Theme.useTheme();
|
|
15050
15145
|
const Transition = useTransition({
|
|
15051
|
-
container: Container$
|
|
15146
|
+
container: Container$5,
|
|
15052
15147
|
animateIn: Theme.animations.slide.in['center'],
|
|
15053
15148
|
animateOut: Theme.animations.slide.out['center'],
|
|
15054
15149
|
});
|
|
@@ -15227,6 +15322,124 @@ const NotificationListItem = ({ id, seen, type, title, message, time, crdType, t
|
|
|
15227
15322
|
React.createElement(Text, { size: 10, color: theme.colors.orange_soft }, "new")))))));
|
|
15228
15323
|
};
|
|
15229
15324
|
|
|
15325
|
+
const Container$4 = styled.div `
|
|
15326
|
+
display: flex;
|
|
15327
|
+
flex-direction: column;
|
|
15328
|
+
align-items: center;
|
|
15329
|
+
|
|
15330
|
+
gap: 12px;
|
|
15331
|
+
width: 100%;
|
|
15332
|
+
max-height: ${({ $isModal }) => ($isModal ? 'calc(100vh - 510px)' : 'calc(100vh - 310px)')};
|
|
15333
|
+
height: fit-content;
|
|
15334
|
+
overflow-y: scroll;
|
|
15335
|
+
`;
|
|
15336
|
+
const Group = styled.div `
|
|
15337
|
+
width: 100%;
|
|
15338
|
+
padding-bottom: ${({ $isOpen }) => ($isOpen ? '18px' : '0')};
|
|
15339
|
+
border-radius: 16px;
|
|
15340
|
+
background-color: ${({ $selected, theme }) => ($selected ? theme.colors.majestic_blue + Theme.opacity.hex['024'] : theme.colors.dropdown_bg_2 + Theme.opacity.hex['040'])};
|
|
15341
|
+
`;
|
|
15342
|
+
const NamespaceItem = styled.div `
|
|
15343
|
+
display: flex;
|
|
15344
|
+
justify-content: space-between;
|
|
15345
|
+
gap: 12px;
|
|
15346
|
+
margin: 0;
|
|
15347
|
+
padding: 18px;
|
|
15348
|
+
border-radius: 16px;
|
|
15349
|
+
cursor: ${({ $withClick }) => ($withClick ? 'pointer' : 'unset')};
|
|
15350
|
+
&:hover {
|
|
15351
|
+
background-color: ${({ $withClick, $selected, theme }) => $withClick && ($selected ? theme.colors.majestic_blue + Theme.opacity.hex['040'] : theme.colors.dropdown_bg_2 + Theme.opacity.hex['080'])};
|
|
15352
|
+
transition: background-color 0.3s;
|
|
15353
|
+
}
|
|
15354
|
+
`;
|
|
15355
|
+
const SourceItem = styled(NamespaceItem) `
|
|
15356
|
+
width: calc(100% - 50px);
|
|
15357
|
+
margin-left: auto;
|
|
15358
|
+
padding: 8px;
|
|
15359
|
+
`;
|
|
15360
|
+
const RelativeWrapper = styled.div `
|
|
15361
|
+
position: relative;
|
|
15362
|
+
padding-bottom: ${({ $addPadding }) => ($addPadding ? '16px' : '0')};
|
|
15363
|
+
`;
|
|
15364
|
+
const AbsoluteWrapper = styled.div `
|
|
15365
|
+
position: absolute;
|
|
15366
|
+
top: 6px;
|
|
15367
|
+
left: 18px;
|
|
15368
|
+
`;
|
|
15369
|
+
const NotSourcesWrapper = styled(CenterThis) `
|
|
15370
|
+
padding-bottom: ${({ $addPadding }) => ($addPadding ? '16px' : '0')};
|
|
15371
|
+
`;
|
|
15372
|
+
const SelectionCount = styled(Text) `
|
|
15373
|
+
width: 18px;
|
|
15374
|
+
`;
|
|
15375
|
+
const SourceList = ({ isModal = false, withInstances = true, filteredNamespacesAndSources, selectedNamespace, onSelectNamespace, selectedSources, onSelectSource }) => {
|
|
15376
|
+
const theme = Theme.useTheme();
|
|
15377
|
+
const { namespacesLoading } = useEntityStore();
|
|
15378
|
+
const matrix = Object.entries(filteredNamespacesAndSources || {});
|
|
15379
|
+
if (!matrix?.length) {
|
|
15380
|
+
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 }))));
|
|
15381
|
+
}
|
|
15382
|
+
return (React.createElement(Container$4, { "$isModal": isModal }, matrix.map(([namespace, sources]) => {
|
|
15383
|
+
const sourcesForNamespace = selectedSources?.[namespace] || [];
|
|
15384
|
+
const onlySelectedSources = sourcesForNamespace.filter(({ selected }) => selected);
|
|
15385
|
+
const isNamespaceLoaded = sourcesForNamespace.length > 0;
|
|
15386
|
+
const isNamespaceSelected = selectedNamespace === namespace;
|
|
15387
|
+
const isNamespaceAllSourcesSelected = onlySelectedSources.length > 0 && onlySelectedSources.length === sources.length;
|
|
15388
|
+
const isNamespacePartiallySourcesSelected = onlySelectedSources.length > 0 && onlySelectedSources.length !== sources.length;
|
|
15389
|
+
const hasSources = sources.length > 0;
|
|
15390
|
+
if (!onSelectNamespace && !hasSources)
|
|
15391
|
+
return null;
|
|
15392
|
+
return (React.createElement(Group, { key: `namespace-${namespace}`, "data-id": `namespace-${namespace}`, "$selected": isNamespaceAllSourcesSelected, "$isOpen": isNamespaceSelected },
|
|
15393
|
+
React.createElement(NamespaceItem, { "$selected": isNamespaceAllSourcesSelected, "$withClick": !!onSelectNamespace, onClick: () => onSelectNamespace?.(namespace) },
|
|
15394
|
+
React.createElement(FlexRow, { "$gap": 12 },
|
|
15395
|
+
onSelectNamespace && React.createElement(Checkbox, { partiallyChecked: isNamespacePartiallySourcesSelected, value: isNamespaceAllSourcesSelected, onChange: (bool) => onSelectNamespace(namespace, bool) }),
|
|
15396
|
+
React.createElement(Text, null, namespace)),
|
|
15397
|
+
React.createElement(FlexRow, { "$gap": 12 },
|
|
15398
|
+
React.createElement(SelectionCount, { size: 10, color: theme.text.grey }, isNamespaceLoaded ? `${onlySelectedSources.length}/${sources.length}` : null),
|
|
15399
|
+
onSelectNamespace && React.createElement(ExtendArrow, { extend: isNamespaceSelected }))),
|
|
15400
|
+
(isNamespaceSelected || !onSelectNamespace) &&
|
|
15401
|
+
(hasSources ? (React.createElement(RelativeWrapper, { "$addPadding": !onSelectSource },
|
|
15402
|
+
React.createElement(AbsoluteWrapper, null,
|
|
15403
|
+
React.createElement(Divider, { orientation: 'vertical', length: `${(sources.length || 0) * 36}px` })),
|
|
15404
|
+
sources.map((source) => {
|
|
15405
|
+
const isSourceSelected = onlySelectedSources.some(({ name }) => name === source.name);
|
|
15406
|
+
return React.createElement(SourceRow, { key: `source-${source.name}`, withInstances: withInstances, source: source, namespace: namespace, isSelected: isSourceSelected, onSelect: onSelectSource });
|
|
15407
|
+
}))) : (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 }))))));
|
|
15408
|
+
})));
|
|
15409
|
+
};
|
|
15410
|
+
const SourceRow = ({ withInstances, source, namespace, isSelected, onSelect, }) => {
|
|
15411
|
+
return (React.createElement(SourceItem, { "data-id": `source-${source.name}`, "$selected": isSelected, "$withClick": !!onSelect, onClick: () => onSelect?.(source) },
|
|
15412
|
+
React.createElement(FlexRow, { "$gap": 12 },
|
|
15413
|
+
onSelect && React.createElement(Checkbox, { value: isSelected, onChange: () => onSelect(source, namespace) }),
|
|
15414
|
+
React.createElement(Text, null, source.name),
|
|
15415
|
+
React.createElement(Text, { opacity: 0.8, size: 10 },
|
|
15416
|
+
withInstances ? `${source.numberOfInstances || 0} running instance${source.numberOfInstances !== 1 ? 's' : ''} • ` : '',
|
|
15417
|
+
source.kind))));
|
|
15418
|
+
};
|
|
15419
|
+
|
|
15420
|
+
const Container$3 = styled.div `
|
|
15421
|
+
display: flex;
|
|
15422
|
+
flex-direction: column;
|
|
15423
|
+
align-items: center;
|
|
15424
|
+
gap: 12px;
|
|
15425
|
+
width: 100%;
|
|
15426
|
+
max-height: calc(100vh - 200px);
|
|
15427
|
+
height: fit-content;
|
|
15428
|
+
overflow-y: scroll;
|
|
15429
|
+
`;
|
|
15430
|
+
const SetupSummary = ({ onEditSources, onEditDestinations }) => {
|
|
15431
|
+
const { configuredSources, configuredDestinations } = useSetupStore();
|
|
15432
|
+
const sourceCount = useMemo(() => Object.values(configuredSources).reduce((total, sourceList) => total + sourceList.filter((s) => s.selected).length, 0), [configuredSources]);
|
|
15433
|
+
return (React.createElement(ModalBody, { "$isNotModal": true },
|
|
15434
|
+
React.createElement(FlexColumn, { "$gap": 12 },
|
|
15435
|
+
React.createElement(SectionTitle, { title: DISPLAY_TITLES.SUMMARY, description: DISPLAY_TITLES.STREAM_CONFIRM }),
|
|
15436
|
+
React.createElement(Container$3, null,
|
|
15437
|
+
React.createElement(DataCard, { title: DISPLAY_TITLES.SELECTED_SOURCES, titleBadge: sourceCount, action: () => React.createElement(EditButton, { onClick: onEditSources }) },
|
|
15438
|
+
React.createElement(SourceList, { filteredNamespacesAndSources: configuredSources, withInstances: false })),
|
|
15439
|
+
React.createElement(DataCard, { title: DISPLAY_TITLES.SELECTED_DESTINATIONS, titleBadge: configuredDestinations.length, action: () => React.createElement(EditButton, { onClick: onEditDestinations }) },
|
|
15440
|
+
React.createElement(DestinationList, null))))));
|
|
15441
|
+
};
|
|
15442
|
+
|
|
15230
15443
|
var NavIconIds;
|
|
15231
15444
|
(function (NavIconIds) {
|
|
15232
15445
|
NavIconIds["Overview"] = "overview";
|
|
@@ -15390,21 +15603,21 @@ const Describe$1 = ({ source, fetchDescribeSource }) => {
|
|
|
15390
15603
|
const buildCard = (source) => {
|
|
15391
15604
|
const { name, kind, namespace } = source;
|
|
15392
15605
|
const arr = [
|
|
15393
|
-
{ title: DISPLAY_TITLES.
|
|
15606
|
+
{ title: DISPLAY_TITLES.NAMESPACE, value: namespace },
|
|
15394
15607
|
{ title: DISPLAY_TITLES.KIND, value: kind },
|
|
15395
15608
|
{ title: DISPLAY_TITLES.NAME, value: name, tooltip: 'K8s resource name' },
|
|
15396
15609
|
];
|
|
15397
15610
|
return arr;
|
|
15398
15611
|
};
|
|
15399
15612
|
|
|
15400
|
-
const Container$
|
|
15613
|
+
const Container$2 = styled.div `
|
|
15401
15614
|
display: flex;
|
|
15402
15615
|
flex-direction: column;
|
|
15403
15616
|
gap: 24px;
|
|
15404
15617
|
padding: 4px;
|
|
15405
15618
|
`;
|
|
15406
15619
|
const SourceForm = ({ formData, handleFormChange }) => {
|
|
15407
|
-
return (React.createElement(Container$
|
|
15620
|
+
return (React.createElement(Container$2, null,
|
|
15408
15621
|
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
15622
|
};
|
|
15410
15623
|
|
|
@@ -15427,7 +15640,9 @@ const DataContainer$1 = styled.div `
|
|
|
15427
15640
|
`;
|
|
15428
15641
|
const SourceDrawer = ({ persistSources, updateSource, fetchDescribeSource }) => {
|
|
15429
15642
|
const { sources } = useEntityStore();
|
|
15643
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
15430
15644
|
const { drawerType, drawerEntityId } = useDrawerStore();
|
|
15645
|
+
const sourcesByStream = useMemo(() => filterSourcesByStream(sources, selectedStreamName), [sources, selectedStreamName]);
|
|
15431
15646
|
const drawerRef = useRef(null);
|
|
15432
15647
|
const isOpen = drawerType !== EntityTypes.Source;
|
|
15433
15648
|
const [isEditing, setIsEditing] = useState(false);
|
|
@@ -15437,11 +15652,11 @@ const SourceDrawer = ({ persistSources, updateSource, fetchDescribeSource }) =>
|
|
|
15437
15652
|
const thisItem = useMemo(() => {
|
|
15438
15653
|
if (isOpen)
|
|
15439
15654
|
return null;
|
|
15440
|
-
const found =
|
|
15655
|
+
const found = sourcesByStream?.find((x) => x.namespace === drawerEntityId.namespace && x.name === drawerEntityId.name && x.kind === drawerEntityId.kind);
|
|
15441
15656
|
if (!!found)
|
|
15442
15657
|
loadFormWithDrawerItem(found);
|
|
15443
15658
|
return found;
|
|
15444
|
-
}, [isOpen, drawerEntityId,
|
|
15659
|
+
}, [isOpen, drawerEntityId, sourcesByStream]);
|
|
15445
15660
|
if (!thisItem)
|
|
15446
15661
|
return null;
|
|
15447
15662
|
const containersData = thisItem.containers?.map((container) => ({
|
|
@@ -15458,7 +15673,7 @@ const SourceDrawer = ({ persistSources, updateSource, fetchDescribeSource }) =>
|
|
|
15458
15673
|
};
|
|
15459
15674
|
const handleDelete = async () => {
|
|
15460
15675
|
const { namespace } = thisItem;
|
|
15461
|
-
persistSources({ [namespace]: [{ ...thisItem, selected: false }] }, {});
|
|
15676
|
+
persistSources({ [namespace]: [{ ...thisItem, selected: false, currentStreamName: selectedStreamName }] }, {});
|
|
15462
15677
|
setIsFormDirty(false);
|
|
15463
15678
|
setIsEditing(false);
|
|
15464
15679
|
resetFormData();
|
|
@@ -15472,7 +15687,7 @@ const SourceDrawer = ({ persistSources, updateSource, fetchDescribeSource }) =>
|
|
|
15472
15687
|
setIsFormDirty(false);
|
|
15473
15688
|
setIsEditing(false);
|
|
15474
15689
|
};
|
|
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:
|
|
15690
|
+
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
15691
|
{
|
|
15477
15692
|
label: Tabs.Overview,
|
|
15478
15693
|
onClick: () => setSelectedTab(Tabs.Overview),
|
|
@@ -15487,137 +15702,22 @@ const SourceDrawer = ({ persistSources, updateSource, fetchDescribeSource }) =>
|
|
|
15487
15702
|
React.createElement(SourceForm, { formData: formData, handleFormChange: (...params) => {
|
|
15488
15703
|
setIsFormDirty(true);
|
|
15489
15704
|
handleFormChange(...params);
|
|
15705
|
+
handleFormChange('currentStreamName', selectedStreamName);
|
|
15490
15706
|
} }))) : (React.createElement(DataContainer$1, null,
|
|
15491
15707
|
React.createElement(ConditionDetails, { conditions: thisItem.conditions || [] }),
|
|
15492
15708
|
React.createElement(DataCard, { title: DISPLAY_TITLES.SOURCE_DETAILS, data: !!thisItem ? buildCard(thisItem) : [] }),
|
|
15493
15709
|
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
15710
|
};
|
|
15495
15711
|
|
|
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;
|
|
15513
|
-
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
|
-
`;
|
|
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;
|
|
15712
|
+
const ActionsRow = styled(FlexRow) `
|
|
15600
15713
|
justify-content: space-between;
|
|
15601
15714
|
`;
|
|
15602
|
-
// when bringin back the "Select all" checkbox, change the following width to 300px
|
|
15603
15715
|
const SearchWrapper = styled.div `
|
|
15604
|
-
width:
|
|
15716
|
+
width: 420px;
|
|
15605
15717
|
`;
|
|
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;
|
|
15718
|
+
const SourceSelectionForm = forwardRef(({ isModal, fetchSingleNamespace, onClickSummary }, ref) => {
|
|
15719
|
+
const formState = useSourceSelectionFormData({ fetchSingleNamespace });
|
|
15720
|
+
const { recordedInitialSources, selectedSources, getApiSourcesPayload, getApiFutureAppsPayload, searchText, setSearchText, showSelectedOnly, setShowSelectedOnly } = formState;
|
|
15621
15721
|
useImperativeHandle(ref, () => ({
|
|
15622
15722
|
getFormValues: () => ({
|
|
15623
15723
|
initial: recordedInitialSources,
|
|
@@ -15625,19 +15725,24 @@ const SourceSelectionForm = forwardRef((props, ref) => {
|
|
|
15625
15725
|
futureApps: getApiFutureAppsPayload(),
|
|
15626
15726
|
}),
|
|
15627
15727
|
}));
|
|
15728
|
+
const selectedCount = Object.values(selectedSources).reduce((prev, curr) => prev + curr.filter((s) => s.selected).length, 0);
|
|
15628
15729
|
return (React.createElement(ModalBody, { "$isNotModal": !isModal },
|
|
15629
|
-
React.createElement(
|
|
15630
|
-
|
|
15730
|
+
React.createElement(FlexColumn, { "$gap": 12 },
|
|
15731
|
+
React.createElement(FlexColumn, { "$gap": 24 },
|
|
15732
|
+
onClickSummary && React.createElement(NoteBackToSummary, { onClick: onClickSummary }),
|
|
15733
|
+
React.createElement(SectionTitle, { title: DISPLAY_TITLES.SELECT_SOURCES, badgeLabel: selectedCount, description: DISPLAY_TITLES.SELECT_SOURCES_DESCRIPTION }),
|
|
15734
|
+
React.createElement(ActionsRow, null,
|
|
15735
|
+
React.createElement(SearchWrapper, null,
|
|
15736
|
+
React.createElement(Input, { placeholder: DISPLAY_TITLES.SEARCH_NAMESPACES, icon: SearchIcon, value: searchText, onChange: (e) => setSearchText(e.target.value.toLowerCase()) })),
|
|
15737
|
+
React.createElement(Toggle, { title: DISPLAY_TITLES.SHOW_SELECTED_ONLY, initialValue: showSelectedOnly, onChange: setShowSelectedOnly }))),
|
|
15738
|
+
React.createElement(Divider, null),
|
|
15739
|
+
React.createElement(SourceList, { isModal: isModal, ...formState }))));
|
|
15631
15740
|
});
|
|
15632
15741
|
|
|
15633
|
-
const SourceModal = ({
|
|
15742
|
+
const SourceModal = ({ fetchSingleNamespace, persistSources }) => {
|
|
15634
15743
|
const { currentModal, setCurrentModal } = useModalStore();
|
|
15635
15744
|
const isOpen = currentModal === EntityTypes.Source;
|
|
15636
|
-
const onSelectNamespace = (ns) => {
|
|
15637
|
-
setSelectedNamespace((prev) => (prev === ns ? '' : ns));
|
|
15638
|
-
};
|
|
15639
15745
|
const handleClose = () => {
|
|
15640
|
-
setSelectedNamespace('');
|
|
15641
15746
|
setCurrentModal('');
|
|
15642
15747
|
};
|
|
15643
15748
|
const handleSubmit = async () => {
|
|
@@ -15656,14 +15761,14 @@ const SourceModal = ({ selectedNamespace, setSelectedNamespace, namespace, persi
|
|
|
15656
15761
|
onClick: handleSubmit,
|
|
15657
15762
|
},
|
|
15658
15763
|
] }) },
|
|
15659
|
-
React.createElement(SourceSelectionForm, { ref: formRef, isModal: true,
|
|
15764
|
+
React.createElement(SourceSelectionForm, { ref: formRef, isModal: true, fetchSingleNamespace: fetchSingleNamespace })));
|
|
15660
15765
|
};
|
|
15661
15766
|
|
|
15662
15767
|
const columns = [
|
|
15663
15768
|
{ key: 'checkbox-and-icon', title: '' },
|
|
15664
15769
|
{ key: 'name', title: DISPLAY_TITLES.NAME, sortable: true },
|
|
15665
15770
|
{ key: 'type', title: 'Kubernetes Type', sortable: true },
|
|
15666
|
-
{ key: 'namespace', title: DISPLAY_TITLES.
|
|
15771
|
+
{ key: 'namespace', title: DISPLAY_TITLES.NAMESPACE, sortable: true },
|
|
15667
15772
|
{ key: 'containers', title: DISPLAY_TITLES.DETECTED_CONTAINERS },
|
|
15668
15773
|
{ key: 'conditions', title: 'Conditions' },
|
|
15669
15774
|
{ key: 'throughput', title: 'Throughput', sortable: true },
|
|
@@ -15672,6 +15777,7 @@ const SourceTable = ({ metrics, maxHeight, maxWidth }) => {
|
|
|
15672
15777
|
const theme = Theme.useTheme();
|
|
15673
15778
|
const filters = useFilterStore();
|
|
15674
15779
|
const { isThisPending } = usePendingStore();
|
|
15780
|
+
const { selectedStreamName } = useDataStreamStore();
|
|
15675
15781
|
const { sources, sourcesLoading } = useEntityStore();
|
|
15676
15782
|
const { setDrawerType, setDrawerEntityId } = useDrawerStore();
|
|
15677
15783
|
const { selectedSources, setSelectedSources } = useSelectedStore();
|
|
@@ -15684,7 +15790,8 @@ const SourceTable = ({ metrics, maxHeight, maxWidth }) => {
|
|
|
15684
15790
|
return calculateProgress(sourcesToDelete, sourcesDeleted);
|
|
15685
15791
|
return 1;
|
|
15686
15792
|
}, [sourcesToCreate, sourcesCreated, sourcesToDelete, sourcesDeleted]);
|
|
15687
|
-
const
|
|
15793
|
+
const sourcesByStream = useMemo(() => filterSourcesByStream(sources, selectedStreamName), [sources, selectedStreamName]);
|
|
15794
|
+
const filteredSources = useMemo(() => filterSources(sourcesByStream, filters), [sourcesByStream, filters]);
|
|
15688
15795
|
const [hasSelected, totalSelectedSources] = useMemo(() => {
|
|
15689
15796
|
let num = 0;
|
|
15690
15797
|
Object.values(selectedSources).forEach((selectedSources) => {
|
|
@@ -15695,7 +15802,7 @@ const SourceTable = ({ metrics, maxHeight, maxWidth }) => {
|
|
|
15695
15802
|
const onSelectAll = useCallback((bool) => {
|
|
15696
15803
|
if (bool) {
|
|
15697
15804
|
const payload = {};
|
|
15698
|
-
|
|
15805
|
+
filteredSources.forEach((source) => {
|
|
15699
15806
|
const id = { namespace: source.namespace, name: source.name, kind: source.kind };
|
|
15700
15807
|
const isPending = isThisPending({ entityType: EntityTypes.Source, entityId: id });
|
|
15701
15808
|
if (!isPending) {
|
|
@@ -15712,7 +15819,7 @@ const SourceTable = ({ metrics, maxHeight, maxWidth }) => {
|
|
|
15712
15819
|
else {
|
|
15713
15820
|
setSelectedSources({});
|
|
15714
15821
|
}
|
|
15715
|
-
}, [
|
|
15822
|
+
}, [filteredSources]);
|
|
15716
15823
|
const onSelectOne = useCallback((source) => {
|
|
15717
15824
|
const { namespace, name, kind } = source;
|
|
15718
15825
|
const payload = { ...selectedSources };
|
|
@@ -15727,7 +15834,7 @@ const SourceTable = ({ metrics, maxHeight, maxWidth }) => {
|
|
|
15727
15834
|
}
|
|
15728
15835
|
setSelectedSources(payload);
|
|
15729
15836
|
}, [selectedSources]);
|
|
15730
|
-
const rows = useMemo(() =>
|
|
15837
|
+
const rows = useMemo(() => filteredSources.map((source) => {
|
|
15731
15838
|
const id = getWorkloadId(source);
|
|
15732
15839
|
const idString = JSON.stringify(id);
|
|
15733
15840
|
const { hasErrors, hasWarnings, hasDisableds } = getConditionsBooleans(source.conditions || []);
|
|
@@ -15777,13 +15884,23 @@ const SourceTable = ({ metrics, maxHeight, maxWidth }) => {
|
|
|
15777
15884
|
},
|
|
15778
15885
|
],
|
|
15779
15886
|
};
|
|
15780
|
-
}), [
|
|
15781
|
-
const badge = useMemo(() =>
|
|
15782
|
-
|
|
15887
|
+
}), [filteredSources, selectedSources, metrics, onSelectOne]);
|
|
15888
|
+
const { badge, badgeTooltip } = useMemo(() => {
|
|
15889
|
+
if (filteredSources.length !== sourcesByStream.length) {
|
|
15890
|
+
return {
|
|
15891
|
+
badge: `${filteredSources.length}/${sourcesByStream.length}`,
|
|
15892
|
+
badgeTooltip: DISPLAY_TITLES.FILTERED_COUNT_TOOLTIP,
|
|
15893
|
+
};
|
|
15894
|
+
}
|
|
15895
|
+
return {
|
|
15896
|
+
badge: sourcesByStream.length,
|
|
15897
|
+
badgeTooltip: undefined,
|
|
15898
|
+
};
|
|
15899
|
+
}, [filteredSources, sourcesByStream]);
|
|
15783
15900
|
return (React.createElement(TableContainer, { "$maxWidth": maxWidth },
|
|
15784
15901
|
React.createElement(TableTitleWrap, null,
|
|
15785
|
-
React.createElement(Checkbox, { partiallyChecked: hasSelected &&
|
|
15786
|
-
React.createElement(IconTitleBadge, { icon: getEntityIcon(EntityTypes.Source), title: DISPLAY_TITLES.
|
|
15902
|
+
React.createElement(Checkbox, { partiallyChecked: hasSelected && filteredSources?.length !== totalSelectedSources, value: hasSelected && filteredSources?.length === totalSelectedSources, onChange: onSelectAll, disabled: !filteredSources?.length }),
|
|
15903
|
+
React.createElement(IconTitleBadge, { icon: getEntityIcon(EntityTypes.Source), title: DISPLAY_TITLES.SOURCES, badge: badge, badgeTooltip: badgeTooltip, loading: sourcesLoading && !isAwaitingInstrumentation })),
|
|
15787
15904
|
React.createElement(TableWrap, { "$maxHeight": maxHeight },
|
|
15788
15905
|
React.createElement(InteractiveTable, { columns: columns, rows: isAwaitingInstrumentation ? [] : rows })),
|
|
15789
15906
|
isAwaitingInstrumentation ? (React.createElement(CenterThis, { style: { marginTop: '2rem', gap: '24px' } },
|
|
@@ -15792,7 +15909,7 @@ const SourceTable = ({ metrics, maxHeight, maxWidth }) => {
|
|
|
15792
15909
|
React.createElement(Text, { color: theme.text.info },
|
|
15793
15910
|
!!sourcesToCreate ? 'Instrumenting' : 'Uninstrumenting',
|
|
15794
15911
|
" workloads..."),
|
|
15795
|
-
React.createElement(Badge, { label: `${instrumentingPercent}%` })))) : !
|
|
15912
|
+
React.createElement(Badge, { label: `${instrumentingPercent}%` })))) : !filteredSources.length ? (React.createElement(CenterThis, { style: { marginTop: '2rem' } },
|
|
15796
15913
|
React.createElement(NoDataFound, null))) : null));
|
|
15797
15914
|
};
|
|
15798
15915
|
|
|
@@ -16044,4 +16161,4 @@ const ToggleDarkMode = () => {
|
|
|
16044
16161
|
React.createElement(Background, { "$darkMode": darkMode })));
|
|
16045
16162
|
};
|
|
16046
16163
|
|
|
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 };
|
|
16164
|
+
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 };
|