function createNavTree()

in x-pack/solutions/observability/plugins/observability/public/navigation_tree.ts [21:465]


function createNavTree({ streamsAvailable }: { streamsAvailable?: boolean }) {
  const navTree: NavigationTreeDefinition = {
    body: [
      {
        type: 'navGroup',
        id: 'observability_project_nav',
        title,
        icon,
        defaultIsCollapsed: false,
        isCollapsible: false,
        breadcrumbStatus: 'hidden',
        children: [
          {
            link: 'observability-overview',
          },
          {
            title: i18n.translate('xpack.observability.obltNav.discover', {
              defaultMessage: 'Discover',
            }),
            link: 'discover',
          },
          {
            link: 'dashboards',
            getIsActive: ({ pathNameSerialized, prepend }) => {
              return pathNameSerialized.startsWith(prepend('/app/dashboards'));
            },
          },
          {
            link: 'observability-overview:alerts',
          },
          {
            link: 'observability-overview:cases',
            renderAs: 'item',
            children: [
              {
                link: 'observability-overview:cases_configure',
              },
              {
                link: 'observability-overview:cases_create',
              },
            ],
          },
          {
            link: 'slo',
          },
          {
            link: 'observabilityAIAssistant',
            title: i18n.translate('xpack.observability.obltNav.aiMl.aiAssistant', {
              defaultMessage: 'AI Assistant',
            }),
          },
          {
            link: 'inventory',
            spaceBefore: 'm',
          },
          ...(streamsAvailable
            ? [
                {
                  link: 'streams' as const,
                  withBadge: true,
                  badgeOptions: {
                    icon: 'beaker',
                    tooltip: i18n.translate('xpack.observability.obltNav.streamsBadgeTooltip', {
                      defaultMessage:
                        'This functionality is experimental and not supported. It may change or be removed at any time.',
                    }),
                  },
                },
              ]
            : []),
          {
            id: 'apm',
            title: i18n.translate('xpack.observability.obltNav.applications', {
              defaultMessage: 'Applications',
            }),
            renderAs: 'panelOpener',
            children: [
              {
                children: [
                  {
                    link: 'apm:services',
                    getIsActive: ({ pathNameSerialized }) => {
                      const regex = /app\/apm\/.*service.*/;
                      return regex.test(pathNameSerialized);
                    },
                  },
                  {
                    link: 'apm:traces',
                    getIsActive: ({ pathNameSerialized, prepend }) => {
                      return pathNameSerialized.startsWith(prepend('/app/apm/traces'));
                    },
                  },
                  {
                    link: 'apm:dependencies',
                    getIsActive: ({ pathNameSerialized, prepend }) => {
                      return pathNameSerialized.startsWith(prepend('/app/apm/dependencies'));
                    },
                  },
                  {
                    link: 'ux',
                    title: i18n.translate('xpack.observability.obltNav.apm.ux', {
                      defaultMessage: 'User experience',
                    }),
                  },
                ],
              },
              {
                id: 'synthetics',
                title: i18n.translate('xpack.observability.obltNav.apm.syntheticsGroupTitle', {
                  defaultMessage: 'Synthetics',
                }),
                children: [
                  {
                    link: 'synthetics',
                    title: i18n.translate('xpack.observability.obltNav.apm.synthetics.monitors', {
                      defaultMessage: 'Monitors',
                    }),
                  },
                  {
                    link: 'synthetics:certificates',
                    title: i18n.translate(
                      'xpack.observability.obltNav.apm.synthetics.tlsCertificates',
                      {
                        defaultMessage: 'TLS certificates',
                      }
                    ),
                  },
                ],
              },
            ],
          },
          {
            id: 'metrics',
            title: i18n.translate('xpack.observability.obltNav.infrastructure', {
              defaultMessage: 'Infrastructure',
            }),
            renderAs: 'panelOpener',
            children: [
              {
                children: [
                  {
                    link: 'metrics:inventory',
                    title: i18n.translate('xpack.observability.infrastructure.inventory', {
                      defaultMessage: 'Infrastructure Inventory',
                    }),
                    getIsActive: ({ pathNameSerialized, prepend }) => {
                      return pathNameSerialized.startsWith(prepend('/app/metrics/inventory'));
                    },
                  },
                  {
                    link: 'metrics:hosts',
                    getIsActive: ({ pathNameSerialized, prepend }) => {
                      return pathNameSerialized.startsWith(prepend('/app/metrics/hosts'));
                    },
                  },
                  {
                    link: 'metrics:metrics-explorer',
                    title: i18n.translate(
                      'xpack.observability.obltNav.infrastructure.metricsExplorer',
                      {
                        defaultMessage: 'Metrics explorer',
                      }
                    ),
                  },
                ],
              },
              {
                id: 'profiling',
                title: i18n.translate(
                  'xpack.observability.obltNav.infrastructure.universalProfiling',
                  {
                    defaultMessage: 'Universal profiling',
                  }
                ),
                children: [
                  {
                    link: 'profiling:stacktraces',
                  },
                  {
                    link: 'profiling:flamegraphs',
                  },
                  {
                    link: 'profiling:functions',
                  },
                ],
              },
            ],
          },
          {
            id: 'machine_learning-landing',
            renderAs: 'panelOpener',
            title: i18n.translate('xpack.observability.obltNav.machineLearning', {
              defaultMessage: 'Machine Learning',
            }),
            children: [
              {
                children: [
                  {
                    link: 'ml:overview',
                  },
                  {
                    link: 'ml:dataVisualizer',
                  },
                ],
              },
              {
                id: 'category-anomaly_detection',
                title: i18n.translate('xpack.observability.obltNav.ml.anomaly_detection', {
                  defaultMessage: 'Anomaly detection',
                }),
                breadcrumbStatus: 'hidden',
                children: [
                  {
                    link: 'ml:anomalyExplorer',
                  },
                  {
                    link: 'ml:singleMetricViewer',
                  },
                ],
              },
              {
                id: 'category-data_frame analytics',
                title: i18n.translate('xpack.observability.obltNav.ml.data_frame_analytics', {
                  defaultMessage: 'Data frame analytics',
                }),
                breadcrumbStatus: 'hidden',
                children: [
                  {
                    link: 'ml:resultExplorer',
                  },
                  {
                    link: 'ml:analyticsMap',
                  },
                ],
              },
              {
                id: 'category-aiops_labs',
                title: i18n.translate('xpack.observability.obltNav.ml.aiops_labs', {
                  defaultMessage: 'AIOps labs',
                }),
                breadcrumbStatus: 'hidden',
                children: [
                  {
                    link: 'ml:logRateAnalysis',
                    title: i18n.translate(
                      'xpack.observability.obltNav.ml.aiops_labs.log_rate_analysis',
                      {
                        defaultMessage: 'Log rate analysis',
                      }
                    ),
                  },
                  {
                    link: 'ml:logPatternAnalysis',
                    title: i18n.translate(
                      'xpack.observability.obltNav.ml.aiops_labs.log_pattern_analysis',
                      {
                        defaultMessage: 'Log pattern analysis',
                      }
                    ),
                  },
                  {
                    link: 'ml:changePointDetections',
                    title: i18n.translate(
                      'xpack.observability.obltNav.ml.aiops_labs.change_point_detection',
                      {
                        defaultMessage: 'Change point detection',
                      }
                    ),
                  },
                ],
              },
            ],
          },
          {
            id: 'otherTools',
            title: i18n.translate('xpack.observability.obltNav.otherTools', {
              defaultMessage: 'Other tools',
            }),
            renderAs: 'panelOpener',
            children: [
              {
                link: 'logs:anomalies',
                title: i18n.translate('xpack.observability.obltNav.otherTools.logsAnomalies', {
                  defaultMessage: 'Logs anomalies',
                }),
              },
              {
                link: 'logs:log-categories',
                title: i18n.translate('xpack.observability.obltNav.otherTools.logsCategories', {
                  defaultMessage: 'Logs categories',
                }),
              },
              { link: 'maps' },
              { link: 'canvas' },
              { link: 'graph' },
              {
                link: 'visualize',
                title: i18n.translate('xpack.observability.obltNav.otherTools.logsCategories', {
                  defaultMessage: 'Visualize library',
                }),
              },
            ],
          },
        ],
      },
    ],
    footer: [
      {
        type: 'navGroup',
        id: 'observability_project_nav_footer',
        children: [
          {
            title: i18n.translate('xpack.observability.obltNav.addData', {
              defaultMessage: 'Add data',
            }),
            link: 'observabilityOnboarding',
            icon: 'launch',
          },
          {
            id: 'devTools',
            title: i18n.translate('xpack.observability.obltNav.devTools', {
              defaultMessage: 'Developer tools',
            }),
            link: 'dev_tools',
            icon: 'editorCodeBlock',
          },
          {
            id: 'project_settings_project_nav',
            title: i18n.translate('xpack.observability.obltNav.management', {
              defaultMessage: 'Management',
            }),
            icon: 'gear',
            breadcrumbStatus: 'hidden',
            renderAs: 'accordion',
            spaceBefore: null,
            children: [
              {
                id: 'stack_management', // This id can't be changed as we use it to open the panel programmatically
                title: i18n.translate('xpack.observability.obltNav.stackManagement', {
                  defaultMessage: 'Stack Management',
                }),
                renderAs: 'panelOpener',
                spaceBefore: null,
                children: [
                  {
                    title: 'Ingest',
                    children: [
                      { link: 'management:ingest_pipelines' },
                      { link: 'management:pipelines' },
                    ],
                  },
                  {
                    title: 'Data',
                    children: [
                      { link: 'management:index_management' },
                      { link: 'management:data_quality' },
                      { link: 'management:index_lifecycle_management' },
                      { link: 'management:snapshot_restore' },
                      { link: 'management:rollup_jobs' },
                      { link: 'management:transform' },
                      { link: 'management:cross_cluster_replication' },
                      { link: 'management:remote_clusters' },
                      { link: 'management:migrate_data' },
                    ],
                  },
                  {
                    title: 'Alerts and Insights',
                    children: [
                      { link: 'management:triggersActions' },
                      { link: 'management:cases' },
                      { link: 'management:triggersActionsConnectors' },
                      { link: 'management:reporting' },
                      { link: 'management:jobsListLink' },
                      { link: 'management:watcher' },
                      { link: 'management:maintenanceWindows' },
                    ],
                  },
                  {
                    title: 'Machine Learning',
                    children: [
                      { link: 'management:overview' },
                      { link: 'management:anomaly_detection' },
                      { link: 'management:analytics' },
                      { link: 'management:trained_models' },
                      { link: 'management:supplied_configurations' },
                    ],
                  },
                  {
                    title: 'Security',
                    children: [
                      { link: 'management:users' },
                      { link: 'management:roles' },
                      { link: 'management:api_keys' },
                      { link: 'management:role_mappings' },
                    ],
                  },
                  {
                    title: 'Kibana',
                    children: [
                      { link: 'management:dataViews' },
                      { link: 'management:filesManagement' },
                      { link: 'management:objects' },
                      { link: 'management:tags' },
                      { link: 'management:search_sessions' },
                      { link: 'management:aiAssistantManagementSelection' },
                      { link: 'management:spaces' },
                      { link: 'management:settings' },
                    ],
                  },
                  {
                    title: 'Stack',
                    children: [
                      { link: 'management:license_management' },
                      { link: 'management:upgrade_assistant' },
                    ],
                  },
                ],
              },
              {
                id: 'monitoring',
                link: 'monitoring',
              },
              {
                link: 'integrations',
              },
              {
                link: 'fleet',
              },
              {
                id: 'cloudLinkUserAndRoles',
                cloudLink: 'userAndRoles',
              },
              {
                id: 'cloudLinkBilling',
                cloudLink: 'billingAndSub',
              },
            ],
          },
        ],
      },
    ],
  };

  return navTree;
}